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
@@ -0,0 +1,284 @@
1
+ import { logger } from '@libp2p/logger'
2
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
3
+ import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
4
+ import { RELAY_CODEC } from './multicodec.js'
5
+ import { canHop } from './circuit/hop.js'
6
+ import { namespaceToCid } from './utils.js'
7
+ import {
8
+ CIRCUIT_PROTO_CODE,
9
+ HOP_METADATA_KEY,
10
+ HOP_METADATA_VALUE,
11
+ RELAY_RENDEZVOUS_NS
12
+ } from './constants.js'
13
+ import type { PeerId } from '@libp2p/interfaces/peer-id'
14
+ import type { AddressSorter, PeerProtocolsChangeData } from '@libp2p/interfaces/peer-store'
15
+ import type { Connection } from '@libp2p/interfaces/connection'
16
+ import type { Components } from '@libp2p/interfaces/components'
17
+ import sort from 'it-sort'
18
+ import all from 'it-all'
19
+ import { pipe } from 'it-pipe'
20
+ import { publicAddressesFirst } from '@libp2p/utils/address-sort'
21
+
22
+ const log = logger('libp2p:auto-relay')
23
+
24
+ const noop = () => {}
25
+
26
+ export interface AutoRelayInit {
27
+ addressSorter?: AddressSorter
28
+ maxListeners?: number
29
+ onError?: (error: Error, msg?: string) => void
30
+ }
31
+
32
+ export class AutoRelay {
33
+ private readonly components: Components
34
+ private readonly addressSorter: AddressSorter
35
+ private readonly maxListeners: number
36
+ private readonly listenRelays: Set<string>
37
+ private readonly onError: (error: Error, msg?: string) => void
38
+
39
+ constructor (components: Components, init: AutoRelayInit) {
40
+ this.components = components
41
+ this.addressSorter = init.addressSorter ?? publicAddressesFirst
42
+ this.maxListeners = init.maxListeners ?? 1
43
+ this.listenRelays = new Set()
44
+ this.onError = init.onError ?? noop
45
+
46
+ this._onProtocolChange = this._onProtocolChange.bind(this)
47
+ this._onPeerDisconnected = this._onPeerDisconnected.bind(this)
48
+
49
+ this.components.getPeerStore().addEventListener('change:protocols', (evt) => {
50
+ void this._onProtocolChange(evt).catch(err => {
51
+ log.error(err)
52
+ })
53
+ })
54
+ this.components.getConnectionManager().addEventListener('peer:disconnect', this._onPeerDisconnected)
55
+ }
56
+
57
+ /**
58
+ * Check if a peer supports the relay protocol.
59
+ * If the protocol is not supported, check if it was supported before and remove it as a listen relay.
60
+ * If the protocol is supported, check if the peer supports **HOP** and add it as a listener if
61
+ * inside the threshold.
62
+ */
63
+ async _onProtocolChange (evt: CustomEvent<PeerProtocolsChangeData>) {
64
+ const {
65
+ peerId,
66
+ protocols
67
+ } = evt.detail
68
+ const id = peerId.toString()
69
+
70
+ // Check if it has the protocol
71
+ const hasProtocol = protocols.find(protocol => protocol === RELAY_CODEC)
72
+
73
+ // If no protocol, check if we were keeping the peer before as a listenRelay
74
+ if (hasProtocol == null) {
75
+ if (this.listenRelays.has(id)) {
76
+ await this._removeListenRelay(id)
77
+ }
78
+
79
+ return
80
+ }
81
+
82
+ if (this.listenRelays.has(id)) {
83
+ return
84
+ }
85
+
86
+ // If protocol, check if can hop, store info in the metadataBook and listen on it
87
+ try {
88
+ const connection = this.components.getConnectionManager().getConnection(peerId)
89
+
90
+ if (connection == null) {
91
+ return
92
+ }
93
+
94
+ // Do not hop on a relayed connection
95
+ if (connection.remoteAddr.protoCodes().includes(CIRCUIT_PROTO_CODE)) {
96
+ log(`relayed connection to ${id} will not be used to hop on`)
97
+ return
98
+ }
99
+
100
+ const supportsHop = await canHop({ connection })
101
+
102
+ if (supportsHop) {
103
+ await this.components.getPeerStore().metadataBook.setValue(peerId, HOP_METADATA_KEY, uint8ArrayFromString(HOP_METADATA_VALUE))
104
+ await this._addListenRelay(connection, id)
105
+ }
106
+ } catch (err: any) {
107
+ this.onError(err)
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Peer disconnects
113
+ */
114
+ _onPeerDisconnected (evt: CustomEvent<Connection>) {
115
+ const connection = evt.detail
116
+ const peerId = connection.remotePeer
117
+ const id = peerId.toString()
118
+
119
+ // Not listening on this relay
120
+ if (!this.listenRelays.has(id)) {
121
+ return
122
+ }
123
+
124
+ this._removeListenRelay(id).catch(err => {
125
+ log.error(err)
126
+ })
127
+ }
128
+
129
+ /**
130
+ * Attempt to listen on the given relay connection
131
+ */
132
+ async _addListenRelay (connection: Connection, id: string): Promise<void> {
133
+ try {
134
+ // Check if already listening on enough relays
135
+ if (this.listenRelays.size >= this.maxListeners) {
136
+ return
137
+ }
138
+
139
+ // Get peer known addresses and sort them with public addresses first
140
+ const remoteAddrs = await pipe(
141
+ await this.components.getPeerStore().addressBook.get(connection.remotePeer),
142
+ (source) => sort(source, this.addressSorter),
143
+ async (source) => await all(source)
144
+ )
145
+
146
+ // Attempt to listen on relay
147
+ const result = await Promise.all(
148
+ remoteAddrs.map(async addr => {
149
+ try {
150
+ let multiaddr = addr.multiaddr
151
+
152
+ if (multiaddr.getPeerId() == null) {
153
+ multiaddr = multiaddr.encapsulate(`/p2p/${connection.remotePeer.toString()}`)
154
+ }
155
+
156
+ multiaddr = multiaddr.encapsulate('/p2p-circuit')
157
+
158
+ // Announce multiaddrs will update on listen success by TransportManager event being triggered
159
+ await this.components.getTransportManager().listen([multiaddr])
160
+ return true
161
+ } catch (err: any) {
162
+ log.error('error listening on circuit address', err)
163
+ this.onError(err)
164
+ }
165
+
166
+ return false
167
+ })
168
+ )
169
+
170
+ if (result.includes(true)) {
171
+ this.listenRelays.add(id)
172
+ }
173
+ } catch (err: any) {
174
+ this.onError(err)
175
+ this.listenRelays.delete(id)
176
+ }
177
+ }
178
+
179
+ /**
180
+ * Remove listen relay
181
+ */
182
+ async _removeListenRelay (id: string) {
183
+ if (this.listenRelays.delete(id)) {
184
+ // TODO: this should be responsibility of the connMgr
185
+ await this._listenOnAvailableHopRelays([id])
186
+ }
187
+ }
188
+
189
+ /**
190
+ * Try to listen on available hop relay connections.
191
+ * The following order will happen while we do not have enough relays.
192
+ * 1. Check the metadata store for known relays, try to listen on the ones we are already connected.
193
+ * 2. Dial and try to listen on the peers we know that support hop but are not connected.
194
+ * 3. Search the network.
195
+ */
196
+ async _listenOnAvailableHopRelays (peersToIgnore: string[] = []) {
197
+ // TODO: The peer redial issue on disconnect should be handled by connection gating
198
+ // Check if already listening on enough relays
199
+ if (this.listenRelays.size >= this.maxListeners) {
200
+ return
201
+ }
202
+
203
+ const knownHopsToDial = []
204
+ const peers = await this.components.getPeerStore().all()
205
+
206
+ // Check if we have known hop peers to use and attempt to listen on the already connected
207
+ for (const { id, metadata } of peers) {
208
+ const idStr = id.toString()
209
+
210
+ // Continue to next if listening on this or peer to ignore
211
+ if (this.listenRelays.has(idStr)) {
212
+ continue
213
+ }
214
+
215
+ if (peersToIgnore.includes(idStr)) {
216
+ continue
217
+ }
218
+
219
+ const supportsHop = metadata.get(HOP_METADATA_KEY)
220
+
221
+ // Continue to next if it does not support Hop
222
+ if ((supportsHop == null) || uint8ArrayToString(supportsHop) !== HOP_METADATA_VALUE) {
223
+ continue
224
+ }
225
+
226
+ const connection = this.components.getConnectionManager().getConnection(id)
227
+
228
+ // If not connected, store for possible later use.
229
+ if (connection == null) {
230
+ knownHopsToDial.push(id)
231
+ continue
232
+ }
233
+
234
+ await this._addListenRelay(connection, idStr)
235
+
236
+ // Check if already listening on enough relays
237
+ if (this.listenRelays.size >= this.maxListeners) {
238
+ return
239
+ }
240
+ }
241
+
242
+ // Try to listen on known peers that are not connected
243
+ for (const peerId of knownHopsToDial) {
244
+ await this._tryToListenOnRelay(peerId)
245
+
246
+ // Check if already listening on enough relays
247
+ if (this.listenRelays.size >= this.maxListeners) {
248
+ return
249
+ }
250
+ }
251
+
252
+ // Try to find relays to hop on the network
253
+ try {
254
+ const cid = await namespaceToCid(RELAY_RENDEZVOUS_NS)
255
+ for await (const provider of this.components.getContentRouting().findProviders(cid)) {
256
+ if (provider.multiaddrs.length === 0) {
257
+ continue
258
+ }
259
+
260
+ const peerId = provider.id
261
+ await this.components.getPeerStore().addressBook.add(peerId, provider.multiaddrs)
262
+
263
+ await this._tryToListenOnRelay(peerId)
264
+
265
+ // Check if already listening on enough relays
266
+ if (this.listenRelays.size >= this.maxListeners) {
267
+ return
268
+ }
269
+ }
270
+ } catch (err: any) {
271
+ this.onError(err)
272
+ }
273
+ }
274
+
275
+ async _tryToListenOnRelay (peerId: PeerId) {
276
+ try {
277
+ const connection = await this.components.getDialer().dial(peerId)
278
+ await this._addListenRelay(connection, peerId.toString())
279
+ } catch (err: any) {
280
+ log.error('Could not use %p as relay', peerId, err)
281
+ this.onError(err, `could not connect and listen on known hop relay ${peerId.toString()}`)
282
+ }
283
+ }
284
+ }
@@ -0,0 +1,211 @@
1
+ import { logger } from '@libp2p/logger'
2
+ import errCode from 'err-code'
3
+ import { validateAddrs } from './utils.js'
4
+ import { StreamHandler } from './stream-handler.js'
5
+ import { CircuitRelay as CircuitPB } from '../pb/index.js'
6
+ import { pipe } from 'it-pipe'
7
+ import { codes as Errors } from '../../errors.js'
8
+ import { stop } from './stop.js'
9
+ import { RELAY_CODEC } from '../multicodec.js'
10
+ import type { Connection } from '@libp2p/interfaces/connection'
11
+ import { peerIdFromBytes } from '@libp2p/peer-id'
12
+ import type { Duplex } from 'it-stream-types'
13
+ import type { Circuit } from '../transport.js'
14
+ import type { ConnectionManager } from '@libp2p/interfaces/registrar'
15
+
16
+ const log = logger('libp2p:circuit:hop')
17
+
18
+ export interface HopRequest {
19
+ connection: Connection
20
+ request: CircuitPB
21
+ streamHandler: StreamHandler
22
+ circuit: Circuit
23
+ connectionManager: ConnectionManager
24
+ }
25
+
26
+ export async function handleHop (hopRequest: HopRequest) {
27
+ const {
28
+ connection,
29
+ request,
30
+ streamHandler,
31
+ circuit,
32
+ connectionManager
33
+ } = hopRequest
34
+
35
+ // Ensure hop is enabled
36
+ if (!circuit.hopEnabled()) {
37
+ log('HOP request received but we are not acting as a relay')
38
+ return streamHandler.end({
39
+ type: CircuitPB.Type.STATUS,
40
+ code: CircuitPB.Status.HOP_CANT_SPEAK_RELAY
41
+ })
42
+ }
43
+
44
+ // Validate the HOP request has the required input
45
+ try {
46
+ validateAddrs(request, streamHandler)
47
+ } catch (err: any) {
48
+ log.error('invalid hop request via peer %p %o', connection.remotePeer, err)
49
+
50
+ return
51
+ }
52
+
53
+ if (request.dstPeer == null) {
54
+ log('HOP request received but we do not receive a dstPeer')
55
+ return
56
+ }
57
+
58
+ // Get the connection to the destination (stop) peer
59
+ const destinationPeer = peerIdFromBytes(request.dstPeer.id)
60
+
61
+ const destinationConnection = connectionManager.getConnection(destinationPeer)
62
+ if (destinationConnection == null && !circuit.hopActive()) {
63
+ log('HOP request received but we are not connected to the destination peer')
64
+ return streamHandler.end({
65
+ type: CircuitPB.Type.STATUS,
66
+ code: CircuitPB.Status.HOP_NO_CONN_TO_DST
67
+ })
68
+ }
69
+
70
+ // TODO: Handle being an active relay
71
+ if (destinationConnection == null) {
72
+ log('did not have connection to remote peer')
73
+ return streamHandler.end({
74
+ type: CircuitPB.Type.STATUS,
75
+ code: CircuitPB.Status.HOP_NO_CONN_TO_DST
76
+ })
77
+ }
78
+
79
+ // Handle the incoming HOP request by performing a STOP request
80
+ const stopRequest = {
81
+ type: CircuitPB.Type.STOP,
82
+ dstPeer: request.dstPeer,
83
+ srcPeer: request.srcPeer
84
+ }
85
+
86
+ let destinationStream: Duplex<Uint8Array>
87
+ try {
88
+ log('performing STOP request')
89
+ const result = await stop({
90
+ connection: destinationConnection,
91
+ request: stopRequest
92
+ })
93
+
94
+ if (result == null) {
95
+ throw new Error('Could not stop')
96
+ }
97
+
98
+ destinationStream = result
99
+ } catch (err: any) {
100
+ log.error(err)
101
+
102
+ return
103
+ }
104
+
105
+ log('hop request from %p is valid', connection.remotePeer)
106
+ streamHandler.write({
107
+ type: CircuitPB.Type.STATUS,
108
+ code: CircuitPB.Status.SUCCESS
109
+ })
110
+ const sourceStream = streamHandler.rest()
111
+
112
+ log('creating related connections')
113
+ // Short circuit the two streams to create the relayed connection
114
+ return await pipe(
115
+ sourceStream,
116
+ destinationStream,
117
+ sourceStream
118
+ )
119
+ }
120
+
121
+ export interface HopConfig {
122
+ connection: Connection
123
+ request: CircuitPB
124
+ }
125
+
126
+ /**
127
+ * Performs a HOP request to a relay peer, to request a connection to another
128
+ * peer. A new, virtual, connection will be created between the two via the relay.
129
+ */
130
+ export async function hop (options: HopConfig): Promise<Duplex<Uint8Array>> {
131
+ const {
132
+ connection,
133
+ request
134
+ } = options
135
+
136
+ // Create a new stream to the relay
137
+ const { stream } = await connection.newStream(RELAY_CODEC)
138
+ // Send the HOP request
139
+ const streamHandler = new StreamHandler({ stream })
140
+ streamHandler.write(request)
141
+
142
+ const response = await streamHandler.read()
143
+
144
+ if (response == null) {
145
+ throw errCode(new Error('HOP request had no response'), Errors.ERR_HOP_REQUEST_FAILED)
146
+ }
147
+
148
+ if (response.code === CircuitPB.Status.SUCCESS) {
149
+ log('hop request was successful')
150
+ return streamHandler.rest()
151
+ }
152
+
153
+ log('hop request failed with code %d, closing stream', response.code)
154
+ streamHandler.close()
155
+
156
+ throw errCode(new Error(`HOP request failed with code "${response.code ?? 'unknown'}"`), Errors.ERR_HOP_REQUEST_FAILED)
157
+ }
158
+
159
+ export interface CanHopOptions {
160
+ connection: Connection
161
+ }
162
+
163
+ /**
164
+ * Performs a CAN_HOP request to a relay peer, in order to understand its capabilities
165
+ */
166
+ export async function canHop (options: CanHopOptions) {
167
+ const {
168
+ connection
169
+ } = options
170
+
171
+ // Create a new stream to the relay
172
+ const { stream } = await connection.newStream(RELAY_CODEC)
173
+
174
+ // Send the HOP request
175
+ const streamHandler = new StreamHandler({ stream })
176
+ streamHandler.write({
177
+ type: CircuitPB.Type.CAN_HOP
178
+ })
179
+
180
+ const response = await streamHandler.read()
181
+ await streamHandler.close()
182
+
183
+ if (response == null || response.code !== CircuitPB.Status.SUCCESS) {
184
+ return false
185
+ }
186
+
187
+ return true
188
+ }
189
+
190
+ export interface HandleCanHopOptions {
191
+ connection: Connection
192
+ streamHandler: StreamHandler
193
+ circuit: Circuit
194
+ }
195
+
196
+ /**
197
+ * Creates an unencoded CAN_HOP response based on the Circuits configuration
198
+ */
199
+ export function handleCanHop (options: HandleCanHopOptions) {
200
+ const {
201
+ connection,
202
+ streamHandler,
203
+ circuit
204
+ } = options
205
+ const canHop = circuit.hopEnabled()
206
+ log('can hop (%s) request from %p', canHop, connection.remotePeer)
207
+ streamHandler.end({
208
+ type: CircuitPB.Type.STATUS,
209
+ code: canHop ? CircuitPB.Status.SUCCESS : CircuitPB.Status.HOP_CANT_SPEAK_RELAY
210
+ })
211
+ }
@@ -0,0 +1,78 @@
1
+ import { logger } from '@libp2p/logger'
2
+ import { CircuitRelay as CircuitPB } from '../pb/index.js'
3
+ import { RELAY_CODEC } from '../multicodec.js'
4
+ import { StreamHandler } from './stream-handler.js'
5
+ import { validateAddrs } from './utils.js'
6
+ import type { Connection } from '@libp2p/interfaces/connection'
7
+ import type { Duplex } from 'it-stream-types'
8
+
9
+ const log = logger('libp2p:circuit:stop')
10
+
11
+ export interface HandleStopOptions {
12
+ connection: Connection
13
+ request: CircuitPB
14
+ streamHandler: StreamHandler
15
+ }
16
+
17
+ /**
18
+ * Handles incoming STOP requests
19
+ */
20
+ export function handleStop (options: HandleStopOptions): Duplex<Uint8Array> | undefined {
21
+ const {
22
+ connection,
23
+ request,
24
+ streamHandler
25
+ } = options
26
+
27
+ // Validate the STOP request has the required input
28
+ try {
29
+ validateAddrs(request, streamHandler)
30
+ } catch (err: any) {
31
+ log.error('invalid stop request via peer %p %o', connection.remotePeer, err)
32
+ return
33
+ }
34
+
35
+ // The request is valid
36
+ log('stop request is valid')
37
+ streamHandler.write({
38
+ type: CircuitPB.Type.STATUS,
39
+ code: CircuitPB.Status.SUCCESS
40
+ })
41
+
42
+ return streamHandler.rest()
43
+ }
44
+
45
+ export interface StopOptions {
46
+ connection: Connection
47
+ request: CircuitPB
48
+ }
49
+
50
+ /**
51
+ * Creates a STOP request
52
+ */
53
+ export async function stop (options: StopOptions) {
54
+ const {
55
+ connection,
56
+ request
57
+ } = options
58
+
59
+ const { stream } = await connection.newStream([RELAY_CODEC])
60
+ log('starting stop request to %p', connection.remotePeer)
61
+ const streamHandler = new StreamHandler({ stream })
62
+
63
+ streamHandler.write(request)
64
+ const response = await streamHandler.read()
65
+
66
+ if (response == null) {
67
+ streamHandler.close()
68
+ return
69
+ }
70
+
71
+ if (response.code === CircuitPB.Status.SUCCESS) {
72
+ log('stop request to %p was successful', connection.remotePeer)
73
+ return streamHandler.rest()
74
+ }
75
+
76
+ log('stop request failed with code %d', response.code)
77
+ streamHandler.close()
78
+ }
@@ -0,0 +1,86 @@
1
+ import { logger } from '@libp2p/logger'
2
+ import * as lp from 'it-length-prefixed'
3
+ import { Handshake, handshake } from 'it-handshake'
4
+ import { CircuitRelay } from '../pb/index.js'
5
+ import type { Stream } from '@libp2p/interfaces/connection'
6
+ import type { Source } from 'it-stream-types'
7
+
8
+ const log = logger('libp2p:circuit:stream-handler')
9
+
10
+ export interface StreamHandlerOptions {
11
+ /**
12
+ * A duplex iterable
13
+ */
14
+ stream: Stream
15
+
16
+ /**
17
+ * max bytes length of message
18
+ */
19
+ maxLength?: number
20
+ }
21
+
22
+ export class StreamHandler {
23
+ private readonly stream: Stream
24
+ private readonly shake: Handshake
25
+ private readonly decoder: Source<Uint8Array>
26
+
27
+ constructor (options: StreamHandlerOptions) {
28
+ const { stream, maxLength = 4096 } = options
29
+
30
+ this.stream = stream
31
+ this.shake = handshake(this.stream)
32
+ this.decoder = lp.decode.fromReader(this.shake.reader, { maxDataLength: maxLength })
33
+ }
34
+
35
+ /**
36
+ * Read and decode message
37
+ */
38
+ async read () {
39
+ // @ts-expect-error FIXME is a source, needs to be a generator
40
+ const msg = await this.decoder.next()
41
+
42
+ if (msg.value != null) {
43
+ const value = CircuitRelay.decode(msg.value.slice())
44
+ log('read message type', value.type)
45
+ return value
46
+ }
47
+
48
+ log('read received no value, closing stream')
49
+ // End the stream, we didn't get data
50
+ this.close()
51
+ }
52
+
53
+ /**
54
+ * Encode and write array of buffers
55
+ */
56
+ write (msg: CircuitRelay) {
57
+ log('write message type %s', msg.type)
58
+ this.shake.write(lp.encode.single(CircuitRelay.encode(msg)).slice())
59
+ }
60
+
61
+ /**
62
+ * Return the handshake rest stream and invalidate handler
63
+ */
64
+ rest () {
65
+ this.shake.rest()
66
+ return this.shake.stream
67
+ }
68
+
69
+ /**
70
+ * @param {CircuitRelay} msg - An unencoded CircuitRelay protobuf message
71
+ */
72
+ end (msg: CircuitRelay) {
73
+ this.write(msg)
74
+ this.close()
75
+ }
76
+
77
+ /**
78
+ * Close the stream
79
+ */
80
+ close () {
81
+ log('closing the stream')
82
+ void this.rest().sink([]).catch(err => {
83
+ log.error(err)
84
+ })
85
+ }
86
+ }