@libp2p/circuit-relay-v2 0.0.0-97ab31c0c

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 (65) hide show
  1. package/LICENSE +4 -0
  2. package/README.md +69 -0
  3. package/dist/index.min.js +45 -0
  4. package/dist/src/constants.d.ts +55 -0
  5. package/dist/src/constants.d.ts.map +1 -0
  6. package/dist/src/constants.js +61 -0
  7. package/dist/src/constants.js.map +1 -0
  8. package/dist/src/index.d.ts +56 -0
  9. package/dist/src/index.d.ts.map +1 -0
  10. package/dist/src/index.js +39 -0
  11. package/dist/src/index.js.map +1 -0
  12. package/dist/src/pb/index.d.ts +93 -0
  13. package/dist/src/pb/index.d.ts.map +1 -0
  14. package/dist/src/pb/index.js +425 -0
  15. package/dist/src/pb/index.js.map +1 -0
  16. package/dist/src/server/advert-service.d.ts +46 -0
  17. package/dist/src/server/advert-service.d.ts.map +1 -0
  18. package/dist/src/server/advert-service.js +72 -0
  19. package/dist/src/server/advert-service.js.map +1 -0
  20. package/dist/src/server/index.d.ts +67 -0
  21. package/dist/src/server/index.d.ts.map +1 -0
  22. package/dist/src/server/index.js +313 -0
  23. package/dist/src/server/index.js.map +1 -0
  24. package/dist/src/server/reservation-store.d.ts +49 -0
  25. package/dist/src/server/reservation-store.d.ts.map +1 -0
  26. package/dist/src/server/reservation-store.js +65 -0
  27. package/dist/src/server/reservation-store.js.map +1 -0
  28. package/dist/src/server/reservation-voucher.d.ts +18 -0
  29. package/dist/src/server/reservation-voucher.d.ts.map +1 -0
  30. package/dist/src/server/reservation-voucher.js +36 -0
  31. package/dist/src/server/reservation-voucher.js.map +1 -0
  32. package/dist/src/transport/discovery.d.ts +48 -0
  33. package/dist/src/transport/discovery.d.ts.map +1 -0
  34. package/dist/src/transport/discovery.js +97 -0
  35. package/dist/src/transport/discovery.js.map +1 -0
  36. package/dist/src/transport/index.d.ts +58 -0
  37. package/dist/src/transport/index.d.ts.map +1 -0
  38. package/dist/src/transport/index.js +279 -0
  39. package/dist/src/transport/index.js.map +1 -0
  40. package/dist/src/transport/listener.d.ts +11 -0
  41. package/dist/src/transport/listener.d.ts.map +1 -0
  42. package/dist/src/transport/listener.js +66 -0
  43. package/dist/src/transport/listener.js.map +1 -0
  44. package/dist/src/transport/reservation-store.d.ts +74 -0
  45. package/dist/src/transport/reservation-store.d.ts.map +1 -0
  46. package/dist/src/transport/reservation-store.js +209 -0
  47. package/dist/src/transport/reservation-store.js.map +1 -0
  48. package/dist/src/utils.d.ts +14 -0
  49. package/dist/src/utils.d.ts.map +1 -0
  50. package/dist/src/utils.js +106 -0
  51. package/dist/src/utils.js.map +1 -0
  52. package/package.json +83 -0
  53. package/src/constants.ts +79 -0
  54. package/src/index.ts +64 -0
  55. package/src/pb/index.proto +67 -0
  56. package/src/pb/index.ts +539 -0
  57. package/src/server/advert-service.ts +109 -0
  58. package/src/server/index.ts +446 -0
  59. package/src/server/reservation-store.ts +116 -0
  60. package/src/server/reservation-voucher.ts +51 -0
  61. package/src/transport/discovery.ts +138 -0
  62. package/src/transport/index.ts +399 -0
  63. package/src/transport/listener.ts +98 -0
  64. package/src/transport/reservation-store.ts +312 -0
  65. package/src/utils.ts +134 -0
@@ -0,0 +1,425 @@
1
+ /* eslint-disable import/export */
2
+ /* eslint-disable complexity */
3
+ /* eslint-disable @typescript-eslint/no-namespace */
4
+ /* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */
5
+ /* eslint-disable @typescript-eslint/no-empty-interface */
6
+ import { enumeration, encodeMessage, decodeMessage, message } from 'protons-runtime';
7
+ export var HopMessage;
8
+ (function (HopMessage) {
9
+ let Type;
10
+ (function (Type) {
11
+ Type["RESERVE"] = "RESERVE";
12
+ Type["CONNECT"] = "CONNECT";
13
+ Type["STATUS"] = "STATUS";
14
+ })(Type = HopMessage.Type || (HopMessage.Type = {}));
15
+ let __TypeValues;
16
+ (function (__TypeValues) {
17
+ __TypeValues[__TypeValues["RESERVE"] = 0] = "RESERVE";
18
+ __TypeValues[__TypeValues["CONNECT"] = 1] = "CONNECT";
19
+ __TypeValues[__TypeValues["STATUS"] = 2] = "STATUS";
20
+ })(__TypeValues || (__TypeValues = {}));
21
+ (function (Type) {
22
+ Type.codec = () => {
23
+ return enumeration(__TypeValues);
24
+ };
25
+ })(Type = HopMessage.Type || (HopMessage.Type = {}));
26
+ let _codec;
27
+ HopMessage.codec = () => {
28
+ if (_codec == null) {
29
+ _codec = message((obj, w, opts = {}) => {
30
+ if (opts.lengthDelimited !== false) {
31
+ w.fork();
32
+ }
33
+ if (obj.type != null) {
34
+ w.uint32(8);
35
+ HopMessage.Type.codec().encode(obj.type, w);
36
+ }
37
+ if (obj.peer != null) {
38
+ w.uint32(18);
39
+ Peer.codec().encode(obj.peer, w);
40
+ }
41
+ if (obj.reservation != null) {
42
+ w.uint32(26);
43
+ Reservation.codec().encode(obj.reservation, w);
44
+ }
45
+ if (obj.limit != null) {
46
+ w.uint32(34);
47
+ Limit.codec().encode(obj.limit, w);
48
+ }
49
+ if (obj.status != null) {
50
+ w.uint32(40);
51
+ Status.codec().encode(obj.status, w);
52
+ }
53
+ if (opts.lengthDelimited !== false) {
54
+ w.ldelim();
55
+ }
56
+ }, (reader, length) => {
57
+ const obj = {};
58
+ const end = length == null ? reader.len : reader.pos + length;
59
+ while (reader.pos < end) {
60
+ const tag = reader.uint32();
61
+ switch (tag >>> 3) {
62
+ case 1:
63
+ obj.type = HopMessage.Type.codec().decode(reader);
64
+ break;
65
+ case 2:
66
+ obj.peer = Peer.codec().decode(reader, reader.uint32());
67
+ break;
68
+ case 3:
69
+ obj.reservation = Reservation.codec().decode(reader, reader.uint32());
70
+ break;
71
+ case 4:
72
+ obj.limit = Limit.codec().decode(reader, reader.uint32());
73
+ break;
74
+ case 5:
75
+ obj.status = Status.codec().decode(reader);
76
+ break;
77
+ default:
78
+ reader.skipType(tag & 7);
79
+ break;
80
+ }
81
+ }
82
+ return obj;
83
+ });
84
+ }
85
+ return _codec;
86
+ };
87
+ HopMessage.encode = (obj) => {
88
+ return encodeMessage(obj, HopMessage.codec());
89
+ };
90
+ HopMessage.decode = (buf) => {
91
+ return decodeMessage(buf, HopMessage.codec());
92
+ };
93
+ })(HopMessage || (HopMessage = {}));
94
+ export var StopMessage;
95
+ (function (StopMessage) {
96
+ let Type;
97
+ (function (Type) {
98
+ Type["CONNECT"] = "CONNECT";
99
+ Type["STATUS"] = "STATUS";
100
+ })(Type = StopMessage.Type || (StopMessage.Type = {}));
101
+ let __TypeValues;
102
+ (function (__TypeValues) {
103
+ __TypeValues[__TypeValues["CONNECT"] = 0] = "CONNECT";
104
+ __TypeValues[__TypeValues["STATUS"] = 1] = "STATUS";
105
+ })(__TypeValues || (__TypeValues = {}));
106
+ (function (Type) {
107
+ Type.codec = () => {
108
+ return enumeration(__TypeValues);
109
+ };
110
+ })(Type = StopMessage.Type || (StopMessage.Type = {}));
111
+ let _codec;
112
+ StopMessage.codec = () => {
113
+ if (_codec == null) {
114
+ _codec = message((obj, w, opts = {}) => {
115
+ if (opts.lengthDelimited !== false) {
116
+ w.fork();
117
+ }
118
+ if (obj.type != null) {
119
+ w.uint32(8);
120
+ StopMessage.Type.codec().encode(obj.type, w);
121
+ }
122
+ if (obj.peer != null) {
123
+ w.uint32(18);
124
+ Peer.codec().encode(obj.peer, w);
125
+ }
126
+ if (obj.limit != null) {
127
+ w.uint32(26);
128
+ Limit.codec().encode(obj.limit, w);
129
+ }
130
+ if (obj.status != null) {
131
+ w.uint32(32);
132
+ Status.codec().encode(obj.status, w);
133
+ }
134
+ if (opts.lengthDelimited !== false) {
135
+ w.ldelim();
136
+ }
137
+ }, (reader, length) => {
138
+ const obj = {};
139
+ const end = length == null ? reader.len : reader.pos + length;
140
+ while (reader.pos < end) {
141
+ const tag = reader.uint32();
142
+ switch (tag >>> 3) {
143
+ case 1:
144
+ obj.type = StopMessage.Type.codec().decode(reader);
145
+ break;
146
+ case 2:
147
+ obj.peer = Peer.codec().decode(reader, reader.uint32());
148
+ break;
149
+ case 3:
150
+ obj.limit = Limit.codec().decode(reader, reader.uint32());
151
+ break;
152
+ case 4:
153
+ obj.status = Status.codec().decode(reader);
154
+ break;
155
+ default:
156
+ reader.skipType(tag & 7);
157
+ break;
158
+ }
159
+ }
160
+ return obj;
161
+ });
162
+ }
163
+ return _codec;
164
+ };
165
+ StopMessage.encode = (obj) => {
166
+ return encodeMessage(obj, StopMessage.codec());
167
+ };
168
+ StopMessage.decode = (buf) => {
169
+ return decodeMessage(buf, StopMessage.codec());
170
+ };
171
+ })(StopMessage || (StopMessage = {}));
172
+ export var Peer;
173
+ (function (Peer) {
174
+ let _codec;
175
+ Peer.codec = () => {
176
+ if (_codec == null) {
177
+ _codec = message((obj, w, opts = {}) => {
178
+ if (opts.lengthDelimited !== false) {
179
+ w.fork();
180
+ }
181
+ if ((obj.id != null && obj.id.byteLength > 0)) {
182
+ w.uint32(10);
183
+ w.bytes(obj.id);
184
+ }
185
+ if (obj.addrs != null) {
186
+ for (const value of obj.addrs) {
187
+ w.uint32(18);
188
+ w.bytes(value);
189
+ }
190
+ }
191
+ if (opts.lengthDelimited !== false) {
192
+ w.ldelim();
193
+ }
194
+ }, (reader, length) => {
195
+ const obj = {
196
+ id: new Uint8Array(0),
197
+ addrs: []
198
+ };
199
+ const end = length == null ? reader.len : reader.pos + length;
200
+ while (reader.pos < end) {
201
+ const tag = reader.uint32();
202
+ switch (tag >>> 3) {
203
+ case 1:
204
+ obj.id = reader.bytes();
205
+ break;
206
+ case 2:
207
+ obj.addrs.push(reader.bytes());
208
+ break;
209
+ default:
210
+ reader.skipType(tag & 7);
211
+ break;
212
+ }
213
+ }
214
+ return obj;
215
+ });
216
+ }
217
+ return _codec;
218
+ };
219
+ Peer.encode = (obj) => {
220
+ return encodeMessage(obj, Peer.codec());
221
+ };
222
+ Peer.decode = (buf) => {
223
+ return decodeMessage(buf, Peer.codec());
224
+ };
225
+ })(Peer || (Peer = {}));
226
+ export var Reservation;
227
+ (function (Reservation) {
228
+ let _codec;
229
+ Reservation.codec = () => {
230
+ if (_codec == null) {
231
+ _codec = message((obj, w, opts = {}) => {
232
+ if (opts.lengthDelimited !== false) {
233
+ w.fork();
234
+ }
235
+ if ((obj.expire != null && obj.expire !== 0n)) {
236
+ w.uint32(8);
237
+ w.uint64(obj.expire);
238
+ }
239
+ if (obj.addrs != null) {
240
+ for (const value of obj.addrs) {
241
+ w.uint32(18);
242
+ w.bytes(value);
243
+ }
244
+ }
245
+ if (obj.voucher != null) {
246
+ w.uint32(26);
247
+ w.bytes(obj.voucher);
248
+ }
249
+ if (opts.lengthDelimited !== false) {
250
+ w.ldelim();
251
+ }
252
+ }, (reader, length) => {
253
+ const obj = {
254
+ expire: 0n,
255
+ addrs: []
256
+ };
257
+ const end = length == null ? reader.len : reader.pos + length;
258
+ while (reader.pos < end) {
259
+ const tag = reader.uint32();
260
+ switch (tag >>> 3) {
261
+ case 1:
262
+ obj.expire = reader.uint64();
263
+ break;
264
+ case 2:
265
+ obj.addrs.push(reader.bytes());
266
+ break;
267
+ case 3:
268
+ obj.voucher = reader.bytes();
269
+ break;
270
+ default:
271
+ reader.skipType(tag & 7);
272
+ break;
273
+ }
274
+ }
275
+ return obj;
276
+ });
277
+ }
278
+ return _codec;
279
+ };
280
+ Reservation.encode = (obj) => {
281
+ return encodeMessage(obj, Reservation.codec());
282
+ };
283
+ Reservation.decode = (buf) => {
284
+ return decodeMessage(buf, Reservation.codec());
285
+ };
286
+ })(Reservation || (Reservation = {}));
287
+ export var Limit;
288
+ (function (Limit) {
289
+ let _codec;
290
+ Limit.codec = () => {
291
+ if (_codec == null) {
292
+ _codec = message((obj, w, opts = {}) => {
293
+ if (opts.lengthDelimited !== false) {
294
+ w.fork();
295
+ }
296
+ if (obj.duration != null) {
297
+ w.uint32(8);
298
+ w.uint32(obj.duration);
299
+ }
300
+ if (obj.data != null) {
301
+ w.uint32(16);
302
+ w.uint64(obj.data);
303
+ }
304
+ if (opts.lengthDelimited !== false) {
305
+ w.ldelim();
306
+ }
307
+ }, (reader, length) => {
308
+ const obj = {};
309
+ const end = length == null ? reader.len : reader.pos + length;
310
+ while (reader.pos < end) {
311
+ const tag = reader.uint32();
312
+ switch (tag >>> 3) {
313
+ case 1:
314
+ obj.duration = reader.uint32();
315
+ break;
316
+ case 2:
317
+ obj.data = reader.uint64();
318
+ break;
319
+ default:
320
+ reader.skipType(tag & 7);
321
+ break;
322
+ }
323
+ }
324
+ return obj;
325
+ });
326
+ }
327
+ return _codec;
328
+ };
329
+ Limit.encode = (obj) => {
330
+ return encodeMessage(obj, Limit.codec());
331
+ };
332
+ Limit.decode = (buf) => {
333
+ return decodeMessage(buf, Limit.codec());
334
+ };
335
+ })(Limit || (Limit = {}));
336
+ export var Status;
337
+ (function (Status) {
338
+ Status["UNUSED"] = "UNUSED";
339
+ Status["OK"] = "OK";
340
+ Status["RESERVATION_REFUSED"] = "RESERVATION_REFUSED";
341
+ Status["RESOURCE_LIMIT_EXCEEDED"] = "RESOURCE_LIMIT_EXCEEDED";
342
+ Status["PERMISSION_DENIED"] = "PERMISSION_DENIED";
343
+ Status["CONNECTION_FAILED"] = "CONNECTION_FAILED";
344
+ Status["NO_RESERVATION"] = "NO_RESERVATION";
345
+ Status["MALFORMED_MESSAGE"] = "MALFORMED_MESSAGE";
346
+ Status["UNEXPECTED_MESSAGE"] = "UNEXPECTED_MESSAGE";
347
+ })(Status || (Status = {}));
348
+ var __StatusValues;
349
+ (function (__StatusValues) {
350
+ __StatusValues[__StatusValues["UNUSED"] = 0] = "UNUSED";
351
+ __StatusValues[__StatusValues["OK"] = 100] = "OK";
352
+ __StatusValues[__StatusValues["RESERVATION_REFUSED"] = 200] = "RESERVATION_REFUSED";
353
+ __StatusValues[__StatusValues["RESOURCE_LIMIT_EXCEEDED"] = 201] = "RESOURCE_LIMIT_EXCEEDED";
354
+ __StatusValues[__StatusValues["PERMISSION_DENIED"] = 202] = "PERMISSION_DENIED";
355
+ __StatusValues[__StatusValues["CONNECTION_FAILED"] = 203] = "CONNECTION_FAILED";
356
+ __StatusValues[__StatusValues["NO_RESERVATION"] = 204] = "NO_RESERVATION";
357
+ __StatusValues[__StatusValues["MALFORMED_MESSAGE"] = 400] = "MALFORMED_MESSAGE";
358
+ __StatusValues[__StatusValues["UNEXPECTED_MESSAGE"] = 401] = "UNEXPECTED_MESSAGE";
359
+ })(__StatusValues || (__StatusValues = {}));
360
+ (function (Status) {
361
+ Status.codec = () => {
362
+ return enumeration(__StatusValues);
363
+ };
364
+ })(Status || (Status = {}));
365
+ export var ReservationVoucher;
366
+ (function (ReservationVoucher) {
367
+ let _codec;
368
+ ReservationVoucher.codec = () => {
369
+ if (_codec == null) {
370
+ _codec = message((obj, w, opts = {}) => {
371
+ if (opts.lengthDelimited !== false) {
372
+ w.fork();
373
+ }
374
+ if ((obj.relay != null && obj.relay.byteLength > 0)) {
375
+ w.uint32(10);
376
+ w.bytes(obj.relay);
377
+ }
378
+ if ((obj.peer != null && obj.peer.byteLength > 0)) {
379
+ w.uint32(18);
380
+ w.bytes(obj.peer);
381
+ }
382
+ if ((obj.expiration != null && obj.expiration !== 0n)) {
383
+ w.uint32(24);
384
+ w.uint64(obj.expiration);
385
+ }
386
+ if (opts.lengthDelimited !== false) {
387
+ w.ldelim();
388
+ }
389
+ }, (reader, length) => {
390
+ const obj = {
391
+ relay: new Uint8Array(0),
392
+ peer: new Uint8Array(0),
393
+ expiration: 0n
394
+ };
395
+ const end = length == null ? reader.len : reader.pos + length;
396
+ while (reader.pos < end) {
397
+ const tag = reader.uint32();
398
+ switch (tag >>> 3) {
399
+ case 1:
400
+ obj.relay = reader.bytes();
401
+ break;
402
+ case 2:
403
+ obj.peer = reader.bytes();
404
+ break;
405
+ case 3:
406
+ obj.expiration = reader.uint64();
407
+ break;
408
+ default:
409
+ reader.skipType(tag & 7);
410
+ break;
411
+ }
412
+ }
413
+ return obj;
414
+ });
415
+ }
416
+ return _codec;
417
+ };
418
+ ReservationVoucher.encode = (obj) => {
419
+ return encodeMessage(obj, ReservationVoucher.codec());
420
+ };
421
+ ReservationVoucher.decode = (buf) => {
422
+ return decodeMessage(buf, ReservationVoucher.codec());
423
+ };
424
+ })(ReservationVoucher || (ReservationVoucher = {}));
425
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pb/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { TypedEventEmitter } from '@libp2p/interface/events';
2
+ import type { ComponentLogger } from '@libp2p/interface';
3
+ import type { ContentRouting } from '@libp2p/interface/content-routing';
4
+ import type { Startable } from '@libp2p/interface/startable';
5
+ export interface AdvertServiceInit {
6
+ /**
7
+ * How long to wait after startup to begin advertising the service
8
+ * - if some configured content routers take a while to warm up (for
9
+ * example, the DHT needs some peers to be able to publish) this
10
+ * value should be high enough that they will have warmed up
11
+ */
12
+ bootDelay?: number;
13
+ }
14
+ export interface AdvertServiceComponents {
15
+ contentRouting: ContentRouting;
16
+ logger: ComponentLogger;
17
+ }
18
+ export interface AdvertServiceEvents {
19
+ 'advert:success': CustomEvent<unknown>;
20
+ 'advert:error': CustomEvent<Error>;
21
+ }
22
+ export declare class AdvertService extends TypedEventEmitter<AdvertServiceEvents> implements Startable {
23
+ private readonly contentRouting;
24
+ private timeout?;
25
+ private started;
26
+ private readonly bootDelay;
27
+ private readonly log;
28
+ /**
29
+ * Creates an instance of Relay
30
+ */
31
+ constructor(components: AdvertServiceComponents, init?: AdvertServiceInit);
32
+ isStarted(): boolean;
33
+ /**
34
+ * Start Relay service
35
+ */
36
+ start(): void;
37
+ /**
38
+ * Stop Relay service
39
+ */
40
+ stop(): void;
41
+ /**
42
+ * Advertise hop relay service in the network.
43
+ */
44
+ _advertiseService(): Promise<void>;
45
+ }
46
+ //# sourceMappingURL=advert-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advert-service.d.ts","sourceRoot":"","sources":["../../../src/server/advert-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAQ5D,OAAO,KAAK,EAAE,eAAe,EAAU,MAAM,mBAAmB,CAAA;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAE5D,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,cAAc,CAAA;IAC9B,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;IACtC,cAAc,EAAE,WAAW,CAAC,KAAK,CAAC,CAAA;CACnC;AAED,qBAAa,aAAc,SAAQ,iBAAiB,CAAC,mBAAmB,CAAE,YAAW,SAAS;IAC5F,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,OAAO,CAAC,CAAK;IACrB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAE5B;;OAEG;gBACU,UAAU,EAAE,uBAAuB,EAAE,IAAI,CAAC,EAAE,iBAAiB;IAS1E,SAAS,IAAK,OAAO;IAIrB;;OAEG;IACH,KAAK,IAAK,IAAI;IAed;;OAEG;IACH,IAAI,IAAK,IAAI;IAQb;;OAEG;IACG,iBAAiB,IAAK,OAAO,CAAC,IAAI,CAAC;CAqB1C"}
@@ -0,0 +1,72 @@
1
+ import { TypedEventEmitter } from '@libp2p/interface/events';
2
+ import pRetry from 'p-retry';
3
+ import { DEFAULT_ADVERT_BOOT_DELAY, ERR_NO_ROUTERS_AVAILABLE, RELAY_RENDEZVOUS_NS } from '../constants.js';
4
+ import { namespaceToCid } from '../utils.js';
5
+ export class AdvertService extends TypedEventEmitter {
6
+ contentRouting;
7
+ timeout;
8
+ started;
9
+ bootDelay;
10
+ log;
11
+ /**
12
+ * Creates an instance of Relay
13
+ */
14
+ constructor(components, init) {
15
+ super();
16
+ this.log = components.logger.forComponent('libp2p:circuit-relay:advert-service');
17
+ this.contentRouting = components.contentRouting;
18
+ this.bootDelay = init?.bootDelay ?? DEFAULT_ADVERT_BOOT_DELAY;
19
+ this.started = false;
20
+ }
21
+ isStarted() {
22
+ return this.started;
23
+ }
24
+ /**
25
+ * Start Relay service
26
+ */
27
+ start() {
28
+ if (this.started) {
29
+ return;
30
+ }
31
+ // Advertise service if HOP enabled and advertising enabled
32
+ this.timeout = setTimeout(() => {
33
+ this._advertiseService().catch(err => {
34
+ this.log.error('could not advertise service', err);
35
+ });
36
+ }, this.bootDelay);
37
+ this.started = true;
38
+ }
39
+ /**
40
+ * Stop Relay service
41
+ */
42
+ stop() {
43
+ try {
44
+ clearTimeout(this.timeout);
45
+ }
46
+ catch (err) { }
47
+ this.started = false;
48
+ }
49
+ /**
50
+ * Advertise hop relay service in the network.
51
+ */
52
+ async _advertiseService() {
53
+ await pRetry(async () => {
54
+ try {
55
+ const cid = await namespaceToCid(RELAY_RENDEZVOUS_NS);
56
+ await this.contentRouting.provide(cid);
57
+ this.safeDispatchEvent('advert:success', { detail: undefined });
58
+ }
59
+ catch (err) {
60
+ this.safeDispatchEvent('advert:error', { detail: err });
61
+ if (err.code === ERR_NO_ROUTERS_AVAILABLE) {
62
+ this.log.error('a content router, such as a DHT, must be provided in order to advertise the relay service', err);
63
+ this.stop();
64
+ return;
65
+ }
66
+ this.log.error('could not advertise service', err);
67
+ throw err;
68
+ }
69
+ });
70
+ }
71
+ }
72
+ //# sourceMappingURL=advert-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advert-service.js","sourceRoot":"","sources":["../../../src/server/advert-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAyB5C,MAAM,OAAO,aAAc,SAAQ,iBAAsC;IACtD,cAAc,CAAgB;IACvC,OAAO,CAAM;IACb,OAAO,CAAS;IACP,SAAS,CAAQ;IACjB,GAAG,CAAQ;IAE5B;;OAEG;IACH,YAAa,UAAmC,EAAE,IAAwB;QACxE,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,qCAAqC,CAAC,CAAA;QAChF,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc,CAAA;QAC/C,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,yBAAyB,CAAA;QAC7D,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;IACtB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAM;SACP;QAED,2DAA2D;QAC3D,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBACnC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAA;YACpD,CAAC,CAAC,CAAA;QACJ,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QAElB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IACrB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI;YACF,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;SAC3B;QAAC,OAAO,GAAG,EAAE,GAAG;QAEjB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB;QACrB,MAAM,MAAM,CAAC,KAAK,IAAI,EAAE;YACtB,IAAI;gBACF,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,mBAAmB,CAAC,CAAA;gBACrD,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;gBAEtC,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;aAChE;YAAC,OAAO,GAAQ,EAAE;gBACjB,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;gBAEvD,IAAI,GAAG,CAAC,IAAI,KAAK,wBAAwB,EAAE;oBACzC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,2FAA2F,EAAE,GAAG,CAAC,CAAA;oBAChH,IAAI,CAAC,IAAI,EAAE,CAAA;oBACX,OAAM;iBACP;gBAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAA;gBAClD,MAAM,GAAG,CAAA;aACV;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;CACF"}
@@ -0,0 +1,67 @@
1
+ import { type ProtobufStream } from 'it-protobuf-stream';
2
+ import { HopMessage, StopMessage } from '../pb/index.js';
3
+ import { type AdvertServiceComponents, type AdvertServiceInit } from './advert-service.js';
4
+ import { type ReservationStoreInit } from './reservation-store.js';
5
+ import type { CircuitRelayService, RelayReservation } from '../index.js';
6
+ import type { ComponentLogger } from '@libp2p/interface';
7
+ import type { Connection, Stream } from '@libp2p/interface/connection';
8
+ import type { ConnectionGater } from '@libp2p/interface/connection-gater';
9
+ import type { PeerId } from '@libp2p/interface/peer-id';
10
+ import type { PeerStore } from '@libp2p/interface/peer-store';
11
+ import type { AddressManager } from '@libp2p/interface-internal/address-manager';
12
+ import type { ConnectionManager } from '@libp2p/interface-internal/connection-manager';
13
+ import type { Registrar } from '@libp2p/interface-internal/registrar';
14
+ export interface CircuitRelayServerInit {
15
+ /**
16
+ * Incoming hop requests must complete within this time in ms otherwise
17
+ * the stream will be reset (default: 30s)
18
+ */
19
+ hopTimeout?: number;
20
+ /**
21
+ * If true, advertise this service via libp2p content routing to allow
22
+ * peers to locate us on the network (default: false)
23
+ */
24
+ advertise?: boolean | AdvertServiceInit;
25
+ /**
26
+ * Configuration of reservations
27
+ */
28
+ reservations?: ReservationStoreInit;
29
+ /**
30
+ * The maximum number of simultaneous HOP inbound streams that can be open at once
31
+ */
32
+ maxInboundHopStreams?: number;
33
+ /**
34
+ * The maximum number of simultaneous HOP outbound streams that can be open at once
35
+ */
36
+ maxOutboundHopStreams?: number;
37
+ /**
38
+ * The maximum number of simultaneous STOP outbound streams that can be open at
39
+ * once. (default: 300)
40
+ */
41
+ maxOutboundStopStreams?: number;
42
+ }
43
+ export interface HopProtocolOptions {
44
+ connection: Connection;
45
+ request: HopMessage;
46
+ stream: ProtobufStream<Stream>;
47
+ }
48
+ export interface StopOptions {
49
+ connection: Connection;
50
+ request: StopMessage;
51
+ }
52
+ export interface CircuitRelayServerComponents extends AdvertServiceComponents {
53
+ registrar: Registrar;
54
+ peerStore: PeerStore;
55
+ addressManager: AddressManager;
56
+ peerId: PeerId;
57
+ connectionManager: ConnectionManager;
58
+ connectionGater: ConnectionGater;
59
+ logger: ComponentLogger;
60
+ }
61
+ export interface RelayServerEvents {
62
+ 'relay:reservation': CustomEvent<RelayReservation>;
63
+ 'relay:advert:success': CustomEvent<unknown>;
64
+ 'relay:advert:error': CustomEvent<Error>;
65
+ }
66
+ export declare function circuitRelayServer(init?: CircuitRelayServerInit): (components: CircuitRelayServerComponents) => CircuitRelayService;
67
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAUlE,OAAO,EAAE,UAAU,EAA4B,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAElF,OAAO,EAAiB,KAAK,uBAAuB,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACzG,OAAO,EAAoB,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAEpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,KAAK,EAAE,eAAe,EAAU,MAAM,mBAAmB,CAAA;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAA;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAA;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAA;AACtF,OAAO,KAAK,EAAsB,SAAS,EAAE,MAAM,sCAAsC,CAAA;AAKzF,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAA;IAEvC;;OAEG;IACH,YAAY,CAAC,EAAE,oBAAoB,CAAA;IAEnC;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAE7B;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,UAAU,CAAA;IACnB,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,4BAA6B,SAAQ,uBAAuB;IAC3E,SAAS,EAAE,SAAS,CAAA;IACpB,SAAS,EAAE,SAAS,CAAA;IACpB,cAAc,EAAE,cAAc,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,eAAe,EAAE,eAAe,CAAA;IAChC,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAA;IAClD,sBAAsB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;IAC5C,oBAAoB,EAAE,WAAW,CAAC,KAAK,CAAC,CAAA;CACzC;AA4VD,wBAAgB,kBAAkB,CAAE,IAAI,GAAE,sBAA2B,GAAG,CAAC,UAAU,EAAE,4BAA4B,KAAK,mBAAmB,CAIxI"}