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
@@ -1,193 +1,159 @@
1
- export = ConnectionManager;
2
- /**
3
- * @typedef {import('../')} Libp2p
4
- * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection
5
- */
6
- /**
7
- * @typedef {Object} ConnectionManagerOptions
8
- * @property {number} [maxConnections = Infinity] - The maximum number of connections allowed.
9
- * @property {number} [minConnections = 0] - The minimum number of connections to avoid pruning.
10
- * @property {number} [maxData = Infinity] - The max data (in and out), per average interval to allow.
11
- * @property {number} [maxSentData = Infinity] - The max outgoing data, per average interval to allow.
12
- * @property {number} [maxReceivedData = Infinity] - The max incoming data, per average interval to allow.
13
- * @property {number} [maxEventLoopDelay = Infinity] - The upper limit the event loop can take to run.
14
- * @property {number} [pollInterval = 2000] - How often, in milliseconds, metrics and latency should be checked.
15
- * @property {number} [movingAverageInterval = 60000] - How often, in milliseconds, to compute averages.
16
- * @property {number} [defaultPeerValue = 1] - The value of the peer.
17
- * @property {boolean} [autoDial = true] - Should preemptively guarantee connections are above the low watermark.
18
- * @property {number} [autoDialInterval = 10000] - How often, in milliseconds, it should preemptively guarantee connections are above the low watermark.
19
- */
20
- /**
21
- *
22
- * @fires ConnectionManager#peer:connect Emitted when a new peer is connected.
23
- * @fires ConnectionManager#peer:disconnect Emitted when a peer is disconnected.
24
- */
25
- declare class ConnectionManager extends EventEmitter {
1
+ import { SummaryObject } from './latency-monitor.js';
2
+ import type { AbortOptions } from '@libp2p/interfaces';
3
+ import { EventEmitter } from '@libp2p/interfaces/events';
4
+ import type { Startable } from '@libp2p/interfaces/startable';
5
+ import { PeerId } from '@libp2p/interfaces/peer-id';
6
+ import type { Connection } from '@libp2p/interfaces/connection';
7
+ import type { ConnectionManager } from '@libp2p/interfaces/connection-manager';
8
+ import { Components, Initializable } from '@libp2p/interfaces/components';
9
+ import { Dialer } from './dialer/index.js';
10
+ import type { AddressSorter } from '@libp2p/interfaces/peer-store';
11
+ import type { Resolver } from '@multiformats/multiaddr';
12
+ export interface ConnectionManagerInit {
26
13
  /**
27
- * Responsible for managing known connections.
28
- *
29
- * @class
30
- * @param {Libp2p} libp2p
31
- * @param {ConnectionManagerOptions} options
14
+ * The maximum number of connections to keep open
32
15
  */
33
- constructor(libp2p: Libp2p, options?: ConnectionManagerOptions);
34
- _libp2p: import("../");
35
- _peerId: string;
36
- _options: any;
16
+ maxConnections: number;
37
17
  /**
38
- * Map of peer identifiers to their peer value for pruning connections.
39
- *
40
- * @type {Map<string, number>}
18
+ * The minimum number of connections to keep open
41
19
  */
42
- _peerValues: Map<string, number>;
20
+ minConnections: number;
43
21
  /**
44
- * Map of connections per peer
45
- *
46
- * @type {Map<string, Connection[]>}
22
+ * The max data (in and out), per average interval to allow
47
23
  */
48
- connections: Map<string, Connection[]>;
49
- _started: boolean;
50
- _timer: any;
24
+ maxData?: number;
51
25
  /**
52
- * Checks the libp2p metrics to determine if any values have exceeded
53
- * the configured maximums.
54
- *
55
- * @private
26
+ * The max outgoing data, per average interval to allow
56
27
  */
57
- private _checkMetrics;
58
- _latencyMonitor: LatencyMonitor;
28
+ maxSentData?: number;
59
29
  /**
60
- * Get current number of open connections.
30
+ * The max incoming data, per average interval to allow
61
31
  */
62
- get size(): number;
32
+ maxReceivedData?: number;
63
33
  /**
64
- * Starts the Connection Manager. If Metrics are not enabled on libp2p
65
- * only event loop and connection limits will be monitored.
34
+ * The upper limit the event loop can take to run
66
35
  */
67
- start(): void;
36
+ maxEventLoopDelay?: number;
68
37
  /**
69
- * If the event loop is slow, maybe close a connection
70
- *
71
- * @private
72
- * @param {*} summary - The LatencyMonitor summary
38
+ * How often, in milliseconds, metrics and latency should be checked
73
39
  */
74
- private _onLatencyMeasure;
40
+ pollInterval?: number;
75
41
  /**
76
- * Stops the Connection Manager
77
- *
78
- * @async
42
+ * How often, in milliseconds, to compute averages
79
43
  */
80
- stop(): Promise<void>;
44
+ movingAverageInterval?: number;
81
45
  /**
82
- * Cleans up the connections
83
- *
84
- * @async
46
+ * The value of the peer
85
47
  */
86
- _close(): Promise<void>;
48
+ defaultPeerValue?: number;
87
49
  /**
88
- * Sets the value of the given peer. Peers with lower values
89
- * will be disconnected first.
90
- *
91
- * @param {PeerId} peerId
92
- * @param {number} value - A number between 0 and 1
93
- * @returns {void}
50
+ * If true, try to connect to all discovered peers up to the connection manager limit
94
51
  */
95
- setPeerValue(peerId: PeerId, value: number): void;
52
+ autoDial?: boolean;
96
53
  /**
97
- * Tracks the incoming connection and check the connection limit
98
- *
99
- * @param {Connection} connection
54
+ * How long to wait between attempting to keep our number of concurrent connections
55
+ * above minConnections
100
56
  */
101
- onConnect(connection: Connection): Promise<void>;
57
+ autoDialInterval: number;
102
58
  /**
103
- * Removes the connection from tracking
104
- *
105
- * @param {Connection} connection
106
- * @returns {void}
59
+ * Sort the known addresses of a peer before trying to dial
107
60
  */
108
- onDisconnect(connection: Connection): void;
61
+ addressSorter?: AddressSorter;
109
62
  /**
110
- * Get a connection with a peer.
111
- *
112
- * @param {PeerId} peerId
113
- * @returns {Connection|null}
63
+ * Number of max concurrent dials
114
64
  */
115
- get(peerId: PeerId): Connection | null;
65
+ maxParallelDials?: number;
116
66
  /**
117
- * Get all open connections with a peer.
118
- *
119
- * @param {PeerId} peerId
120
- * @returns {Connection[]}
67
+ * Number of max addresses to dial for a given peer
121
68
  */
122
- getAll(peerId: PeerId): Connection[];
69
+ maxAddrsToDial?: number;
123
70
  /**
124
- * If the `value` of `name` has exceeded its limit, maybe close a connection
125
- *
126
- * @private
127
- * @param {string} name - The name of the field to check limits for
128
- * @param {number} value - The current value of the field
71
+ * How long a dial attempt is allowed to take
129
72
  */
130
- private _checkMaxLimit;
73
+ dialTimeout?: number;
131
74
  /**
132
- * If we have more connections than our maximum, close a connection
133
- * to the lowest valued peer.
134
- *
135
- * @private
75
+ * Number of max concurrent dials per peer
136
76
  */
137
- private _maybeDisconnectOne;
77
+ maxDialsPerPeer?: number;
78
+ /**
79
+ * Multiaddr resolvers to use when dialing
80
+ */
81
+ resolvers?: Record<string, Resolver>;
138
82
  }
139
- declare namespace ConnectionManager {
140
- export { Libp2p, Connection, ConnectionManagerOptions };
83
+ export interface ConnectionManagerEvents {
84
+ 'peer:connect': CustomEvent<PeerId>;
85
+ 'peer:disconnect': CustomEvent<PeerId>;
141
86
  }
142
- import { EventEmitter } from "events";
143
- type Connection = import("libp2p-interfaces/src/connection/connection");
144
- import LatencyMonitor = require("./latency-monitor");
145
- import PeerId = require("peer-id");
146
- type Libp2p = import('../');
147
- type ConnectionManagerOptions = {
87
+ /**
88
+ * Responsible for managing known connections.
89
+ */
90
+ export declare class DefaultConnectionManager extends EventEmitter<ConnectionManagerEvents> implements ConnectionManager, Startable, Initializable {
91
+ readonly dialer: Dialer;
92
+ private components;
93
+ private readonly opts;
94
+ private readonly peerValues;
95
+ private readonly connections;
96
+ private started;
97
+ private timer?;
98
+ private readonly latencyMonitor;
99
+ constructor(init: ConnectionManagerInit);
100
+ init(components: Components): void;
101
+ isStarted(): boolean;
148
102
  /**
149
- * - The maximum number of connections allowed.
103
+ * Starts the Connection Manager. If Metrics are not enabled on libp2p
104
+ * only event loop and connection limits will be monitored.
150
105
  */
151
- maxConnections?: number | undefined;
106
+ start(): Promise<void>;
107
+ afterStart(): Promise<void>;
108
+ beforeStop(): Promise<void>;
152
109
  /**
153
- * - The minimum number of connections to avoid pruning.
110
+ * Stops the Connection Manager
154
111
  */
155
- minConnections?: number | undefined;
112
+ stop(): Promise<void>;
156
113
  /**
157
- * - The max data (in and out), per average interval to allow.
114
+ * Cleans up the connections
158
115
  */
159
- maxData?: number | undefined;
116
+ _close(): Promise<void>;
160
117
  /**
161
- * - The max outgoing data, per average interval to allow.
118
+ * Sets the value of the given peer. Peers with lower values
119
+ * will be disconnected first.
162
120
  */
163
- maxSentData?: number | undefined;
121
+ setPeerValue(peerId: PeerId, value: number): void;
164
122
  /**
165
- * - The max incoming data, per average interval to allow.
123
+ * Checks the libp2p metrics to determine if any values have exceeded
124
+ * the configured maximums.
125
+ *
126
+ * @private
166
127
  */
167
- maxReceivedData?: number | undefined;
128
+ _checkMetrics(): Promise<void>;
129
+ onConnect(evt: CustomEvent<Connection>): void;
168
130
  /**
169
- * - The upper limit the event loop can take to run.
131
+ * Tracks the incoming connection and check the connection limit
170
132
  */
171
- maxEventLoopDelay?: number | undefined;
133
+ _onConnect(evt: CustomEvent<Connection>): Promise<void>;
172
134
  /**
173
- * - How often, in milliseconds, metrics and latency should be checked.
135
+ * Removes the connection from tracking
174
136
  */
175
- pollInterval?: number | undefined;
137
+ onDisconnect(evt: CustomEvent<Connection>): void;
138
+ getConnections(peerId?: PeerId): Connection[];
139
+ openConnection(peerId: PeerId, options?: AbortOptions): Promise<Connection>;
140
+ closeConnections(peerId: PeerId): Promise<void>;
176
141
  /**
177
- * - How often, in milliseconds, to compute averages.
142
+ * Get all open connections with a peer
178
143
  */
179
- movingAverageInterval?: number | undefined;
144
+ getAll(peerId: PeerId): Connection[];
180
145
  /**
181
- * - The value of the peer.
146
+ * If the event loop is slow, maybe close a connection
182
147
  */
183
- defaultPeerValue?: number | undefined;
148
+ _onLatencyMeasure(evt: CustomEvent<SummaryObject>): void;
184
149
  /**
185
- * - Should preemptively guarantee connections are above the low watermark.
150
+ * If the `value` of `name` has exceeded its limit, maybe close a connection
186
151
  */
187
- autoDial?: boolean | undefined;
152
+ _checkMaxLimit(name: keyof ConnectionManagerInit, value: number): Promise<void>;
188
153
  /**
189
- * - How often, in milliseconds, it should preemptively guarantee connections are above the low watermark.
154
+ * If we have more connections than our maximum, close a connection
155
+ * to the lowest valued peer.
190
156
  */
191
- autoDialInterval?: number | undefined;
192
- };
157
+ _maybeDisconnectOne(): Promise<void>;
158
+ }
193
159
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connection-manager/index.js"],"names":[],"mappings":";AAsCA;;;GAGG;AAEH;;;;;;;;;;;;;GAaG;AAEH;;;;GAIG;AACH;IACE;;;;;;OAMG;IACH,oBAHW,MAAM,YACN,wBAAwB,EAgDlC;IA3CC,uBAAqB;IACrB,gBAA0C;IAE1C,cAAqF;IAOrF;;;;OAIG;IACH,aAFU,IAAI,MAAM,EAAE,MAAM,CAAC,CAM3B;IAEF;;;;OAIG;IACH,aAFU,IAAI,MAAM,EAAE,UAAU,EAAE,CAAC,CAMjC;IAEF,kBAAqB;IACrB,YAAkB;IAuFpB;;;;;OAKG;IACH,sBAiBC;IA3GC,gCAGE;IAMJ;;OAEG;IACH,mBAGC;IAED;;;OAGG;IACH,cAYC;IA2KD;;;;;OAKG;IACH,0BAKC;IApLD;;;;OAIG;IACH,sBASC;IAED;;;;OAIG;IACH,wBAWC;IAED;;;;;;;OAOG;IACH,qBAJW,MAAM,SACN,MAAM,GACJ,IAAI,CAOhB;IA2BD;;;;OAIG;IACH,sBAFW,UAAU,iBA4BpB;IAED;;;;;OAKG;IACH,yBAHW,UAAU,GACR,IAAI,CAqBhB;IAED;;;;;OAKG;IACH,YAHW,MAAM,GACJ,UAAU,GAAC,IAAI,CAQ3B;IAED;;;;;OAKG;IACH,eAHW,MAAM,GACJ,UAAU,EAAE,CAexB;IAeD;;;;;;OAMG;IACH,uBAOC;IAED;;;;;OAKG;IACH,4BAqBC;CACF;;;;;;;;cA5UY,OAAO,KAAK,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connection-manager/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,339 @@
1
+ import { logger } from '@libp2p/logger';
2
+ import errCode from 'err-code';
3
+ import mergeOptions from 'merge-options';
4
+ import { LatencyMonitor } from './latency-monitor.js';
5
+ // @ts-expect-error retimer does not have types
6
+ import retimer from 'retimer';
7
+ import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events';
8
+ import { trackedMap } from '@libp2p/tracked-map';
9
+ import { codes } from '../errors.js';
10
+ import { isPeerId } from '@libp2p/interfaces/peer-id';
11
+ import { setMaxListeners } from 'events';
12
+ import { Components } from '@libp2p/interfaces/components';
13
+ import * as STATUS from '@libp2p/interfaces/connection/status';
14
+ import { Dialer } from './dialer/index.js';
15
+ const log = logger('libp2p:connection-manager');
16
+ const defaultOptions = {
17
+ maxConnections: Infinity,
18
+ minConnections: 0,
19
+ maxData: Infinity,
20
+ maxSentData: Infinity,
21
+ maxReceivedData: Infinity,
22
+ maxEventLoopDelay: Infinity,
23
+ pollInterval: 2000,
24
+ autoDialInterval: 10000,
25
+ movingAverageInterval: 60000,
26
+ defaultPeerValue: 1
27
+ };
28
+ const METRICS_COMPONENT = 'connection-manager';
29
+ const METRICS_PEER_CONNECTIONS = 'peer-connections';
30
+ const METRICS_PEER_VALUES = 'peer-values';
31
+ /**
32
+ * Responsible for managing known connections.
33
+ */
34
+ export class DefaultConnectionManager extends EventEmitter {
35
+ constructor(init) {
36
+ super();
37
+ this.components = new Components();
38
+ this.opts = mergeOptions.call({ ignoreUndefined: true }, defaultOptions, init);
39
+ if (this.opts.maxConnections < this.opts.minConnections) {
40
+ throw errCode(new Error('Connection Manager maxConnections must be greater than minConnections'), codes.ERR_INVALID_PARAMETERS);
41
+ }
42
+ log('options: %o', this.opts);
43
+ /**
44
+ * Map of peer identifiers to their peer value for pruning connections.
45
+ *
46
+ * @type {Map<string, number>}
47
+ */
48
+ this.peerValues = trackedMap({
49
+ component: METRICS_COMPONENT,
50
+ metric: METRICS_PEER_VALUES,
51
+ metrics: this.components.getMetrics()
52
+ });
53
+ /**
54
+ * Map of connections per peer
55
+ */
56
+ this.connections = trackedMap({
57
+ component: METRICS_COMPONENT,
58
+ metric: METRICS_PEER_CONNECTIONS,
59
+ metrics: this.components.getMetrics()
60
+ });
61
+ this.started = false;
62
+ this._checkMetrics = this._checkMetrics.bind(this);
63
+ this.latencyMonitor = new LatencyMonitor({
64
+ latencyCheckIntervalMs: init.pollInterval,
65
+ dataEmitIntervalMs: init.pollInterval
66
+ });
67
+ try {
68
+ // This emitter gets listened to a lot
69
+ setMaxListeners?.(Infinity, this);
70
+ }
71
+ catch { }
72
+ this.dialer = new Dialer(this.opts);
73
+ this.onConnect = this.onConnect.bind(this);
74
+ this.onDisconnect = this.onDisconnect.bind(this);
75
+ }
76
+ init(components) {
77
+ this.components = components;
78
+ this.dialer.init(components);
79
+ }
80
+ isStarted() {
81
+ return this.started;
82
+ }
83
+ /**
84
+ * Starts the Connection Manager. If Metrics are not enabled on libp2p
85
+ * only event loop and connection limits will be monitored.
86
+ */
87
+ async start() {
88
+ if (this.components.getMetrics() != null) {
89
+ this.timer = this.timer ?? retimer(this._checkMetrics, this.opts.pollInterval);
90
+ }
91
+ // latency monitor
92
+ this.latencyMonitor.start();
93
+ this._onLatencyMeasure = this._onLatencyMeasure.bind(this);
94
+ this.latencyMonitor.addEventListener('data', this._onLatencyMeasure);
95
+ await this.dialer.start();
96
+ this.started = true;
97
+ log('started');
98
+ }
99
+ async afterStart() {
100
+ this.components.getUpgrader().addEventListener('connection', this.onConnect);
101
+ this.components.getUpgrader().addEventListener('connectionEnd', this.onDisconnect);
102
+ }
103
+ async beforeStop() {
104
+ this.components.getUpgrader().removeEventListener('connection', this.onConnect);
105
+ this.components.getUpgrader().removeEventListener('connectionEnd', this.onDisconnect);
106
+ }
107
+ /**
108
+ * Stops the Connection Manager
109
+ */
110
+ async stop() {
111
+ this.timer?.clear();
112
+ this.latencyMonitor.removeEventListener('data', this._onLatencyMeasure);
113
+ this.latencyMonitor.stop();
114
+ await this.dialer.stop();
115
+ this.started = false;
116
+ await this._close();
117
+ log('stopped');
118
+ }
119
+ /**
120
+ * Cleans up the connections
121
+ */
122
+ async _close() {
123
+ // Close all connections we're tracking
124
+ const tasks = [];
125
+ for (const connectionList of this.connections.values()) {
126
+ for (const connection of connectionList) {
127
+ tasks.push((async () => {
128
+ try {
129
+ await connection.close();
130
+ }
131
+ catch (err) {
132
+ log.error(err);
133
+ }
134
+ })());
135
+ }
136
+ }
137
+ log('closing %d connections', tasks.length);
138
+ await Promise.all(tasks);
139
+ this.connections.clear();
140
+ }
141
+ /**
142
+ * Sets the value of the given peer. Peers with lower values
143
+ * will be disconnected first.
144
+ */
145
+ setPeerValue(peerId, value) {
146
+ if (value < 0 || value > 1) {
147
+ throw new Error('value should be a number between 0 and 1');
148
+ }
149
+ this.peerValues.set(peerId.toString(), value);
150
+ }
151
+ /**
152
+ * Checks the libp2p metrics to determine if any values have exceeded
153
+ * the configured maximums.
154
+ *
155
+ * @private
156
+ */
157
+ async _checkMetrics() {
158
+ const metrics = this.components.getMetrics();
159
+ if (metrics != null) {
160
+ try {
161
+ const movingAverages = metrics.getGlobal().getMovingAverages();
162
+ const received = movingAverages.dataReceived[this.opts.movingAverageInterval].movingAverage;
163
+ await this._checkMaxLimit('maxReceivedData', received);
164
+ const sent = movingAverages.dataSent[this.opts.movingAverageInterval].movingAverage;
165
+ await this._checkMaxLimit('maxSentData', sent);
166
+ const total = received + sent;
167
+ await this._checkMaxLimit('maxData', total);
168
+ log.trace('metrics update', total);
169
+ }
170
+ finally {
171
+ this.timer = retimer(this._checkMetrics, this.opts.pollInterval);
172
+ }
173
+ }
174
+ }
175
+ onConnect(evt) {
176
+ void this._onConnect(evt).catch(err => {
177
+ log.error(err);
178
+ });
179
+ }
180
+ /**
181
+ * Tracks the incoming connection and check the connection limit
182
+ */
183
+ async _onConnect(evt) {
184
+ const { detail: connection } = evt;
185
+ if (!this.started) {
186
+ // This can happen when we are in the process of shutting down the node
187
+ await connection.close();
188
+ return;
189
+ }
190
+ const peerId = connection.remotePeer;
191
+ const peerIdStr = peerId.toString();
192
+ const storedConns = this.connections.get(peerIdStr);
193
+ if (storedConns != null) {
194
+ storedConns.push(connection);
195
+ }
196
+ else {
197
+ this.connections.set(peerIdStr, [connection]);
198
+ }
199
+ if (peerId.publicKey != null) {
200
+ await this.components.getPeerStore().keyBook.set(peerId, peerId.publicKey);
201
+ }
202
+ if (!this.peerValues.has(peerIdStr)) {
203
+ this.peerValues.set(peerIdStr, this.opts.defaultPeerValue);
204
+ }
205
+ await this._checkMaxLimit('maxConnections', this.getConnections().length);
206
+ this.dispatchEvent(new CustomEvent('peer:connect', { detail: connection }));
207
+ }
208
+ /**
209
+ * Removes the connection from tracking
210
+ */
211
+ onDisconnect(evt) {
212
+ const { detail: connection } = evt;
213
+ if (!this.started) {
214
+ // This can happen when we are in the process of shutting down the node
215
+ return;
216
+ }
217
+ const peerId = connection.remotePeer.toString();
218
+ let storedConn = this.connections.get(peerId);
219
+ if (storedConn != null && storedConn.length > 1) {
220
+ storedConn = storedConn.filter((conn) => conn.id !== connection.id);
221
+ this.connections.set(peerId, storedConn);
222
+ }
223
+ else if (storedConn != null) {
224
+ this.connections.delete(peerId);
225
+ this.peerValues.delete(connection.remotePeer.toString());
226
+ this.dispatchEvent(new CustomEvent('peer:disconnect', { detail: connection }));
227
+ this.components.getMetrics()?.onPeerDisconnected(connection.remotePeer);
228
+ }
229
+ }
230
+ getConnections(peerId) {
231
+ if (peerId != null) {
232
+ return this.connections.get(peerId.toString()) ?? [];
233
+ }
234
+ let conns = [];
235
+ for (const c of this.connections.values()) {
236
+ conns = conns.concat(c);
237
+ }
238
+ return conns;
239
+ }
240
+ async openConnection(peerId, options) {
241
+ log('dial to %p', peerId);
242
+ const existingConnections = this.getConnections(peerId);
243
+ if (existingConnections.length > 0) {
244
+ log('had an existing connection to %p', peerId);
245
+ return existingConnections[0];
246
+ }
247
+ const connection = await this.dialer.dial(peerId, options);
248
+ let peerConnections = this.connections.get(peerId.toString());
249
+ if (peerConnections == null) {
250
+ peerConnections = [];
251
+ this.connections.set(peerId.toString(), peerConnections);
252
+ }
253
+ // we get notified of connections via the Upgrader emitting "connection"
254
+ // events, double check we aren't already tracking this connection before
255
+ // storing it
256
+ let trackedConnection = false;
257
+ for (const conn of peerConnections) {
258
+ if (conn.id === connection.id) {
259
+ trackedConnection = true;
260
+ }
261
+ }
262
+ if (!trackedConnection) {
263
+ peerConnections.push(connection);
264
+ }
265
+ return connection;
266
+ }
267
+ async closeConnections(peerId) {
268
+ const connections = this.connections.get(peerId.toString()) ?? [];
269
+ await Promise.all(connections.map(async (connection) => {
270
+ return await connection.close();
271
+ }));
272
+ }
273
+ /**
274
+ * Get all open connections with a peer
275
+ */
276
+ getAll(peerId) {
277
+ if (!isPeerId(peerId)) {
278
+ throw errCode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS);
279
+ }
280
+ const id = peerId.toString();
281
+ const connections = this.connections.get(id);
282
+ // Return all open connections
283
+ if (connections != null) {
284
+ return connections.filter(connection => connection.stat.status === STATUS.OPEN);
285
+ }
286
+ return [];
287
+ }
288
+ /**
289
+ * If the event loop is slow, maybe close a connection
290
+ */
291
+ _onLatencyMeasure(evt) {
292
+ const { detail: summary } = evt;
293
+ this._checkMaxLimit('maxEventLoopDelay', summary.avgMs)
294
+ .catch(err => {
295
+ log.error(err);
296
+ });
297
+ }
298
+ /**
299
+ * If the `value` of `name` has exceeded its limit, maybe close a connection
300
+ */
301
+ async _checkMaxLimit(name, value) {
302
+ const limit = this.opts[name];
303
+ log.trace('checking limit of %s. current value: %d of %d', name, value, limit);
304
+ if (value > limit) {
305
+ log('%s: limit exceeded: %p, %d', this.components.getPeerId(), name, value);
306
+ await this._maybeDisconnectOne();
307
+ }
308
+ }
309
+ /**
310
+ * If we have more connections than our maximum, close a connection
311
+ * to the lowest valued peer.
312
+ */
313
+ async _maybeDisconnectOne() {
314
+ if (this.opts.minConnections < this.connections.size) {
315
+ const peerValues = Array.from(new Map([...this.peerValues.entries()].sort((a, b) => a[1] - b[1])));
316
+ log('%p: sorted peer values: %j', this.components.getPeerId(), peerValues);
317
+ const disconnectPeer = peerValues[0];
318
+ if (disconnectPeer != null) {
319
+ const peerId = disconnectPeer[0];
320
+ log('%p: lowest value peer is %s', this.components.getPeerId(), peerId);
321
+ log('%p: closing a connection to %j', this.components.getPeerId(), peerId);
322
+ for (const connections of this.connections.values()) {
323
+ if (connections[0].remotePeer.toString() === peerId) {
324
+ void connections[0].close()
325
+ .catch(err => {
326
+ log.error(err);
327
+ });
328
+ // TODO: should not need to invoke this manually
329
+ this.onDisconnect(new CustomEvent('connectionEnd', {
330
+ detail: connections[0]
331
+ }));
332
+ break;
333
+ }
334
+ }
335
+ }
336
+ }
337
+ }
338
+ }
339
+ //# sourceMappingURL=index.js.map