libp2p 0.36.2 → 0.37.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 (430) hide show
  1. package/LICENSE +3 -21
  2. package/README.md +13 -10
  3. package/dist/src/address-manager/index.d.ts +34 -52
  4. package/dist/src/address-manager/index.d.ts.map +1 -1
  5. package/dist/src/address-manager/index.js +81 -0
  6. package/dist/src/address-manager/index.js.map +1 -0
  7. package/dist/src/circuit/auto-relay.d.ts +24 -85
  8. package/dist/src/circuit/auto-relay.d.ts.map +1 -1
  9. package/dist/src/circuit/auto-relay.js +216 -0
  10. package/dist/src/circuit/auto-relay.js.map +1 -0
  11. package/dist/src/circuit/circuit/hop.d.ts +26 -53
  12. package/dist/src/circuit/circuit/hop.d.ts.map +1 -1
  13. package/dist/src/circuit/circuit/hop.js +138 -0
  14. package/dist/src/circuit/circuit/hop.js.map +1 -0
  15. package/dist/src/circuit/circuit/stop.d.ts +18 -10
  16. package/dist/src/circuit/circuit/stop.d.ts.map +1 -1
  17. package/dist/src/circuit/circuit/stop.js +49 -0
  18. package/dist/src/circuit/circuit/stop.js.map +1 -0
  19. package/dist/src/circuit/circuit/stream-handler.d.ts +19 -38
  20. package/dist/src/circuit/circuit/stream-handler.d.ts.map +1 -1
  21. package/dist/src/circuit/circuit/stream-handler.js +59 -0
  22. package/dist/src/circuit/circuit/stream-handler.js.map +1 -0
  23. package/dist/src/circuit/circuit/utils.d.ts +3 -6
  24. package/dist/src/circuit/circuit/utils.d.ts.map +1 -1
  25. package/dist/src/circuit/circuit/utils.js +43 -0
  26. package/dist/src/circuit/circuit/utils.js.map +1 -0
  27. package/dist/src/circuit/constants.d.ts +24 -6
  28. package/dist/src/circuit/constants.d.ts.map +1 -1
  29. package/dist/src/circuit/constants.js +26 -0
  30. package/dist/src/circuit/constants.js.map +1 -0
  31. package/dist/src/circuit/index.d.ts +41 -74
  32. package/dist/src/circuit/index.d.ts.map +1 -1
  33. package/dist/src/circuit/index.js +69 -0
  34. package/dist/src/circuit/index.js.map +1 -0
  35. package/dist/src/circuit/listener.d.ts +8 -3
  36. package/dist/src/circuit/listener.d.ts.map +1 -1
  37. package/dist/src/circuit/listener.js +62 -0
  38. package/dist/src/circuit/listener.js.map +1 -0
  39. package/dist/src/circuit/multicodec.d.ts +1 -1
  40. package/dist/src/circuit/multicodec.d.ts.map +1 -1
  41. package/dist/src/circuit/multicodec.js +2 -0
  42. package/dist/src/circuit/multicodec.js.map +1 -0
  43. package/dist/src/circuit/pb/index.d.ts +52 -0
  44. package/dist/src/circuit/pb/index.d.ts.map +1 -0
  45. package/dist/src/circuit/pb/index.js +98 -0
  46. package/dist/src/circuit/pb/index.js.map +1 -0
  47. package/dist/src/circuit/transport.d.ts +18 -78
  48. package/dist/src/circuit/transport.d.ts.map +1 -1
  49. package/dist/src/circuit/transport.js +192 -0
  50. package/dist/src/circuit/transport.js.map +1 -0
  51. package/dist/src/circuit/utils.d.ts +5 -2
  52. package/dist/src/circuit/utils.d.ts.map +1 -1
  53. package/dist/src/circuit/utils.js +11 -0
  54. package/dist/src/circuit/utils.js.map +1 -0
  55. package/dist/src/config.d.ts +3 -85
  56. package/dist/src/config.d.ts.map +1 -1
  57. package/dist/src/config.js +91 -0
  58. package/dist/src/config.js.map +1 -0
  59. package/dist/src/connection-manager/auto-dialler.d.ts +24 -41
  60. package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
  61. package/dist/src/connection-manager/auto-dialler.js +105 -0
  62. package/dist/src/connection-manager/auto-dialler.js.map +1 -0
  63. package/dist/src/connection-manager/dialer/auto-dialer.d.ts +16 -0
  64. package/dist/src/connection-manager/dialer/auto-dialer.d.ts.map +1 -0
  65. package/dist/src/connection-manager/dialer/auto-dialer.js +37 -0
  66. package/dist/src/connection-manager/dialer/auto-dialer.js.map +1 -0
  67. package/dist/src/connection-manager/dialer/dial-request.d.ts +27 -0
  68. package/dist/src/connection-manager/dialer/dial-request.d.ts.map +1 -0
  69. package/dist/src/connection-manager/dialer/dial-request.js +83 -0
  70. package/dist/src/connection-manager/dialer/dial-request.js.map +1 -0
  71. package/dist/src/connection-manager/dialer/index.d.ts +104 -0
  72. package/dist/src/connection-manager/dialer/index.d.ts.map +1 -0
  73. package/dist/src/connection-manager/dialer/index.js +267 -0
  74. package/dist/src/connection-manager/dialer/index.js.map +1 -0
  75. package/dist/src/connection-manager/index.d.ts +102 -136
  76. package/dist/src/connection-manager/index.d.ts.map +1 -1
  77. package/dist/src/connection-manager/index.js +333 -0
  78. package/dist/src/connection-manager/index.js.map +1 -0
  79. package/dist/src/connection-manager/latency-monitor.d.ts +72 -97
  80. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  81. package/dist/src/connection-manager/latency-monitor.js +220 -0
  82. package/dist/src/connection-manager/latency-monitor.js.map +1 -0
  83. package/dist/src/connection-manager/visibility-change-emitter.d.ts +15 -16
  84. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  85. package/dist/src/connection-manager/visibility-change-emitter.js +118 -0
  86. package/dist/src/connection-manager/visibility-change-emitter.js.map +1 -0
  87. package/dist/src/constants.d.ts +22 -10
  88. package/dist/src/constants.d.ts.map +1 -1
  89. package/dist/src/constants.js +27 -0
  90. package/dist/src/constants.js.map +1 -0
  91. package/dist/src/content-routing/index.d.ts +27 -81
  92. package/dist/src/content-routing/index.d.ts.map +1 -1
  93. package/dist/src/content-routing/index.js +99 -0
  94. package/dist/src/content-routing/index.js.map +1 -0
  95. package/dist/src/content-routing/utils.d.ts +6 -49
  96. package/dist/src/content-routing/utils.d.ts.map +1 -1
  97. package/dist/src/content-routing/utils.js +42 -0
  98. package/dist/src/content-routing/utils.js.map +1 -0
  99. package/dist/src/dht/dht-content-routing.d.ts +10 -24
  100. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  101. package/dist/src/dht/dht-content-routing.js +32 -0
  102. package/dist/src/dht/dht-content-routing.js.map +1 -0
  103. package/dist/src/dht/dht-peer-routing.d.ts +9 -24
  104. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  105. package/dist/src/dht/dht-peer-routing.js +26 -0
  106. package/dist/src/dht/dht-peer-routing.js.map +1 -0
  107. package/dist/src/dht/dummy-dht.d.ts +20 -0
  108. package/dist/src/dht/dummy-dht.d.ts.map +1 -0
  109. package/dist/src/dht/dummy-dht.js +46 -0
  110. package/dist/src/dht/dummy-dht.js.map +1 -0
  111. package/dist/src/errors.d.ts +70 -63
  112. package/dist/src/errors.d.ts.map +1 -1
  113. package/dist/src/errors.js +75 -0
  114. package/dist/src/errors.js.map +1 -0
  115. package/dist/src/fetch/constants.d.ts +1 -1
  116. package/dist/src/fetch/constants.d.ts.map +1 -1
  117. package/dist/src/fetch/constants.js +3 -0
  118. package/dist/src/fetch/constants.js.map +1 -0
  119. package/dist/src/fetch/index.d.ts +30 -49
  120. package/dist/src/fetch/index.d.ts.map +1 -1
  121. package/dist/src/fetch/index.js +129 -0
  122. package/dist/src/fetch/index.js.map +1 -0
  123. package/dist/src/fetch/pb/proto.d.ts +27 -0
  124. package/dist/src/fetch/pb/proto.d.ts.map +1 -0
  125. package/dist/src/fetch/pb/proto.js +50 -0
  126. package/dist/src/fetch/pb/proto.js.map +1 -0
  127. package/dist/src/get-peer.d.ts +4 -11
  128. package/dist/src/get-peer.d.ts.map +1 -1
  129. package/dist/src/get-peer.js +43 -0
  130. package/dist/src/get-peer.js.map +1 -0
  131. package/dist/src/identify/consts.d.ts +9 -9
  132. package/dist/src/identify/consts.d.ts.map +1 -1
  133. package/dist/src/identify/consts.js +11 -0
  134. package/dist/src/identify/consts.js.map +1 -0
  135. package/dist/src/identify/index.d.ts +42 -96
  136. package/dist/src/identify/index.d.ts.map +1 -1
  137. package/dist/src/identify/index.js +322 -0
  138. package/dist/src/identify/index.js.map +1 -0
  139. package/dist/src/identify/pb/message.d.ts +16 -0
  140. package/dist/src/identify/pb/message.d.ts.map +1 -0
  141. package/dist/src/identify/pb/message.js +24 -0
  142. package/dist/src/identify/pb/message.js.map +1 -0
  143. package/dist/src/index.d.ts +150 -496
  144. package/dist/src/index.d.ts.map +1 -1
  145. package/dist/src/index.js +9 -0
  146. package/dist/src/index.js.map +1 -0
  147. package/dist/src/insecure/index.d.ts +9 -0
  148. package/dist/src/insecure/index.d.ts.map +1 -0
  149. package/dist/src/insecure/index.js +81 -0
  150. package/dist/src/insecure/index.js.map +1 -0
  151. package/dist/src/insecure/pb/proto.d.ts +29 -0
  152. package/dist/src/insecure/pb/proto.d.ts.map +1 -0
  153. package/dist/src/insecure/pb/proto.js +53 -0
  154. package/dist/src/insecure/pb/proto.js.map +1 -0
  155. package/dist/src/keychain/cms.d.ts +6 -14
  156. package/dist/src/keychain/cms.d.ts.map +1 -1
  157. package/dist/src/keychain/cms.js +129 -0
  158. package/dist/src/keychain/cms.js.map +1 -0
  159. package/dist/src/keychain/index.d.ts +60 -81
  160. package/dist/src/keychain/index.d.ts.map +1 -1
  161. package/dist/src/keychain/index.js +492 -0
  162. package/dist/src/keychain/index.js.map +1 -0
  163. package/dist/src/keychain/util.d.ts +3 -6
  164. package/dist/src/keychain/util.d.ts.map +1 -1
  165. package/dist/src/keychain/util.js +79 -0
  166. package/dist/src/keychain/util.js.map +1 -0
  167. package/dist/src/libp2p.d.ts +80 -0
  168. package/dist/src/libp2p.d.ts.map +1 -0
  169. package/dist/src/libp2p.js +397 -0
  170. package/dist/src/libp2p.js.map +1 -0
  171. package/dist/src/metrics/index.d.ts +47 -104
  172. package/dist/src/metrics/index.d.ts.map +1 -1
  173. package/dist/src/metrics/index.js +231 -0
  174. package/dist/src/metrics/index.js.map +1 -0
  175. package/dist/src/metrics/moving-average.d.ts +14 -0
  176. package/dist/src/metrics/moving-average.d.ts.map +1 -0
  177. package/dist/src/metrics/moving-average.js +40 -0
  178. package/dist/src/metrics/moving-average.js.map +1 -0
  179. package/dist/src/metrics/stats.d.ts +41 -93
  180. package/dist/src/metrics/stats.d.ts.map +1 -1
  181. package/dist/src/metrics/stats.js +183 -0
  182. package/dist/src/metrics/stats.js.map +1 -0
  183. package/dist/src/nat-manager.d.ts +42 -99
  184. package/dist/src/nat-manager.d.ts.map +1 -1
  185. package/dist/src/nat-manager.js +114 -0
  186. package/dist/src/nat-manager.js.map +1 -0
  187. package/dist/src/peer-record-updater.d.ts +15 -0
  188. package/dist/src/peer-record-updater.d.ts.map +1 -0
  189. package/dist/src/peer-record-updater.js +44 -0
  190. package/dist/src/peer-record-updater.js.map +1 -0
  191. package/dist/src/peer-routing.d.ts +40 -84
  192. package/dist/src/peer-routing.d.ts.map +1 -1
  193. package/dist/src/peer-routing.js +108 -0
  194. package/dist/src/peer-routing.js.map +1 -0
  195. package/dist/src/ping/constants.d.ts +4 -4
  196. package/dist/src/ping/constants.d.ts.map +1 -1
  197. package/dist/src/ping/constants.js +5 -0
  198. package/dist/src/ping/constants.js.map +1 -0
  199. package/dist/src/ping/index.d.ts +17 -31
  200. package/dist/src/ping/index.d.ts.map +1 -1
  201. package/dist/src/ping/index.js +57 -0
  202. package/dist/src/ping/index.js.map +1 -0
  203. package/dist/src/pnet/crypto.d.ts +15 -5
  204. package/dist/src/pnet/crypto.d.ts.map +1 -1
  205. package/dist/src/pnet/crypto.js +60 -0
  206. package/dist/src/pnet/crypto.js.map +1 -0
  207. package/dist/src/pnet/errors.d.ts +5 -5
  208. package/dist/src/pnet/errors.d.ts.map +1 -1
  209. package/dist/src/pnet/errors.js +6 -0
  210. package/dist/src/pnet/errors.js.map +1 -0
  211. package/dist/src/pnet/index.d.ts +12 -20
  212. package/dist/src/pnet/index.d.ts.map +1 -1
  213. package/dist/src/pnet/index.js +67 -0
  214. package/dist/src/pnet/index.js.map +1 -0
  215. package/dist/src/pnet/key-generator.d.ts +3 -7
  216. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  217. package/dist/src/pnet/key-generator.js +25 -0
  218. package/dist/src/pnet/key-generator.js.map +1 -0
  219. package/dist/src/pubsub/dummy-pubsub.d.ts +17 -0
  220. package/dist/src/pubsub/dummy-pubsub.d.ts.map +1 -0
  221. package/dist/src/pubsub/dummy-pubsub.js +37 -0
  222. package/dist/src/pubsub/dummy-pubsub.js.map +1 -0
  223. package/dist/src/registrar.d.ts +26 -65
  224. package/dist/src/registrar.d.ts.map +1 -1
  225. package/dist/src/registrar.js +144 -0
  226. package/dist/src/registrar.js.map +1 -0
  227. package/dist/src/transport-manager.d.ts +36 -82
  228. package/dist/src/transport-manager.d.ts.map +1 -1
  229. package/dist/src/transport-manager.js +223 -0
  230. package/dist/src/transport-manager.js.map +1 -0
  231. package/dist/src/upgrader.d.ts +49 -129
  232. package/dist/src/upgrader.d.ts.map +1 -1
  233. package/dist/src/upgrader.js +402 -0
  234. package/dist/src/upgrader.js.map +1 -0
  235. package/dist/src/version.d.ts +3 -0
  236. package/dist/src/version.d.ts.map +1 -0
  237. package/dist/src/version.js +3 -0
  238. package/dist/src/version.js.map +1 -0
  239. package/package.json +144 -201
  240. package/src/address-manager/index.ts +130 -0
  241. package/src/circuit/README.md +16 -11
  242. package/src/circuit/auto-relay.ts +286 -0
  243. package/src/circuit/circuit/hop.ts +211 -0
  244. package/src/circuit/circuit/stop.ts +78 -0
  245. package/src/circuit/circuit/stream-handler.ts +86 -0
  246. package/src/circuit/circuit/{utils.js → utils.ts} +9 -25
  247. package/src/circuit/constants.ts +31 -0
  248. package/src/circuit/index.ts +120 -0
  249. package/src/circuit/listener.ts +82 -0
  250. package/src/circuit/multicodec.ts +2 -0
  251. package/src/circuit/{protocol → pb}/index.proto +1 -1
  252. package/src/circuit/pb/index.ts +117 -0
  253. package/src/circuit/transport.ts +219 -0
  254. package/src/circuit/utils.ts +12 -0
  255. package/src/config.ts +99 -0
  256. package/src/connection-manager/auto-dialler.ts +154 -0
  257. package/src/connection-manager/dialer/auto-dialer.ts +59 -0
  258. package/src/{dialer/dial-request.js → connection-manager/dialer/dial-request.ts} +60 -51
  259. package/src/connection-manager/dialer/index.ts +382 -0
  260. package/src/connection-manager/index.ts +508 -0
  261. package/src/connection-manager/latency-monitor.ts +319 -0
  262. package/src/connection-manager/{visibility-change-emitter.js → visibility-change-emitter.ts} +48 -38
  263. package/src/constants.ts +31 -0
  264. package/src/content-routing/index.ts +144 -0
  265. package/src/content-routing/utils.ts +54 -0
  266. package/src/dht/dht-content-routing.ts +43 -0
  267. package/src/dht/dht-peer-routing.ts +35 -0
  268. package/src/dht/dummy-dht.ts +60 -0
  269. package/src/errors.ts +73 -0
  270. package/src/fetch/README.md +1 -1
  271. package/src/fetch/constants.ts +3 -0
  272. package/src/fetch/index.ts +167 -0
  273. package/src/fetch/{proto.proto → pb/proto.proto} +0 -0
  274. package/src/fetch/pb/proto.ts +65 -0
  275. package/src/get-peer.ts +57 -0
  276. package/src/identify/consts.ts +13 -0
  277. package/src/identify/index.ts +445 -0
  278. package/src/identify/{message.proto → pb/message.proto} +0 -0
  279. package/src/identify/pb/message.ts +37 -0
  280. package/src/index.ts +220 -0
  281. package/src/insecure/index.ts +101 -0
  282. package/src/insecure/{proto.proto → pb/proto.proto} +0 -0
  283. package/src/insecure/pb/proto.ts +68 -0
  284. package/src/keychain/{cms.js → cms.ts} +62 -58
  285. package/src/keychain/index.ts +587 -0
  286. package/src/keychain/{util.js → util.ts} +7 -17
  287. package/src/libp2p.ts +538 -0
  288. package/src/metrics/index.ts +310 -0
  289. package/src/metrics/moving-average.ts +53 -0
  290. package/src/metrics/stats.ts +238 -0
  291. package/src/nat-manager.ts +194 -0
  292. package/src/peer-record-updater.ts +55 -0
  293. package/src/peer-routing.ts +186 -0
  294. package/src/ping/README.md +1 -1
  295. package/src/ping/constants.ts +5 -0
  296. package/src/ping/index.ts +84 -0
  297. package/src/pnet/README.md +2 -2
  298. package/src/pnet/crypto.ts +67 -0
  299. package/src/pnet/errors.ts +5 -0
  300. package/src/pnet/index.ts +97 -0
  301. package/src/pnet/key-generator.ts +28 -0
  302. package/src/pubsub/dummy-pubsub.ts +51 -0
  303. package/src/registrar.ts +189 -0
  304. package/src/transport-manager.ts +281 -0
  305. package/src/upgrader.ts +499 -0
  306. package/src/version.ts +3 -0
  307. package/dist/index.min.js +0 -55
  308. package/dist/src/circuit/protocol/index.d.ts +0 -173
  309. package/dist/src/dialer/dial-request.d.ts +0 -55
  310. package/dist/src/dialer/dial-request.d.ts.map +0 -1
  311. package/dist/src/dialer/index.d.ts +0 -182
  312. package/dist/src/dialer/index.d.ts.map +0 -1
  313. package/dist/src/fetch/proto.d.ts +0 -134
  314. package/dist/src/identify/message.d.ts +0 -95
  315. package/dist/src/insecure/plaintext.d.ts +0 -12
  316. package/dist/src/insecure/plaintext.d.ts.map +0 -1
  317. package/dist/src/insecure/proto.d.ts +0 -128
  318. package/dist/src/metrics/old-peers.d.ts +0 -3
  319. package/dist/src/metrics/old-peers.d.ts.map +0 -1
  320. package/dist/src/metrics/tracked-map.d.ts +0 -8
  321. package/dist/src/metrics/tracked-map.d.ts.map +0 -1
  322. package/dist/src/peer-store/address-book.d.ts +0 -67
  323. package/dist/src/peer-store/address-book.d.ts.map +0 -1
  324. package/dist/src/peer-store/index.d.ts +0 -58
  325. package/dist/src/peer-store/index.d.ts.map +0 -1
  326. package/dist/src/peer-store/key-book.d.ts +0 -40
  327. package/dist/src/peer-store/key-book.d.ts.map +0 -1
  328. package/dist/src/peer-store/metadata-book.d.ts +0 -58
  329. package/dist/src/peer-store/metadata-book.d.ts.map +0 -1
  330. package/dist/src/peer-store/pb/peer.d.ts +0 -222
  331. package/dist/src/peer-store/proto-book.d.ts +0 -43
  332. package/dist/src/peer-store/proto-book.d.ts.map +0 -1
  333. package/dist/src/peer-store/store.d.ts +0 -73
  334. package/dist/src/peer-store/store.d.ts.map +0 -1
  335. package/dist/src/peer-store/types.d.ts +0 -202
  336. package/dist/src/peer-store/types.d.ts.map +0 -1
  337. package/dist/src/ping/util.d.ts +0 -5
  338. package/dist/src/ping/util.d.ts.map +0 -1
  339. package/dist/src/pubsub-adapter.d.ts +0 -22
  340. package/dist/src/pubsub-adapter.d.ts.map +0 -1
  341. package/dist/src/record/envelope/envelope.d.ts +0 -77
  342. package/dist/src/record/envelope/index.d.ts +0 -80
  343. package/dist/src/record/envelope/index.d.ts.map +0 -1
  344. package/dist/src/record/peer-record/consts.d.ts +0 -4
  345. package/dist/src/record/peer-record/consts.d.ts.map +0 -1
  346. package/dist/src/record/peer-record/index.d.ts +0 -60
  347. package/dist/src/record/peer-record/index.d.ts.map +0 -1
  348. package/dist/src/record/peer-record/peer-record.d.ts +0 -133
  349. package/dist/src/record/utils.d.ts +0 -12
  350. package/dist/src/record/utils.d.ts.map +0 -1
  351. package/dist/src/types.d.ts +0 -90
  352. package/dist/src/types.d.ts.map +0 -1
  353. package/src/address-manager/index.js +0 -96
  354. package/src/circuit/auto-relay.js +0 -302
  355. package/src/circuit/circuit/hop.js +0 -205
  356. package/src/circuit/circuit/stop.js +0 -81
  357. package/src/circuit/circuit/stream-handler.js +0 -94
  358. package/src/circuit/constants.js +0 -12
  359. package/src/circuit/index.js +0 -102
  360. package/src/circuit/listener.js +0 -75
  361. package/src/circuit/multicodec.js +0 -5
  362. package/src/circuit/protocol/index.d.ts +0 -173
  363. package/src/circuit/protocol/index.js +0 -530
  364. package/src/circuit/transport.js +0 -229
  365. package/src/circuit/utils.js +0 -17
  366. package/src/config.js +0 -114
  367. package/src/connection-manager/auto-dialler.js +0 -132
  368. package/src/connection-manager/index.js +0 -374
  369. package/src/connection-manager/latency-monitor.js +0 -264
  370. package/src/constants.js +0 -18
  371. package/src/content-routing/index.js +0 -163
  372. package/src/content-routing/utils.js +0 -89
  373. package/src/dht/dht-content-routing.js +0 -44
  374. package/src/dht/dht-peer-routing.js +0 -51
  375. package/src/dialer/index.js +0 -376
  376. package/src/errors.js +0 -66
  377. package/src/fetch/constants.js +0 -6
  378. package/src/fetch/index.js +0 -159
  379. package/src/fetch/proto.d.ts +0 -134
  380. package/src/fetch/proto.js +0 -333
  381. package/src/get-peer.js +0 -49
  382. package/src/identify/consts.js +0 -15
  383. package/src/identify/index.js +0 -384
  384. package/src/identify/message.d.ts +0 -95
  385. package/src/identify/message.js +0 -328
  386. package/src/index.js +0 -813
  387. package/src/insecure/plaintext.js +0 -95
  388. package/src/insecure/proto.d.ts +0 -128
  389. package/src/insecure/proto.js +0 -371
  390. package/src/keychain/index.js +0 -561
  391. package/src/metrics/index.js +0 -290
  392. package/src/metrics/old-peers.js +0 -16
  393. package/src/metrics/stats.js +0 -270
  394. package/src/metrics/tracked-map.js +0 -94
  395. package/src/nat-manager.js +0 -197
  396. package/src/peer-routing.js +0 -176
  397. package/src/peer-store/README.md +0 -145
  398. package/src/peer-store/address-book.js +0 -382
  399. package/src/peer-store/index.js +0 -121
  400. package/src/peer-store/key-book.js +0 -141
  401. package/src/peer-store/metadata-book.js +0 -250
  402. package/src/peer-store/pb/peer.d.ts +0 -222
  403. package/src/peer-store/pb/peer.js +0 -643
  404. package/src/peer-store/pb/peer.proto +0 -31
  405. package/src/peer-store/proto-book.js +0 -237
  406. package/src/peer-store/store.js +0 -263
  407. package/src/peer-store/types.ts +0 -245
  408. package/src/ping/constants.js +0 -8
  409. package/src/ping/index.js +0 -84
  410. package/src/ping/util.js +0 -18
  411. package/src/pnet/crypto.js +0 -84
  412. package/src/pnet/errors.js +0 -7
  413. package/src/pnet/index.js +0 -86
  414. package/src/pnet/key-generator.js +0 -33
  415. package/src/pubsub-adapter.js +0 -61
  416. package/src/record/README.md +0 -130
  417. package/src/record/envelope/envelope.d.ts +0 -77
  418. package/src/record/envelope/envelope.js +0 -243
  419. package/src/record/envelope/envelope.proto +0 -19
  420. package/src/record/envelope/index.js +0 -183
  421. package/src/record/peer-record/consts.js +0 -14
  422. package/src/record/peer-record/index.js +0 -113
  423. package/src/record/peer-record/peer-record.d.ts +0 -133
  424. package/src/record/peer-record/peer-record.js +0 -367
  425. package/src/record/peer-record/peer-record.proto +0 -18
  426. package/src/record/utils.js +0 -25
  427. package/src/registrar.js +0 -127
  428. package/src/transport-manager.js +0 -269
  429. package/src/types.ts +0 -98
  430. package/src/upgrader.js +0 -492
@@ -0,0 +1,97 @@
1
+ import { logger } from '@libp2p/logger'
2
+ import { pipe } from 'it-pipe'
3
+ import errCode from 'err-code'
4
+ import { duplexPair } from 'it-pair/duplex'
5
+ import { randomBytes } from '@libp2p/crypto'
6
+ import * as Errors from './errors.js'
7
+ import { codes } from '../errors.js'
8
+ import {
9
+ createBoxStream,
10
+ createUnboxStream,
11
+ decodeV1PSK
12
+ } from './crypto.js'
13
+ import { handshake } from 'it-handshake'
14
+ import { NONCE_LENGTH } from './key-generator.js'
15
+ import type { MultiaddrConnection } from '@libp2p/interfaces/transport'
16
+ import type { ConnectionProtector } from '@libp2p/interfaces/connection'
17
+
18
+ const log = logger('libp2p:pnet')
19
+
20
+ export { generateKey } from './key-generator.js'
21
+
22
+ export interface ProtectorInit {
23
+ enabled?: boolean
24
+ psk: Uint8Array
25
+ }
26
+
27
+ export class PreSharedKeyConnectionProtector implements ConnectionProtector {
28
+ public tag: string
29
+ private readonly psk: Uint8Array
30
+ private readonly enabled: boolean
31
+
32
+ /**
33
+ * Takes a Private Shared Key (psk) and provides a `protect` method
34
+ * for wrapping existing connections in a private encryption stream.
35
+ */
36
+ constructor (init: ProtectorInit) {
37
+ this.enabled = init.enabled !== false
38
+
39
+ if (this.enabled) {
40
+ const decodedPSK = decodeV1PSK(init.psk)
41
+ this.psk = decodedPSK.psk
42
+ this.tag = decodedPSK.tag ?? ''
43
+ } else {
44
+ this.psk = new Uint8Array()
45
+ this.tag = ''
46
+ }
47
+ }
48
+
49
+ /**
50
+ * Takes a given Connection and creates a private encryption stream
51
+ * between its two peers from the PSK the Protector instance was
52
+ * created with.
53
+ */
54
+ async protect (connection: MultiaddrConnection): Promise<MultiaddrConnection> {
55
+ if (!this.enabled) {
56
+ return connection
57
+ }
58
+
59
+ if (connection == null) {
60
+ throw errCode(new Error(Errors.NO_HANDSHAKE_CONNECTION), codes.ERR_INVALID_PARAMETERS)
61
+ }
62
+
63
+ // Exchange nonces
64
+ log('protecting the connection')
65
+ const localNonce = randomBytes(NONCE_LENGTH)
66
+
67
+ const shake = handshake(connection)
68
+ shake.write(localNonce)
69
+
70
+ const result = await shake.reader.next(NONCE_LENGTH)
71
+
72
+ if (result.value == null) {
73
+ throw errCode(new Error(Errors.STREAM_ENDED), codes.ERR_INVALID_PARAMETERS)
74
+ }
75
+
76
+ const remoteNonce = result.value.slice()
77
+ shake.rest()
78
+
79
+ // Create the boxing/unboxing pipe
80
+ log('exchanged nonces')
81
+ const [internal, external] = duplexPair<Uint8Array>()
82
+ pipe(
83
+ external,
84
+ // Encrypt all outbound traffic
85
+ createBoxStream(localNonce, this.psk),
86
+ shake.stream,
87
+ // Decrypt all inbound traffic
88
+ createUnboxStream(remoteNonce, this.psk),
89
+ external
90
+ ).catch(log.error)
91
+
92
+ return {
93
+ ...connection,
94
+ ...internal
95
+ }
96
+ }
97
+ }
@@ -0,0 +1,28 @@
1
+ import { randomBytes } from '@libp2p/crypto'
2
+ import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
3
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
4
+
5
+ /**
6
+ * Generates a PSK that can be used in a libp2p-pnet private network
7
+ *
8
+ * @param {Uint8Array} bytes - An object to write the psk into
9
+ * @returns {void}
10
+ */
11
+ export function generateKey (bytes: Uint8Array) {
12
+ const psk = uint8ArrayToString(randomBytes(KEY_LENGTH), 'base16')
13
+ const key = uint8ArrayFromString('/key/swarm/psk/1.0.0/\n/base16/\n' + psk)
14
+
15
+ bytes.set(key)
16
+ }
17
+
18
+ export const NONCE_LENGTH = 24
19
+ export const KEY_LENGTH = 32
20
+
21
+ try {
22
+ if (require.main === module) {
23
+ // @ts-expect-error
24
+ generate(process.stdout)
25
+ }
26
+ } catch (error: any) {
27
+
28
+ }
@@ -0,0 +1,51 @@
1
+ import { EventEmitter } from '@libp2p/interfaces/events'
2
+ import type { PeerId } from '@libp2p/interfaces/peer-id'
3
+ import type { PublishResult, PubSub, PubSubEvents, StrictNoSign, StrictSign } from '@libp2p/interfaces/pubsub'
4
+ import errCode from 'err-code'
5
+ import { messages, codes } from '../errors.js'
6
+
7
+ export class DummyPubSub extends EventEmitter<PubSubEvents> implements PubSub {
8
+ isStarted (): boolean {
9
+ return false
10
+ }
11
+
12
+ start (): void | Promise<void> {
13
+
14
+ }
15
+
16
+ stop (): void | Promise<void> {
17
+
18
+ }
19
+
20
+ get globalSignaturePolicy (): typeof StrictSign | typeof StrictNoSign {
21
+ throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED)
22
+ }
23
+
24
+ get multicodecs (): string[] {
25
+ throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED)
26
+ }
27
+
28
+ getPeers (): PeerId[] {
29
+ throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED)
30
+ }
31
+
32
+ getTopics (): string[] {
33
+ throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED)
34
+ }
35
+
36
+ subscribe (): void {
37
+ throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED)
38
+ }
39
+
40
+ unsubscribe (): void {
41
+ throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED)
42
+ }
43
+
44
+ getSubscribers (): PeerId[] {
45
+ throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED)
46
+ }
47
+
48
+ async publish (): Promise<PublishResult> {
49
+ throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED)
50
+ }
51
+ }
@@ -0,0 +1,189 @@
1
+ import { logger } from '@libp2p/logger'
2
+ import errCode from 'err-code'
3
+ import { codes } from './errors.js'
4
+ import { isTopology, Topology } from '@libp2p/interfaces/topology'
5
+ import type { Registrar, StreamHandler } from '@libp2p/interfaces/registrar'
6
+ import type { PeerProtocolsChangeData } from '@libp2p/interfaces/peer-store'
7
+ import type { Connection } from '@libp2p/interfaces/connection'
8
+ import type { Components } from '@libp2p/interfaces/components'
9
+
10
+ const log = logger('libp2p:registrar')
11
+
12
+ function supportsProtocol (peerProtocols: string[], topologyProtocols: string[]) {
13
+ for (const peerProtocol of peerProtocols) {
14
+ if (topologyProtocols.includes(peerProtocol)) {
15
+ return true
16
+ }
17
+ }
18
+
19
+ return false
20
+ }
21
+
22
+ /**
23
+ * Responsible for notifying registered protocols of events in the network.
24
+ */
25
+ export class DefaultRegistrar implements Registrar {
26
+ private readonly topologies: Map<string, { topology: Topology, protocols: string[] }>
27
+ private readonly handlers: Map<string, StreamHandler>
28
+ private readonly components: Components
29
+
30
+ constructor (components: Components) {
31
+ this.topologies = new Map()
32
+ this.handlers = new Map()
33
+ this.components = components
34
+
35
+ this._onDisconnect = this._onDisconnect.bind(this)
36
+ this._onProtocolChange = this._onProtocolChange.bind(this)
37
+
38
+ this.components.getConnectionManager().addEventListener('peer:disconnect', this._onDisconnect)
39
+
40
+ // happens after identify
41
+ this.components.getPeerStore().addEventListener('change:protocols', this._onProtocolChange)
42
+ }
43
+
44
+ getProtocols () {
45
+ const protocols = new Set<string>()
46
+
47
+ for (const topology of this.topologies.values()) {
48
+ topology.protocols.forEach(protocol => protocols.add(protocol))
49
+ }
50
+
51
+ for (const protocol of this.handlers.keys()) {
52
+ protocols.add(protocol)
53
+ }
54
+
55
+ return Array.from(protocols).sort()
56
+ }
57
+
58
+ getHandler (protocol: string) {
59
+ const handler = this.handlers.get(protocol)
60
+
61
+ if (handler == null) {
62
+ throw new Error(`No handler registered for protocol ${protocol}`)
63
+ }
64
+
65
+ return handler
66
+ }
67
+
68
+ getTopologies (protocol: string) {
69
+ const output: Topology[] = []
70
+
71
+ for (const { topology, protocols } of this.topologies.values()) {
72
+ if (protocols.includes(protocol)) {
73
+ output.push(topology)
74
+ }
75
+ }
76
+
77
+ return output
78
+ }
79
+
80
+ /**
81
+ * Registers the `handler` for each protocol
82
+ */
83
+ async handle (protocols: string | string[], handler: StreamHandler): Promise<void> {
84
+ const protocolList = Array.isArray(protocols) ? protocols : [protocols]
85
+
86
+ for (const protocol of protocolList) {
87
+ if (this.handlers.has(protocol)) {
88
+ throw errCode(new Error(`Handler already registered for protocol ${protocol}`), codes.ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED)
89
+ }
90
+
91
+ this.handlers.set(protocol, handler)
92
+ }
93
+
94
+ // Add new protocols to self protocols in the Protobook
95
+ await this.components.getPeerStore().protoBook.add(this.components.getPeerId(), protocolList)
96
+ }
97
+
98
+ /**
99
+ * Removes the handler for each protocol. The protocol
100
+ * will no longer be supported on streams.
101
+ */
102
+ async unhandle (protocols: string | string[]) {
103
+ const protocolList = Array.isArray(protocols) ? protocols : [protocols]
104
+
105
+ protocolList.forEach(protocol => {
106
+ this.handlers.delete(protocol)
107
+ })
108
+
109
+ // Remove protocols from self protocols in the Protobook
110
+ await this.components.getPeerStore().protoBook.remove(this.components.getPeerId(), protocolList)
111
+ }
112
+
113
+ /**
114
+ * Register handlers for a set of multicodecs given
115
+ */
116
+ async register (protocols: string | string[], topology: Topology): Promise<string> {
117
+ if (!isTopology(topology)) {
118
+ log.error('topology must be an instance of interfaces/topology')
119
+ throw errCode(new Error('topology must be an instance of interfaces/topology'), codes.ERR_INVALID_PARAMETERS)
120
+ }
121
+
122
+ // Create topology
123
+ const id = `${(Math.random() * 1e9).toString(36)}${Date.now()}`
124
+
125
+ this.topologies.set(id, {
126
+ topology,
127
+ protocols: Array.isArray(protocols) ? protocols : [protocols]
128
+ })
129
+
130
+ // Set registrar
131
+ await topology.setRegistrar(this)
132
+
133
+ return id
134
+ }
135
+
136
+ /**
137
+ * Unregister topology
138
+ */
139
+ unregister (id: string) {
140
+ this.topologies.delete(id)
141
+ }
142
+
143
+ /**
144
+ * Remove a disconnected peer from the record
145
+ */
146
+ _onDisconnect (evt: CustomEvent<Connection>) {
147
+ const connection = evt.detail
148
+
149
+ void this.components.getPeerStore().protoBook.get(connection.remotePeer)
150
+ .then(peerProtocols => {
151
+ for (const { topology, protocols } of this.topologies.values()) {
152
+ if (supportsProtocol(peerProtocols, protocols)) {
153
+ topology.onDisconnect(connection.remotePeer)
154
+ }
155
+ }
156
+ })
157
+ .catch(err => {
158
+ log.error(err)
159
+ })
160
+ }
161
+
162
+ /**
163
+ * Check if a new peer support the multicodecs for this topology
164
+ */
165
+ _onProtocolChange (evt: CustomEvent<PeerProtocolsChangeData>) {
166
+ const { peerId, protocols, oldProtocols } = evt.detail
167
+
168
+ const removed = oldProtocols.filter(protocol => !protocols.includes(protocol))
169
+ const added = protocols.filter(protocol => !oldProtocols.includes(protocol))
170
+
171
+ for (const { topology, protocols } of this.topologies.values()) {
172
+ if (supportsProtocol(removed, protocols)) {
173
+ topology.onDisconnect(peerId)
174
+ }
175
+ }
176
+
177
+ for (const { topology, protocols } of this.topologies.values()) {
178
+ if (supportsProtocol(added, protocols)) {
179
+ const connection = this.components.getConnectionManager().getConnections(peerId)[0]
180
+
181
+ if (connection == null) {
182
+ continue
183
+ }
184
+
185
+ topology.onConnect(peerId, connection)
186
+ }
187
+ }
188
+ }
189
+ }
@@ -0,0 +1,281 @@
1
+ import { logger } from '@libp2p/logger'
2
+ import pSettle from 'p-settle'
3
+ import { codes } from './errors.js'
4
+ import errCode from 'err-code'
5
+ import type { Listener, Transport, TransportManager, TransportManagerEvents } from '@libp2p/interfaces/transport'
6
+ import type { Multiaddr } from '@multiformats/multiaddr'
7
+ import type { Connection } from '@libp2p/interfaces/connection'
8
+ import type { AbortOptions } from '@libp2p/interfaces'
9
+ import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events'
10
+ import type { Startable } from '@libp2p/interfaces/startable'
11
+ import type { Components } from '@libp2p/interfaces/components'
12
+ import { trackedMap } from '@libp2p/tracked-map'
13
+
14
+ const log = logger('libp2p:transports')
15
+
16
+ export interface TransportManagerInit {
17
+ faultTolerance?: FaultTolerance
18
+ }
19
+
20
+ export class DefaultTransportManager extends EventEmitter<TransportManagerEvents> implements TransportManager, Startable {
21
+ private readonly components: Components
22
+ private readonly transports: Map<string, Transport>
23
+ private readonly listeners: Map<string, Listener[]>
24
+ private readonly faultTolerance: FaultTolerance
25
+ private started: boolean
26
+
27
+ constructor (components: Components, init: TransportManagerInit = {}) {
28
+ super()
29
+
30
+ this.components = components
31
+ this.started = false
32
+ this.transports = new Map<string, Transport>()
33
+ this.listeners = trackedMap({
34
+ component: 'transport-manager',
35
+ metric: 'listeners',
36
+ metrics: this.components.getMetrics()
37
+ })
38
+ this.faultTolerance = init.faultTolerance ?? FaultTolerance.FATAL_ALL
39
+ }
40
+
41
+ /**
42
+ * Adds a `Transport` to the manager
43
+ */
44
+ add (transport: Transport) {
45
+ const tag = transport[Symbol.toStringTag]
46
+
47
+ if (tag == null) {
48
+ throw errCode(new Error('Transport must have a valid tag'), codes.ERR_INVALID_KEY)
49
+ }
50
+
51
+ if (this.transports.has(tag)) {
52
+ throw errCode(new Error('There is already a transport with this tag'), codes.ERR_DUPLICATE_TRANSPORT)
53
+ }
54
+
55
+ log('adding transport %s', tag)
56
+
57
+ this.transports.set(tag, transport)
58
+
59
+ if (!this.listeners.has(tag)) {
60
+ this.listeners.set(tag, [])
61
+ }
62
+ }
63
+
64
+ isStarted () {
65
+ return this.started
66
+ }
67
+
68
+ async start () {
69
+ // Listen on the provided transports for the provided addresses
70
+ const addrs = this.components.getAddressManager().getListenAddrs()
71
+
72
+ await this.listen(addrs)
73
+
74
+ this.started = true
75
+ }
76
+
77
+ /**
78
+ * Stops all listeners
79
+ */
80
+ async stop () {
81
+ const tasks = []
82
+ for (const [key, listeners] of this.listeners) {
83
+ log('closing listeners for %s', key)
84
+ while (listeners.length > 0) {
85
+ const listener = listeners.pop()
86
+
87
+ if (listener == null) {
88
+ continue
89
+ }
90
+
91
+ tasks.push(listener.close())
92
+ }
93
+ }
94
+
95
+ await Promise.all(tasks)
96
+ log('all listeners closed')
97
+ for (const key of this.listeners.keys()) {
98
+ this.listeners.set(key, [])
99
+ }
100
+
101
+ this.started = false
102
+ }
103
+
104
+ /**
105
+ * Dials the given Multiaddr over it's supported transport
106
+ */
107
+ async dial (ma: Multiaddr, options?: AbortOptions): Promise<Connection> {
108
+ const transport = this.transportForMultiaddr(ma)
109
+
110
+ if (transport == null) {
111
+ throw errCode(new Error(`No transport available for address ${String(ma)}`), codes.ERR_TRANSPORT_UNAVAILABLE)
112
+ }
113
+
114
+ try {
115
+ return await transport.dial(ma, {
116
+ ...options,
117
+ upgrader: this.components.getUpgrader()
118
+ })
119
+ } catch (err: any) {
120
+ if (err.code == null) {
121
+ err.code = codes.ERR_TRANSPORT_DIAL_FAILED
122
+ }
123
+
124
+ throw err
125
+ }
126
+ }
127
+
128
+ /**
129
+ * Returns all Multiaddr's the listeners are using
130
+ */
131
+ getAddrs (): Multiaddr[] {
132
+ let addrs: Multiaddr[] = []
133
+ for (const listeners of this.listeners.values()) {
134
+ for (const listener of listeners) {
135
+ addrs = [...addrs, ...listener.getAddrs()]
136
+ }
137
+ }
138
+ return addrs
139
+ }
140
+
141
+ /**
142
+ * Returns all the transports instances
143
+ */
144
+ getTransports () {
145
+ return Array.of(...this.transports.values())
146
+ }
147
+
148
+ /**
149
+ * Finds a transport that matches the given Multiaddr
150
+ */
151
+ transportForMultiaddr (ma: Multiaddr) {
152
+ for (const transport of this.transports.values()) {
153
+ const addrs = transport.filter([ma])
154
+
155
+ if (addrs.length > 0) {
156
+ return transport
157
+ }
158
+ }
159
+ }
160
+
161
+ /**
162
+ * Starts listeners for each listen Multiaddr
163
+ */
164
+ async listen (addrs: Multiaddr[]) {
165
+ if (addrs == null || addrs.length === 0) {
166
+ log('no addresses were provided for listening, this node is dial only')
167
+ return
168
+ }
169
+
170
+ const couldNotListen = []
171
+
172
+ for (const [key, transport] of this.transports.entries()) {
173
+ const supportedAddrs = transport.filter(addrs)
174
+ const tasks = []
175
+
176
+ // For each supported multiaddr, create a listener
177
+ for (const addr of supportedAddrs) {
178
+ log('creating listener for %s on %s', key, addr)
179
+ const listener = transport.createListener({
180
+ upgrader: this.components.getUpgrader()
181
+ })
182
+
183
+ let listeners = this.listeners.get(key)
184
+
185
+ if (listeners == null) {
186
+ listeners = []
187
+ this.listeners.set(key, listeners)
188
+ }
189
+
190
+ listeners.push(listener)
191
+
192
+ // Track listen/close events
193
+ listener.addEventListener('listening', () => {
194
+ this.dispatchEvent(new CustomEvent<Listener>('listener:listening', {
195
+ detail: listener
196
+ }))
197
+ })
198
+ listener.addEventListener('close', () => {
199
+ this.dispatchEvent(new CustomEvent<Listener>('listener:close', {
200
+ detail: listener
201
+ }))
202
+ })
203
+
204
+ // We need to attempt to listen on everything
205
+ tasks.push(listener.listen(addr))
206
+ }
207
+
208
+ // Keep track of transports we had no addresses for
209
+ if (tasks.length === 0) {
210
+ couldNotListen.push(key)
211
+ continue
212
+ }
213
+
214
+ const results = await pSettle(tasks)
215
+ // If we are listening on at least 1 address, succeed.
216
+ // TODO: we should look at adding a retry (`p-retry`) here to better support
217
+ // listening on remote addresses as they may be offline. We could then potentially
218
+ // just wait for any (`p-any`) listener to succeed on each transport before returning
219
+ const isListening = results.find(r => r.isFulfilled)
220
+ if ((isListening == null) && this.faultTolerance !== FaultTolerance.NO_FATAL) {
221
+ throw errCode(new Error(`Transport (${key}) could not listen on any available address`), codes.ERR_NO_VALID_ADDRESSES)
222
+ }
223
+ }
224
+
225
+ // If no transports were able to listen, throw an error. This likely
226
+ // means we were given addresses we do not have transports for
227
+ if (couldNotListen.length === this.transports.size) {
228
+ const message = `no valid addresses were provided for transports [${couldNotListen.join(', ')}]`
229
+ if (this.faultTolerance === FaultTolerance.FATAL_ALL) {
230
+ throw errCode(new Error(message), codes.ERR_NO_VALID_ADDRESSES)
231
+ }
232
+ log(`libp2p in dial mode only: ${message}`)
233
+ }
234
+ }
235
+
236
+ /**
237
+ * Removes the given transport from the manager.
238
+ * If a transport has any running listeners, they will be closed.
239
+ */
240
+ async remove (key: string) {
241
+ log('removing %s', key)
242
+
243
+ // Close any running listeners
244
+ for (const listener of this.listeners.get(key) ?? []) {
245
+ await listener.close()
246
+ }
247
+
248
+ this.transports.delete(key)
249
+ this.listeners.delete(key)
250
+ }
251
+
252
+ /**
253
+ * Removes all transports from the manager.
254
+ * If any listeners are running, they will be closed.
255
+ *
256
+ * @async
257
+ */
258
+ async removeAll () {
259
+ const tasks = []
260
+ for (const key of this.transports.keys()) {
261
+ tasks.push(this.remove(key))
262
+ }
263
+
264
+ await Promise.all(tasks)
265
+ }
266
+ }
267
+
268
+ /**
269
+ * Enum Transport Manager Fault Tolerance values
270
+ */
271
+ export enum FaultTolerance {
272
+ /**
273
+ * should be used for failing in any listen circumstance
274
+ */
275
+ FATAL_ALL = 0,
276
+
277
+ /**
278
+ * should be used for not failing when not listening
279
+ */
280
+ NO_FATAL
281
+ }