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,382 @@
1
+ import { logger } from '@libp2p/logger'
2
+ import all from 'it-all'
3
+ import filter from 'it-filter'
4
+ import { pipe } from 'it-pipe'
5
+ import errCode from 'err-code'
6
+ import { Multiaddr, Resolver } from '@multiformats/multiaddr'
7
+ import { TimeoutController } from 'timeout-abort-controller'
8
+ import { AbortError } from '@libp2p/interfaces/errors'
9
+ import { anySignal } from 'any-signal'
10
+ // @ts-expect-error setMaxListeners is missing from the node 16 types
11
+ import { setMaxListeners } from 'events'
12
+ import { DialAction, DialRequest } from './dial-request.js'
13
+ import { publicAddressesFirst } from '@libp2p/utils/address-sort'
14
+ import { trackedMap } from '@libp2p/tracked-map'
15
+ import { codes } from '../../errors.js'
16
+ import {
17
+ DIAL_TIMEOUT,
18
+ MAX_PARALLEL_DIALS,
19
+ MAX_PER_PEER_DIALS,
20
+ MAX_ADDRS_TO_DIAL
21
+ } from '../../constants.js'
22
+ import type { Connection } from '@libp2p/interfaces/connection'
23
+ import type { AbortOptions } from '@libp2p/interfaces'
24
+ import type { Startable } from '@libp2p/interfaces/startable'
25
+ import type { PeerId } from '@libp2p/interfaces/peer-id'
26
+ import { getPeer } from '../../get-peer.js'
27
+ import sort from 'it-sort'
28
+ import { Components, Initializable } from '@libp2p/interfaces/components'
29
+ import map from 'it-map'
30
+ import type { AddressSorter } from '@libp2p/interfaces/peer-store'
31
+ import type { ComponentMetricsTracker } from '@libp2p/interfaces/metrics'
32
+
33
+ const log = logger('libp2p:dialer')
34
+
35
+ const METRICS_COMPONENT = 'dialler'
36
+ const METRICS_PENDING_DIALS = 'pending-dials'
37
+ const METRICS_PENDING_DIAL_TARGETS = 'pending-dial-targets'
38
+
39
+ export interface DialTarget {
40
+ id: string
41
+ addrs: Multiaddr[]
42
+ }
43
+
44
+ export interface PendingDial {
45
+ dialRequest: DialRequest
46
+ controller: TimeoutController
47
+ promise: Promise<Connection>
48
+ destroy: () => void
49
+ }
50
+
51
+ export interface PendingDialTarget {
52
+ resolve: (value: any) => void
53
+ reject: (err: Error) => void
54
+ }
55
+
56
+ export interface DialerInit {
57
+ /**
58
+ * Sort the known addresses of a peer before trying to dial
59
+ */
60
+ addressSorter?: AddressSorter
61
+
62
+ /**
63
+ * Number of max concurrent dials
64
+ */
65
+ maxParallelDials?: number
66
+
67
+ /**
68
+ * Number of max addresses to dial for a given peer
69
+ */
70
+ maxAddrsToDial?: number
71
+
72
+ /**
73
+ * How long a dial attempt is allowed to take
74
+ */
75
+ dialTimeout?: number
76
+
77
+ /**
78
+ * Number of max concurrent dials per peer
79
+ */
80
+ maxDialsPerPeer?: number
81
+
82
+ /**
83
+ * Multiaddr resolvers to use when dialing
84
+ */
85
+ resolvers?: Record<string, Resolver>
86
+ metrics?: ComponentMetricsTracker
87
+ }
88
+
89
+ export class Dialer implements Startable, Initializable {
90
+ private components: Components = new Components()
91
+ private readonly addressSorter: AddressSorter
92
+ private readonly maxAddrsToDial: number
93
+ private readonly timeout: number
94
+ private readonly maxDialsPerPeer: number
95
+ public tokens: number[]
96
+ public pendingDials: Map<string, PendingDial>
97
+ public pendingDialTargets: Map<string, PendingDialTarget>
98
+ private started: boolean
99
+
100
+ constructor (init: DialerInit = {}) {
101
+ this.started = false
102
+ this.addressSorter = init.addressSorter ?? publicAddressesFirst
103
+ this.maxAddrsToDial = init.maxAddrsToDial ?? MAX_ADDRS_TO_DIAL
104
+ this.timeout = init.dialTimeout ?? DIAL_TIMEOUT
105
+ this.maxDialsPerPeer = init.maxDialsPerPeer ?? MAX_PER_PEER_DIALS
106
+ this.tokens = [...new Array(init.maxParallelDials ?? MAX_PARALLEL_DIALS)].map((_, index) => index)
107
+ this.pendingDials = trackedMap({
108
+ component: METRICS_COMPONENT,
109
+ metric: METRICS_PENDING_DIALS,
110
+ metrics: init.metrics
111
+ })
112
+ this.pendingDialTargets = trackedMap({
113
+ component: METRICS_COMPONENT,
114
+ metric: METRICS_PENDING_DIAL_TARGETS,
115
+ metrics: init.metrics
116
+ })
117
+
118
+ for (const [key, value] of Object.entries(init.resolvers ?? {})) {
119
+ Multiaddr.resolvers.set(key, value)
120
+ }
121
+ }
122
+
123
+ init (components: Components): void {
124
+ this.components = components
125
+ }
126
+
127
+ isStarted () {
128
+ return this.started
129
+ }
130
+
131
+ async start () {
132
+ this.started = true
133
+ }
134
+
135
+ /**
136
+ * Clears any pending dials
137
+ */
138
+ async stop () {
139
+ this.started = false
140
+
141
+ for (const dial of this.pendingDials.values()) {
142
+ try {
143
+ dial.controller.abort()
144
+ } catch (err: any) {
145
+ log.error(err)
146
+ }
147
+ }
148
+ this.pendingDials.clear()
149
+
150
+ for (const pendingTarget of this.pendingDialTargets.values()) {
151
+ pendingTarget.reject(new AbortError('Dialer was destroyed'))
152
+ }
153
+ this.pendingDialTargets.clear()
154
+ }
155
+
156
+ /**
157
+ * Connects to a given `peer` by dialing all of its known addresses.
158
+ * The dial to the first address that is successfully able to upgrade a connection
159
+ * will be used.
160
+ */
161
+ async dial (peer: PeerId | Multiaddr, options: AbortOptions = {}): Promise<Connection> {
162
+ const { id, multiaddrs } = getPeer(peer)
163
+
164
+ if (this.components.getPeerId().equals(id)) {
165
+ throw errCode(new Error('Tried to dial self'), codes.ERR_DIALED_SELF)
166
+ }
167
+
168
+ log('check multiaddrs %p', id)
169
+
170
+ if (multiaddrs != null && multiaddrs.length > 0) {
171
+ log('storing multiaddrs %p', id, multiaddrs)
172
+ await this.components.getPeerStore().addressBook.add(id, multiaddrs)
173
+ }
174
+
175
+ if (await this.components.getConnectionGater().denyDialPeer(id)) {
176
+ throw errCode(new Error('The dial request is blocked by gater.allowDialPeer'), codes.ERR_PEER_DIAL_INTERCEPTED)
177
+ }
178
+
179
+ log('creating dial target for %p', id)
180
+
181
+ const dialTarget = await this._createCancellableDialTarget(id)
182
+
183
+ if (dialTarget.addrs.length === 0) {
184
+ throw errCode(new Error('The dial request has no valid addresses'), codes.ERR_NO_VALID_ADDRESSES)
185
+ }
186
+
187
+ const pendingDial = this.pendingDials.get(dialTarget.id) ?? this._createPendingDial(dialTarget, options)
188
+
189
+ try {
190
+ const connection = await pendingDial.promise
191
+ log('dial succeeded to %s', dialTarget.id)
192
+ return connection
193
+ } catch (err: any) {
194
+ log('dial failed to %s', dialTarget.id, err)
195
+ // Error is a timeout
196
+ if (pendingDial.controller.signal.aborted) {
197
+ err.code = codes.ERR_TIMEOUT
198
+ }
199
+ log.error(err)
200
+ throw err
201
+ } finally {
202
+ pendingDial.destroy()
203
+ }
204
+ }
205
+
206
+ /**
207
+ * Connects to a given `peer` by dialing all of its known addresses.
208
+ * The dial to the first address that is successfully able to upgrade a connection
209
+ * will be used.
210
+ */
211
+ async _createCancellableDialTarget (peer: PeerId): Promise<DialTarget> {
212
+ // Make dial target promise cancellable
213
+ const id = `${(parseInt(String(Math.random() * 1e9), 10)).toString()}${Date.now()}`
214
+ const cancellablePromise = new Promise<DialTarget>((resolve, reject) => {
215
+ this.pendingDialTargets.set(id, { resolve, reject })
216
+ })
217
+
218
+ try {
219
+ const dialTarget = await Promise.race([
220
+ this._createDialTarget(peer),
221
+ cancellablePromise
222
+ ])
223
+
224
+ return dialTarget
225
+ } finally {
226
+ this.pendingDialTargets.delete(id)
227
+ }
228
+ }
229
+
230
+ /**
231
+ * Creates a DialTarget. The DialTarget is used to create and track
232
+ * the DialRequest to a given peer.
233
+ * If a multiaddr is received it should be the first address attempted.
234
+ * Multiaddrs not supported by the available transports will be filtered out.
235
+ */
236
+ async _createDialTarget (peer: PeerId): Promise<DialTarget> {
237
+ const knownAddrs = await pipe(
238
+ await this.components.getPeerStore().addressBook.get(peer),
239
+ (source) => filter(source, async (address) => {
240
+ return !(await this.components.getConnectionGater().denyDialMultiaddr(peer, address.multiaddr))
241
+ }),
242
+ (source) => sort(source, this.addressSorter),
243
+ (source) => map(source, (address) => {
244
+ const ma = address.multiaddr
245
+
246
+ if (peer.toString() === ma.getPeerId()) {
247
+ return ma
248
+ }
249
+
250
+ return ma.encapsulate(`/p2p/${peer.toString()}`)
251
+ }),
252
+ async (source) => await all(source)
253
+ )
254
+
255
+ const addrs: Multiaddr[] = []
256
+ for (const a of knownAddrs) {
257
+ const resolvedAddrs = await this._resolve(a)
258
+ resolvedAddrs.forEach(ra => addrs.push(ra))
259
+ }
260
+
261
+ // Multiaddrs not supported by the available transports will be filtered out.
262
+ const supportedAddrs = addrs.filter(a => this.components.getTransportManager().transportForMultiaddr(a))
263
+
264
+ if (supportedAddrs.length > this.maxAddrsToDial) {
265
+ await this.components.getPeerStore().delete(peer)
266
+ throw errCode(new Error('dial with more addresses than allowed'), codes.ERR_TOO_MANY_ADDRESSES)
267
+ }
268
+
269
+ return {
270
+ id: peer.toString(),
271
+ addrs: supportedAddrs
272
+ }
273
+ }
274
+
275
+ /**
276
+ * Creates a PendingDial that wraps the underlying DialRequest
277
+ */
278
+ _createPendingDial (dialTarget: DialTarget, options: AbortOptions = {}): PendingDial {
279
+ /**
280
+ * @param {Multiaddr} addr
281
+ * @param {{ signal: { aborted: any; }; }} options
282
+ */
283
+ const dialAction: DialAction = async (addr, options = {}) => {
284
+ if (options.signal?.aborted === true) {
285
+ throw errCode(new Error('already aborted'), codes.ERR_ALREADY_ABORTED)
286
+ }
287
+
288
+ return await this.components.getTransportManager().dial(addr, options)
289
+ }
290
+
291
+ const dialRequest = new DialRequest({
292
+ addrs: dialTarget.addrs,
293
+ dialAction,
294
+ dialer: this
295
+ })
296
+
297
+ // Combine the timeout signal and options.signal, if provided
298
+ const timeoutController = new TimeoutController(this.timeout)
299
+
300
+ const signals = [timeoutController.signal]
301
+ ;(options.signal != null) && signals.push(options.signal)
302
+ const signal = anySignal(signals)
303
+
304
+ // this signal will potentially be used while dialing lots of
305
+ // peers so prevent MaxListenersExceededWarning appearing in the console
306
+ try {
307
+ // fails on node < 15.4
308
+ setMaxListeners?.(Infinity, signal)
309
+ } catch {}
310
+
311
+ const pendingDial = {
312
+ dialRequest,
313
+ controller: timeoutController,
314
+ promise: dialRequest.run({ ...options, signal }),
315
+ destroy: () => {
316
+ timeoutController.clear()
317
+ this.pendingDials.delete(dialTarget.id)
318
+ }
319
+ }
320
+ this.pendingDials.set(dialTarget.id, pendingDial)
321
+
322
+ return pendingDial
323
+ }
324
+
325
+ getTokens (num: number) {
326
+ const total = Math.min(num, this.maxDialsPerPeer, this.tokens.length)
327
+ const tokens = this.tokens.splice(0, total)
328
+ log('%d tokens request, returning %d, %d remaining', num, total, this.tokens.length)
329
+ return tokens
330
+ }
331
+
332
+ releaseToken (token: number) {
333
+ // Guard against duplicate releases
334
+ if (this.tokens.includes(token)) {
335
+ return
336
+ }
337
+
338
+ log('token %d released', token)
339
+ this.tokens.push(token)
340
+ }
341
+
342
+ /**
343
+ * Resolve multiaddr recursively
344
+ */
345
+ async _resolve (ma: Multiaddr): Promise<Multiaddr[]> {
346
+ // TODO: recursive logic should live in multiaddr once dns4/dns6 support is in place
347
+ // Now only supporting resolve for dnsaddr
348
+ const resolvableProto = ma.protoNames().includes('dnsaddr')
349
+
350
+ // Multiaddr is not resolvable? End recursion!
351
+ if (!resolvableProto) {
352
+ return [ma]
353
+ }
354
+
355
+ const resolvedMultiaddrs = await this._resolveRecord(ma)
356
+ const recursiveMultiaddrs = await Promise.all(resolvedMultiaddrs.map(async (nm) => {
357
+ return await this._resolve(nm)
358
+ }))
359
+
360
+ const addrs = recursiveMultiaddrs.flat()
361
+ return addrs.reduce<Multiaddr[]>((array, newM) => {
362
+ if (array.find(m => m.equals(newM)) == null) {
363
+ array.push(newM)
364
+ }
365
+ return array
366
+ }, ([]))
367
+ }
368
+
369
+ /**
370
+ * Resolve a given multiaddr. If this fails, an empty array will be returned
371
+ */
372
+ async _resolveRecord (ma: Multiaddr): Promise<Multiaddr[]> {
373
+ try {
374
+ ma = new Multiaddr(ma.toString()) // Use current multiaddr module
375
+ const multiaddrs = await ma.resolve()
376
+ return multiaddrs
377
+ } catch (err) {
378
+ log.error(`multiaddr ${ma.toString()} could not be resolved`, err)
379
+ return []
380
+ }
381
+ }
382
+ }