libp2p 0.36.2 → 0.37.0-b09eb8f

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/LICENSE +3 -21
  2. package/README.md +13 -10
  3. package/dist/src/address-manager/index.d.ts +34 -52
  4. package/dist/src/address-manager/index.d.ts.map +1 -1
  5. package/dist/src/address-manager/index.js +81 -0
  6. package/dist/src/address-manager/index.js.map +1 -0
  7. package/dist/src/circuit/auto-relay.d.ts +24 -85
  8. package/dist/src/circuit/auto-relay.d.ts.map +1 -1
  9. package/dist/src/circuit/auto-relay.js +216 -0
  10. package/dist/src/circuit/auto-relay.js.map +1 -0
  11. package/dist/src/circuit/circuit/hop.d.ts +26 -53
  12. package/dist/src/circuit/circuit/hop.d.ts.map +1 -1
  13. package/dist/src/circuit/circuit/hop.js +138 -0
  14. package/dist/src/circuit/circuit/hop.js.map +1 -0
  15. package/dist/src/circuit/circuit/stop.d.ts +18 -10
  16. package/dist/src/circuit/circuit/stop.d.ts.map +1 -1
  17. package/dist/src/circuit/circuit/stop.js +49 -0
  18. package/dist/src/circuit/circuit/stop.js.map +1 -0
  19. package/dist/src/circuit/circuit/stream-handler.d.ts +19 -38
  20. package/dist/src/circuit/circuit/stream-handler.d.ts.map +1 -1
  21. package/dist/src/circuit/circuit/stream-handler.js +59 -0
  22. package/dist/src/circuit/circuit/stream-handler.js.map +1 -0
  23. package/dist/src/circuit/circuit/utils.d.ts +3 -6
  24. package/dist/src/circuit/circuit/utils.d.ts.map +1 -1
  25. package/dist/src/circuit/circuit/utils.js +43 -0
  26. package/dist/src/circuit/circuit/utils.js.map +1 -0
  27. package/dist/src/circuit/constants.d.ts +24 -6
  28. package/dist/src/circuit/constants.d.ts.map +1 -1
  29. package/dist/src/circuit/constants.js +26 -0
  30. package/dist/src/circuit/constants.js.map +1 -0
  31. package/dist/src/circuit/index.d.ts +41 -74
  32. package/dist/src/circuit/index.d.ts.map +1 -1
  33. package/dist/src/circuit/index.js +69 -0
  34. package/dist/src/circuit/index.js.map +1 -0
  35. package/dist/src/circuit/listener.d.ts +8 -3
  36. package/dist/src/circuit/listener.d.ts.map +1 -1
  37. package/dist/src/circuit/listener.js +62 -0
  38. package/dist/src/circuit/listener.js.map +1 -0
  39. package/dist/src/circuit/multicodec.d.ts +1 -1
  40. package/dist/src/circuit/multicodec.d.ts.map +1 -1
  41. package/dist/src/circuit/multicodec.js +2 -0
  42. package/dist/src/circuit/multicodec.js.map +1 -0
  43. package/dist/src/circuit/pb/index.d.ts +52 -0
  44. package/dist/src/circuit/pb/index.d.ts.map +1 -0
  45. package/dist/src/circuit/pb/index.js +98 -0
  46. package/dist/src/circuit/pb/index.js.map +1 -0
  47. package/dist/src/circuit/transport.d.ts +18 -78
  48. package/dist/src/circuit/transport.d.ts.map +1 -1
  49. package/dist/src/circuit/transport.js +192 -0
  50. package/dist/src/circuit/transport.js.map +1 -0
  51. package/dist/src/circuit/utils.d.ts +5 -2
  52. package/dist/src/circuit/utils.d.ts.map +1 -1
  53. package/dist/src/circuit/utils.js +11 -0
  54. package/dist/src/circuit/utils.js.map +1 -0
  55. package/dist/src/config.d.ts +3 -85
  56. package/dist/src/config.d.ts.map +1 -1
  57. package/dist/src/config.js +91 -0
  58. package/dist/src/config.js.map +1 -0
  59. package/dist/src/connection-manager/auto-dialler.d.ts +24 -41
  60. package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
  61. package/dist/src/connection-manager/auto-dialler.js +105 -0
  62. package/dist/src/connection-manager/auto-dialler.js.map +1 -0
  63. package/dist/src/connection-manager/dialer/auto-dialer.d.ts +16 -0
  64. package/dist/src/connection-manager/dialer/auto-dialer.d.ts.map +1 -0
  65. package/dist/src/connection-manager/dialer/auto-dialer.js +37 -0
  66. package/dist/src/connection-manager/dialer/auto-dialer.js.map +1 -0
  67. package/dist/src/connection-manager/dialer/dial-request.d.ts +27 -0
  68. package/dist/src/connection-manager/dialer/dial-request.d.ts.map +1 -0
  69. package/dist/src/connection-manager/dialer/dial-request.js +107 -0
  70. package/dist/src/connection-manager/dialer/dial-request.js.map +1 -0
  71. package/dist/src/connection-manager/dialer/index.d.ts +104 -0
  72. package/dist/src/connection-manager/dialer/index.d.ts.map +1 -0
  73. package/dist/src/connection-manager/dialer/index.js +266 -0
  74. package/dist/src/connection-manager/dialer/index.js.map +1 -0
  75. package/dist/src/connection-manager/index.d.ts +102 -136
  76. package/dist/src/connection-manager/index.d.ts.map +1 -1
  77. package/dist/src/connection-manager/index.js +339 -0
  78. package/dist/src/connection-manager/index.js.map +1 -0
  79. package/dist/src/connection-manager/latency-monitor.d.ts +72 -97
  80. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  81. package/dist/src/connection-manager/latency-monitor.js +220 -0
  82. package/dist/src/connection-manager/latency-monitor.js.map +1 -0
  83. package/dist/src/connection-manager/visibility-change-emitter.d.ts +15 -16
  84. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  85. package/dist/src/connection-manager/visibility-change-emitter.js +118 -0
  86. package/dist/src/connection-manager/visibility-change-emitter.js.map +1 -0
  87. package/dist/src/constants.d.ts +22 -10
  88. package/dist/src/constants.d.ts.map +1 -1
  89. package/dist/src/constants.js +27 -0
  90. package/dist/src/constants.js.map +1 -0
  91. package/dist/src/content-routing/index.d.ts +27 -81
  92. package/dist/src/content-routing/index.d.ts.map +1 -1
  93. package/dist/src/content-routing/index.js +99 -0
  94. package/dist/src/content-routing/index.js.map +1 -0
  95. package/dist/src/content-routing/utils.d.ts +6 -49
  96. package/dist/src/content-routing/utils.d.ts.map +1 -1
  97. package/dist/src/content-routing/utils.js +42 -0
  98. package/dist/src/content-routing/utils.js.map +1 -0
  99. package/dist/src/dht/dht-content-routing.d.ts +10 -24
  100. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  101. package/dist/src/dht/dht-content-routing.js +32 -0
  102. package/dist/src/dht/dht-content-routing.js.map +1 -0
  103. package/dist/src/dht/dht-peer-routing.d.ts +9 -24
  104. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  105. package/dist/src/dht/dht-peer-routing.js +26 -0
  106. package/dist/src/dht/dht-peer-routing.js.map +1 -0
  107. package/dist/src/dht/dummy-dht.d.ts +20 -0
  108. package/dist/src/dht/dummy-dht.d.ts.map +1 -0
  109. package/dist/src/dht/dummy-dht.js +46 -0
  110. package/dist/src/dht/dummy-dht.js.map +1 -0
  111. package/dist/src/errors.d.ts +71 -63
  112. package/dist/src/errors.d.ts.map +1 -1
  113. package/dist/src/errors.js +76 -0
  114. package/dist/src/errors.js.map +1 -0
  115. package/dist/src/fetch/constants.d.ts +1 -1
  116. package/dist/src/fetch/constants.d.ts.map +1 -1
  117. package/dist/src/fetch/constants.js +3 -0
  118. package/dist/src/fetch/constants.js.map +1 -0
  119. package/dist/src/fetch/index.d.ts +30 -49
  120. package/dist/src/fetch/index.d.ts.map +1 -1
  121. package/dist/src/fetch/index.js +129 -0
  122. package/dist/src/fetch/index.js.map +1 -0
  123. package/dist/src/fetch/pb/proto.d.ts +27 -0
  124. package/dist/src/fetch/pb/proto.d.ts.map +1 -0
  125. package/dist/src/fetch/pb/proto.js +50 -0
  126. package/dist/src/fetch/pb/proto.js.map +1 -0
  127. package/dist/src/get-peer.d.ts +4 -11
  128. package/dist/src/get-peer.d.ts.map +1 -1
  129. package/dist/src/get-peer.js +43 -0
  130. package/dist/src/get-peer.js.map +1 -0
  131. package/dist/src/identify/consts.d.ts +9 -9
  132. package/dist/src/identify/consts.d.ts.map +1 -1
  133. package/dist/src/identify/consts.js +11 -0
  134. package/dist/src/identify/consts.js.map +1 -0
  135. package/dist/src/identify/index.d.ts +42 -96
  136. package/dist/src/identify/index.d.ts.map +1 -1
  137. package/dist/src/identify/index.js +322 -0
  138. package/dist/src/identify/index.js.map +1 -0
  139. package/dist/src/identify/pb/message.d.ts +16 -0
  140. package/dist/src/identify/pb/message.d.ts.map +1 -0
  141. package/dist/src/identify/pb/message.js +24 -0
  142. package/dist/src/identify/pb/message.js.map +1 -0
  143. package/dist/src/index.d.ts +150 -496
  144. package/dist/src/index.d.ts.map +1 -1
  145. package/dist/src/index.js +9 -0
  146. package/dist/src/index.js.map +1 -0
  147. package/dist/src/insecure/index.d.ts +9 -0
  148. package/dist/src/insecure/index.d.ts.map +1 -0
  149. package/dist/src/insecure/index.js +81 -0
  150. package/dist/src/insecure/index.js.map +1 -0
  151. package/dist/src/insecure/pb/proto.d.ts +29 -0
  152. package/dist/src/insecure/pb/proto.d.ts.map +1 -0
  153. package/dist/src/insecure/pb/proto.js +53 -0
  154. package/dist/src/insecure/pb/proto.js.map +1 -0
  155. package/dist/src/keychain/cms.d.ts +6 -14
  156. package/dist/src/keychain/cms.d.ts.map +1 -1
  157. package/dist/src/keychain/cms.js +129 -0
  158. package/dist/src/keychain/cms.js.map +1 -0
  159. package/dist/src/keychain/index.d.ts +60 -81
  160. package/dist/src/keychain/index.d.ts.map +1 -1
  161. package/dist/src/keychain/index.js +492 -0
  162. package/dist/src/keychain/index.js.map +1 -0
  163. package/dist/src/keychain/util.d.ts +3 -6
  164. package/dist/src/keychain/util.d.ts.map +1 -1
  165. package/dist/src/keychain/util.js +79 -0
  166. package/dist/src/keychain/util.js.map +1 -0
  167. package/dist/src/libp2p.d.ts +80 -0
  168. package/dist/src/libp2p.d.ts.map +1 -0
  169. package/dist/src/libp2p.js +397 -0
  170. package/dist/src/libp2p.js.map +1 -0
  171. package/dist/src/metrics/index.d.ts +47 -104
  172. package/dist/src/metrics/index.d.ts.map +1 -1
  173. package/dist/src/metrics/index.js +231 -0
  174. package/dist/src/metrics/index.js.map +1 -0
  175. package/dist/src/metrics/moving-average.d.ts +14 -0
  176. package/dist/src/metrics/moving-average.d.ts.map +1 -0
  177. package/dist/src/metrics/moving-average.js +40 -0
  178. package/dist/src/metrics/moving-average.js.map +1 -0
  179. package/dist/src/metrics/stats.d.ts +41 -93
  180. package/dist/src/metrics/stats.d.ts.map +1 -1
  181. package/dist/src/metrics/stats.js +183 -0
  182. package/dist/src/metrics/stats.js.map +1 -0
  183. package/dist/src/nat-manager.d.ts +45 -99
  184. package/dist/src/nat-manager.d.ts.map +1 -1
  185. package/dist/src/nat-manager.js +117 -0
  186. package/dist/src/nat-manager.js.map +1 -0
  187. package/dist/src/peer-record-updater.d.ts +15 -0
  188. package/dist/src/peer-record-updater.d.ts.map +1 -0
  189. package/dist/src/peer-record-updater.js +44 -0
  190. package/dist/src/peer-record-updater.js.map +1 -0
  191. package/dist/src/peer-routing.d.ts +40 -84
  192. package/dist/src/peer-routing.d.ts.map +1 -1
  193. package/dist/src/peer-routing.js +107 -0
  194. package/dist/src/peer-routing.js.map +1 -0
  195. package/dist/src/ping/constants.d.ts +4 -4
  196. package/dist/src/ping/constants.d.ts.map +1 -1
  197. package/dist/src/ping/constants.js +5 -0
  198. package/dist/src/ping/constants.js.map +1 -0
  199. package/dist/src/ping/index.d.ts +17 -31
  200. package/dist/src/ping/index.d.ts.map +1 -1
  201. package/dist/src/ping/index.js +57 -0
  202. package/dist/src/ping/index.js.map +1 -0
  203. package/dist/src/pnet/crypto.d.ts +15 -5
  204. package/dist/src/pnet/crypto.d.ts.map +1 -1
  205. package/dist/src/pnet/crypto.js +60 -0
  206. package/dist/src/pnet/crypto.js.map +1 -0
  207. package/dist/src/pnet/errors.d.ts +5 -5
  208. package/dist/src/pnet/errors.d.ts.map +1 -1
  209. package/dist/src/pnet/errors.js +6 -0
  210. package/dist/src/pnet/errors.js.map +1 -0
  211. package/dist/src/pnet/index.d.ts +12 -20
  212. package/dist/src/pnet/index.d.ts.map +1 -1
  213. package/dist/src/pnet/index.js +67 -0
  214. package/dist/src/pnet/index.js.map +1 -0
  215. package/dist/src/pnet/key-generator.d.ts +3 -7
  216. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  217. package/dist/src/pnet/key-generator.js +25 -0
  218. package/dist/src/pnet/key-generator.js.map +1 -0
  219. package/dist/src/pubsub/dummy-pubsub.d.ts +17 -0
  220. package/dist/src/pubsub/dummy-pubsub.d.ts.map +1 -0
  221. package/dist/src/pubsub/dummy-pubsub.js +37 -0
  222. package/dist/src/pubsub/dummy-pubsub.js.map +1 -0
  223. package/dist/src/registrar.d.ts +26 -65
  224. package/dist/src/registrar.d.ts.map +1 -1
  225. package/dist/src/registrar.js +144 -0
  226. package/dist/src/registrar.js.map +1 -0
  227. package/dist/src/transport-manager.d.ts +36 -82
  228. package/dist/src/transport-manager.d.ts.map +1 -1
  229. package/dist/src/transport-manager.js +223 -0
  230. package/dist/src/transport-manager.js.map +1 -0
  231. package/dist/src/upgrader.d.ts +49 -129
  232. package/dist/src/upgrader.d.ts.map +1 -1
  233. package/dist/src/upgrader.js +404 -0
  234. package/dist/src/upgrader.js.map +1 -0
  235. package/dist/src/version.d.ts +3 -0
  236. package/dist/src/version.d.ts.map +1 -0
  237. package/dist/src/version.js +3 -0
  238. package/dist/src/version.js.map +1 -0
  239. package/package.json +143 -203
  240. package/src/address-manager/index.ts +130 -0
  241. package/src/circuit/README.md +16 -11
  242. package/src/circuit/auto-relay.ts +286 -0
  243. package/src/circuit/circuit/hop.ts +211 -0
  244. package/src/circuit/circuit/stop.ts +78 -0
  245. package/src/circuit/circuit/stream-handler.ts +86 -0
  246. package/src/circuit/circuit/{utils.js → utils.ts} +9 -25
  247. package/src/circuit/constants.ts +31 -0
  248. package/src/circuit/index.ts +120 -0
  249. package/src/circuit/listener.ts +82 -0
  250. package/src/circuit/multicodec.ts +2 -0
  251. package/src/circuit/{protocol → pb}/index.proto +1 -1
  252. package/src/circuit/pb/index.ts +117 -0
  253. package/src/circuit/transport.ts +219 -0
  254. package/src/circuit/utils.ts +12 -0
  255. package/src/config.ts +99 -0
  256. package/src/connection-manager/auto-dialler.ts +154 -0
  257. package/src/connection-manager/dialer/auto-dialer.ts +59 -0
  258. package/src/connection-manager/dialer/dial-request.ts +137 -0
  259. package/src/connection-manager/dialer/index.ts +381 -0
  260. package/src/connection-manager/index.ts +513 -0
  261. package/src/connection-manager/latency-monitor.ts +319 -0
  262. package/src/connection-manager/{visibility-change-emitter.js → visibility-change-emitter.ts} +48 -38
  263. package/src/constants.ts +31 -0
  264. package/src/content-routing/index.ts +144 -0
  265. package/src/content-routing/utils.ts +54 -0
  266. package/src/dht/dht-content-routing.ts +43 -0
  267. package/src/dht/dht-peer-routing.ts +35 -0
  268. package/src/dht/dummy-dht.ts +60 -0
  269. package/src/errors.ts +74 -0
  270. package/src/fetch/README.md +1 -1
  271. package/src/fetch/constants.ts +3 -0
  272. package/src/fetch/index.ts +167 -0
  273. package/src/fetch/{proto.proto → pb/proto.proto} +0 -0
  274. package/src/fetch/pb/proto.ts +65 -0
  275. package/src/get-peer.ts +57 -0
  276. package/src/identify/consts.ts +13 -0
  277. package/src/identify/index.ts +445 -0
  278. package/src/identify/{message.proto → pb/message.proto} +0 -0
  279. package/src/identify/pb/message.ts +37 -0
  280. package/src/index.ts +220 -0
  281. package/src/insecure/index.ts +101 -0
  282. package/src/insecure/{proto.proto → pb/proto.proto} +0 -0
  283. package/src/insecure/pb/proto.ts +68 -0
  284. package/src/keychain/{cms.js → cms.ts} +62 -58
  285. package/src/keychain/index.ts +587 -0
  286. package/src/keychain/{util.js → util.ts} +7 -17
  287. package/src/libp2p.ts +538 -0
  288. package/src/metrics/index.ts +310 -0
  289. package/src/metrics/moving-average.ts +53 -0
  290. package/src/metrics/stats.ts +238 -0
  291. package/src/nat-manager.ts +198 -0
  292. package/src/peer-record-updater.ts +55 -0
  293. package/src/peer-routing.ts +185 -0
  294. package/src/ping/README.md +1 -1
  295. package/src/ping/constants.ts +5 -0
  296. package/src/ping/index.ts +84 -0
  297. package/src/pnet/README.md +2 -2
  298. package/src/pnet/crypto.ts +67 -0
  299. package/src/pnet/errors.ts +5 -0
  300. package/src/pnet/index.ts +97 -0
  301. package/src/pnet/key-generator.ts +28 -0
  302. package/src/pubsub/dummy-pubsub.ts +51 -0
  303. package/src/registrar.ts +189 -0
  304. package/src/transport-manager.ts +281 -0
  305. package/src/upgrader.ts +501 -0
  306. package/src/version.ts +3 -0
  307. package/dist/index.min.js +0 -55
  308. package/dist/src/circuit/protocol/index.d.ts +0 -173
  309. package/dist/src/dialer/dial-request.d.ts +0 -55
  310. package/dist/src/dialer/dial-request.d.ts.map +0 -1
  311. package/dist/src/dialer/index.d.ts +0 -182
  312. package/dist/src/dialer/index.d.ts.map +0 -1
  313. package/dist/src/fetch/proto.d.ts +0 -134
  314. package/dist/src/identify/message.d.ts +0 -95
  315. package/dist/src/insecure/plaintext.d.ts +0 -12
  316. package/dist/src/insecure/plaintext.d.ts.map +0 -1
  317. package/dist/src/insecure/proto.d.ts +0 -128
  318. package/dist/src/metrics/old-peers.d.ts +0 -3
  319. package/dist/src/metrics/old-peers.d.ts.map +0 -1
  320. package/dist/src/metrics/tracked-map.d.ts +0 -8
  321. package/dist/src/metrics/tracked-map.d.ts.map +0 -1
  322. package/dist/src/peer-store/address-book.d.ts +0 -67
  323. package/dist/src/peer-store/address-book.d.ts.map +0 -1
  324. package/dist/src/peer-store/index.d.ts +0 -58
  325. package/dist/src/peer-store/index.d.ts.map +0 -1
  326. package/dist/src/peer-store/key-book.d.ts +0 -40
  327. package/dist/src/peer-store/key-book.d.ts.map +0 -1
  328. package/dist/src/peer-store/metadata-book.d.ts +0 -58
  329. package/dist/src/peer-store/metadata-book.d.ts.map +0 -1
  330. package/dist/src/peer-store/pb/peer.d.ts +0 -222
  331. package/dist/src/peer-store/proto-book.d.ts +0 -43
  332. package/dist/src/peer-store/proto-book.d.ts.map +0 -1
  333. package/dist/src/peer-store/store.d.ts +0 -73
  334. package/dist/src/peer-store/store.d.ts.map +0 -1
  335. package/dist/src/peer-store/types.d.ts +0 -202
  336. package/dist/src/peer-store/types.d.ts.map +0 -1
  337. package/dist/src/ping/util.d.ts +0 -5
  338. package/dist/src/ping/util.d.ts.map +0 -1
  339. package/dist/src/pubsub-adapter.d.ts +0 -22
  340. package/dist/src/pubsub-adapter.d.ts.map +0 -1
  341. package/dist/src/record/envelope/envelope.d.ts +0 -77
  342. package/dist/src/record/envelope/index.d.ts +0 -80
  343. package/dist/src/record/envelope/index.d.ts.map +0 -1
  344. package/dist/src/record/peer-record/consts.d.ts +0 -4
  345. package/dist/src/record/peer-record/consts.d.ts.map +0 -1
  346. package/dist/src/record/peer-record/index.d.ts +0 -60
  347. package/dist/src/record/peer-record/index.d.ts.map +0 -1
  348. package/dist/src/record/peer-record/peer-record.d.ts +0 -133
  349. package/dist/src/record/utils.d.ts +0 -12
  350. package/dist/src/record/utils.d.ts.map +0 -1
  351. package/dist/src/types.d.ts +0 -90
  352. package/dist/src/types.d.ts.map +0 -1
  353. package/src/address-manager/index.js +0 -96
  354. package/src/circuit/auto-relay.js +0 -302
  355. package/src/circuit/circuit/hop.js +0 -205
  356. package/src/circuit/circuit/stop.js +0 -81
  357. package/src/circuit/circuit/stream-handler.js +0 -94
  358. package/src/circuit/constants.js +0 -12
  359. package/src/circuit/index.js +0 -102
  360. package/src/circuit/listener.js +0 -75
  361. package/src/circuit/multicodec.js +0 -5
  362. package/src/circuit/protocol/index.d.ts +0 -173
  363. package/src/circuit/protocol/index.js +0 -530
  364. package/src/circuit/transport.js +0 -229
  365. package/src/circuit/utils.js +0 -17
  366. package/src/config.js +0 -114
  367. package/src/connection-manager/auto-dialler.js +0 -132
  368. package/src/connection-manager/index.js +0 -374
  369. package/src/connection-manager/latency-monitor.js +0 -264
  370. package/src/constants.js +0 -18
  371. package/src/content-routing/index.js +0 -163
  372. package/src/content-routing/utils.js +0 -89
  373. package/src/dht/dht-content-routing.js +0 -44
  374. package/src/dht/dht-peer-routing.js +0 -51
  375. package/src/dialer/dial-request.js +0 -103
  376. package/src/dialer/index.js +0 -376
  377. package/src/errors.js +0 -66
  378. package/src/fetch/constants.js +0 -6
  379. package/src/fetch/index.js +0 -159
  380. package/src/fetch/proto.d.ts +0 -134
  381. package/src/fetch/proto.js +0 -333
  382. package/src/get-peer.js +0 -49
  383. package/src/identify/consts.js +0 -15
  384. package/src/identify/index.js +0 -384
  385. package/src/identify/message.d.ts +0 -95
  386. package/src/identify/message.js +0 -328
  387. package/src/index.js +0 -813
  388. package/src/insecure/plaintext.js +0 -95
  389. package/src/insecure/proto.d.ts +0 -128
  390. package/src/insecure/proto.js +0 -371
  391. package/src/keychain/index.js +0 -561
  392. package/src/metrics/index.js +0 -290
  393. package/src/metrics/old-peers.js +0 -16
  394. package/src/metrics/stats.js +0 -270
  395. package/src/metrics/tracked-map.js +0 -94
  396. package/src/nat-manager.js +0 -197
  397. package/src/peer-routing.js +0 -176
  398. package/src/peer-store/README.md +0 -145
  399. package/src/peer-store/address-book.js +0 -382
  400. package/src/peer-store/index.js +0 -121
  401. package/src/peer-store/key-book.js +0 -141
  402. package/src/peer-store/metadata-book.js +0 -250
  403. package/src/peer-store/pb/peer.d.ts +0 -222
  404. package/src/peer-store/pb/peer.js +0 -643
  405. package/src/peer-store/pb/peer.proto +0 -31
  406. package/src/peer-store/proto-book.js +0 -237
  407. package/src/peer-store/store.js +0 -263
  408. package/src/peer-store/types.ts +0 -245
  409. package/src/ping/constants.js +0 -8
  410. package/src/ping/index.js +0 -84
  411. package/src/ping/util.js +0 -18
  412. package/src/pnet/crypto.js +0 -84
  413. package/src/pnet/errors.js +0 -7
  414. package/src/pnet/index.js +0 -86
  415. package/src/pnet/key-generator.js +0 -33
  416. package/src/pubsub-adapter.js +0 -61
  417. package/src/record/README.md +0 -130
  418. package/src/record/envelope/envelope.d.ts +0 -77
  419. package/src/record/envelope/envelope.js +0 -243
  420. package/src/record/envelope/envelope.proto +0 -19
  421. package/src/record/envelope/index.js +0 -183
  422. package/src/record/peer-record/consts.js +0 -14
  423. package/src/record/peer-record/index.js +0 -113
  424. package/src/record/peer-record/peer-record.d.ts +0 -133
  425. package/src/record/peer-record/peer-record.js +0 -367
  426. package/src/record/peer-record/peer-record.proto +0 -18
  427. package/src/record/utils.js +0 -25
  428. package/src/registrar.js +0 -127
  429. package/src/transport-manager.js +0 -269
  430. package/src/types.ts +0 -98
  431. package/src/upgrader.js +0 -492
@@ -0,0 +1,513 @@
1
+ import { logger } from '@libp2p/logger'
2
+ import errCode from 'err-code'
3
+ import mergeOptions from 'merge-options'
4
+ import { LatencyMonitor, SummaryObject } from './latency-monitor.js'
5
+ // @ts-expect-error retimer does not have types
6
+ import retimer from 'retimer'
7
+ import type { AbortOptions } from '@libp2p/interfaces'
8
+ import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events'
9
+ import type { Startable } from '@libp2p/interfaces/startable'
10
+ import { trackedMap } from '@libp2p/tracked-map'
11
+ import { codes } from '../errors.js'
12
+ import { isPeerId, PeerId } from '@libp2p/interfaces/peer-id'
13
+ import { setMaxListeners } from 'events'
14
+ import type { Connection } from '@libp2p/interfaces/connection'
15
+ import type { ConnectionManager } from '@libp2p/interfaces/connection-manager'
16
+ import { Components, Initializable } from '@libp2p/interfaces/components'
17
+ import * as STATUS from '@libp2p/interfaces/connection/status'
18
+ import { Dialer } from './dialer/index.js'
19
+ import type { AddressSorter } from '@libp2p/interfaces/peer-store'
20
+ import type { Resolver } from '@multiformats/multiaddr'
21
+
22
+ const log = logger('libp2p:connection-manager')
23
+
24
+ const defaultOptions: Partial<ConnectionManagerInit> = {
25
+ maxConnections: Infinity,
26
+ minConnections: 0,
27
+ maxData: Infinity,
28
+ maxSentData: Infinity,
29
+ maxReceivedData: Infinity,
30
+ maxEventLoopDelay: Infinity,
31
+ pollInterval: 2000,
32
+ autoDialInterval: 10000,
33
+ movingAverageInterval: 60000,
34
+ defaultPeerValue: 1
35
+ }
36
+
37
+ const METRICS_COMPONENT = 'connection-manager'
38
+ const METRICS_PEER_CONNECTIONS = 'peer-connections'
39
+ const METRICS_PEER_VALUES = 'peer-values'
40
+
41
+ export interface ConnectionManagerInit {
42
+ /**
43
+ * The maximum number of connections to keep open
44
+ */
45
+ maxConnections: number
46
+
47
+ /**
48
+ * The minimum number of connections to keep open
49
+ */
50
+ minConnections: number
51
+
52
+ /**
53
+ * The max data (in and out), per average interval to allow
54
+ */
55
+ maxData?: number
56
+
57
+ /**
58
+ * The max outgoing data, per average interval to allow
59
+ */
60
+ maxSentData?: number
61
+
62
+ /**
63
+ * The max incoming data, per average interval to allow
64
+ */
65
+ maxReceivedData?: number
66
+
67
+ /**
68
+ * The upper limit the event loop can take to run
69
+ */
70
+ maxEventLoopDelay?: number
71
+
72
+ /**
73
+ * How often, in milliseconds, metrics and latency should be checked
74
+ */
75
+ pollInterval?: number
76
+
77
+ /**
78
+ * How often, in milliseconds, to compute averages
79
+ */
80
+ movingAverageInterval?: number
81
+
82
+ /**
83
+ * The value of the peer
84
+ */
85
+ defaultPeerValue?: number
86
+
87
+ /**
88
+ * If true, try to connect to all discovered peers up to the connection manager limit
89
+ */
90
+ autoDial?: boolean
91
+
92
+ /**
93
+ * How long to wait between attempting to keep our number of concurrent connections
94
+ * above minConnections
95
+ */
96
+ autoDialInterval: number
97
+
98
+ /**
99
+ * Sort the known addresses of a peer before trying to dial
100
+ */
101
+ addressSorter?: AddressSorter
102
+
103
+ /**
104
+ * Number of max concurrent dials
105
+ */
106
+ maxParallelDials?: number
107
+
108
+ /**
109
+ * Number of max addresses to dial for a given peer
110
+ */
111
+ maxAddrsToDial?: number
112
+
113
+ /**
114
+ * How long a dial attempt is allowed to take
115
+ */
116
+ dialTimeout?: number
117
+
118
+ /**
119
+ * Number of max concurrent dials per peer
120
+ */
121
+ maxDialsPerPeer?: number
122
+
123
+ /**
124
+ * Multiaddr resolvers to use when dialing
125
+ */
126
+ resolvers?: Record<string, Resolver>
127
+ }
128
+
129
+ export interface ConnectionManagerEvents {
130
+ 'peer:connect': CustomEvent<PeerId>
131
+ 'peer:disconnect': CustomEvent<PeerId>
132
+ }
133
+
134
+ /**
135
+ * Responsible for managing known connections.
136
+ */
137
+ export class DefaultConnectionManager extends EventEmitter<ConnectionManagerEvents> implements ConnectionManager, Startable, Initializable {
138
+ public readonly dialer: Dialer
139
+ private components = new Components()
140
+ private readonly opts: Required<ConnectionManagerInit>
141
+ private readonly peerValues: Map<string, number>
142
+ private readonly connections: Map<string, Connection[]>
143
+ private started: boolean
144
+ private timer?: ReturnType<retimer>
145
+ private readonly latencyMonitor: LatencyMonitor
146
+
147
+ constructor (init: ConnectionManagerInit) {
148
+ super()
149
+
150
+ this.opts = mergeOptions.call({ ignoreUndefined: true }, defaultOptions, init)
151
+
152
+ if (this.opts.maxConnections < this.opts.minConnections) {
153
+ throw errCode(new Error('Connection Manager maxConnections must be greater than minConnections'), codes.ERR_INVALID_PARAMETERS)
154
+ }
155
+
156
+ log('options: %o', this.opts)
157
+
158
+ /**
159
+ * Map of peer identifiers to their peer value for pruning connections.
160
+ *
161
+ * @type {Map<string, number>}
162
+ */
163
+ this.peerValues = trackedMap({
164
+ component: METRICS_COMPONENT,
165
+ metric: METRICS_PEER_VALUES,
166
+ metrics: this.components.getMetrics()
167
+ })
168
+
169
+ /**
170
+ * Map of connections per peer
171
+ */
172
+ this.connections = trackedMap({
173
+ component: METRICS_COMPONENT,
174
+ metric: METRICS_PEER_CONNECTIONS,
175
+ metrics: this.components.getMetrics()
176
+ })
177
+
178
+ this.started = false
179
+ this._checkMetrics = this._checkMetrics.bind(this)
180
+
181
+ this.latencyMonitor = new LatencyMonitor({
182
+ latencyCheckIntervalMs: init.pollInterval,
183
+ dataEmitIntervalMs: init.pollInterval
184
+ })
185
+
186
+ try {
187
+ // This emitter gets listened to a lot
188
+ setMaxListeners?.(Infinity, this)
189
+ } catch {}
190
+
191
+ this.dialer = new Dialer(this.opts)
192
+
193
+ this.onConnect = this.onConnect.bind(this)
194
+ this.onDisconnect = this.onDisconnect.bind(this)
195
+ }
196
+
197
+ init (components: Components): void {
198
+ this.components = components
199
+
200
+ this.dialer.init(components)
201
+ }
202
+
203
+ isStarted () {
204
+ return this.started
205
+ }
206
+
207
+ /**
208
+ * Starts the Connection Manager. If Metrics are not enabled on libp2p
209
+ * only event loop and connection limits will be monitored.
210
+ */
211
+ async start () {
212
+ if (this.components.getMetrics() != null) {
213
+ this.timer = this.timer ?? retimer(this._checkMetrics, this.opts.pollInterval)
214
+ }
215
+
216
+ // latency monitor
217
+ this.latencyMonitor.start()
218
+ this._onLatencyMeasure = this._onLatencyMeasure.bind(this)
219
+ this.latencyMonitor.addEventListener('data', this._onLatencyMeasure)
220
+ await this.dialer.start()
221
+
222
+ this.started = true
223
+ log('started')
224
+ }
225
+
226
+ async afterStart () {
227
+ this.components.getUpgrader().addEventListener('connection', this.onConnect)
228
+ this.components.getUpgrader().addEventListener('connectionEnd', this.onDisconnect)
229
+ }
230
+
231
+ async beforeStop () {
232
+ this.components.getUpgrader().removeEventListener('connection', this.onConnect)
233
+ this.components.getUpgrader().removeEventListener('connectionEnd', this.onDisconnect)
234
+ }
235
+
236
+ /**
237
+ * Stops the Connection Manager
238
+ */
239
+ async stop () {
240
+ this.timer?.clear()
241
+
242
+ this.latencyMonitor.removeEventListener('data', this._onLatencyMeasure)
243
+ this.latencyMonitor.stop()
244
+ await this.dialer.stop()
245
+
246
+ this.started = false
247
+ await this._close()
248
+ log('stopped')
249
+ }
250
+
251
+ /**
252
+ * Cleans up the connections
253
+ */
254
+ async _close () {
255
+ // Close all connections we're tracking
256
+ const tasks: Array<Promise<void>> = []
257
+ for (const connectionList of this.connections.values()) {
258
+ for (const connection of connectionList) {
259
+ tasks.push((async () => {
260
+ try {
261
+ await connection.close()
262
+ } catch (err) {
263
+ log.error(err)
264
+ }
265
+ })())
266
+ }
267
+ }
268
+
269
+ log('closing %d connections', tasks.length)
270
+ await Promise.all(tasks)
271
+ this.connections.clear()
272
+ }
273
+
274
+ /**
275
+ * Sets the value of the given peer. Peers with lower values
276
+ * will be disconnected first.
277
+ */
278
+ setPeerValue (peerId: PeerId, value: number) {
279
+ if (value < 0 || value > 1) {
280
+ throw new Error('value should be a number between 0 and 1')
281
+ }
282
+
283
+ this.peerValues.set(peerId.toString(), value)
284
+ }
285
+
286
+ /**
287
+ * Checks the libp2p metrics to determine if any values have exceeded
288
+ * the configured maximums.
289
+ *
290
+ * @private
291
+ */
292
+ async _checkMetrics () {
293
+ const metrics = this.components.getMetrics()
294
+
295
+ if (metrics != null) {
296
+ try {
297
+ const movingAverages = metrics.getGlobal().getMovingAverages()
298
+ const received = movingAverages.dataReceived[this.opts.movingAverageInterval].movingAverage
299
+ await this._checkMaxLimit('maxReceivedData', received)
300
+ const sent = movingAverages.dataSent[this.opts.movingAverageInterval].movingAverage
301
+ await this._checkMaxLimit('maxSentData', sent)
302
+ const total = received + sent
303
+ await this._checkMaxLimit('maxData', total)
304
+ log.trace('metrics update', total)
305
+ } finally {
306
+ this.timer = retimer(this._checkMetrics, this.opts.pollInterval)
307
+ }
308
+ }
309
+ }
310
+
311
+ onConnect (evt: CustomEvent<Connection>) {
312
+ void this._onConnect(evt).catch(err => {
313
+ log.error(err)
314
+ })
315
+ }
316
+
317
+ /**
318
+ * Tracks the incoming connection and check the connection limit
319
+ */
320
+ async _onConnect (evt: CustomEvent<Connection>) {
321
+ const { detail: connection } = evt
322
+
323
+ if (!this.started) {
324
+ // This can happen when we are in the process of shutting down the node
325
+ await connection.close()
326
+ return
327
+ }
328
+
329
+ const peerId = connection.remotePeer
330
+ const peerIdStr = peerId.toString()
331
+ const storedConns = this.connections.get(peerIdStr)
332
+
333
+ if (storedConns != null) {
334
+ storedConns.push(connection)
335
+ } else {
336
+ this.connections.set(peerIdStr, [connection])
337
+ }
338
+
339
+ if (peerId.publicKey != null) {
340
+ await this.components.getPeerStore().keyBook.set(peerId, peerId.publicKey)
341
+ }
342
+
343
+ if (!this.peerValues.has(peerIdStr)) {
344
+ this.peerValues.set(peerIdStr, this.opts.defaultPeerValue)
345
+ }
346
+
347
+ await this._checkMaxLimit('maxConnections', this.getConnections().length)
348
+ this.dispatchEvent(new CustomEvent<Connection>('peer:connect', { detail: connection }))
349
+ }
350
+
351
+ /**
352
+ * Removes the connection from tracking
353
+ */
354
+ onDisconnect (evt: CustomEvent<Connection>) {
355
+ const { detail: connection } = evt
356
+
357
+ if (!this.started) {
358
+ // This can happen when we are in the process of shutting down the node
359
+ return
360
+ }
361
+
362
+ const peerId = connection.remotePeer.toString()
363
+ let storedConn = this.connections.get(peerId)
364
+
365
+ if (storedConn != null && storedConn.length > 1) {
366
+ storedConn = storedConn.filter((conn) => conn.id !== connection.id)
367
+ this.connections.set(peerId, storedConn)
368
+ } else if (storedConn != null) {
369
+ this.connections.delete(peerId)
370
+ this.peerValues.delete(connection.remotePeer.toString())
371
+ this.dispatchEvent(new CustomEvent<Connection>('peer:disconnect', { detail: connection }))
372
+
373
+ this.components.getMetrics()?.onPeerDisconnected(connection.remotePeer)
374
+ }
375
+ }
376
+
377
+ getConnections (peerId?: PeerId): Connection[] {
378
+ if (peerId != null) {
379
+ return this.connections.get(peerId.toString()) ?? []
380
+ }
381
+
382
+ let conns: Connection[] = []
383
+
384
+ for (const c of this.connections.values()) {
385
+ conns = conns.concat(c)
386
+ }
387
+
388
+ return conns
389
+ }
390
+
391
+ async openConnection (peerId: PeerId, options?: AbortOptions): Promise<Connection> {
392
+ log('dial to %p', peerId)
393
+ const existingConnections = this.getConnections(peerId)
394
+
395
+ if (existingConnections.length > 0) {
396
+ log('had an existing connection to %p', peerId)
397
+
398
+ return existingConnections[0]
399
+ }
400
+
401
+ const connection = await this.dialer.dial(peerId, options)
402
+ let peerConnections = this.connections.get(peerId.toString())
403
+
404
+ if (peerConnections == null) {
405
+ peerConnections = []
406
+ this.connections.set(peerId.toString(), peerConnections)
407
+ }
408
+
409
+ // we get notified of connections via the Upgrader emitting "connection"
410
+ // events, double check we aren't already tracking this connection before
411
+ // storing it
412
+ let trackedConnection = false
413
+
414
+ for (const conn of peerConnections) {
415
+ if (conn.id === connection.id) {
416
+ trackedConnection = true
417
+ }
418
+ }
419
+
420
+ if (!trackedConnection) {
421
+ peerConnections.push(connection)
422
+ }
423
+
424
+ return connection
425
+ }
426
+
427
+ async closeConnections (peerId: PeerId): Promise<void> {
428
+ const connections = this.connections.get(peerId.toString()) ?? []
429
+
430
+ await Promise.all(
431
+ connections.map(async connection => {
432
+ return await connection.close()
433
+ })
434
+ )
435
+ }
436
+
437
+ /**
438
+ * Get all open connections with a peer
439
+ */
440
+ getAll (peerId: PeerId): Connection[] {
441
+ if (!isPeerId(peerId)) {
442
+ throw errCode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)
443
+ }
444
+
445
+ const id = peerId.toString()
446
+ const connections = this.connections.get(id)
447
+
448
+ // Return all open connections
449
+ if (connections != null) {
450
+ return connections.filter(connection => connection.stat.status === STATUS.OPEN)
451
+ }
452
+
453
+ return []
454
+ }
455
+
456
+ /**
457
+ * If the event loop is slow, maybe close a connection
458
+ */
459
+ _onLatencyMeasure (evt: CustomEvent<SummaryObject>) {
460
+ const { detail: summary } = evt
461
+
462
+ this._checkMaxLimit('maxEventLoopDelay', summary.avgMs)
463
+ .catch(err => {
464
+ log.error(err)
465
+ })
466
+ }
467
+
468
+ /**
469
+ * If the `value` of `name` has exceeded its limit, maybe close a connection
470
+ */
471
+ async _checkMaxLimit (name: keyof ConnectionManagerInit, value: number) {
472
+ const limit = this.opts[name]
473
+ log.trace('checking limit of %s. current value: %d of %d', name, value, limit)
474
+ if (value > limit) {
475
+ log('%s: limit exceeded: %p, %d', this.components.getPeerId(), name, value)
476
+ await this._maybeDisconnectOne()
477
+ }
478
+ }
479
+
480
+ /**
481
+ * If we have more connections than our maximum, close a connection
482
+ * to the lowest valued peer.
483
+ */
484
+ async _maybeDisconnectOne () {
485
+ if (this.opts.minConnections < this.connections.size) {
486
+ const peerValues = Array.from(new Map([...this.peerValues.entries()].sort((a, b) => a[1] - b[1])))
487
+
488
+ log('%p: sorted peer values: %j', this.components.getPeerId(), peerValues)
489
+ const disconnectPeer = peerValues[0]
490
+
491
+ if (disconnectPeer != null) {
492
+ const peerId = disconnectPeer[0]
493
+ log('%p: lowest value peer is %s', this.components.getPeerId(), peerId)
494
+ log('%p: closing a connection to %j', this.components.getPeerId(), peerId)
495
+
496
+ for (const connections of this.connections.values()) {
497
+ if (connections[0].remotePeer.toString() === peerId) {
498
+ void connections[0].close()
499
+ .catch(err => {
500
+ log.error(err)
501
+ })
502
+
503
+ // TODO: should not need to invoke this manually
504
+ this.onDisconnect(new CustomEvent<Connection>('connectionEnd', {
505
+ detail: connections[0]
506
+ }))
507
+ break
508
+ }
509
+ }
510
+ }
511
+ }
512
+ }
513
+ }