libp2p 0.36.2 → 0.37.0-b09eb8f

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