libp2p 0.42.2 → 0.43.0

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 (295) hide show
  1. package/README.md +4 -4
  2. package/dist/index.min.js +29 -29
  3. package/dist/src/address-manager/index.d.ts +1 -10
  4. package/dist/src/address-manager/index.d.ts.map +1 -1
  5. package/dist/src/address-manager/index.js +46 -29
  6. package/dist/src/address-manager/index.js.map +1 -1
  7. package/dist/src/autonat/constants.d.ts +4 -0
  8. package/dist/src/autonat/constants.d.ts.map +1 -0
  9. package/dist/src/autonat/constants.js +4 -0
  10. package/dist/src/autonat/constants.js.map +1 -0
  11. package/dist/src/autonat/index.d.ts +64 -0
  12. package/dist/src/autonat/index.d.ts.map +1 -0
  13. package/dist/src/autonat/index.js +417 -0
  14. package/dist/src/autonat/index.js.map +1 -0
  15. package/dist/src/autonat/pb/index.d.ts +57 -0
  16. package/dist/src/autonat/pb/index.d.ts.map +1 -0
  17. package/dist/src/autonat/pb/index.js +250 -0
  18. package/dist/src/autonat/pb/index.js.map +1 -0
  19. package/dist/src/circuit/constants.d.ts +31 -6
  20. package/dist/src/circuit/constants.d.ts.map +1 -1
  21. package/dist/src/circuit/constants.js +37 -7
  22. package/dist/src/circuit/constants.js.map +1 -1
  23. package/dist/src/circuit/index.d.ts +16 -61
  24. package/dist/src/circuit/index.d.ts.map +1 -1
  25. package/dist/src/circuit/index.js +2 -68
  26. package/dist/src/circuit/index.js.map +1 -1
  27. package/dist/src/circuit/pb/index.d.ts +83 -43
  28. package/dist/src/circuit/pb/index.d.ts.map +1 -1
  29. package/dist/src/circuit/pb/index.js +363 -127
  30. package/dist/src/circuit/pb/index.js.map +1 -1
  31. package/dist/src/circuit/server/advert-service.d.ts +43 -0
  32. package/dist/src/circuit/server/advert-service.d.ts.map +1 -0
  33. package/dist/src/circuit/server/advert-service.js +69 -0
  34. package/dist/src/circuit/server/advert-service.js.map +1 -0
  35. package/dist/src/circuit/server/index.d.ts +60 -0
  36. package/dist/src/circuit/server/index.d.ts.map +1 -0
  37. package/dist/src/circuit/server/index.js +287 -0
  38. package/dist/src/circuit/server/index.js.map +1 -0
  39. package/dist/src/circuit/server/reservation-store.d.ts +49 -0
  40. package/dist/src/circuit/server/reservation-store.d.ts.map +1 -0
  41. package/dist/src/circuit/server/reservation-store.js +57 -0
  42. package/dist/src/circuit/server/reservation-store.js.map +1 -0
  43. package/dist/src/circuit/server/reservation-voucher.d.ts +18 -0
  44. package/dist/src/circuit/server/reservation-voucher.d.ts.map +1 -0
  45. package/dist/src/circuit/server/reservation-voucher.js +33 -0
  46. package/dist/src/circuit/server/reservation-voucher.js.map +1 -0
  47. package/dist/src/circuit/transport/discovery.d.ts +45 -0
  48. package/dist/src/circuit/transport/discovery.d.ts.map +1 -0
  49. package/dist/src/circuit/transport/discovery.js +82 -0
  50. package/dist/src/circuit/transport/discovery.js.map +1 -0
  51. package/dist/src/circuit/transport/index.d.ts +33 -0
  52. package/dist/src/circuit/transport/index.d.ts.map +1 -0
  53. package/dist/src/circuit/transport/index.js +225 -0
  54. package/dist/src/circuit/transport/index.js.map +1 -0
  55. package/dist/src/circuit/transport/listener.d.ts +9 -0
  56. package/dist/src/circuit/transport/listener.d.ts.map +1 -0
  57. package/dist/src/circuit/transport/listener.js +76 -0
  58. package/dist/src/circuit/transport/listener.js.map +1 -0
  59. package/dist/src/circuit/transport/reservation-store.d.ts +60 -0
  60. package/dist/src/circuit/transport/reservation-store.d.ts.map +1 -0
  61. package/dist/src/circuit/transport/reservation-store.js +165 -0
  62. package/dist/src/circuit/transport/reservation-store.js.map +1 -0
  63. package/dist/src/circuit/utils.d.ts +7 -0
  64. package/dist/src/circuit/utils.d.ts.map +1 -1
  65. package/dist/src/circuit/utils.js +87 -0
  66. package/dist/src/circuit/utils.js.map +1 -1
  67. package/dist/src/components.d.ts +2 -1
  68. package/dist/src/components.d.ts.map +1 -1
  69. package/dist/src/components.js +13 -13
  70. package/dist/src/components.js.map +1 -1
  71. package/dist/src/config.d.ts.map +1 -1
  72. package/dist/src/config.js +21 -25
  73. package/dist/src/config.js.map +1 -1
  74. package/dist/src/connection/index.d.ts +2 -2
  75. package/dist/src/connection/index.d.ts.map +1 -1
  76. package/dist/src/connection/index.js +4 -4
  77. package/dist/src/connection/index.js.map +1 -1
  78. package/dist/src/connection-manager/auto-dialler.d.ts +0 -4
  79. package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
  80. package/dist/src/connection-manager/auto-dialler.js +18 -18
  81. package/dist/src/connection-manager/auto-dialler.js.map +1 -1
  82. package/dist/src/connection-manager/dialer/dial-request.d.ts.map +1 -1
  83. package/dist/src/connection-manager/dialer/dial-request.js +13 -6
  84. package/dist/src/connection-manager/dialer/dial-request.js.map +1 -1
  85. package/dist/src/connection-manager/dialer/index.d.ts +10 -1
  86. package/dist/src/connection-manager/dialer/index.d.ts.map +1 -1
  87. package/dist/src/connection-manager/dialer/index.js +24 -9
  88. package/dist/src/connection-manager/dialer/index.js.map +1 -1
  89. package/dist/src/connection-manager/index.d.ts +1 -4
  90. package/dist/src/connection-manager/index.d.ts.map +1 -1
  91. package/dist/src/connection-manager/index.js +8 -5
  92. package/dist/src/connection-manager/index.js.map +1 -1
  93. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  94. package/dist/src/connection-manager/latency-monitor.js +1 -1
  95. package/dist/src/connection-manager/latency-monitor.js.map +1 -1
  96. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  97. package/dist/src/content-routing/index.d.ts +6 -4
  98. package/dist/src/content-routing/index.d.ts.map +1 -1
  99. package/dist/src/content-routing/index.js +9 -9
  100. package/dist/src/content-routing/index.js.map +1 -1
  101. package/dist/src/content-routing/utils.d.ts +3 -3
  102. package/dist/src/content-routing/utils.d.ts.map +1 -1
  103. package/dist/src/content-routing/utils.js +2 -2
  104. package/dist/src/content-routing/utils.js.map +1 -1
  105. package/dist/src/dht/dht-content-routing.d.ts +2 -1
  106. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  107. package/dist/src/dht/dht-content-routing.js +2 -2
  108. package/dist/src/dht/dht-content-routing.js.map +1 -1
  109. package/dist/src/dht/dht-peer-routing.d.ts +3 -2
  110. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  111. package/dist/src/dht/dht-peer-routing.js +2 -2
  112. package/dist/src/dht/dht-peer-routing.js.map +1 -1
  113. package/dist/src/dht/dummy-dht.d.ts +1 -1
  114. package/dist/src/dht/dummy-dht.d.ts.map +1 -1
  115. package/dist/src/dht/dummy-dht.js +12 -12
  116. package/dist/src/dht/dummy-dht.js.map +1 -1
  117. package/dist/src/errors.d.ts +2 -1
  118. package/dist/src/errors.d.ts.map +1 -1
  119. package/dist/src/errors.js +1 -0
  120. package/dist/src/errors.js.map +1 -1
  121. package/dist/src/fetch/index.d.ts.map +1 -1
  122. package/dist/src/fetch/index.js +6 -6
  123. package/dist/src/fetch/index.js.map +1 -1
  124. package/dist/src/fetch/pb/proto.d.ts +3 -3
  125. package/dist/src/fetch/pb/proto.d.ts.map +1 -1
  126. package/dist/src/fetch/pb/proto.js +4 -3
  127. package/dist/src/fetch/pb/proto.js.map +1 -1
  128. package/dist/src/get-peer.js +2 -2
  129. package/dist/src/get-peer.js.map +1 -1
  130. package/dist/src/identify/index.d.ts +3 -1
  131. package/dist/src/identify/index.d.ts.map +1 -1
  132. package/dist/src/identify/index.js +19 -14
  133. package/dist/src/identify/index.js.map +1 -1
  134. package/dist/src/identify/pb/message.d.ts +2 -2
  135. package/dist/src/identify/pb/message.d.ts.map +1 -1
  136. package/dist/src/identify/pb/message.js +1 -0
  137. package/dist/src/identify/pb/message.js.map +1 -1
  138. package/dist/src/index.d.ts +14 -8
  139. package/dist/src/index.d.ts.map +1 -1
  140. package/dist/src/index.js.map +1 -1
  141. package/dist/src/insecure/index.d.ts.map +1 -1
  142. package/dist/src/insecure/index.js.map +1 -1
  143. package/dist/src/insecure/pb/proto.d.ts +3 -3
  144. package/dist/src/insecure/pb/proto.d.ts.map +1 -1
  145. package/dist/src/insecure/pb/proto.js +4 -5
  146. package/dist/src/insecure/pb/proto.js.map +1 -1
  147. package/dist/src/libp2p.d.ts +7 -3
  148. package/dist/src/libp2p.d.ts.map +1 -1
  149. package/dist/src/libp2p.js +35 -35
  150. package/dist/src/libp2p.js.map +1 -1
  151. package/dist/src/nat-manager.d.ts.map +1 -1
  152. package/dist/src/nat-manager.js +5 -3
  153. package/dist/src/nat-manager.js.map +1 -1
  154. package/dist/src/peer-record-updater.d.ts.map +1 -1
  155. package/dist/src/peer-routing.d.ts.map +1 -1
  156. package/dist/src/peer-routing.js +5 -5
  157. package/dist/src/peer-routing.js.map +1 -1
  158. package/dist/src/ping/index.d.ts.map +1 -1
  159. package/dist/src/ping/index.js +2 -2
  160. package/dist/src/ping/index.js.map +1 -1
  161. package/dist/src/pnet/crypto.d.ts +1 -1
  162. package/dist/src/pnet/crypto.d.ts.map +1 -1
  163. package/dist/src/pnet/crypto.js +1 -1
  164. package/dist/src/pnet/crypto.js.map +1 -1
  165. package/dist/src/pnet/index.js +3 -3
  166. package/dist/src/pnet/index.js.map +1 -1
  167. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  168. package/dist/src/pubsub/dummy-pubsub.js +9 -9
  169. package/dist/src/pubsub/dummy-pubsub.js.map +1 -1
  170. package/dist/src/registrar.d.ts.map +1 -1
  171. package/dist/src/registrar.js +4 -4
  172. package/dist/src/registrar.js.map +1 -1
  173. package/dist/src/transport-manager.d.ts.map +1 -1
  174. package/dist/src/transport-manager.js +8 -9
  175. package/dist/src/transport-manager.js.map +1 -1
  176. package/dist/src/upgrader.d.ts +2 -1
  177. package/dist/src/upgrader.d.ts.map +1 -1
  178. package/dist/src/upgrader.js +38 -33
  179. package/dist/src/upgrader.js.map +1 -1
  180. package/dist/typedoc-urls.json +19 -6
  181. package/package.json +36 -33
  182. package/src/address-manager/index.ts +62 -35
  183. package/src/autonat/constants.ts +4 -0
  184. package/src/autonat/index.ts +567 -0
  185. package/src/autonat/pb/index.proto +35 -0
  186. package/src/autonat/pb/index.ts +320 -0
  187. package/src/circuit/constants.ts +48 -7
  188. package/src/circuit/index.ts +17 -129
  189. package/src/circuit/pb/index.proto +57 -32
  190. package/src/circuit/pb/index.ts +448 -138
  191. package/src/circuit/server/advert-service.ts +108 -0
  192. package/src/circuit/server/index.ts +421 -0
  193. package/src/circuit/server/reservation-store.ts +111 -0
  194. package/src/circuit/server/reservation-voucher.ts +51 -0
  195. package/src/circuit/transport/discovery.ts +127 -0
  196. package/src/circuit/transport/index.ts +325 -0
  197. package/src/circuit/transport/listener.ts +99 -0
  198. package/src/circuit/transport/reservation-store.ts +249 -0
  199. package/src/circuit/utils.ts +108 -0
  200. package/src/components.ts +22 -21
  201. package/src/config.ts +21 -25
  202. package/src/connection/index.ts +10 -10
  203. package/src/connection-manager/auto-dialler.ts +36 -40
  204. package/src/connection-manager/dialer/dial-request.ts +13 -6
  205. package/src/connection-manager/dialer/index.ts +34 -15
  206. package/src/connection-manager/index.ts +22 -23
  207. package/src/connection-manager/latency-monitor.ts +9 -9
  208. package/src/connection-manager/visibility-change-emitter.ts +4 -4
  209. package/src/content-routing/index.ts +18 -16
  210. package/src/content-routing/utils.ts +5 -5
  211. package/src/dht/dht-content-routing.ts +5 -4
  212. package/src/dht/dht-peer-routing.ts +5 -4
  213. package/src/dht/dummy-dht.ts +13 -13
  214. package/src/errors.ts +2 -1
  215. package/src/fetch/index.ts +13 -13
  216. package/src/fetch/pb/proto.ts +8 -7
  217. package/src/get-peer.ts +3 -3
  218. package/src/identify/index.ts +29 -24
  219. package/src/identify/pb/message.ts +3 -2
  220. package/src/index.ts +15 -8
  221. package/src/insecure/index.ts +2 -1
  222. package/src/insecure/pb/proto.ts +8 -9
  223. package/src/libp2p.ts +52 -46
  224. package/src/nat-manager.ts +11 -9
  225. package/src/peer-record-updater.ts +4 -4
  226. package/src/peer-routing.ts +9 -9
  227. package/src/ping/index.ts +6 -6
  228. package/src/pnet/crypto.ts +3 -3
  229. package/src/pnet/index.ts +3 -3
  230. package/src/pnet/key-generator.ts +1 -1
  231. package/src/pubsub/dummy-pubsub.ts +9 -9
  232. package/src/registrar.ts +12 -12
  233. package/src/transport-manager.ts +17 -18
  234. package/src/upgrader.ts +43 -42
  235. package/src/version.ts +1 -1
  236. package/dist/src/circuit/auto-relay.d.ts +0 -46
  237. package/dist/src/circuit/auto-relay.d.ts.map +0 -1
  238. package/dist/src/circuit/auto-relay.js +0 -220
  239. package/dist/src/circuit/auto-relay.js.map +0 -1
  240. package/dist/src/circuit/circuit/hop.d.ts +0 -42
  241. package/dist/src/circuit/circuit/hop.d.ts.map +0 -1
  242. package/dist/src/circuit/circuit/hop.js +0 -142
  243. package/dist/src/circuit/circuit/hop.js.map +0 -1
  244. package/dist/src/circuit/circuit/stop.d.ts +0 -24
  245. package/dist/src/circuit/circuit/stop.d.ts.map +0 -1
  246. package/dist/src/circuit/circuit/stop.js +0 -51
  247. package/dist/src/circuit/circuit/stop.js.map +0 -1
  248. package/dist/src/circuit/circuit/stream-handler.d.ts +0 -40
  249. package/dist/src/circuit/circuit/stream-handler.d.ts.map +0 -1
  250. package/dist/src/circuit/circuit/stream-handler.js +0 -59
  251. package/dist/src/circuit/circuit/stream-handler.js.map +0 -1
  252. package/dist/src/circuit/circuit/utils.d.ts +0 -7
  253. package/dist/src/circuit/circuit/utils.d.ts.map +0 -1
  254. package/dist/src/circuit/circuit/utils.js +0 -43
  255. package/dist/src/circuit/circuit/utils.js.map +0 -1
  256. package/dist/src/circuit/listener.d.ts +0 -9
  257. package/dist/src/circuit/listener.d.ts.map +0 -1
  258. package/dist/src/circuit/listener.js +0 -62
  259. package/dist/src/circuit/listener.js.map +0 -1
  260. package/dist/src/circuit/multicodec.d.ts +0 -2
  261. package/dist/src/circuit/multicodec.d.ts.map +0 -1
  262. package/dist/src/circuit/multicodec.js +0 -2
  263. package/dist/src/circuit/multicodec.js.map +0 -1
  264. package/dist/src/circuit/transport.d.ts +0 -51
  265. package/dist/src/circuit/transport.d.ts.map +0 -1
  266. package/dist/src/circuit/transport.js +0 -223
  267. package/dist/src/circuit/transport.js.map +0 -1
  268. package/dist/src/keychain/cms.d.ts +0 -33
  269. package/dist/src/keychain/cms.d.ts.map +0 -1
  270. package/dist/src/keychain/cms.js +0 -129
  271. package/dist/src/keychain/cms.js.map +0 -1
  272. package/dist/src/keychain/index.d.ts +0 -151
  273. package/dist/src/keychain/index.d.ts.map +0 -1
  274. package/dist/src/keychain/index.js +0 -519
  275. package/dist/src/keychain/index.js.map +0 -1
  276. package/dist/src/keychain/util.d.ts +0 -21
  277. package/dist/src/keychain/util.d.ts.map +0 -1
  278. package/dist/src/keychain/util.js +0 -79
  279. package/dist/src/keychain/util.js.map +0 -1
  280. package/src/circuit/IMPLEMENTATION_NOTES.md +0 -128
  281. package/src/circuit/README.md +0 -111
  282. package/src/circuit/auto-relay.ts +0 -292
  283. package/src/circuit/circuit/hop.ts +0 -220
  284. package/src/circuit/circuit/stop.ts +0 -83
  285. package/src/circuit/circuit/stream-handler.ts +0 -87
  286. package/src/circuit/circuit/utils.ts +0 -44
  287. package/src/circuit/listener.ts +0 -83
  288. package/src/circuit/multicodec.ts +0 -2
  289. package/src/circuit/transport.ts +0 -278
  290. package/src/keychain/README.md +0 -55
  291. package/src/keychain/cms.ts +0 -150
  292. package/src/keychain/doc/private-key.png +0 -0
  293. package/src/keychain/doc/private-key.xml +0 -1
  294. package/src/keychain/index.ts +0 -629
  295. package/src/keychain/util.ts +0 -82
@@ -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
@@ -16,16 +17,56 @@ export const ADVERTISE_TTL = 30 * minute
16
17
  export const CIRCUIT_PROTO_CODE = 290
17
18
 
18
19
  /**
19
- * PeerStore metadaBook key for HOP relay service
20
+ * Relay HOP relay service namespace for discovery
20
21
  */
21
- export const HOP_METADATA_KEY = 'hop_relay'
22
+ export const RELAY_RENDEZVOUS_NS = '/libp2p/relay'
22
23
 
23
24
  /**
24
- * PeerStore metadaBook value for HOP relay service
25
+ * The maximum number of relay reservations the relay server will accept
25
26
  */
26
- export const HOP_METADATA_VALUE = 'true'
27
+ export const DEFAULT_MAX_RESERVATION_STORE_SIZE = 15
27
28
 
28
29
  /**
29
- * Relay HOP relay service namespace for discovery
30
+ * How often to check for reservation expiry
30
31
  */
31
- export const RELAY_RENDEZVOUS_NS = '/libp2p/relay'
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'
44
+
45
+ // circuit v2 connection limits
46
+ // https://github.com/libp2p/go-libp2p/blob/master/p2p/protocol/circuitv2/relay/resources.go#L61-L66
47
+
48
+ // 2 min is the default connection duration
49
+ export const DEFAULT_DURATION_LIMIT = 2 * minute
50
+
51
+ // 128k is the default data limit
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,135 +1,23 @@
1
- import { logger } from '@libp2p/logger'
2
- import { codes } from '../errors.js'
3
- import {
4
- setDelayedInterval,
5
- clearDelayedInterval
6
- // @ts-expect-error set-delayed-interval does not export types
7
- } from 'set-delayed-interval'
8
- import { AutoRelay } from './auto-relay.js'
9
- import { namespaceToCid } from './utils.js'
10
- import {
11
- RELAY_RENDEZVOUS_NS
12
- } from './constants.js'
13
- import type { AddressSorter, PeerStore } from '@libp2p/interface-peer-store'
14
- import type { Startable } from '@libp2p/interfaces/startable'
15
- import type { ContentRouting } from '@libp2p/interface-content-routing'
16
- import type { ConnectionManager } from '@libp2p/interface-connection-manager'
17
- import type { TransportManager } from '@libp2p/interface-transport'
18
- import type { PeerId } from '@libp2p/interface-peer-id'
19
- import type { StreamHandlerOptions } from '@libp2p/interface-registrar'
20
-
21
- export interface RelayConfig extends StreamHandlerOptions {
22
- enabled: boolean
23
- advertise: RelayAdvertiseConfig
24
- hop: HopConfig
25
- autoRelay: AutoRelayConfig
26
- }
27
-
28
- export interface HopConfig {
29
- enabled?: boolean
30
- active?: boolean
31
- timeout: number
32
- }
33
-
34
- const log = logger('libp2p:relay')
35
-
36
- export interface RelayAdvertiseConfig {
37
- bootDelay?: number
38
- enabled?: boolean
39
- ttl?: number
40
- }
41
-
42
- export interface AutoRelayConfig {
43
- enabled?: boolean
44
-
45
- /**
46
- * maximum number of relays to listen
47
- */
48
- maxListeners: number
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
49
10
  }
50
11
 
51
- export interface RelayInit extends RelayConfig {
52
- addressSorter?: AddressSorter
12
+ export interface CircuitRelayServiceEvents {
13
+ 'relay:reservation': CustomEvent<RelayReservation>
14
+ 'relay:advert:success': CustomEvent<unknown>
15
+ 'relay:advert:error': CustomEvent<Error>
53
16
  }
54
17
 
55
- export interface RelayComponents {
56
- peerId: PeerId
57
- contentRouting: ContentRouting
58
- peerStore: PeerStore
59
- connectionManager: ConnectionManager
60
- transportManager: TransportManager
18
+ export interface CircuitRelayService extends EventEmitter<CircuitRelayServiceEvents> {
19
+ reservations: PeerMap<RelayReservation>
61
20
  }
62
21
 
63
- export class Relay implements Startable {
64
- private readonly components: RelayComponents
65
- private readonly init: RelayInit
66
- // @ts-expect-error this field isn't used anywhere?
67
- private readonly autoRelay?: AutoRelay
68
- private timeout?: any
69
- private started: boolean
70
-
71
- /**
72
- * Creates an instance of Relay
73
- */
74
- constructor (components: RelayComponents, init: RelayInit) {
75
- this.components = components
76
- // Create autoRelay if enabled
77
- this.autoRelay = init.autoRelay?.enabled !== false
78
- ? new AutoRelay(components, {
79
- addressSorter: init.addressSorter,
80
- ...init.autoRelay
81
- })
82
- : undefined
83
-
84
- this.started = false
85
- this.init = init
86
- this._advertiseService = this._advertiseService.bind(this)
87
- }
88
-
89
- isStarted () {
90
- return this.started
91
- }
92
-
93
- /**
94
- * Start Relay service
95
- */
96
- async start () {
97
- // Advertise service if HOP enabled
98
- if (this.init.hop.enabled !== false && this.init.advertise.enabled !== false) {
99
- this.timeout = setDelayedInterval(
100
- this._advertiseService, this.init.advertise.ttl, this.init.advertise.bootDelay
101
- )
102
- }
103
-
104
- this.started = true
105
- }
106
-
107
- /**
108
- * Stop Relay service
109
- */
110
- async stop () {
111
- if (this.timeout != null) {
112
- clearDelayedInterval(this.timeout)
113
- }
114
-
115
- this.started = false
116
- }
117
-
118
- /**
119
- * Advertise hop relay service in the network.
120
- */
121
- async _advertiseService () {
122
- try {
123
- const cid = await namespaceToCid(RELAY_RENDEZVOUS_NS)
124
- await this.components.contentRouting.provide(cid)
125
- } catch (err: any) {
126
- if (err.code === codes.ERR_NO_ROUTERS_AVAILABLE) {
127
- log.error('a content router, such as a DHT, must be provided in order to advertise the relay service', err)
128
- // Stop the advertise
129
- await this.stop()
130
- } else {
131
- log.error(err)
132
- }
133
- }
134
- }
135
- }
22
+ export { circuitRelayServer } from './server/index.js'
23
+ export { circuitRelayTransport } from './transport/index.js'
@@ -1,42 +1,67 @@
1
1
  syntax = "proto3";
2
2
 
3
- message CircuitRelay {
4
-
5
- enum Status {
6
- SUCCESS = 100;
7
- HOP_SRC_ADDR_TOO_LONG = 220;
8
- HOP_DST_ADDR_TOO_LONG = 221;
9
- HOP_SRC_MULTIADDR_INVALID = 250;
10
- HOP_DST_MULTIADDR_INVALID = 251;
11
- HOP_NO_CONN_TO_DST = 260;
12
- HOP_CANT_DIAL_DST = 261;
13
- HOP_CANT_OPEN_DST_STREAM = 262;
14
- HOP_CANT_SPEAK_RELAY = 270;
15
- HOP_CANT_RELAY_TO_SELF = 280;
16
- STOP_SRC_ADDR_TOO_LONG = 320;
17
- STOP_DST_ADDR_TOO_LONG = 321;
18
- STOP_SRC_MULTIADDR_INVALID = 350;
19
- STOP_DST_MULTIADDR_INVALID = 351;
20
- STOP_RELAY_REFUSED = 390;
21
- MALFORMED_MESSAGE = 400;
3
+ message HopMessage {
4
+ enum Type {
5
+ RESERVE = 0;
6
+ CONNECT = 1;
7
+ STATUS = 2;
22
8
  }
23
9
 
24
- enum Type { // RPC identifier, either HOP, STOP or STATUS
25
- HOP = 1;
26
- STOP = 2;
27
- STATUS = 3;
28
- CAN_HOP = 4;
29
- }
10
+ // the presence of this field is enforced at application level
11
+ optional Type type = 1;
12
+
13
+ optional Peer peer = 2;
14
+ optional Reservation reservation = 3;
15
+ optional Limit limit = 4;
16
+
17
+ optional Status status = 5;
18
+ }
30
19
 
31
- message Peer {
32
- required bytes id = 1; // peer id
33
- repeated bytes addrs = 2; // peer's known addresses
20
+ message StopMessage {
21
+ enum Type {
22
+ CONNECT = 0;
23
+ STATUS = 1;
34
24
  }
35
25
 
36
- optional Type type = 1; // Type of the message
26
+ // the presence of this field is enforced at application level
27
+ optional Type type = 1;
28
+
29
+ optional Peer peer = 2;
30
+ optional Limit limit = 3;
31
+
32
+ optional Status status = 4;
33
+ }
34
+
35
+ message Peer {
36
+ bytes id = 1;
37
+ repeated bytes addrs = 2;
38
+ }
39
+
40
+ message Reservation {
41
+ uint64 expire = 1; // Unix expiration time (UTC)
42
+ repeated bytes addrs = 2; // relay addrs for reserving peer
43
+ optional bytes voucher = 3; // reservation voucher
44
+ }
37
45
 
38
- optional Peer srcPeer = 2; // srcPeer and dstPeer are used when Type is HOP or STATUS
39
- optional Peer dstPeer = 3;
46
+ message Limit {
47
+ optional uint32 duration = 1; // seconds
48
+ optional uint64 data = 2; // bytes
49
+ }
50
+
51
+ enum Status {
52
+ UNUSED = 0;
53
+ OK = 100;
54
+ RESERVATION_REFUSED = 200;
55
+ RESOURCE_LIMIT_EXCEEDED = 201;
56
+ PERMISSION_DENIED = 202;
57
+ CONNECTION_FAILED = 203;
58
+ NO_RESERVATION = 204;
59
+ MALFORMED_MESSAGE = 400;
60
+ UNEXPECTED_MESSAGE = 401;
61
+ }
40
62
 
41
- optional Status code = 4; // Status code, used when Type is STATUS
63
+ message ReservationVoucher {
64
+ bytes relay = 1;
65
+ bytes peer = 2;
66
+ uint64 expiration = 3;
42
67
  }