@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.
- package/LICENSE +4 -0
- package/README.md +69 -0
- package/dist/index.min.js +45 -0
- package/dist/src/constants.d.ts +55 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +61 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/index.d.ts +56 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +39 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/pb/index.d.ts +93 -0
- package/dist/src/pb/index.d.ts.map +1 -0
- package/dist/src/pb/index.js +425 -0
- package/dist/src/pb/index.js.map +1 -0
- package/dist/src/server/advert-service.d.ts +46 -0
- package/dist/src/server/advert-service.d.ts.map +1 -0
- package/dist/src/server/advert-service.js +72 -0
- package/dist/src/server/advert-service.js.map +1 -0
- package/dist/src/server/index.d.ts +67 -0
- package/dist/src/server/index.d.ts.map +1 -0
- package/dist/src/server/index.js +313 -0
- package/dist/src/server/index.js.map +1 -0
- package/dist/src/server/reservation-store.d.ts +49 -0
- package/dist/src/server/reservation-store.d.ts.map +1 -0
- package/dist/src/server/reservation-store.js +65 -0
- package/dist/src/server/reservation-store.js.map +1 -0
- package/dist/src/server/reservation-voucher.d.ts +18 -0
- package/dist/src/server/reservation-voucher.d.ts.map +1 -0
- package/dist/src/server/reservation-voucher.js +36 -0
- package/dist/src/server/reservation-voucher.js.map +1 -0
- package/dist/src/transport/discovery.d.ts +48 -0
- package/dist/src/transport/discovery.d.ts.map +1 -0
- package/dist/src/transport/discovery.js +97 -0
- package/dist/src/transport/discovery.js.map +1 -0
- package/dist/src/transport/index.d.ts +58 -0
- package/dist/src/transport/index.d.ts.map +1 -0
- package/dist/src/transport/index.js +279 -0
- package/dist/src/transport/index.js.map +1 -0
- package/dist/src/transport/listener.d.ts +11 -0
- package/dist/src/transport/listener.d.ts.map +1 -0
- package/dist/src/transport/listener.js +66 -0
- package/dist/src/transport/listener.js.map +1 -0
- package/dist/src/transport/reservation-store.d.ts +74 -0
- package/dist/src/transport/reservation-store.d.ts.map +1 -0
- package/dist/src/transport/reservation-store.js +209 -0
- package/dist/src/transport/reservation-store.js.map +1 -0
- package/dist/src/utils.d.ts +14 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +106 -0
- package/dist/src/utils.js.map +1 -0
- package/package.json +83 -0
- package/src/constants.ts +79 -0
- package/src/index.ts +64 -0
- package/src/pb/index.proto +67 -0
- package/src/pb/index.ts +539 -0
- package/src/server/advert-service.ts +109 -0
- package/src/server/index.ts +446 -0
- package/src/server/reservation-store.ts +116 -0
- package/src/server/reservation-voucher.ts +51 -0
- package/src/transport/discovery.ts +138 -0
- package/src/transport/index.ts +399 -0
- package/src/transport/listener.ts +98 -0
- package/src/transport/reservation-store.ts +312 -0
- 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"}
|