libp2p 0.36.0 → 0.36.2-1473044

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 (415) hide show
  1. package/LICENSE +3 -21
  2. package/README.md +13 -10
  3. package/dist/src/address-manager/index.d.ts +33 -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 +215 -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 +54 -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 +51 -0
  44. package/dist/src/circuit/pb/index.d.ts.map +1 -0
  45. package/dist/src/circuit/pb/index.js +72 -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 +190 -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 +93 -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/index.d.ts +79 -144
  64. package/dist/src/connection-manager/index.d.ts.map +1 -1
  65. package/dist/src/connection-manager/index.js +295 -0
  66. package/dist/src/connection-manager/index.js.map +1 -0
  67. package/dist/src/connection-manager/latency-monitor.d.ts +72 -97
  68. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  69. package/dist/src/connection-manager/latency-monitor.js +220 -0
  70. package/dist/src/connection-manager/latency-monitor.js.map +1 -0
  71. package/dist/src/connection-manager/visibility-change-emitter.d.ts +15 -16
  72. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  73. package/dist/src/connection-manager/visibility-change-emitter.js +118 -0
  74. package/dist/src/connection-manager/visibility-change-emitter.js.map +1 -0
  75. package/dist/src/constants.d.ts +22 -10
  76. package/dist/src/constants.d.ts.map +1 -1
  77. package/dist/src/constants.js +27 -0
  78. package/dist/src/constants.js.map +1 -0
  79. package/dist/src/content-routing/index.d.ts +26 -81
  80. package/dist/src/content-routing/index.d.ts.map +1 -1
  81. package/dist/src/content-routing/index.js +99 -0
  82. package/dist/src/content-routing/index.js.map +1 -0
  83. package/dist/src/content-routing/utils.d.ts +6 -49
  84. package/dist/src/content-routing/utils.d.ts.map +1 -1
  85. package/dist/src/content-routing/utils.js +42 -0
  86. package/dist/src/content-routing/utils.js.map +1 -0
  87. package/dist/src/dht/dht-content-routing.d.ts +10 -24
  88. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  89. package/dist/src/dht/dht-content-routing.js +32 -0
  90. package/dist/src/dht/dht-content-routing.js.map +1 -0
  91. package/dist/src/dht/dht-peer-routing.d.ts +9 -24
  92. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  93. package/dist/src/dht/dht-peer-routing.js +26 -0
  94. package/dist/src/dht/dht-peer-routing.js.map +1 -0
  95. package/dist/src/dialer/auto-dialer.d.ts +14 -0
  96. package/dist/src/dialer/auto-dialer.d.ts.map +1 -0
  97. package/dist/src/dialer/auto-dialer.js +24 -0
  98. package/dist/src/dialer/auto-dialer.js.map +1 -0
  99. package/dist/src/dialer/dial-request.d.ts +18 -46
  100. package/dist/src/dialer/dial-request.d.ts.map +1 -1
  101. package/dist/src/dialer/dial-request.js +83 -0
  102. package/dist/src/dialer/dial-request.js.map +1 -0
  103. package/dist/src/dialer/index.d.ts +41 -148
  104. package/dist/src/dialer/index.d.ts.map +1 -1
  105. package/dist/src/dialer/index.js +280 -0
  106. package/dist/src/dialer/index.js.map +1 -0
  107. package/dist/src/errors.d.ts +68 -63
  108. package/dist/src/errors.d.ts.map +1 -1
  109. package/dist/src/errors.js +73 -0
  110. package/dist/src/errors.js.map +1 -0
  111. package/dist/src/fetch/constants.d.ts +1 -1
  112. package/dist/src/fetch/constants.d.ts.map +1 -1
  113. package/dist/src/fetch/constants.js +3 -0
  114. package/dist/src/fetch/constants.js.map +1 -0
  115. package/dist/src/fetch/index.d.ts +30 -49
  116. package/dist/src/fetch/index.d.ts.map +1 -1
  117. package/dist/src/fetch/index.js +129 -0
  118. package/dist/src/fetch/index.js.map +1 -0
  119. package/dist/src/fetch/pb/proto.d.ts +26 -0
  120. package/dist/src/fetch/pb/proto.d.ts.map +1 -0
  121. package/dist/src/fetch/pb/proto.js +44 -0
  122. package/dist/src/fetch/pb/proto.js.map +1 -0
  123. package/dist/src/get-peer.d.ts +4 -11
  124. package/dist/src/get-peer.d.ts.map +1 -1
  125. package/dist/src/get-peer.js +43 -0
  126. package/dist/src/get-peer.js.map +1 -0
  127. package/dist/src/identify/consts.d.ts +9 -9
  128. package/dist/src/identify/consts.d.ts.map +1 -1
  129. package/dist/src/identify/consts.js +11 -0
  130. package/dist/src/identify/consts.js.map +1 -0
  131. package/dist/src/identify/index.d.ts +42 -96
  132. package/dist/src/identify/index.d.ts.map +1 -1
  133. package/dist/src/identify/index.js +322 -0
  134. package/dist/src/identify/index.js.map +1 -0
  135. package/dist/src/identify/pb/message.d.ts +15 -0
  136. package/dist/src/identify/pb/message.d.ts.map +1 -0
  137. package/dist/src/identify/pb/message.js +24 -0
  138. package/dist/src/identify/pb/message.js.map +1 -0
  139. package/dist/src/index.d.ts +162 -581
  140. package/dist/src/index.d.ts.map +1 -1
  141. package/dist/src/index.js +9 -0
  142. package/dist/src/index.js.map +1 -0
  143. package/dist/src/insecure/index.d.ts +9 -0
  144. package/dist/src/insecure/index.d.ts.map +1 -0
  145. package/dist/src/insecure/index.js +81 -0
  146. package/dist/src/insecure/index.js.map +1 -0
  147. package/dist/src/insecure/pb/proto.d.ts +28 -0
  148. package/dist/src/insecure/pb/proto.d.ts.map +1 -0
  149. package/dist/src/insecure/pb/proto.js +46 -0
  150. package/dist/src/insecure/pb/proto.js.map +1 -0
  151. package/dist/src/keychain/cms.d.ts +6 -14
  152. package/dist/src/keychain/cms.d.ts.map +1 -1
  153. package/dist/src/keychain/cms.js +129 -0
  154. package/dist/src/keychain/cms.js.map +1 -0
  155. package/dist/src/keychain/index.d.ts +61 -81
  156. package/dist/src/keychain/index.d.ts.map +1 -1
  157. package/dist/src/keychain/index.js +493 -0
  158. package/dist/src/keychain/index.js.map +1 -0
  159. package/dist/src/keychain/util.d.ts +3 -6
  160. package/dist/src/keychain/util.d.ts.map +1 -1
  161. package/dist/src/keychain/util.js +79 -0
  162. package/dist/src/keychain/util.js.map +1 -0
  163. package/dist/src/libp2p.d.ts +78 -0
  164. package/dist/src/libp2p.d.ts.map +1 -0
  165. package/dist/src/libp2p.js +375 -0
  166. package/dist/src/libp2p.js.map +1 -0
  167. package/dist/src/metrics/index.d.ts +47 -104
  168. package/dist/src/metrics/index.d.ts.map +1 -1
  169. package/dist/src/metrics/index.js +231 -0
  170. package/dist/src/metrics/index.js.map +1 -0
  171. package/dist/src/metrics/moving-average.d.ts +14 -0
  172. package/dist/src/metrics/moving-average.d.ts.map +1 -0
  173. package/dist/src/metrics/moving-average.js +40 -0
  174. package/dist/src/metrics/moving-average.js.map +1 -0
  175. package/dist/src/metrics/stats.d.ts +41 -93
  176. package/dist/src/metrics/stats.d.ts.map +1 -1
  177. package/dist/src/metrics/stats.js +183 -0
  178. package/dist/src/metrics/stats.js.map +1 -0
  179. package/dist/src/nat-manager.d.ts +42 -99
  180. package/dist/src/nat-manager.d.ts.map +1 -1
  181. package/dist/src/nat-manager.js +114 -0
  182. package/dist/src/nat-manager.js.map +1 -0
  183. package/dist/src/peer-record-updater.d.ts +15 -0
  184. package/dist/src/peer-record-updater.d.ts.map +1 -0
  185. package/dist/src/peer-record-updater.js +44 -0
  186. package/dist/src/peer-record-updater.js.map +1 -0
  187. package/dist/src/peer-routing.d.ts +39 -84
  188. package/dist/src/peer-routing.d.ts.map +1 -1
  189. package/dist/src/peer-routing.js +108 -0
  190. package/dist/src/peer-routing.js.map +1 -0
  191. package/dist/src/ping/constants.d.ts +4 -4
  192. package/dist/src/ping/constants.d.ts.map +1 -1
  193. package/dist/src/ping/constants.js +5 -0
  194. package/dist/src/ping/constants.js.map +1 -0
  195. package/dist/src/ping/index.d.ts +26 -33
  196. package/dist/src/ping/index.d.ts.map +1 -1
  197. package/dist/src/ping/index.js +56 -0
  198. package/dist/src/ping/index.js.map +1 -0
  199. package/dist/src/pnet/crypto.d.ts +15 -5
  200. package/dist/src/pnet/crypto.d.ts.map +1 -1
  201. package/dist/src/pnet/crypto.js +60 -0
  202. package/dist/src/pnet/crypto.js.map +1 -0
  203. package/dist/src/pnet/errors.d.ts +5 -5
  204. package/dist/src/pnet/errors.d.ts.map +1 -1
  205. package/dist/src/pnet/errors.js +6 -0
  206. package/dist/src/pnet/errors.js.map +1 -0
  207. package/dist/src/pnet/index.d.ts +11 -20
  208. package/dist/src/pnet/index.d.ts.map +1 -1
  209. package/dist/src/pnet/index.js +66 -0
  210. package/dist/src/pnet/index.js.map +1 -0
  211. package/dist/src/pnet/key-generator.d.ts +3 -7
  212. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  213. package/dist/src/pnet/key-generator.js +25 -0
  214. package/dist/src/pnet/key-generator.js.map +1 -0
  215. package/dist/src/registrar.d.ts +27 -65
  216. package/dist/src/registrar.d.ts.map +1 -1
  217. package/dist/src/registrar.js +159 -0
  218. package/dist/src/registrar.js.map +1 -0
  219. package/dist/src/transport-manager.d.ts +34 -82
  220. package/dist/src/transport-manager.d.ts.map +1 -1
  221. package/dist/src/transport-manager.js +223 -0
  222. package/dist/src/transport-manager.js.map +1 -0
  223. package/dist/src/upgrader.d.ts +49 -129
  224. package/dist/src/upgrader.d.ts.map +1 -1
  225. package/dist/src/upgrader.js +402 -0
  226. package/dist/src/upgrader.js.map +1 -0
  227. package/dist/src/version.d.ts +3 -0
  228. package/dist/src/version.d.ts.map +1 -0
  229. package/dist/src/version.js +3 -0
  230. package/dist/src/version.js.map +1 -0
  231. package/package.json +150 -197
  232. package/src/address-manager/index.ts +129 -0
  233. package/src/circuit/README.md +16 -11
  234. package/src/circuit/auto-relay.ts +284 -0
  235. package/src/circuit/circuit/hop.ts +211 -0
  236. package/src/circuit/circuit/stop.ts +78 -0
  237. package/src/circuit/circuit/stream-handler.ts +86 -0
  238. package/src/circuit/circuit/{utils.js → utils.ts} +9 -25
  239. package/src/circuit/constants.ts +31 -0
  240. package/src/circuit/index.ts +120 -0
  241. package/src/circuit/{listener.js → listener.ts} +21 -27
  242. package/src/circuit/multicodec.ts +2 -0
  243. package/src/circuit/{protocol → pb}/index.proto +1 -1
  244. package/src/circuit/pb/index.ts +88 -0
  245. package/src/circuit/transport.ts +216 -0
  246. package/src/circuit/utils.ts +12 -0
  247. package/src/config.ts +101 -0
  248. package/src/connection-manager/auto-dialler.ts +154 -0
  249. package/src/connection-manager/index.ts +422 -0
  250. package/src/connection-manager/latency-monitor.ts +319 -0
  251. package/src/connection-manager/{visibility-change-emitter.js → visibility-change-emitter.ts} +48 -38
  252. package/src/constants.ts +31 -0
  253. package/src/content-routing/index.ts +143 -0
  254. package/src/content-routing/utils.ts +54 -0
  255. package/src/dht/dht-content-routing.ts +43 -0
  256. package/src/dht/dht-peer-routing.ts +35 -0
  257. package/src/dialer/auto-dialer.ts +40 -0
  258. package/src/dialer/{dial-request.js → dial-request.ts} +60 -51
  259. package/src/dialer/index.ts +371 -0
  260. package/src/errors.ts +71 -0
  261. package/src/fetch/README.md +1 -1
  262. package/src/fetch/constants.ts +3 -0
  263. package/src/fetch/index.ts +167 -0
  264. package/src/fetch/{proto.proto → pb/proto.proto} +0 -0
  265. package/src/fetch/pb/proto.ts +58 -0
  266. package/src/get-peer.ts +57 -0
  267. package/src/identify/consts.ts +13 -0
  268. package/src/identify/index.ts +445 -0
  269. package/src/identify/{message.proto → pb/message.proto} +0 -0
  270. package/src/identify/pb/message.ts +36 -0
  271. package/src/index.ts +242 -0
  272. package/src/insecure/index.ts +101 -0
  273. package/src/insecure/{proto.proto → pb/proto.proto} +0 -0
  274. package/src/insecure/pb/proto.ts +61 -0
  275. package/src/keychain/{cms.js → cms.ts} +62 -58
  276. package/src/keychain/index.ts +588 -0
  277. package/src/keychain/{util.js → util.ts} +7 -17
  278. package/src/libp2p.ts +513 -0
  279. package/src/metrics/index.ts +310 -0
  280. package/src/metrics/moving-average.ts +53 -0
  281. package/src/metrics/stats.ts +238 -0
  282. package/src/nat-manager.ts +194 -0
  283. package/src/peer-record-updater.ts +55 -0
  284. package/src/peer-routing.ts +185 -0
  285. package/src/ping/README.md +1 -1
  286. package/src/ping/constants.ts +5 -0
  287. package/src/ping/index.ts +83 -0
  288. package/src/pnet/README.md +2 -2
  289. package/src/pnet/crypto.ts +67 -0
  290. package/src/pnet/errors.ts +5 -0
  291. package/src/pnet/index.ts +95 -0
  292. package/src/pnet/key-generator.ts +28 -0
  293. package/src/registrar.ts +205 -0
  294. package/src/transport-manager.ts +279 -0
  295. package/src/upgrader.ts +499 -0
  296. package/src/version.ts +3 -0
  297. package/dist/index.min.js +0 -55
  298. package/dist/src/circuit/protocol/index.d.ts +0 -173
  299. package/dist/src/fetch/proto.d.ts +0 -134
  300. package/dist/src/identify/message.d.ts +0 -95
  301. package/dist/src/insecure/plaintext.d.ts +0 -12
  302. package/dist/src/insecure/plaintext.d.ts.map +0 -1
  303. package/dist/src/insecure/proto.d.ts +0 -128
  304. package/dist/src/metrics/old-peers.d.ts +0 -3
  305. package/dist/src/metrics/old-peers.d.ts.map +0 -1
  306. package/dist/src/metrics/tracked-map.d.ts +0 -8
  307. package/dist/src/metrics/tracked-map.d.ts.map +0 -1
  308. package/dist/src/peer-store/address-book.d.ts +0 -67
  309. package/dist/src/peer-store/address-book.d.ts.map +0 -1
  310. package/dist/src/peer-store/index.d.ts +0 -58
  311. package/dist/src/peer-store/index.d.ts.map +0 -1
  312. package/dist/src/peer-store/key-book.d.ts +0 -40
  313. package/dist/src/peer-store/key-book.d.ts.map +0 -1
  314. package/dist/src/peer-store/metadata-book.d.ts +0 -58
  315. package/dist/src/peer-store/metadata-book.d.ts.map +0 -1
  316. package/dist/src/peer-store/pb/peer.d.ts +0 -222
  317. package/dist/src/peer-store/proto-book.d.ts +0 -43
  318. package/dist/src/peer-store/proto-book.d.ts.map +0 -1
  319. package/dist/src/peer-store/store.d.ts +0 -73
  320. package/dist/src/peer-store/store.d.ts.map +0 -1
  321. package/dist/src/peer-store/types.d.ts +0 -202
  322. package/dist/src/peer-store/types.d.ts.map +0 -1
  323. package/dist/src/ping/util.d.ts +0 -5
  324. package/dist/src/ping/util.d.ts.map +0 -1
  325. package/dist/src/pubsub-adapter.d.ts +0 -22
  326. package/dist/src/pubsub-adapter.d.ts.map +0 -1
  327. package/dist/src/record/envelope/envelope.d.ts +0 -77
  328. package/dist/src/record/envelope/index.d.ts +0 -80
  329. package/dist/src/record/envelope/index.d.ts.map +0 -1
  330. package/dist/src/record/peer-record/consts.d.ts +0 -4
  331. package/dist/src/record/peer-record/consts.d.ts.map +0 -1
  332. package/dist/src/record/peer-record/index.d.ts +0 -60
  333. package/dist/src/record/peer-record/index.d.ts.map +0 -1
  334. package/dist/src/record/peer-record/peer-record.d.ts +0 -133
  335. package/dist/src/record/utils.d.ts +0 -12
  336. package/dist/src/record/utils.d.ts.map +0 -1
  337. package/dist/src/types.d.ts +0 -90
  338. package/dist/src/types.d.ts.map +0 -1
  339. package/src/address-manager/index.js +0 -96
  340. package/src/circuit/auto-relay.js +0 -302
  341. package/src/circuit/circuit/hop.js +0 -205
  342. package/src/circuit/circuit/stop.js +0 -81
  343. package/src/circuit/circuit/stream-handler.js +0 -94
  344. package/src/circuit/constants.js +0 -12
  345. package/src/circuit/index.js +0 -102
  346. package/src/circuit/multicodec.js +0 -5
  347. package/src/circuit/protocol/index.d.ts +0 -173
  348. package/src/circuit/protocol/index.js +0 -530
  349. package/src/circuit/transport.js +0 -229
  350. package/src/circuit/utils.js +0 -17
  351. package/src/config.js +0 -114
  352. package/src/connection-manager/auto-dialler.js +0 -132
  353. package/src/connection-manager/index.js +0 -363
  354. package/src/connection-manager/latency-monitor.js +0 -264
  355. package/src/constants.js +0 -18
  356. package/src/content-routing/index.js +0 -163
  357. package/src/content-routing/utils.js +0 -89
  358. package/src/dht/dht-content-routing.js +0 -44
  359. package/src/dht/dht-peer-routing.js +0 -51
  360. package/src/dialer/index.js +0 -376
  361. package/src/errors.js +0 -66
  362. package/src/fetch/constants.js +0 -6
  363. package/src/fetch/index.js +0 -159
  364. package/src/fetch/proto.d.ts +0 -134
  365. package/src/fetch/proto.js +0 -333
  366. package/src/get-peer.js +0 -49
  367. package/src/identify/consts.js +0 -15
  368. package/src/identify/index.js +0 -384
  369. package/src/identify/message.d.ts +0 -95
  370. package/src/identify/message.js +0 -328
  371. package/src/index.js +0 -811
  372. package/src/insecure/plaintext.js +0 -95
  373. package/src/insecure/proto.d.ts +0 -128
  374. package/src/insecure/proto.js +0 -371
  375. package/src/keychain/index.js +0 -561
  376. package/src/metrics/index.js +0 -290
  377. package/src/metrics/old-peers.js +0 -16
  378. package/src/metrics/stats.js +0 -270
  379. package/src/metrics/tracked-map.js +0 -94
  380. package/src/nat-manager.js +0 -197
  381. package/src/peer-routing.js +0 -176
  382. package/src/peer-store/README.md +0 -145
  383. package/src/peer-store/address-book.js +0 -382
  384. package/src/peer-store/index.js +0 -121
  385. package/src/peer-store/key-book.js +0 -141
  386. package/src/peer-store/metadata-book.js +0 -250
  387. package/src/peer-store/pb/peer.d.ts +0 -222
  388. package/src/peer-store/pb/peer.js +0 -643
  389. package/src/peer-store/pb/peer.proto +0 -31
  390. package/src/peer-store/proto-book.js +0 -237
  391. package/src/peer-store/store.js +0 -263
  392. package/src/peer-store/types.ts +0 -245
  393. package/src/ping/constants.js +0 -8
  394. package/src/ping/index.js +0 -85
  395. package/src/ping/util.js +0 -18
  396. package/src/pnet/crypto.js +0 -84
  397. package/src/pnet/errors.js +0 -7
  398. package/src/pnet/index.js +0 -86
  399. package/src/pnet/key-generator.js +0 -33
  400. package/src/pubsub-adapter.js +0 -61
  401. package/src/record/README.md +0 -130
  402. package/src/record/envelope/envelope.d.ts +0 -77
  403. package/src/record/envelope/envelope.js +0 -243
  404. package/src/record/envelope/envelope.proto +0 -19
  405. package/src/record/envelope/index.js +0 -183
  406. package/src/record/peer-record/consts.js +0 -14
  407. package/src/record/peer-record/index.js +0 -113
  408. package/src/record/peer-record/peer-record.d.ts +0 -133
  409. package/src/record/peer-record/peer-record.js +0 -367
  410. package/src/record/peer-record/peer-record.proto +0 -18
  411. package/src/record/utils.js +0 -25
  412. package/src/registrar.js +0 -127
  413. package/src/transport-manager.js +0 -269
  414. package/src/types.ts +0 -98
  415. package/src/upgrader.js +0 -492
@@ -1,20 +1,11 @@
1
- 'use strict'
2
-
3
- const { Multiaddr } = require('multiaddr')
4
- const { CircuitRelay } = require('../protocol')
5
-
6
- /**
7
- * @typedef {import('./stream-handler')} StreamHandler
8
- * @typedef {import('../protocol').ICircuitRelay} ICircuitRelay
9
- */
1
+ import { Multiaddr } from '@multiformats/multiaddr'
2
+ import { CircuitRelay } from '../pb/index.js'
3
+ import type { StreamHandler } from './stream-handler.js'
10
4
 
11
5
  /**
12
6
  * Write a response
13
- *
14
- * @param {StreamHandler} streamHandler
15
- * @param {import('../protocol').CircuitRelay.Status} status
16
7
  */
17
- function writeResponse (streamHandler, status) {
8
+ function writeResponse (streamHandler: StreamHandler, status: CircuitRelay.Status) {
18
9
  streamHandler.write({
19
10
  type: CircuitRelay.Type.STATUS,
20
11
  code: status
@@ -23,18 +14,15 @@ function writeResponse (streamHandler, status) {
23
14
 
24
15
  /**
25
16
  * Validate incomming HOP/STOP message
26
- *
27
- * @param {ICircuitRelay} msg - A CircuitRelay unencoded protobuf message
28
- * @param {StreamHandler} streamHandler
29
17
  */
30
- function validateAddrs (msg, streamHandler) {
18
+ export function validateAddrs (msg: CircuitRelay, streamHandler: StreamHandler) {
31
19
  try {
32
- if (msg.dstPeer && msg.dstPeer.addrs) {
20
+ if (msg.dstPeer?.addrs != null) {
33
21
  msg.dstPeer.addrs.forEach((addr) => {
34
22
  return new Multiaddr(addr)
35
23
  })
36
24
  }
37
- } catch (/** @type {any} */ err) {
25
+ } catch (err: any) {
38
26
  writeResponse(streamHandler, msg.type === CircuitRelay.Type.HOP
39
27
  ? CircuitRelay.Status.HOP_DST_MULTIADDR_INVALID
40
28
  : CircuitRelay.Status.STOP_DST_MULTIADDR_INVALID)
@@ -42,19 +30,15 @@ function validateAddrs (msg, streamHandler) {
42
30
  }
43
31
 
44
32
  try {
45
- if (msg.srcPeer && msg.srcPeer.addrs) {
33
+ if (msg.srcPeer?.addrs != null) {
46
34
  msg.srcPeer.addrs.forEach((addr) => {
47
35
  return new Multiaddr(addr)
48
36
  })
49
37
  }
50
- } catch (/** @type {any} */ err) {
38
+ } catch (err: any) {
51
39
  writeResponse(streamHandler, msg.type === CircuitRelay.Type.HOP
52
40
  ? CircuitRelay.Status.HOP_SRC_MULTIADDR_INVALID
53
41
  : CircuitRelay.Status.STOP_SRC_MULTIADDR_INVALID)
54
42
  throw err
55
43
  }
56
44
  }
57
-
58
- module.exports = {
59
- validateAddrs
60
- }
@@ -0,0 +1,31 @@
1
+ const minute = 60 * 1000
2
+
3
+ /**
4
+ * Delay before HOP relay service is advertised on the network
5
+ */
6
+ export const ADVERTISE_BOOT_DELAY = 15 * minute
7
+
8
+ /**
9
+ * Delay Between HOP relay service advertisements on the network
10
+ */
11
+ export const ADVERTISE_TTL = 30 * minute
12
+
13
+ /**
14
+ * Multicodec code
15
+ */
16
+ export const CIRCUIT_PROTO_CODE = 290
17
+
18
+ /**
19
+ * PeerStore metadaBook key for HOP relay service
20
+ */
21
+ export const HOP_METADATA_KEY = 'hop_relay'
22
+
23
+ /**
24
+ * PeerStore metadaBook value for HOP relay service
25
+ */
26
+ export const HOP_METADATA_VALUE = 'true'
27
+
28
+ /**
29
+ * Relay HOP relay service namespace for discovery
30
+ */
31
+ export const RELAY_RENDEZVOUS_NS = '/libp2p/relay'
@@ -0,0 +1,120 @@
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 } from '@libp2p/interfaces/peer-store'
14
+ import type { Startable } from '@libp2p/interfaces'
15
+ import type { Components } from '@libp2p/interfaces/components'
16
+
17
+ const log = logger('libp2p:relay')
18
+
19
+ export interface RelayAdvertiseConfig {
20
+ bootDelay?: number
21
+ enabled?: boolean
22
+ ttl?: number
23
+ }
24
+
25
+ export interface HopConfig {
26
+ enabled?: boolean
27
+ active?: boolean
28
+ }
29
+
30
+ export interface AutoRelayConfig {
31
+ enabled?: boolean
32
+
33
+ /**
34
+ * maximum number of relays to listen
35
+ */
36
+ maxListeners: number
37
+ }
38
+
39
+ export interface RelayInit {
40
+ addressSorter?: AddressSorter
41
+ maxListeners?: number
42
+ onError?: (error: Error, msg?: string) => void
43
+ hop: HopConfig
44
+ advertise: RelayAdvertiseConfig
45
+ autoRelay: AutoRelayConfig
46
+ }
47
+
48
+ export class Relay implements Startable {
49
+ private readonly components: Components
50
+ private readonly init: RelayInit
51
+ // @ts-expect-error this field isn't used anywhere?
52
+ private readonly autoRelay?: AutoRelay
53
+ private timeout?: any
54
+ private started: boolean
55
+
56
+ /**
57
+ * Creates an instance of Relay
58
+ */
59
+ constructor (components: Components, init: RelayInit) {
60
+ this.components = components
61
+ // Create autoRelay if enabled
62
+ this.autoRelay = init.autoRelay?.enabled !== false
63
+ ? new AutoRelay(components, {
64
+ addressSorter: init.addressSorter,
65
+ ...init.autoRelay
66
+ })
67
+ : undefined
68
+
69
+ this.started = false
70
+ this.init = init
71
+ this._advertiseService = this._advertiseService.bind(this)
72
+ }
73
+
74
+ isStarted () {
75
+ return this.started
76
+ }
77
+
78
+ /**
79
+ * Start Relay service
80
+ */
81
+ async start () {
82
+ // Advertise service if HOP enabled
83
+ if (this.init.hop.enabled !== false && this.init.advertise.enabled !== false) {
84
+ this.timeout = setDelayedInterval(
85
+ this._advertiseService, this.init.advertise.ttl, this.init.advertise.bootDelay
86
+ )
87
+ }
88
+
89
+ this.started = true
90
+ }
91
+
92
+ /**
93
+ * Stop Relay service
94
+ */
95
+ async stop () {
96
+ if (this.timeout != null) {
97
+ clearDelayedInterval(this.timeout)
98
+ }
99
+
100
+ this.started = false
101
+ }
102
+
103
+ /**
104
+ * Advertise hop relay service in the network.
105
+ */
106
+ async _advertiseService () {
107
+ try {
108
+ const cid = await namespaceToCid(RELAY_RENDEZVOUS_NS)
109
+ await this.components.getContentRouting().provide(cid)
110
+ } catch (err: any) {
111
+ if (err.code === codes.ERR_NO_ROUTERS_AVAILABLE) {
112
+ log.error('a content router, such as a DHT, must be provided in order to advertise the relay service', err)
113
+ // Stop the advertise
114
+ await this.stop()
115
+ } else {
116
+ log.error(err)
117
+ }
118
+ }
119
+ }
120
+ }
@@ -1,33 +1,27 @@
1
- 'use strict'
1
+ import { CustomEvent, EventEmitter } from '@libp2p/interfaces'
2
+ import type { ConnectionManager } from '@libp2p/interfaces/registrar'
3
+ import type { Dialer } from '@libp2p/interfaces/dialer'
4
+ import type { Listener } from '@libp2p/interfaces/transport'
5
+ import { Multiaddr } from '@multiformats/multiaddr'
2
6
 
3
- const { EventEmitter } = require('events')
4
- const { Multiaddr } = require('multiaddr')
5
-
6
- /**
7
- * @typedef {import('libp2p-interfaces/src/transport/types').Listener} Listener
8
- */
7
+ export interface ListenerOptions {
8
+ dialer: Dialer
9
+ connectionManager: ConnectionManager
10
+ }
9
11
 
10
- /**
11
- * @param {import('../')} libp2p
12
- * @returns {Listener} a transport listener
13
- */
14
- module.exports = (libp2p) => {
12
+ export function createListener (options: ListenerOptions): Listener {
15
13
  const listeningAddrs = new Map()
16
14
 
17
15
  /**
18
16
  * Add swarm handler and listen for incoming connections
19
- *
20
- * @param {Multiaddr} addr
21
- * @returns {Promise<void>}
22
17
  */
23
- async function listen (addr) {
24
- const addrString = String(addr).split('/p2p-circuit').find(a => a !== '')
25
-
26
- const relayConn = await libp2p.dial(new Multiaddr(addrString))
18
+ async function listen (addr: Multiaddr): Promise<void> {
19
+ const addrString = addr.toString().split('/p2p-circuit').find(a => a !== '')
20
+ const relayConn = await options.dialer.dial(new Multiaddr(addrString))
27
21
  const relayedAddr = relayConn.remoteAddr.encapsulate('/p2p-circuit')
28
22
 
29
- listeningAddrs.set(relayConn.remotePeer.toB58String(), relayedAddr)
30
- listener.emit('listening')
23
+ listeningAddrs.set(relayConn.remotePeer.toString(), relayedAddr)
24
+ listener.dispatchEvent(new CustomEvent('listening'))
31
25
  }
32
26
 
33
27
  /**
@@ -54,20 +48,20 @@ module.exports = (libp2p) => {
54
48
  return addrs
55
49
  }
56
50
 
57
- /** @type Listener */
58
- const listener = Object.assign(new EventEmitter(), {
59
- close: () => Promise.resolve(),
51
+ const listener: Listener = Object.assign(new EventEmitter(), {
52
+ close: async () => await Promise.resolve(),
60
53
  listen,
61
54
  getAddrs
62
55
  })
63
56
 
64
57
  // Remove listeningAddrs when a peer disconnects
65
- libp2p.connectionManager.on('peer:disconnect', (connection) => {
66
- const deleted = listeningAddrs.delete(connection.remotePeer.toB58String())
58
+ options.connectionManager.addEventListener('peer:disconnect', (evt) => {
59
+ const { detail: connection } = evt
60
+ const deleted = listeningAddrs.delete(connection.remotePeer.toString())
67
61
 
68
62
  if (deleted) {
69
63
  // Announce listen addresses change
70
- listener.emit('close')
64
+ listener.dispatchEvent(new CustomEvent('close'))
71
65
  }
72
66
  })
73
67
 
@@ -0,0 +1,2 @@
1
+
2
+ export const RELAY_CODEC = '/libp2p/circuit/relay/0.1.0'
@@ -1,4 +1,4 @@
1
- syntax = "proto2";
1
+ syntax = "proto3";
2
2
 
3
3
  message CircuitRelay {
4
4
 
@@ -0,0 +1,88 @@
1
+ /* eslint-disable import/export */
2
+ /* eslint-disable @typescript-eslint/no-namespace */
3
+
4
+ import { enumeration, encodeMessage, decodeMessage, message, bytes } from 'protons-runtime'
5
+
6
+ export interface CircuitRelay {
7
+ type?: CircuitRelay.Type
8
+ srcPeer?: CircuitRelay.Peer
9
+ dstPeer?: CircuitRelay.Peer
10
+ code?: CircuitRelay.Status
11
+ }
12
+
13
+ export namespace CircuitRelay {
14
+ export enum Status {
15
+ SUCCESS = 'SUCCESS',
16
+ HOP_SRC_ADDR_TOO_LONG = 'HOP_SRC_ADDR_TOO_LONG',
17
+ HOP_DST_ADDR_TOO_LONG = 'HOP_DST_ADDR_TOO_LONG',
18
+ HOP_SRC_MULTIADDR_INVALID = 'HOP_SRC_MULTIADDR_INVALID',
19
+ HOP_DST_MULTIADDR_INVALID = 'HOP_DST_MULTIADDR_INVALID',
20
+ HOP_NO_CONN_TO_DST = 'HOP_NO_CONN_TO_DST',
21
+ HOP_CANT_DIAL_DST = 'HOP_CANT_DIAL_DST',
22
+ HOP_CANT_OPEN_DST_STREAM = 'HOP_CANT_OPEN_DST_STREAM',
23
+ HOP_CANT_SPEAK_RELAY = 'HOP_CANT_SPEAK_RELAY',
24
+ HOP_CANT_RELAY_TO_SELF = 'HOP_CANT_RELAY_TO_SELF',
25
+ STOP_SRC_ADDR_TOO_LONG = 'STOP_SRC_ADDR_TOO_LONG',
26
+ STOP_DST_ADDR_TOO_LONG = 'STOP_DST_ADDR_TOO_LONG',
27
+ STOP_SRC_MULTIADDR_INVALID = 'STOP_SRC_MULTIADDR_INVALID',
28
+ STOP_DST_MULTIADDR_INVALID = 'STOP_DST_MULTIADDR_INVALID',
29
+ STOP_RELAY_REFUSED = 'STOP_RELAY_REFUSED',
30
+ MALFORMED_MESSAGE = 'MALFORMED_MESSAGE'
31
+ }
32
+
33
+ export namespace Status {
34
+ export const codec = () => {
35
+ return enumeration<typeof Status>(Status)
36
+ }
37
+ }
38
+ export enum Type {
39
+ HOP = 'HOP',
40
+ STOP = 'STOP',
41
+ STATUS = 'STATUS',
42
+ CAN_HOP = 'CAN_HOP'
43
+ }
44
+
45
+ export namespace Type {
46
+ export const codec = () => {
47
+ return enumeration<typeof Type>(Type)
48
+ }
49
+ }
50
+ export interface Peer {
51
+ id: Uint8Array
52
+ addrs: Uint8Array[]
53
+ }
54
+
55
+ export namespace Peer {
56
+ export const codec = () => {
57
+ return message<Peer>({
58
+ 1: { name: 'id', codec: bytes },
59
+ 2: { name: 'addrs', codec: bytes, repeats: true }
60
+ })
61
+ }
62
+
63
+ export const encode = (obj: Peer): Uint8Array => {
64
+ return encodeMessage(obj, Peer.codec())
65
+ }
66
+
67
+ export const decode = (buf: Uint8Array): Peer => {
68
+ return decodeMessage(buf, Peer.codec())
69
+ }
70
+ }
71
+
72
+ export const codec = () => {
73
+ return message<CircuitRelay>({
74
+ 1: { name: 'type', codec: CircuitRelay.Type.codec(), optional: true },
75
+ 2: { name: 'srcPeer', codec: CircuitRelay.Peer.codec(), optional: true },
76
+ 3: { name: 'dstPeer', codec: CircuitRelay.Peer.codec(), optional: true },
77
+ 4: { name: 'code', codec: CircuitRelay.Status.codec(), optional: true }
78
+ })
79
+ }
80
+
81
+ export const encode = (obj: CircuitRelay): Uint8Array => {
82
+ return encodeMessage(obj, CircuitRelay.codec())
83
+ }
84
+
85
+ export const decode = (buf: Uint8Array): CircuitRelay => {
86
+ return decodeMessage(buf, CircuitRelay.codec())
87
+ }
88
+ }
@@ -0,0 +1,216 @@
1
+ import { logger } from '@libp2p/logger'
2
+ import errCode from 'err-code'
3
+ import * as mafmt from '@multiformats/mafmt'
4
+ import { Multiaddr } from '@multiformats/multiaddr'
5
+ import { CircuitRelay as CircuitPB } from './pb/index.js'
6
+ import { codes } from '../errors.js'
7
+ import { streamToMaConnection } from '@libp2p/utils/stream-to-ma-conn'
8
+ import { RELAY_CODEC } from './multicodec.js'
9
+ import { createListener } from './listener.js'
10
+ import { handleCanHop, handleHop, hop } from './circuit/hop.js'
11
+ import { handleStop } from './circuit/stop.js'
12
+ import { StreamHandler } from './circuit/stream-handler.js'
13
+ import { symbol } from '@libp2p/interfaces/transport'
14
+ import { peerIdFromString } from '@libp2p/peer-id'
15
+ import { Components, Initializable } from '@libp2p/interfaces/components'
16
+ import type { AbortOptions } from '@libp2p/interfaces'
17
+ import type { IncomingStreamData } from '@libp2p/interfaces/registrar'
18
+ import type { Listener, Transport, CreateListenerOptions, ConnectionHandler } from '@libp2p/interfaces/transport'
19
+ import type { Connection } from '@libp2p/interfaces/connection'
20
+
21
+ const log = logger('libp2p:circuit')
22
+
23
+ export class Circuit implements Transport, Initializable {
24
+ private handler?: ConnectionHandler
25
+ private components: Components = new Components()
26
+
27
+ init (components: Components): void {
28
+ this.components = components
29
+ void this.components.getRegistrar().handle(RELAY_CODEC, (data) => {
30
+ void this._onProtocol(data).catch(err => {
31
+ log.error(err)
32
+ })
33
+ })
34
+ .catch(err => {
35
+ log.error(err)
36
+ })
37
+ }
38
+
39
+ hopEnabled () {
40
+ return true
41
+ }
42
+
43
+ hopActive () {
44
+ return true
45
+ }
46
+
47
+ get [symbol] (): true {
48
+ return true
49
+ }
50
+
51
+ get [Symbol.toStringTag] () {
52
+ return this.constructor.name
53
+ }
54
+
55
+ async _onProtocol (data: IncomingStreamData) {
56
+ const { connection, stream } = data
57
+ const streamHandler = new StreamHandler({ stream })
58
+ const request = await streamHandler.read()
59
+
60
+ if (request == null) {
61
+ log('request was invalid, could not read from stream')
62
+ streamHandler.write({
63
+ type: CircuitPB.Type.STATUS,
64
+ code: CircuitPB.Status.MALFORMED_MESSAGE
65
+ })
66
+ streamHandler.close()
67
+ return
68
+ }
69
+
70
+ let virtualConnection
71
+
72
+ switch (request.type) {
73
+ case CircuitPB.Type.CAN_HOP: {
74
+ log('received CAN_HOP request from %p', connection.remotePeer)
75
+ await handleCanHop({ circuit: this, connection, streamHandler })
76
+ break
77
+ }
78
+ case CircuitPB.Type.HOP: {
79
+ log('received HOP request from %p', connection.remotePeer)
80
+ virtualConnection = await handleHop({
81
+ connection,
82
+ request,
83
+ streamHandler,
84
+ circuit: this,
85
+ connectionManager: this.components.getConnectionManager()
86
+ })
87
+ break
88
+ }
89
+ case CircuitPB.Type.STOP: {
90
+ log('received STOP request from %p', connection.remotePeer)
91
+ virtualConnection = await handleStop({
92
+ connection,
93
+ request,
94
+ streamHandler
95
+ })
96
+ break
97
+ }
98
+ default: {
99
+ log('Request of type %s not supported', request.type)
100
+ streamHandler.write({
101
+ type: CircuitPB.Type.STATUS,
102
+ code: CircuitPB.Status.MALFORMED_MESSAGE
103
+ })
104
+ streamHandler.close()
105
+ return
106
+ }
107
+ }
108
+
109
+ if (virtualConnection != null) {
110
+ // @ts-expect-error dst peer will not be undefined
111
+ const remoteAddr = new Multiaddr(request.dstPeer.addrs[0])
112
+ // @ts-expect-error dst peer will not be undefined
113
+ const localAddr = new Multiaddr(request.srcPeer.addrs[0])
114
+ const maConn = streamToMaConnection({
115
+ stream: virtualConnection,
116
+ remoteAddr,
117
+ localAddr
118
+ })
119
+ const type = request.type === CircuitPB.Type.HOP ? 'relay' : 'inbound'
120
+ log('new %s connection %s', type, maConn.remoteAddr)
121
+
122
+ const conn = await this.components.getUpgrader().upgradeInbound(maConn)
123
+ log('%s connection %s upgraded', type, maConn.remoteAddr)
124
+
125
+ if (this.handler != null) {
126
+ this.handler(conn)
127
+ }
128
+ }
129
+ }
130
+
131
+ /**
132
+ * Dial a peer over a relay
133
+ */
134
+ async dial (ma: Multiaddr, options: AbortOptions = {}): Promise<Connection> {
135
+ // Check the multiaddr to see if it contains a relay and a destination peer
136
+ const addrs = ma.toString().split('/p2p-circuit')
137
+ const relayAddr = new Multiaddr(addrs[0])
138
+ const destinationAddr = new Multiaddr(addrs[addrs.length - 1])
139
+ const relayId = relayAddr.getPeerId()
140
+ const destinationId = destinationAddr.getPeerId()
141
+
142
+ if (relayId == null || destinationId == null) {
143
+ const errMsg = 'Circuit relay dial failed as addresses did not have peer id'
144
+ log.error(errMsg)
145
+ throw errCode(new Error(errMsg), codes.ERR_RELAYED_DIAL)
146
+ }
147
+
148
+ const relayPeer = peerIdFromString(relayId)
149
+ const destinationPeer = peerIdFromString(destinationId)
150
+
151
+ let disconnectOnFailure = false
152
+ let relayConnection = this.components.getConnectionManager().getConnection(relayPeer)
153
+ if (relayConnection == null) {
154
+ relayConnection = await this.components.getDialer().dial(relayAddr, options)
155
+ disconnectOnFailure = true
156
+ }
157
+
158
+ try {
159
+ const virtualConnection = await hop({
160
+ connection: relayConnection,
161
+ request: {
162
+ type: CircuitPB.Type.HOP,
163
+ srcPeer: {
164
+ id: this.components.getPeerId().toBytes(),
165
+ addrs: this.components.getAddressManager().getAddresses().map(addr => addr.bytes)
166
+ },
167
+ dstPeer: {
168
+ id: destinationPeer.toBytes(),
169
+ addrs: [new Multiaddr(destinationAddr).bytes]
170
+ }
171
+ }
172
+ })
173
+
174
+ const localAddr = relayAddr.encapsulate(`/p2p-circuit/p2p/${this.components.getPeerId().toString()}`)
175
+ const maConn = streamToMaConnection({
176
+ stream: virtualConnection,
177
+ remoteAddr: ma,
178
+ localAddr
179
+ })
180
+ log('new outbound connection %s', maConn.remoteAddr)
181
+
182
+ return await this.components.getUpgrader().upgradeOutbound(maConn)
183
+ } catch (err: any) {
184
+ log.error('Circuit relay dial failed', err)
185
+ disconnectOnFailure && await relayConnection.close()
186
+ throw err
187
+ }
188
+ }
189
+
190
+ /**
191
+ * Create a listener
192
+ */
193
+ createListener (options: CreateListenerOptions): Listener {
194
+ // Called on successful HOP and STOP requests
195
+ this.handler = options.handler
196
+
197
+ return createListener({
198
+ dialer: this.components.getDialer(),
199
+ connectionManager: this.components.getConnectionManager()
200
+ })
201
+ }
202
+
203
+ /**
204
+ * Filter check for all Multiaddrs that this transport can dial on
205
+ *
206
+ * @param {Multiaddr[]} multiaddrs
207
+ * @returns {Multiaddr[]}
208
+ */
209
+ filter (multiaddrs: Multiaddr[]): Multiaddr[] {
210
+ multiaddrs = Array.isArray(multiaddrs) ? multiaddrs : [multiaddrs]
211
+
212
+ return multiaddrs.filter((ma) => {
213
+ return mafmt.Circuit.matches(ma)
214
+ })
215
+ }
216
+ }
@@ -0,0 +1,12 @@
1
+ import { CID } from 'multiformats/cid'
2
+ import { sha256 } from 'multiformats/hashes/sha2'
3
+
4
+ /**
5
+ * Convert a namespace string into a cid
6
+ */
7
+ export async function namespaceToCid (namespace: string): Promise<CID> {
8
+ const bytes = new TextEncoder().encode(namespace)
9
+ const hash = await sha256.digest(bytes)
10
+
11
+ return CID.createV0(hash)
12
+ }