libp2p 0.42.2-593deefe → 0.42.2-5e63ee2d

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 (228) hide show
  1. package/dist/index.min.js +30 -30
  2. package/dist/src/address-manager/index.d.ts +1 -10
  3. package/dist/src/address-manager/index.d.ts.map +1 -1
  4. package/dist/src/address-manager/index.js +46 -29
  5. package/dist/src/address-manager/index.js.map +1 -1
  6. package/dist/src/autonat/constants.d.ts +4 -0
  7. package/dist/src/autonat/constants.d.ts.map +1 -0
  8. package/dist/src/autonat/constants.js +4 -0
  9. package/dist/src/autonat/constants.js.map +1 -0
  10. package/dist/src/autonat/index.d.ts +64 -0
  11. package/dist/src/autonat/index.d.ts.map +1 -0
  12. package/dist/src/autonat/index.js +417 -0
  13. package/dist/src/autonat/index.js.map +1 -0
  14. package/dist/src/autonat/pb/index.d.ts +57 -0
  15. package/dist/src/autonat/pb/index.d.ts.map +1 -0
  16. package/dist/src/autonat/pb/index.js +250 -0
  17. package/dist/src/autonat/pb/index.js.map +1 -0
  18. package/dist/src/circuit/constants.d.ts +29 -3
  19. package/dist/src/circuit/constants.d.ts.map +1 -1
  20. package/dist/src/circuit/constants.js +32 -5
  21. package/dist/src/circuit/constants.js.map +1 -1
  22. package/dist/src/circuit/index.d.ts +16 -61
  23. package/dist/src/circuit/index.d.ts.map +1 -1
  24. package/dist/src/circuit/index.js +2 -1
  25. package/dist/src/circuit/index.js.map +1 -1
  26. package/dist/src/circuit/server/advert-service.d.ts +43 -0
  27. package/dist/src/circuit/server/advert-service.d.ts.map +1 -0
  28. package/dist/src/circuit/server/advert-service.js +69 -0
  29. package/dist/src/circuit/server/advert-service.js.map +1 -0
  30. package/dist/src/circuit/server/index.d.ts +60 -0
  31. package/dist/src/circuit/server/index.d.ts.map +1 -0
  32. package/dist/src/circuit/server/index.js +287 -0
  33. package/dist/src/circuit/server/index.js.map +1 -0
  34. package/dist/src/circuit/{reservation-store.d.ts → server/reservation-store.d.ts} +17 -10
  35. package/dist/src/circuit/server/reservation-store.d.ts.map +1 -0
  36. package/dist/src/circuit/server/reservation-store.js +57 -0
  37. package/dist/src/circuit/server/reservation-store.js.map +1 -0
  38. package/dist/src/circuit/server/reservation-voucher.d.ts.map +1 -0
  39. package/dist/src/circuit/{reservation-voucher.js → server/reservation-voucher.js} +1 -1
  40. package/dist/src/circuit/server/reservation-voucher.js.map +1 -0
  41. package/dist/src/circuit/transport/discovery.d.ts +45 -0
  42. package/dist/src/circuit/transport/discovery.d.ts.map +1 -0
  43. package/dist/src/circuit/transport/discovery.js +82 -0
  44. package/dist/src/circuit/transport/discovery.js.map +1 -0
  45. package/dist/src/circuit/transport/index.d.ts +33 -0
  46. package/dist/src/circuit/transport/index.d.ts.map +1 -0
  47. package/dist/src/circuit/transport/index.js +225 -0
  48. package/dist/src/circuit/transport/index.js.map +1 -0
  49. package/dist/src/circuit/transport/listener.d.ts +9 -0
  50. package/dist/src/circuit/transport/listener.d.ts.map +1 -0
  51. package/dist/src/circuit/transport/listener.js +76 -0
  52. package/dist/src/circuit/transport/listener.js.map +1 -0
  53. package/dist/src/circuit/transport/reservation-store.d.ts +60 -0
  54. package/dist/src/circuit/transport/reservation-store.d.ts.map +1 -0
  55. package/dist/src/circuit/transport/reservation-store.js +165 -0
  56. package/dist/src/circuit/transport/reservation-store.js.map +1 -0
  57. package/dist/src/circuit/utils.d.ts +4 -2
  58. package/dist/src/circuit/utils.d.ts.map +1 -1
  59. package/dist/src/circuit/utils.js +75 -102
  60. package/dist/src/circuit/utils.js.map +1 -1
  61. package/dist/src/components.d.ts +2 -1
  62. package/dist/src/components.d.ts.map +1 -1
  63. package/dist/src/components.js.map +1 -1
  64. package/dist/src/config.d.ts.map +1 -1
  65. package/dist/src/config.js +17 -20
  66. package/dist/src/config.js.map +1 -1
  67. package/dist/src/connection/index.d.ts +2 -2
  68. package/dist/src/connection/index.d.ts.map +1 -1
  69. package/dist/src/connection/index.js +1 -1
  70. package/dist/src/connection/index.js.map +1 -1
  71. package/dist/src/connection-manager/auto-dialler.d.ts +0 -4
  72. package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
  73. package/dist/src/connection-manager/auto-dialler.js +0 -9
  74. package/dist/src/connection-manager/auto-dialler.js.map +1 -1
  75. package/dist/src/connection-manager/dialer/dial-request.js +1 -1
  76. package/dist/src/connection-manager/dialer/dial-request.js.map +1 -1
  77. package/dist/src/connection-manager/dialer/index.d.ts +2 -1
  78. package/dist/src/connection-manager/dialer/index.d.ts.map +1 -1
  79. package/dist/src/connection-manager/dialer/index.js +3 -3
  80. package/dist/src/connection-manager/dialer/index.js.map +1 -1
  81. package/dist/src/connection-manager/index.d.ts +0 -4
  82. package/dist/src/connection-manager/index.d.ts.map +1 -1
  83. package/dist/src/connection-manager/index.js +1 -1
  84. package/dist/src/connection-manager/index.js.map +1 -1
  85. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  86. package/dist/src/connection-manager/latency-monitor.js +1 -1
  87. package/dist/src/connection-manager/latency-monitor.js.map +1 -1
  88. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  89. package/dist/src/content-routing/index.d.ts +6 -4
  90. package/dist/src/content-routing/index.d.ts.map +1 -1
  91. package/dist/src/content-routing/index.js +1 -1
  92. package/dist/src/content-routing/index.js.map +1 -1
  93. package/dist/src/content-routing/utils.d.ts +3 -3
  94. package/dist/src/content-routing/utils.d.ts.map +1 -1
  95. package/dist/src/dht/dht-content-routing.d.ts +2 -1
  96. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  97. package/dist/src/dht/dht-content-routing.js.map +1 -1
  98. package/dist/src/dht/dht-peer-routing.d.ts +3 -2
  99. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  100. package/dist/src/dht/dht-peer-routing.js.map +1 -1
  101. package/dist/src/dht/dummy-dht.d.ts +1 -1
  102. package/dist/src/dht/dummy-dht.d.ts.map +1 -1
  103. package/dist/src/fetch/index.d.ts.map +1 -1
  104. package/dist/src/identify/index.d.ts +3 -1
  105. package/dist/src/identify/index.d.ts.map +1 -1
  106. package/dist/src/identify/index.js +12 -7
  107. package/dist/src/identify/index.js.map +1 -1
  108. package/dist/src/index.d.ts +13 -7
  109. package/dist/src/index.d.ts.map +1 -1
  110. package/dist/src/index.js.map +1 -1
  111. package/dist/src/insecure/index.d.ts.map +1 -1
  112. package/dist/src/insecure/index.js.map +1 -1
  113. package/dist/src/libp2p.d.ts +6 -4
  114. package/dist/src/libp2p.d.ts.map +1 -1
  115. package/dist/src/libp2p.js +19 -28
  116. package/dist/src/libp2p.js.map +1 -1
  117. package/dist/src/nat-manager.d.ts.map +1 -1
  118. package/dist/src/nat-manager.js +3 -1
  119. package/dist/src/nat-manager.js.map +1 -1
  120. package/dist/src/peer-record-updater.d.ts.map +1 -1
  121. package/dist/src/peer-routing.d.ts.map +1 -1
  122. package/dist/src/ping/index.d.ts.map +1 -1
  123. package/dist/src/pnet/crypto.d.ts +1 -1
  124. package/dist/src/pnet/crypto.d.ts.map +1 -1
  125. package/dist/src/pnet/crypto.js +1 -1
  126. package/dist/src/pnet/crypto.js.map +1 -1
  127. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  128. package/dist/src/registrar.d.ts.map +1 -1
  129. package/dist/src/transport-manager.d.ts.map +1 -1
  130. package/dist/src/transport-manager.js +1 -1
  131. package/dist/src/transport-manager.js.map +1 -1
  132. package/dist/src/upgrader.d.ts +2 -1
  133. package/dist/src/upgrader.d.ts.map +1 -1
  134. package/dist/src/upgrader.js +19 -14
  135. package/dist/src/upgrader.js.map +1 -1
  136. package/package.json +23 -18
  137. package/src/address-manager/index.ts +62 -35
  138. package/src/autonat/constants.ts +4 -0
  139. package/src/autonat/index.ts +567 -0
  140. package/src/autonat/pb/index.proto +35 -0
  141. package/src/autonat/pb/index.ts +320 -0
  142. package/src/circuit/constants.ts +40 -5
  143. package/src/circuit/index.ts +17 -67
  144. package/src/circuit/server/advert-service.ts +108 -0
  145. package/src/circuit/server/index.ts +421 -0
  146. package/src/circuit/server/reservation-store.ts +111 -0
  147. package/src/circuit/{reservation-voucher.ts → server/reservation-voucher.ts} +3 -3
  148. package/src/circuit/transport/discovery.ts +127 -0
  149. package/src/circuit/transport/index.ts +325 -0
  150. package/src/circuit/transport/listener.ts +99 -0
  151. package/src/circuit/transport/reservation-store.ts +249 -0
  152. package/src/circuit/utils.ts +78 -115
  153. package/src/components.ts +9 -8
  154. package/src/config.ts +17 -20
  155. package/src/connection/index.ts +7 -7
  156. package/src/connection-manager/auto-dialler.ts +4 -20
  157. package/src/connection-manager/dialer/dial-request.ts +1 -1
  158. package/src/connection-manager/dialer/index.ts +10 -9
  159. package/src/connection-manager/index.ts +14 -19
  160. package/src/connection-manager/latency-monitor.ts +9 -9
  161. package/src/connection-manager/visibility-change-emitter.ts +4 -4
  162. package/src/content-routing/index.ts +10 -8
  163. package/src/content-routing/utils.ts +3 -3
  164. package/src/dht/dht-content-routing.ts +3 -2
  165. package/src/dht/dht-peer-routing.ts +3 -2
  166. package/src/dht/dummy-dht.ts +1 -1
  167. package/src/fetch/index.ts +7 -7
  168. package/src/identify/index.ts +22 -17
  169. package/src/index.ts +14 -7
  170. package/src/insecure/index.ts +2 -1
  171. package/src/libp2p.ts +33 -41
  172. package/src/nat-manager.ts +9 -7
  173. package/src/peer-record-updater.ts +4 -4
  174. package/src/peer-routing.ts +4 -4
  175. package/src/ping/index.ts +4 -4
  176. package/src/pnet/crypto.ts +3 -3
  177. package/src/pnet/key-generator.ts +1 -1
  178. package/src/registrar.ts +8 -8
  179. package/src/transport-manager.ts +10 -10
  180. package/src/upgrader.ts +20 -19
  181. package/src/version.ts +1 -1
  182. package/dist/src/circuit/client.d.ts +0 -81
  183. package/dist/src/circuit/client.d.ts.map +0 -1
  184. package/dist/src/circuit/client.js +0 -285
  185. package/dist/src/circuit/client.js.map +0 -1
  186. package/dist/src/circuit/hop.d.ts +0 -23
  187. package/dist/src/circuit/hop.d.ts.map +0 -1
  188. package/dist/src/circuit/hop.js +0 -167
  189. package/dist/src/circuit/hop.js.map +0 -1
  190. package/dist/src/circuit/interfaces.d.ts +0 -27
  191. package/dist/src/circuit/interfaces.d.ts.map +0 -1
  192. package/dist/src/circuit/interfaces.js +0 -2
  193. package/dist/src/circuit/interfaces.js.map +0 -1
  194. package/dist/src/circuit/listener.d.ts +0 -9
  195. package/dist/src/circuit/listener.d.ts.map +0 -1
  196. package/dist/src/circuit/listener.js +0 -62
  197. package/dist/src/circuit/listener.js.map +0 -1
  198. package/dist/src/circuit/multicodec.d.ts +0 -3
  199. package/dist/src/circuit/multicodec.d.ts.map +0 -1
  200. package/dist/src/circuit/multicodec.js +0 -3
  201. package/dist/src/circuit/multicodec.js.map +0 -1
  202. package/dist/src/circuit/relay.d.ts +0 -34
  203. package/dist/src/circuit/relay.d.ts.map +0 -1
  204. package/dist/src/circuit/relay.js +0 -61
  205. package/dist/src/circuit/relay.js.map +0 -1
  206. package/dist/src/circuit/reservation-store.d.ts.map +0 -1
  207. package/dist/src/circuit/reservation-store.js +0 -59
  208. package/dist/src/circuit/reservation-store.js.map +0 -1
  209. package/dist/src/circuit/reservation-voucher.d.ts.map +0 -1
  210. package/dist/src/circuit/reservation-voucher.js.map +0 -1
  211. package/dist/src/circuit/stop.d.ts +0 -19
  212. package/dist/src/circuit/stop.d.ts.map +0 -1
  213. package/dist/src/circuit/stop.js +0 -67
  214. package/dist/src/circuit/stop.js.map +0 -1
  215. package/dist/src/circuit/transport.d.ts +0 -66
  216. package/dist/src/circuit/transport.d.ts.map +0 -1
  217. package/dist/src/circuit/transport.js +0 -238
  218. package/dist/src/circuit/transport.js.map +0 -1
  219. package/src/circuit/client.ts +0 -381
  220. package/src/circuit/hop.ts +0 -210
  221. package/src/circuit/interfaces.ts +0 -28
  222. package/src/circuit/listener.ts +0 -83
  223. package/src/circuit/multicodec.ts +0 -3
  224. package/src/circuit/relay.ts +0 -87
  225. package/src/circuit/reservation-store.ts +0 -106
  226. package/src/circuit/stop.ts +0 -92
  227. package/src/circuit/transport.ts +0 -313
  228. /package/dist/src/circuit/{reservation-voucher.d.ts → server/reservation-voucher.d.ts} +0 -0
@@ -0,0 +1,320 @@
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
+
7
+ import { enumeration, encodeMessage, decodeMessage, message } from 'protons-runtime'
8
+ import type { Codec } from 'protons-runtime'
9
+ import type { Uint8ArrayList } from 'uint8arraylist'
10
+
11
+ export interface Message {
12
+ type?: Message.MessageType
13
+ dial?: Message.Dial
14
+ dialResponse?: Message.DialResponse
15
+ }
16
+
17
+ export namespace Message {
18
+ export enum MessageType {
19
+ DIAL = 'DIAL',
20
+ DIAL_RESPONSE = 'DIAL_RESPONSE'
21
+ }
22
+
23
+ enum __MessageTypeValues {
24
+ DIAL = 0,
25
+ DIAL_RESPONSE = 1
26
+ }
27
+
28
+ export namespace MessageType {
29
+ export const codec = (): Codec<MessageType> => {
30
+ return enumeration<MessageType>(__MessageTypeValues)
31
+ }
32
+ }
33
+
34
+ export enum ResponseStatus {
35
+ OK = 'OK',
36
+ E_DIAL_ERROR = 'E_DIAL_ERROR',
37
+ E_DIAL_REFUSED = 'E_DIAL_REFUSED',
38
+ E_BAD_REQUEST = 'E_BAD_REQUEST',
39
+ E_INTERNAL_ERROR = 'E_INTERNAL_ERROR'
40
+ }
41
+
42
+ enum __ResponseStatusValues {
43
+ OK = 0,
44
+ E_DIAL_ERROR = 100,
45
+ E_DIAL_REFUSED = 101,
46
+ E_BAD_REQUEST = 200,
47
+ E_INTERNAL_ERROR = 300
48
+ }
49
+
50
+ export namespace ResponseStatus {
51
+ export const codec = (): Codec<ResponseStatus> => {
52
+ return enumeration<ResponseStatus>(__ResponseStatusValues)
53
+ }
54
+ }
55
+
56
+ export interface PeerInfo {
57
+ id?: Uint8Array
58
+ addrs: Uint8Array[]
59
+ }
60
+
61
+ export namespace PeerInfo {
62
+ let _codec: Codec<PeerInfo>
63
+
64
+ export const codec = (): Codec<PeerInfo> => {
65
+ if (_codec == null) {
66
+ _codec = message<PeerInfo>((obj, w, opts = {}) => {
67
+ if (opts.lengthDelimited !== false) {
68
+ w.fork()
69
+ }
70
+
71
+ if (obj.id != null) {
72
+ w.uint32(10)
73
+ w.bytes(obj.id)
74
+ }
75
+
76
+ if (obj.addrs != null) {
77
+ for (const value of obj.addrs) {
78
+ w.uint32(18)
79
+ w.bytes(value)
80
+ }
81
+ }
82
+
83
+ if (opts.lengthDelimited !== false) {
84
+ w.ldelim()
85
+ }
86
+ }, (reader, length) => {
87
+ const obj: any = {
88
+ addrs: []
89
+ }
90
+
91
+ const end = length == null ? reader.len : reader.pos + length
92
+
93
+ while (reader.pos < end) {
94
+ const tag = reader.uint32()
95
+
96
+ switch (tag >>> 3) {
97
+ case 1:
98
+ obj.id = reader.bytes()
99
+ break
100
+ case 2:
101
+ obj.addrs.push(reader.bytes())
102
+ break
103
+ default:
104
+ reader.skipType(tag & 7)
105
+ break
106
+ }
107
+ }
108
+
109
+ return obj
110
+ })
111
+ }
112
+
113
+ return _codec
114
+ }
115
+
116
+ export const encode = (obj: Partial<PeerInfo>): Uint8Array => {
117
+ return encodeMessage(obj, PeerInfo.codec())
118
+ }
119
+
120
+ export const decode = (buf: Uint8Array | Uint8ArrayList): PeerInfo => {
121
+ return decodeMessage(buf, PeerInfo.codec())
122
+ }
123
+ }
124
+
125
+ export interface Dial {
126
+ peer?: Message.PeerInfo
127
+ }
128
+
129
+ export namespace Dial {
130
+ let _codec: Codec<Dial>
131
+
132
+ export const codec = (): Codec<Dial> => {
133
+ if (_codec == null) {
134
+ _codec = message<Dial>((obj, w, opts = {}) => {
135
+ if (opts.lengthDelimited !== false) {
136
+ w.fork()
137
+ }
138
+
139
+ if (obj.peer != null) {
140
+ w.uint32(10)
141
+ Message.PeerInfo.codec().encode(obj.peer, w)
142
+ }
143
+
144
+ if (opts.lengthDelimited !== false) {
145
+ w.ldelim()
146
+ }
147
+ }, (reader, length) => {
148
+ const obj: any = {}
149
+
150
+ const end = length == null ? reader.len : reader.pos + length
151
+
152
+ while (reader.pos < end) {
153
+ const tag = reader.uint32()
154
+
155
+ switch (tag >>> 3) {
156
+ case 1:
157
+ obj.peer = Message.PeerInfo.codec().decode(reader, reader.uint32())
158
+ break
159
+ default:
160
+ reader.skipType(tag & 7)
161
+ break
162
+ }
163
+ }
164
+
165
+ return obj
166
+ })
167
+ }
168
+
169
+ return _codec
170
+ }
171
+
172
+ export const encode = (obj: Partial<Dial>): Uint8Array => {
173
+ return encodeMessage(obj, Dial.codec())
174
+ }
175
+
176
+ export const decode = (buf: Uint8Array | Uint8ArrayList): Dial => {
177
+ return decodeMessage(buf, Dial.codec())
178
+ }
179
+ }
180
+
181
+ export interface DialResponse {
182
+ status?: Message.ResponseStatus
183
+ statusText?: string
184
+ addr?: Uint8Array
185
+ }
186
+
187
+ export namespace DialResponse {
188
+ let _codec: Codec<DialResponse>
189
+
190
+ export const codec = (): Codec<DialResponse> => {
191
+ if (_codec == null) {
192
+ _codec = message<DialResponse>((obj, w, opts = {}) => {
193
+ if (opts.lengthDelimited !== false) {
194
+ w.fork()
195
+ }
196
+
197
+ if (obj.status != null) {
198
+ w.uint32(8)
199
+ Message.ResponseStatus.codec().encode(obj.status, w)
200
+ }
201
+
202
+ if (obj.statusText != null) {
203
+ w.uint32(18)
204
+ w.string(obj.statusText)
205
+ }
206
+
207
+ if (obj.addr != null) {
208
+ w.uint32(26)
209
+ w.bytes(obj.addr)
210
+ }
211
+
212
+ if (opts.lengthDelimited !== false) {
213
+ w.ldelim()
214
+ }
215
+ }, (reader, length) => {
216
+ const obj: any = {}
217
+
218
+ const end = length == null ? reader.len : reader.pos + length
219
+
220
+ while (reader.pos < end) {
221
+ const tag = reader.uint32()
222
+
223
+ switch (tag >>> 3) {
224
+ case 1:
225
+ obj.status = Message.ResponseStatus.codec().decode(reader)
226
+ break
227
+ case 2:
228
+ obj.statusText = reader.string()
229
+ break
230
+ case 3:
231
+ obj.addr = reader.bytes()
232
+ break
233
+ default:
234
+ reader.skipType(tag & 7)
235
+ break
236
+ }
237
+ }
238
+
239
+ return obj
240
+ })
241
+ }
242
+
243
+ return _codec
244
+ }
245
+
246
+ export const encode = (obj: Partial<DialResponse>): Uint8Array => {
247
+ return encodeMessage(obj, DialResponse.codec())
248
+ }
249
+
250
+ export const decode = (buf: Uint8Array | Uint8ArrayList): DialResponse => {
251
+ return decodeMessage(buf, DialResponse.codec())
252
+ }
253
+ }
254
+
255
+ let _codec: Codec<Message>
256
+
257
+ export const codec = (): Codec<Message> => {
258
+ if (_codec == null) {
259
+ _codec = message<Message>((obj, w, opts = {}) => {
260
+ if (opts.lengthDelimited !== false) {
261
+ w.fork()
262
+ }
263
+
264
+ if (obj.type != null) {
265
+ w.uint32(8)
266
+ Message.MessageType.codec().encode(obj.type, w)
267
+ }
268
+
269
+ if (obj.dial != null) {
270
+ w.uint32(18)
271
+ Message.Dial.codec().encode(obj.dial, w)
272
+ }
273
+
274
+ if (obj.dialResponse != null) {
275
+ w.uint32(26)
276
+ Message.DialResponse.codec().encode(obj.dialResponse, w)
277
+ }
278
+
279
+ if (opts.lengthDelimited !== false) {
280
+ w.ldelim()
281
+ }
282
+ }, (reader, length) => {
283
+ const obj: any = {}
284
+
285
+ const end = length == null ? reader.len : reader.pos + length
286
+
287
+ while (reader.pos < end) {
288
+ const tag = reader.uint32()
289
+
290
+ switch (tag >>> 3) {
291
+ case 1:
292
+ obj.type = Message.MessageType.codec().decode(reader)
293
+ break
294
+ case 2:
295
+ obj.dial = Message.Dial.codec().decode(reader, reader.uint32())
296
+ break
297
+ case 3:
298
+ obj.dialResponse = Message.DialResponse.codec().decode(reader, reader.uint32())
299
+ break
300
+ default:
301
+ reader.skipType(tag & 7)
302
+ break
303
+ }
304
+ }
305
+
306
+ return obj
307
+ })
308
+ }
309
+
310
+ return _codec
311
+ }
312
+
313
+ export const encode = (obj: Partial<Message>): Uint8Array => {
314
+ return encodeMessage(obj, Message.codec())
315
+ }
316
+
317
+ export const decode = (buf: Uint8Array | Uint8ArrayList): Message => {
318
+ return decodeMessage(buf, Message.codec())
319
+ }
320
+ }
@@ -1,4 +1,5 @@
1
- const minute = 60 * 1000
1
+ const second = 1000
2
+ const minute = 60 * second
2
3
 
3
4
  /**
4
5
  * Delay before HOP relay service is advertised on the network
@@ -21,17 +22,51 @@ export const CIRCUIT_PROTO_CODE = 290
21
22
  export const RELAY_RENDEZVOUS_NS = '/libp2p/relay'
22
23
 
23
24
  /**
24
- * Maximum reservations for auto relay
25
+ * The maximum number of relay reservations the relay server will accept
25
26
  */
26
- export const DEFAULT_MAX_RESERVATIONS = 1
27
+ export const DEFAULT_MAX_RESERVATION_STORE_SIZE = 15
27
28
 
28
- export const RELAY_DESTINATION_TAG = 'relay-destination'
29
+ /**
30
+ * How often to check for reservation expiry
31
+ */
32
+ export const DEFAULT_MAX_RESERVATION_CLEAR_INTERVAL = 300 * second
33
+
34
+ /**
35
+ * How often to check for reservation expiry
36
+ */
37
+ export const DEFAULT_MAX_RESERVATION_TTL = 2 * 60 * minute
38
+
39
+ export const DEFAULT_RESERVATION_CONCURRENCY = 1
40
+
41
+ export const RELAY_SOURCE_TAG = 'circuit-relay-source'
42
+
43
+ export const RELAY_TAG = 'circuit-relay-relay'
29
44
 
30
45
  // circuit v2 connection limits
31
46
  // https://github.com/libp2p/go-libp2p/blob/master/p2p/protocol/circuitv2/relay/resources.go#L61-L66
32
47
 
33
48
  // 2 min is the default connection duration
34
- export const DEFAULT_DURATION_LIMIT = 2 * 60 * 1000
49
+ export const DEFAULT_DURATION_LIMIT = 2 * minute
35
50
 
36
51
  // 128k is the default data limit
37
52
  export const DEFAULT_DATA_LIMIT = BigInt(1 << 17)
53
+
54
+ /**
55
+ * The hop protocol
56
+ */
57
+ export const RELAY_V2_HOP_CODEC = '/libp2p/circuit/relay/0.2.0/hop'
58
+
59
+ /**
60
+ * the stop protocol
61
+ */
62
+ export const RELAY_V2_STOP_CODEC = '/libp2p/circuit/relay/0.2.0/stop'
63
+
64
+ /**
65
+ * Hop messages must be exchanged inside this timeout
66
+ */
67
+ export const DEFAULT_HOP_TIMEOUT = 30 * second
68
+
69
+ /**
70
+ * How long to wait before starting to advertise the relay service
71
+ */
72
+ export const DEFAULT_ADVERT_BOOT_DELAY = 30 * second
@@ -1,73 +1,23 @@
1
- /**
2
- * RelayConfig configures the circuit v2 relay transport.
3
- */
4
- export interface RelayConfig {
5
- /**
6
- * Enable dialing a client over a relay and receiving relayed connections.
7
- * This in itself does not enable the node to act as a relay.
8
- */
9
- enabled: boolean
10
- advertise: RelayAdvertiseConfig
11
- hop: HopConfig
12
- reservationManager: RelayReservationManagerConfig
1
+ import type { EventEmitter } from '@libp2p/interfaces/events'
2
+ import type { PeerMap } from '@libp2p/peer-collections'
3
+ import type { Limit } from './pb/index.js'
4
+ import type { Multiaddr } from '@multiformats/multiaddr'
5
+
6
+ export interface RelayReservation {
7
+ expire: Date
8
+ addr: Multiaddr
9
+ limit?: Limit
13
10
  }
14
11
 
15
- /**
16
- * RelayReservationManagerConfig allows the node to automatically listen
17
- * on any discovered relays upto a specified maximum.
18
- */
19
- export interface RelayReservationManagerConfig {
20
- /**
21
- * enable or disable autorelay (default: false)
22
- */
23
- enabled?: boolean
24
-
25
- /**
26
- * maximum number of relays to listen (default: 1)
27
- */
28
- maxReservations?: number
29
- }
30
-
31
- /**
32
- * Configures using the node as a HOP relay
33
- */
34
- export interface HopConfig {
35
- /**
36
- * If true this node will function as a limited relay (default: false)
37
- */
38
- enabled?: boolean
39
-
40
- /**
41
- * timeout for hop requests to complete
42
- */
43
- timeout: number
44
-
45
- /**
46
- * If false, no connection limits will be applied to relayed connections (default: true)
47
- */
48
- applyConnectionLimits?: boolean
49
-
50
- /**
51
- * Limits to apply to incoming relay connections - relayed connections will be closed if
52
- * these limits are exceeded.
53
- */
54
- limit?: {
55
- /**
56
- * How long to relay a connection for in milliseconds (default: 2m)
57
- */
58
- duration?: number
59
-
60
- /**
61
- * How many bytes to allow to be transferred over a relayed connection (default: 128k)
62
- */
63
- data?: bigint
64
- }
12
+ export interface CircuitRelayServiceEvents {
13
+ 'relay:reservation': CustomEvent<RelayReservation>
14
+ 'relay:advert:success': CustomEvent<unknown>
15
+ 'relay:advert:error': CustomEvent<Error>
65
16
  }
66
17
 
67
- export interface RelayAdvertiseConfig {
68
- bootDelay?: number
69
- enabled?: boolean
70
- ttl?: number
18
+ export interface CircuitRelayService extends EventEmitter<CircuitRelayServiceEvents> {
19
+ reservations: PeerMap<RelayReservation>
71
20
  }
72
21
 
73
- export { Relay } from './relay.js'
22
+ export { circuitRelayServer } from './server/index.js'
23
+ export { circuitRelayTransport } from './transport/index.js'
@@ -0,0 +1,108 @@
1
+ import { logger } from '@libp2p/logger'
2
+ import { codes } from '../../errors.js'
3
+ import { namespaceToCid } from '../utils.js'
4
+ import {
5
+ DEFAULT_ADVERT_BOOT_DELAY,
6
+ RELAY_RENDEZVOUS_NS
7
+ } from '../constants.js'
8
+ import type { Startable } from '@libp2p/interfaces/startable'
9
+ import type { ContentRouting } from '@libp2p/interface-content-routing'
10
+ import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events'
11
+ import pRetry from 'p-retry'
12
+
13
+ const log = logger('libp2p:circuit-relay:advert-service')
14
+
15
+ export interface AdvertServiceInit {
16
+ /**
17
+ * How long to wait after startup to begin advertising the service
18
+ * - if some configured content routers take a while to warm up (for
19
+ * example, the DHT needs some peers to be able to publish) this
20
+ * value should be high enough that they will have warmed up
21
+ */
22
+ bootDelay?: number
23
+ }
24
+
25
+ export interface AdvertServiceComponents {
26
+ contentRouting: ContentRouting
27
+ }
28
+
29
+ export interface AdvertServiceEvents {
30
+ 'advert:success': CustomEvent<unknown>
31
+ 'advert:error': CustomEvent<Error>
32
+ }
33
+
34
+ export class AdvertService extends EventEmitter<AdvertServiceEvents> implements Startable {
35
+ private readonly contentRouting: ContentRouting
36
+ private timeout?: any
37
+ private started: boolean
38
+ private readonly bootDelay: number
39
+
40
+ /**
41
+ * Creates an instance of Relay
42
+ */
43
+ constructor (components: AdvertServiceComponents, init?: AdvertServiceInit) {
44
+ super()
45
+
46
+ this.contentRouting = components.contentRouting
47
+ this.bootDelay = init?.bootDelay ?? DEFAULT_ADVERT_BOOT_DELAY
48
+ this.started = false
49
+ }
50
+
51
+ isStarted (): boolean {
52
+ return this.started
53
+ }
54
+
55
+ /**
56
+ * Start Relay service
57
+ */
58
+ start (): void {
59
+ if (this.started) {
60
+ return
61
+ }
62
+
63
+ // Advertise service if HOP enabled and advertising enabled
64
+ this.timeout = setTimeout(() => {
65
+ this._advertiseService().catch(err => {
66
+ log.error('could not advertise service', err)
67
+ })
68
+ }, this.bootDelay)
69
+
70
+ this.started = true
71
+ }
72
+
73
+ /**
74
+ * Stop Relay service
75
+ */
76
+ stop (): void {
77
+ try {
78
+ clearTimeout(this.timeout)
79
+ } catch (err) { }
80
+
81
+ this.started = false
82
+ }
83
+
84
+ /**
85
+ * Advertise hop relay service in the network.
86
+ */
87
+ async _advertiseService (): Promise<void> {
88
+ await pRetry(async () => {
89
+ try {
90
+ const cid = await namespaceToCid(RELAY_RENDEZVOUS_NS)
91
+ await this.contentRouting.provide(cid)
92
+
93
+ this.dispatchEvent(new CustomEvent('advert:success'))
94
+ } catch (err: any) {
95
+ this.safeDispatchEvent('advert:error', { detail: err })
96
+
97
+ if (err.code === codes.ERR_NO_ROUTERS_AVAILABLE) {
98
+ log.error('a content router, such as a DHT, must be provided in order to advertise the relay service', err)
99
+ this.stop()
100
+ return
101
+ }
102
+
103
+ log.error('could not advertise service', err)
104
+ throw err
105
+ }
106
+ })
107
+ }
108
+ }