libp2p 0.36.2 → 0.37.0-5934b13

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,37 @@
1
+ import { logger } from '@libp2p/logger';
2
+ import { TimeoutController } from 'timeout-abort-controller';
3
+ const log = logger('libp2p:dialer:auto-dialer');
4
+ export class AutoDialer {
5
+ constructor(components, init) {
6
+ this.components = components;
7
+ this.enabled = init.enabled;
8
+ this.minConnections = init.minConnections;
9
+ this.dialTimeout = init.dialTimeout;
10
+ }
11
+ handle(evt) {
12
+ const { detail: peer } = evt;
13
+ if (!this.enabled) {
14
+ return;
15
+ }
16
+ const connections = this.components.getConnectionManager().getConnections(peer.id);
17
+ // If auto dialing is on and we have no connection to the peer, check if we should dial
18
+ if (connections.length === 0) {
19
+ const minConnections = this.minConnections ?? 0;
20
+ const allConnections = this.components.getConnectionManager().getConnections();
21
+ if (minConnections > allConnections.length) {
22
+ log('auto-dialing discovered peer %p with timeout %d', peer.id, this.dialTimeout);
23
+ const controller = new TimeoutController(this.dialTimeout);
24
+ void this.components.getConnectionManager().openConnection(peer.id, {
25
+ signal: controller.signal
26
+ })
27
+ .catch(err => {
28
+ log.error('could not connect to discovered peer %p with %o', peer.id, err);
29
+ })
30
+ .finally(() => {
31
+ controller.clear();
32
+ });
33
+ }
34
+ }
35
+ }
36
+ }
37
+ //# sourceMappingURL=auto-dialer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-dialer.js","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/auto-dialer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAE5D,MAAM,GAAG,GAAG,MAAM,CAAC,2BAA2B,CAAC,CAAA;AAQ/C,MAAM,OAAO,UAAU;IAMrB,YAAa,UAAsB,EAAE,IAAoB;QACvD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAA;QACzC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;IACrC,CAAC;IAEM,MAAM,CAAE,GAA0B;QACvC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAA;QAE5B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAM;SACP;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAElF,uFAAuF;QACvF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,CAAC,CAAA;YAE/C,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,cAAc,EAAE,CAAA;YAE9E,IAAI,cAAc,GAAG,cAAc,CAAC,MAAM,EAAE;gBAC1C,GAAG,CAAC,iDAAiD,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;gBAEjF,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBAE1D,KAAK,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE;oBAClE,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CAAC;qBACC,KAAK,CAAC,GAAG,CAAC,EAAE;oBACX,GAAG,CAAC,KAAK,CAAC,iDAAiD,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;gBAC5E,CAAC,CAAC;qBACD,OAAO,CAAC,GAAG,EAAE;oBACZ,UAAU,CAAC,KAAK,EAAE,CAAA;gBACpB,CAAC,CAAC,CAAA;aACL;SACF;IACH,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ import type { Multiaddr } from '@multiformats/multiaddr';
2
+ import type { Connection } from '@libp2p/interfaces/connection';
3
+ import type { AbortOptions } from '@libp2p/interfaces';
4
+ import type { Dialer } from './index.js';
5
+ export interface DialAction {
6
+ (m: Multiaddr, options: AbortOptions): Promise<Connection>;
7
+ }
8
+ export interface DialRequestOptions {
9
+ addrs: Multiaddr[];
10
+ dialAction: DialAction;
11
+ dialer: Dialer;
12
+ }
13
+ export declare class DialRequest {
14
+ private readonly addrs;
15
+ private readonly dialer;
16
+ private readonly dialAction;
17
+ /**
18
+ * Manages running the `dialAction` on multiple provided `addrs` in parallel
19
+ * up to a maximum determined by the number of tokens returned
20
+ * from `dialer.getTokens`. Once a DialRequest is created, it can be
21
+ * started using `DialRequest.run(options)`. Once a single dial has succeeded,
22
+ * all other dials in the request will be cancelled.
23
+ */
24
+ constructor(options: DialRequestOptions);
25
+ run(options?: AbortOptions): Promise<Connection>;
26
+ }
27
+ //# sourceMappingURL=dial-request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dial-request.d.ts","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/dial-request.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAIxC,MAAM,WAAW,UAAU;IACzB,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;CAC3D;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,SAAS,EAAE,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IAEvC;;;;;;OAMG;gBACU,OAAO,EAAE,kBAAkB;IAYlC,GAAG,CAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;CAyF5D"}
@@ -0,0 +1,107 @@
1
+ import errCode from 'err-code';
2
+ import { anySignal } from 'any-signal';
3
+ import FIFO from 'p-fifo';
4
+ import { setMaxListeners } from 'events';
5
+ import { codes } from '../../errors.js';
6
+ import { logger } from '@libp2p/logger';
7
+ const log = logger('libp2p:dialer:dial-request');
8
+ export class DialRequest {
9
+ /**
10
+ * Manages running the `dialAction` on multiple provided `addrs` in parallel
11
+ * up to a maximum determined by the number of tokens returned
12
+ * from `dialer.getTokens`. Once a DialRequest is created, it can be
13
+ * started using `DialRequest.run(options)`. Once a single dial has succeeded,
14
+ * all other dials in the request will be cancelled.
15
+ */
16
+ constructor(options) {
17
+ const { addrs, dialAction, dialer } = options;
18
+ this.addrs = addrs;
19
+ this.dialer = dialer;
20
+ this.dialAction = dialAction;
21
+ }
22
+ async run(options = {}) {
23
+ const tokens = this.dialer.getTokens(this.addrs.length);
24
+ // If no tokens are available, throw
25
+ if (tokens.length < 1) {
26
+ throw errCode(new Error('No dial tokens available'), codes.ERR_NO_DIAL_TOKENS);
27
+ }
28
+ const tokenHolder = new FIFO();
29
+ for (const token of tokens) {
30
+ void tokenHolder.push(token).catch(err => {
31
+ log.error(err);
32
+ });
33
+ }
34
+ const dialAbortControllers = this.addrs.map(() => {
35
+ const controller = new AbortController();
36
+ try {
37
+ // fails on node < 15.4
38
+ setMaxListeners?.(Infinity, controller.signal);
39
+ }
40
+ catch { }
41
+ return controller;
42
+ });
43
+ if (options.signal != null) {
44
+ try {
45
+ // fails on node < 15.4
46
+ setMaxListeners?.(Infinity, options.signal);
47
+ }
48
+ catch { }
49
+ }
50
+ let completedDials = 0;
51
+ let done = false;
52
+ try {
53
+ return await Promise.any(this.addrs.map(async (addr, i) => {
54
+ const token = await tokenHolder.shift(); // get token
55
+ // End attempt once another attempt succeeded
56
+ if (done) {
57
+ this.dialer.releaseToken(tokens.splice(tokens.indexOf(token), 1)[0]);
58
+ throw errCode(new Error('dialAction already succeeded'), codes.ERR_ALREADY_SUCCEEDED);
59
+ }
60
+ const controller = dialAbortControllers[i];
61
+ if (controller == null) {
62
+ throw errCode(new Error('dialAction did not come with an AbortController'), codes.ERR_INVALID_PARAMETERS);
63
+ }
64
+ let conn;
65
+ try {
66
+ const signal = controller.signal;
67
+ conn = await this.dialAction(addr, { ...options, signal: (options.signal != null) ? anySignal([signal, options.signal]) : signal });
68
+ // Remove the successful AbortController so it is not aborted
69
+ dialAbortControllers[i] = undefined;
70
+ }
71
+ finally {
72
+ completedDials++;
73
+ // If we have more or equal dials remaining than tokens, recycle the token, otherwise release it
74
+ if (this.addrs.length - completedDials >= tokens.length) {
75
+ void tokenHolder.push(token).catch(err => {
76
+ log.error(err);
77
+ });
78
+ }
79
+ else {
80
+ this.dialer.releaseToken(tokens.splice(tokens.indexOf(token), 1)[0]);
81
+ }
82
+ }
83
+ if (conn == null) {
84
+ // Notify Promise.any that attempt was not successful
85
+ // to prevent from returning undefined despite there
86
+ // were successful dial attempts
87
+ throw errCode(new Error('dialAction led to empty object'), codes.ERR_TRANSPORT_DIAL_FAILED);
88
+ }
89
+ else {
90
+ // This dial succeeded, don't attempt anything else
91
+ done = true;
92
+ }
93
+ return conn;
94
+ }));
95
+ }
96
+ finally {
97
+ // success/failure happened, abort everything else
98
+ dialAbortControllers.forEach(c => {
99
+ if (c !== undefined) {
100
+ c.abort();
101
+ }
102
+ });
103
+ tokens.forEach(token => this.dialer.releaseToken(token)); // release tokens back to the dialer
104
+ }
105
+ }
106
+ }
107
+ //# sourceMappingURL=dial-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dial-request.js","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/dial-request.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ import { Multiaddr, Resolver } from '@multiformats/multiaddr';
2
+ import { TimeoutController } from 'timeout-abort-controller';
3
+ import { DialRequest } from './dial-request.js';
4
+ import type { Connection } from '@libp2p/interfaces/connection';
5
+ import type { AbortOptions } from '@libp2p/interfaces';
6
+ import type { Startable } from '@libp2p/interfaces/startable';
7
+ import type { PeerId } from '@libp2p/interfaces/peer-id';
8
+ import { Components, Initializable } from '@libp2p/interfaces/components';
9
+ import type { AddressSorter } from '@libp2p/interfaces/peer-store';
10
+ import type { ComponentMetricsTracker } from '@libp2p/interfaces/metrics';
11
+ export interface DialTarget {
12
+ id: string;
13
+ addrs: Multiaddr[];
14
+ }
15
+ export interface PendingDial {
16
+ dialRequest: DialRequest;
17
+ controller: TimeoutController;
18
+ promise: Promise<Connection>;
19
+ destroy: () => void;
20
+ }
21
+ export interface PendingDialTarget {
22
+ resolve: (value: any) => void;
23
+ reject: (err: Error) => void;
24
+ }
25
+ export interface DialerInit {
26
+ /**
27
+ * Sort the known addresses of a peer before trying to dial
28
+ */
29
+ addressSorter?: AddressSorter;
30
+ /**
31
+ * Number of max concurrent dials
32
+ */
33
+ maxParallelDials?: number;
34
+ /**
35
+ * Number of max addresses to dial for a given peer
36
+ */
37
+ maxAddrsToDial?: number;
38
+ /**
39
+ * How long a dial attempt is allowed to take
40
+ */
41
+ dialTimeout?: number;
42
+ /**
43
+ * Number of max concurrent dials per peer
44
+ */
45
+ maxDialsPerPeer?: number;
46
+ /**
47
+ * Multiaddr resolvers to use when dialing
48
+ */
49
+ resolvers?: Record<string, Resolver>;
50
+ metrics?: ComponentMetricsTracker;
51
+ }
52
+ export declare class Dialer implements Startable, Initializable {
53
+ private components;
54
+ private readonly addressSorter;
55
+ private readonly maxAddrsToDial;
56
+ private readonly timeout;
57
+ private readonly maxDialsPerPeer;
58
+ tokens: number[];
59
+ pendingDials: Map<string, PendingDial>;
60
+ pendingDialTargets: Map<string, PendingDialTarget>;
61
+ private started;
62
+ constructor(init?: DialerInit);
63
+ init(components: Components): void;
64
+ isStarted(): boolean;
65
+ start(): Promise<void>;
66
+ /**
67
+ * Clears any pending dials
68
+ */
69
+ stop(): Promise<void>;
70
+ /**
71
+ * Connects to a given `peer` by dialing all of its known addresses.
72
+ * The dial to the first address that is successfully able to upgrade a connection
73
+ * will be used.
74
+ */
75
+ dial(peer: PeerId | Multiaddr, options?: AbortOptions): Promise<Connection>;
76
+ /**
77
+ * Connects to a given `peer` by dialing all of its known addresses.
78
+ * The dial to the first address that is successfully able to upgrade a connection
79
+ * will be used.
80
+ */
81
+ _createCancellableDialTarget(peer: PeerId): Promise<DialTarget>;
82
+ /**
83
+ * Creates a DialTarget. The DialTarget is used to create and track
84
+ * the DialRequest to a given peer.
85
+ * If a multiaddr is received it should be the first address attempted.
86
+ * Multiaddrs not supported by the available transports will be filtered out.
87
+ */
88
+ _createDialTarget(peer: PeerId): Promise<DialTarget>;
89
+ /**
90
+ * Creates a PendingDial that wraps the underlying DialRequest
91
+ */
92
+ _createPendingDial(dialTarget: DialTarget, options?: AbortOptions): PendingDial;
93
+ getTokens(num: number): number[];
94
+ releaseToken(token: number): void;
95
+ /**
96
+ * Resolve multiaddr recursively
97
+ */
98
+ _resolve(ma: Multiaddr): Promise<Multiaddr[]>;
99
+ /**
100
+ * Resolve a given multiaddr. If this fails, an empty array will be returned
101
+ */
102
+ _resolveRecord(ma: Multiaddr): Promise<Multiaddr[]>;
103
+ }
104
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,266 @@
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 } 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 { 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 { DIAL_TIMEOUT, MAX_PARALLEL_DIALS, MAX_PER_PEER_DIALS, MAX_ADDRS_TO_DIAL } from '../../constants.js';
16
+ import { getPeer } from '../../get-peer.js';
17
+ import sort from 'it-sort';
18
+ import { Components } from '@libp2p/interfaces/components';
19
+ import map from 'it-map';
20
+ const log = logger('libp2p:dialer');
21
+ const METRICS_COMPONENT = 'dialler';
22
+ const METRICS_PENDING_DIALS = 'pending-dials';
23
+ const METRICS_PENDING_DIAL_TARGETS = 'pending-dial-targets';
24
+ export class Dialer {
25
+ constructor(init = {}) {
26
+ this.components = new Components();
27
+ this.started = false;
28
+ this.addressSorter = init.addressSorter ?? publicAddressesFirst;
29
+ this.maxAddrsToDial = init.maxAddrsToDial ?? MAX_ADDRS_TO_DIAL;
30
+ this.timeout = init.dialTimeout ?? DIAL_TIMEOUT;
31
+ this.maxDialsPerPeer = init.maxDialsPerPeer ?? MAX_PER_PEER_DIALS;
32
+ this.tokens = [...new Array(init.maxParallelDials ?? MAX_PARALLEL_DIALS)].map((_, index) => index);
33
+ this.pendingDials = trackedMap({
34
+ component: METRICS_COMPONENT,
35
+ metric: METRICS_PENDING_DIALS,
36
+ metrics: init.metrics
37
+ });
38
+ this.pendingDialTargets = trackedMap({
39
+ component: METRICS_COMPONENT,
40
+ metric: METRICS_PENDING_DIAL_TARGETS,
41
+ metrics: init.metrics
42
+ });
43
+ for (const [key, value] of Object.entries(init.resolvers ?? {})) {
44
+ Multiaddr.resolvers.set(key, value);
45
+ }
46
+ }
47
+ init(components) {
48
+ this.components = components;
49
+ }
50
+ isStarted() {
51
+ return this.started;
52
+ }
53
+ async start() {
54
+ this.started = true;
55
+ }
56
+ /**
57
+ * Clears any pending dials
58
+ */
59
+ async stop() {
60
+ this.started = false;
61
+ for (const dial of this.pendingDials.values()) {
62
+ try {
63
+ dial.controller.abort();
64
+ }
65
+ catch (err) {
66
+ log.error(err);
67
+ }
68
+ }
69
+ this.pendingDials.clear();
70
+ for (const pendingTarget of this.pendingDialTargets.values()) {
71
+ pendingTarget.reject(new AbortError('Dialer was destroyed'));
72
+ }
73
+ this.pendingDialTargets.clear();
74
+ }
75
+ /**
76
+ * Connects to a given `peer` by dialing all of its known addresses.
77
+ * The dial to the first address that is successfully able to upgrade a connection
78
+ * will be used.
79
+ */
80
+ async dial(peer, options = {}) {
81
+ const { id, multiaddrs } = getPeer(peer);
82
+ if (this.components.getPeerId().equals(id)) {
83
+ throw errCode(new Error('Tried to dial self'), codes.ERR_DIALED_SELF);
84
+ }
85
+ log('check multiaddrs %p', id);
86
+ if (multiaddrs != null && multiaddrs.length > 0) {
87
+ log('storing multiaddrs %p', id, multiaddrs);
88
+ await this.components.getPeerStore().addressBook.add(id, multiaddrs);
89
+ }
90
+ if (await this.components.getConnectionGater().denyDialPeer(id)) {
91
+ throw errCode(new Error('The dial request is blocked by gater.allowDialPeer'), codes.ERR_PEER_DIAL_INTERCEPTED);
92
+ }
93
+ log('creating dial target for %p', id);
94
+ const dialTarget = await this._createCancellableDialTarget(id);
95
+ if (dialTarget.addrs.length === 0) {
96
+ throw errCode(new Error('The dial request has no valid addresses'), codes.ERR_NO_VALID_ADDRESSES);
97
+ }
98
+ const pendingDial = this.pendingDials.get(dialTarget.id) ?? this._createPendingDial(dialTarget, options);
99
+ try {
100
+ const connection = await pendingDial.promise;
101
+ log('dial succeeded to %s', dialTarget.id);
102
+ return connection;
103
+ }
104
+ catch (err) {
105
+ log('dial failed to %s', dialTarget.id, err);
106
+ // Error is a timeout
107
+ if (pendingDial.controller.signal.aborted) {
108
+ err.code = codes.ERR_TIMEOUT;
109
+ }
110
+ log.error(err);
111
+ throw err;
112
+ }
113
+ finally {
114
+ pendingDial.destroy();
115
+ }
116
+ }
117
+ /**
118
+ * Connects to a given `peer` by dialing all of its known addresses.
119
+ * The dial to the first address that is successfully able to upgrade a connection
120
+ * will be used.
121
+ */
122
+ async _createCancellableDialTarget(peer) {
123
+ // Make dial target promise cancellable
124
+ const id = `${(parseInt(String(Math.random() * 1e9), 10)).toString()}${Date.now()}`;
125
+ const cancellablePromise = new Promise((resolve, reject) => {
126
+ this.pendingDialTargets.set(id, { resolve, reject });
127
+ });
128
+ try {
129
+ const dialTarget = await Promise.race([
130
+ this._createDialTarget(peer),
131
+ cancellablePromise
132
+ ]);
133
+ return dialTarget;
134
+ }
135
+ finally {
136
+ this.pendingDialTargets.delete(id);
137
+ }
138
+ }
139
+ /**
140
+ * Creates a DialTarget. The DialTarget is used to create and track
141
+ * the DialRequest to a given peer.
142
+ * If a multiaddr is received it should be the first address attempted.
143
+ * Multiaddrs not supported by the available transports will be filtered out.
144
+ */
145
+ async _createDialTarget(peer) {
146
+ const knownAddrs = await pipe(await this.components.getPeerStore().addressBook.get(peer), (source) => filter(source, async (address) => {
147
+ return !(await this.components.getConnectionGater().denyDialMultiaddr(peer, address.multiaddr));
148
+ }), (source) => sort(source, this.addressSorter), (source) => map(source, (address) => {
149
+ const ma = address.multiaddr;
150
+ if (peer.toString() === ma.getPeerId()) {
151
+ return ma;
152
+ }
153
+ return ma.encapsulate(`/p2p/${peer.toString()}`);
154
+ }), async (source) => await all(source));
155
+ const addrs = [];
156
+ for (const a of knownAddrs) {
157
+ const resolvedAddrs = await this._resolve(a);
158
+ resolvedAddrs.forEach(ra => addrs.push(ra));
159
+ }
160
+ // Multiaddrs not supported by the available transports will be filtered out.
161
+ const supportedAddrs = addrs.filter(a => this.components.getTransportManager().transportForMultiaddr(a));
162
+ if (supportedAddrs.length > this.maxAddrsToDial) {
163
+ await this.components.getPeerStore().delete(peer);
164
+ throw errCode(new Error('dial with more addresses than allowed'), codes.ERR_TOO_MANY_ADDRESSES);
165
+ }
166
+ return {
167
+ id: peer.toString(),
168
+ addrs: supportedAddrs
169
+ };
170
+ }
171
+ /**
172
+ * Creates a PendingDial that wraps the underlying DialRequest
173
+ */
174
+ _createPendingDial(dialTarget, options = {}) {
175
+ /**
176
+ * @param {Multiaddr} addr
177
+ * @param {{ signal: { aborted: any; }; }} options
178
+ */
179
+ const dialAction = async (addr, options = {}) => {
180
+ if (options.signal?.aborted === true) {
181
+ throw errCode(new Error('already aborted'), codes.ERR_ALREADY_ABORTED);
182
+ }
183
+ return await this.components.getTransportManager().dial(addr, options);
184
+ };
185
+ const dialRequest = new DialRequest({
186
+ addrs: dialTarget.addrs,
187
+ dialAction,
188
+ dialer: this
189
+ });
190
+ // Combine the timeout signal and options.signal, if provided
191
+ const timeoutController = new TimeoutController(this.timeout);
192
+ const signals = [timeoutController.signal];
193
+ (options.signal != null) && signals.push(options.signal);
194
+ const signal = anySignal(signals);
195
+ // this signal will potentially be used while dialing lots of
196
+ // peers so prevent MaxListenersExceededWarning appearing in the console
197
+ try {
198
+ // fails on node < 15.4
199
+ setMaxListeners?.(Infinity, signal);
200
+ }
201
+ catch { }
202
+ const pendingDial = {
203
+ dialRequest,
204
+ controller: timeoutController,
205
+ promise: dialRequest.run({ ...options, signal }),
206
+ destroy: () => {
207
+ timeoutController.clear();
208
+ this.pendingDials.delete(dialTarget.id);
209
+ }
210
+ };
211
+ this.pendingDials.set(dialTarget.id, pendingDial);
212
+ return pendingDial;
213
+ }
214
+ getTokens(num) {
215
+ const total = Math.min(num, this.maxDialsPerPeer, this.tokens.length);
216
+ const tokens = this.tokens.splice(0, total);
217
+ log('%d tokens request, returning %d, %d remaining', num, total, this.tokens.length);
218
+ return tokens;
219
+ }
220
+ releaseToken(token) {
221
+ // Guard against duplicate releases
222
+ if (this.tokens.includes(token)) {
223
+ return;
224
+ }
225
+ log('token %d released', token);
226
+ this.tokens.push(token);
227
+ }
228
+ /**
229
+ * Resolve multiaddr recursively
230
+ */
231
+ async _resolve(ma) {
232
+ // TODO: recursive logic should live in multiaddr once dns4/dns6 support is in place
233
+ // Now only supporting resolve for dnsaddr
234
+ const resolvableProto = ma.protoNames().includes('dnsaddr');
235
+ // Multiaddr is not resolvable? End recursion!
236
+ if (!resolvableProto) {
237
+ return [ma];
238
+ }
239
+ const resolvedMultiaddrs = await this._resolveRecord(ma);
240
+ const recursiveMultiaddrs = await Promise.all(resolvedMultiaddrs.map(async (nm) => {
241
+ return await this._resolve(nm);
242
+ }));
243
+ const addrs = recursiveMultiaddrs.flat();
244
+ return addrs.reduce((array, newM) => {
245
+ if (array.find(m => m.equals(newM)) == null) {
246
+ array.push(newM);
247
+ }
248
+ return array;
249
+ }, ([]));
250
+ }
251
+ /**
252
+ * Resolve a given multiaddr. If this fails, an empty array will be returned
253
+ */
254
+ async _resolveRecord(ma) {
255
+ try {
256
+ ma = new Multiaddr(ma.toString()); // Use current multiaddr module
257
+ const multiaddrs = await ma.resolve();
258
+ return multiaddrs;
259
+ }
260
+ catch (err) {
261
+ log.error(`multiaddr ${ma.toString()} could not be resolved`, err);
262
+ return [];
263
+ }
264
+ }
265
+ }
266
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/index.ts"],"names":[],"mappings":"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"}