libp2p 0.36.0 → 0.36.2-199395d

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 (398) hide show
  1. package/LICENSE +3 -21
  2. package/README.md +13 -10
  3. package/dist/src/address-manager/index.d.ts +33 -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 +215 -0
  10. package/dist/src/circuit/auto-relay.js.map +1 -0
  11. package/dist/src/circuit/circuit/hop.d.ts +25 -52
  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 +16 -8
  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 +16 -35
  20. package/dist/src/circuit/circuit/stream-handler.d.ts.map +1 -1
  21. package/dist/src/circuit/circuit/stream-handler.js +60 -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 +54 -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/{protocol → pb}/index.d.ts +0 -0
  44. package/{src/circuit/protocol → dist/src/circuit/pb}/index.js +7 -9
  45. package/dist/src/circuit/transport.d.ts +18 -78
  46. package/dist/src/circuit/transport.d.ts.map +1 -1
  47. package/dist/src/circuit/transport.js +190 -0
  48. package/dist/src/circuit/transport.js.map +1 -0
  49. package/dist/src/circuit/utils.d.ts +5 -2
  50. package/dist/src/circuit/utils.d.ts.map +1 -1
  51. package/dist/src/circuit/utils.js +11 -0
  52. package/dist/src/circuit/utils.js.map +1 -0
  53. package/dist/src/config.d.ts +3 -85
  54. package/dist/src/config.d.ts.map +1 -1
  55. package/dist/src/config.js +93 -0
  56. package/dist/src/config.js.map +1 -0
  57. package/dist/src/connection-manager/auto-dialler.d.ts +24 -41
  58. package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
  59. package/dist/src/connection-manager/auto-dialler.js +105 -0
  60. package/dist/src/connection-manager/auto-dialler.js.map +1 -0
  61. package/dist/src/connection-manager/index.d.ts +79 -144
  62. package/dist/src/connection-manager/index.d.ts.map +1 -1
  63. package/dist/src/connection-manager/index.js +295 -0
  64. package/dist/src/connection-manager/index.js.map +1 -0
  65. package/dist/src/connection-manager/latency-monitor.d.ts +72 -97
  66. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  67. package/dist/src/connection-manager/latency-monitor.js +220 -0
  68. package/dist/src/connection-manager/latency-monitor.js.map +1 -0
  69. package/dist/src/connection-manager/visibility-change-emitter.d.ts +15 -16
  70. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  71. package/dist/src/connection-manager/visibility-change-emitter.js +118 -0
  72. package/dist/src/connection-manager/visibility-change-emitter.js.map +1 -0
  73. package/dist/src/constants.d.ts +22 -10
  74. package/dist/src/constants.d.ts.map +1 -1
  75. package/dist/src/constants.js +27 -0
  76. package/dist/src/constants.js.map +1 -0
  77. package/dist/src/content-routing/index.d.ts +26 -81
  78. package/dist/src/content-routing/index.d.ts.map +1 -1
  79. package/dist/src/content-routing/index.js +99 -0
  80. package/dist/src/content-routing/index.js.map +1 -0
  81. package/dist/src/content-routing/utils.d.ts +6 -49
  82. package/dist/src/content-routing/utils.d.ts.map +1 -1
  83. package/dist/src/content-routing/utils.js +42 -0
  84. package/dist/src/content-routing/utils.js.map +1 -0
  85. package/dist/src/dht/dht-content-routing.d.ts +10 -24
  86. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  87. package/dist/src/dht/dht-content-routing.js +32 -0
  88. package/dist/src/dht/dht-content-routing.js.map +1 -0
  89. package/dist/src/dht/dht-peer-routing.d.ts +9 -24
  90. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  91. package/dist/src/dht/dht-peer-routing.js +26 -0
  92. package/dist/src/dht/dht-peer-routing.js.map +1 -0
  93. package/dist/src/dialer/auto-dialer.d.ts +14 -0
  94. package/dist/src/dialer/auto-dialer.d.ts.map +1 -0
  95. package/dist/src/dialer/auto-dialer.js +24 -0
  96. package/dist/src/dialer/auto-dialer.js.map +1 -0
  97. package/dist/src/dialer/dial-request.d.ts +18 -46
  98. package/dist/src/dialer/dial-request.d.ts.map +1 -1
  99. package/dist/src/dialer/dial-request.js +83 -0
  100. package/dist/src/dialer/dial-request.js.map +1 -0
  101. package/dist/src/dialer/index.d.ts +41 -148
  102. package/dist/src/dialer/index.d.ts.map +1 -1
  103. package/dist/src/dialer/index.js +281 -0
  104. package/dist/src/dialer/index.js.map +1 -0
  105. package/dist/src/errors.d.ts +68 -63
  106. package/dist/src/errors.d.ts.map +1 -1
  107. package/dist/src/errors.js +73 -0
  108. package/dist/src/errors.js.map +1 -0
  109. package/dist/src/fetch/constants.d.ts +1 -1
  110. package/dist/src/fetch/constants.d.ts.map +1 -1
  111. package/dist/src/fetch/constants.js +3 -0
  112. package/dist/src/fetch/constants.js.map +1 -0
  113. package/dist/src/fetch/index.d.ts +30 -49
  114. package/dist/src/fetch/index.d.ts.map +1 -1
  115. package/dist/src/fetch/index.js +130 -0
  116. package/dist/src/fetch/index.js.map +1 -0
  117. package/dist/src/fetch/{proto.d.ts → pb/proto.d.ts} +0 -0
  118. package/{src/fetch → dist/src/fetch/pb}/proto.js +7 -9
  119. package/dist/src/get-peer.d.ts +4 -11
  120. package/dist/src/get-peer.d.ts.map +1 -1
  121. package/dist/src/get-peer.js +43 -0
  122. package/dist/src/get-peer.js.map +1 -0
  123. package/dist/src/identify/consts.d.ts +9 -9
  124. package/dist/src/identify/consts.d.ts.map +1 -1
  125. package/dist/src/identify/consts.js +11 -0
  126. package/dist/src/identify/consts.js.map +1 -0
  127. package/dist/src/identify/index.d.ts +40 -96
  128. package/dist/src/identify/index.d.ts.map +1 -1
  129. package/dist/src/identify/index.js +322 -0
  130. package/dist/src/identify/index.js.map +1 -0
  131. package/{src/identify → dist/src/identify/pb}/message.d.ts +20 -5
  132. package/{src/identify → dist/src/identify/pb}/message.js +83 -42
  133. package/dist/src/index.d.ts +157 -583
  134. package/dist/src/index.d.ts.map +1 -1
  135. package/dist/src/index.js +9 -0
  136. package/dist/src/index.js.map +1 -0
  137. package/dist/src/insecure/index.d.ts +9 -0
  138. package/dist/src/insecure/index.d.ts.map +1 -0
  139. package/dist/src/insecure/index.js +78 -0
  140. package/dist/src/insecure/index.js.map +1 -0
  141. package/dist/src/insecure/{proto.d.ts → pb/proto.d.ts} +7 -1
  142. package/{src/insecure → dist/src/insecure/pb}/proto.js +39 -22
  143. package/dist/src/keychain/cms.d.ts +6 -14
  144. package/dist/src/keychain/cms.d.ts.map +1 -1
  145. package/dist/src/keychain/cms.js +129 -0
  146. package/dist/src/keychain/cms.js.map +1 -0
  147. package/dist/src/keychain/index.d.ts +62 -82
  148. package/dist/src/keychain/index.d.ts.map +1 -1
  149. package/dist/src/keychain/index.js +493 -0
  150. package/dist/src/keychain/index.js.map +1 -0
  151. package/dist/src/keychain/util.d.ts +3 -6
  152. package/dist/src/keychain/util.d.ts.map +1 -1
  153. package/dist/src/keychain/util.js +79 -0
  154. package/dist/src/keychain/util.js.map +1 -0
  155. package/dist/src/libp2p.d.ts +75 -0
  156. package/dist/src/libp2p.d.ts.map +1 -0
  157. package/dist/src/libp2p.js +368 -0
  158. package/dist/src/libp2p.js.map +1 -0
  159. package/dist/src/metrics/index.d.ts +47 -104
  160. package/dist/src/metrics/index.d.ts.map +1 -1
  161. package/dist/src/metrics/index.js +231 -0
  162. package/dist/src/metrics/index.js.map +1 -0
  163. package/dist/src/metrics/moving-average.d.ts +14 -0
  164. package/dist/src/metrics/moving-average.d.ts.map +1 -0
  165. package/dist/src/metrics/moving-average.js +40 -0
  166. package/dist/src/metrics/moving-average.js.map +1 -0
  167. package/dist/src/metrics/stats.d.ts +45 -93
  168. package/dist/src/metrics/stats.d.ts.map +1 -1
  169. package/dist/src/metrics/stats.js +183 -0
  170. package/dist/src/metrics/stats.js.map +1 -0
  171. package/dist/src/nat-manager.d.ts +42 -99
  172. package/dist/src/nat-manager.d.ts.map +1 -1
  173. package/dist/src/nat-manager.js +114 -0
  174. package/dist/src/nat-manager.js.map +1 -0
  175. package/dist/src/peer-record-updater.d.ts +15 -0
  176. package/dist/src/peer-record-updater.d.ts.map +1 -0
  177. package/dist/src/peer-record-updater.js +44 -0
  178. package/dist/src/peer-record-updater.js.map +1 -0
  179. package/dist/src/peer-routing.d.ts +39 -84
  180. package/dist/src/peer-routing.d.ts.map +1 -1
  181. package/dist/src/peer-routing.js +108 -0
  182. package/dist/src/peer-routing.js.map +1 -0
  183. package/dist/src/ping/constants.d.ts +4 -4
  184. package/dist/src/ping/constants.d.ts.map +1 -1
  185. package/dist/src/ping/constants.js +5 -0
  186. package/dist/src/ping/constants.js.map +1 -0
  187. package/dist/src/ping/index.d.ts +26 -33
  188. package/dist/src/ping/index.d.ts.map +1 -1
  189. package/dist/src/ping/index.js +56 -0
  190. package/dist/src/ping/index.js.map +1 -0
  191. package/dist/src/pnet/crypto.d.ts +15 -5
  192. package/dist/src/pnet/crypto.d.ts.map +1 -1
  193. package/dist/src/pnet/crypto.js +60 -0
  194. package/dist/src/pnet/crypto.js.map +1 -0
  195. package/dist/src/pnet/errors.d.ts +5 -5
  196. package/dist/src/pnet/errors.d.ts.map +1 -1
  197. package/dist/src/pnet/errors.js +6 -0
  198. package/dist/src/pnet/errors.js.map +1 -0
  199. package/dist/src/pnet/index.d.ts +11 -20
  200. package/dist/src/pnet/index.d.ts.map +1 -1
  201. package/dist/src/pnet/index.js +66 -0
  202. package/dist/src/pnet/index.js.map +1 -0
  203. package/dist/src/pnet/key-generator.d.ts +3 -7
  204. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  205. package/dist/src/pnet/key-generator.js +25 -0
  206. package/dist/src/pnet/key-generator.js.map +1 -0
  207. package/dist/src/registrar.d.ts +27 -65
  208. package/dist/src/registrar.d.ts.map +1 -1
  209. package/dist/src/registrar.js +159 -0
  210. package/dist/src/registrar.js.map +1 -0
  211. package/dist/src/transport-manager.d.ts +34 -82
  212. package/dist/src/transport-manager.d.ts.map +1 -1
  213. package/dist/src/transport-manager.js +223 -0
  214. package/dist/src/transport-manager.js.map +1 -0
  215. package/dist/src/upgrader.d.ts +49 -129
  216. package/dist/src/upgrader.d.ts.map +1 -1
  217. package/dist/src/upgrader.js +402 -0
  218. package/dist/src/upgrader.js.map +1 -0
  219. package/dist/src/version.d.ts +3 -0
  220. package/dist/src/version.d.ts.map +1 -0
  221. package/dist/src/version.js +3 -0
  222. package/dist/src/version.js.map +1 -0
  223. package/package.json +145 -197
  224. package/src/address-manager/index.ts +129 -0
  225. package/src/circuit/README.md +16 -11
  226. package/src/circuit/auto-relay.ts +284 -0
  227. package/src/circuit/circuit/hop.ts +211 -0
  228. package/src/circuit/circuit/stop.ts +78 -0
  229. package/src/circuit/circuit/stream-handler.ts +87 -0
  230. package/src/circuit/circuit/{utils.js → utils.ts} +9 -25
  231. package/src/circuit/constants.ts +31 -0
  232. package/src/circuit/index.ts +120 -0
  233. package/src/circuit/{listener.js → listener.ts} +21 -27
  234. package/src/circuit/multicodec.ts +2 -0
  235. package/src/circuit/{protocol → pb}/index.d.ts +0 -0
  236. package/src/circuit/pb/index.js +528 -0
  237. package/src/circuit/{protocol → pb}/index.proto +0 -0
  238. package/src/circuit/transport.ts +216 -0
  239. package/src/circuit/utils.ts +12 -0
  240. package/src/config.ts +101 -0
  241. package/src/connection-manager/auto-dialler.ts +154 -0
  242. package/src/connection-manager/index.ts +422 -0
  243. package/src/connection-manager/latency-monitor.ts +319 -0
  244. package/src/connection-manager/{visibility-change-emitter.js → visibility-change-emitter.ts} +48 -38
  245. package/src/constants.ts +31 -0
  246. package/src/content-routing/index.ts +143 -0
  247. package/src/content-routing/utils.ts +54 -0
  248. package/src/dht/dht-content-routing.ts +43 -0
  249. package/src/dht/dht-peer-routing.ts +35 -0
  250. package/src/dialer/auto-dialer.ts +40 -0
  251. package/src/dialer/{dial-request.js → dial-request.ts} +60 -51
  252. package/src/dialer/index.ts +374 -0
  253. package/src/errors.ts +71 -0
  254. package/src/fetch/README.md +1 -1
  255. package/src/fetch/constants.ts +3 -0
  256. package/src/fetch/{index.js → index.ts} +79 -70
  257. package/src/fetch/{proto.d.ts → pb/proto.d.ts} +0 -0
  258. package/src/fetch/pb/proto.js +331 -0
  259. package/src/fetch/{proto.proto → pb/proto.proto} +0 -0
  260. package/src/get-peer.ts +57 -0
  261. package/src/identify/consts.ts +13 -0
  262. package/src/identify/index.ts +445 -0
  263. package/{dist/src/identify → src/identify/pb}/message.d.ts +20 -5
  264. package/src/identify/pb/message.js +369 -0
  265. package/src/identify/{message.proto → pb/message.proto} +0 -0
  266. package/src/index.ts +234 -0
  267. package/src/insecure/index.ts +97 -0
  268. package/src/insecure/{proto.d.ts → pb/proto.d.ts} +7 -1
  269. package/src/insecure/pb/proto.js +388 -0
  270. package/src/insecure/{proto.proto → pb/proto.proto} +0 -0
  271. package/src/keychain/{cms.js → cms.ts} +62 -58
  272. package/src/keychain/index.ts +588 -0
  273. package/src/keychain/{util.js → util.ts} +7 -17
  274. package/src/libp2p.ts +501 -0
  275. package/src/metrics/index.ts +310 -0
  276. package/src/metrics/moving-average.ts +53 -0
  277. package/src/metrics/stats.ts +243 -0
  278. package/src/nat-manager.ts +194 -0
  279. package/src/peer-record-updater.ts +55 -0
  280. package/src/peer-routing.ts +185 -0
  281. package/src/ping/README.md +1 -1
  282. package/src/ping/constants.ts +5 -0
  283. package/src/ping/index.ts +83 -0
  284. package/src/pnet/README.md +2 -2
  285. package/src/pnet/crypto.ts +67 -0
  286. package/src/pnet/errors.ts +5 -0
  287. package/src/pnet/index.ts +95 -0
  288. package/src/pnet/key-generator.ts +28 -0
  289. package/src/registrar.ts +205 -0
  290. package/src/transport-manager.ts +279 -0
  291. package/src/upgrader.ts +499 -0
  292. package/src/version.ts +3 -0
  293. package/dist/index.min.js +0 -55
  294. package/dist/src/insecure/plaintext.d.ts +0 -12
  295. package/dist/src/insecure/plaintext.d.ts.map +0 -1
  296. package/dist/src/metrics/old-peers.d.ts +0 -3
  297. package/dist/src/metrics/old-peers.d.ts.map +0 -1
  298. package/dist/src/metrics/tracked-map.d.ts +0 -8
  299. package/dist/src/metrics/tracked-map.d.ts.map +0 -1
  300. package/dist/src/peer-store/address-book.d.ts +0 -67
  301. package/dist/src/peer-store/address-book.d.ts.map +0 -1
  302. package/dist/src/peer-store/index.d.ts +0 -58
  303. package/dist/src/peer-store/index.d.ts.map +0 -1
  304. package/dist/src/peer-store/key-book.d.ts +0 -40
  305. package/dist/src/peer-store/key-book.d.ts.map +0 -1
  306. package/dist/src/peer-store/metadata-book.d.ts +0 -58
  307. package/dist/src/peer-store/metadata-book.d.ts.map +0 -1
  308. package/dist/src/peer-store/pb/peer.d.ts +0 -222
  309. package/dist/src/peer-store/proto-book.d.ts +0 -43
  310. package/dist/src/peer-store/proto-book.d.ts.map +0 -1
  311. package/dist/src/peer-store/store.d.ts +0 -73
  312. package/dist/src/peer-store/store.d.ts.map +0 -1
  313. package/dist/src/peer-store/types.d.ts +0 -202
  314. package/dist/src/peer-store/types.d.ts.map +0 -1
  315. package/dist/src/ping/util.d.ts +0 -5
  316. package/dist/src/ping/util.d.ts.map +0 -1
  317. package/dist/src/pubsub-adapter.d.ts +0 -22
  318. package/dist/src/pubsub-adapter.d.ts.map +0 -1
  319. package/dist/src/record/envelope/envelope.d.ts +0 -77
  320. package/dist/src/record/envelope/index.d.ts +0 -80
  321. package/dist/src/record/envelope/index.d.ts.map +0 -1
  322. package/dist/src/record/peer-record/consts.d.ts +0 -4
  323. package/dist/src/record/peer-record/consts.d.ts.map +0 -1
  324. package/dist/src/record/peer-record/index.d.ts +0 -60
  325. package/dist/src/record/peer-record/index.d.ts.map +0 -1
  326. package/dist/src/record/peer-record/peer-record.d.ts +0 -133
  327. package/dist/src/record/utils.d.ts +0 -12
  328. package/dist/src/record/utils.d.ts.map +0 -1
  329. package/dist/src/types.d.ts +0 -90
  330. package/dist/src/types.d.ts.map +0 -1
  331. package/src/address-manager/index.js +0 -96
  332. package/src/circuit/auto-relay.js +0 -302
  333. package/src/circuit/circuit/hop.js +0 -205
  334. package/src/circuit/circuit/stop.js +0 -81
  335. package/src/circuit/circuit/stream-handler.js +0 -94
  336. package/src/circuit/constants.js +0 -12
  337. package/src/circuit/index.js +0 -102
  338. package/src/circuit/multicodec.js +0 -5
  339. package/src/circuit/transport.js +0 -229
  340. package/src/circuit/utils.js +0 -17
  341. package/src/config.js +0 -114
  342. package/src/connection-manager/auto-dialler.js +0 -132
  343. package/src/connection-manager/index.js +0 -363
  344. package/src/connection-manager/latency-monitor.js +0 -264
  345. package/src/constants.js +0 -18
  346. package/src/content-routing/index.js +0 -163
  347. package/src/content-routing/utils.js +0 -89
  348. package/src/dht/dht-content-routing.js +0 -44
  349. package/src/dht/dht-peer-routing.js +0 -51
  350. package/src/dialer/index.js +0 -376
  351. package/src/errors.js +0 -66
  352. package/src/fetch/constants.js +0 -6
  353. package/src/get-peer.js +0 -49
  354. package/src/identify/consts.js +0 -15
  355. package/src/identify/index.js +0 -384
  356. package/src/index.js +0 -811
  357. package/src/insecure/plaintext.js +0 -95
  358. package/src/keychain/index.js +0 -561
  359. package/src/metrics/index.js +0 -290
  360. package/src/metrics/old-peers.js +0 -16
  361. package/src/metrics/stats.js +0 -270
  362. package/src/metrics/tracked-map.js +0 -94
  363. package/src/nat-manager.js +0 -197
  364. package/src/peer-routing.js +0 -176
  365. package/src/peer-store/README.md +0 -145
  366. package/src/peer-store/address-book.js +0 -382
  367. package/src/peer-store/index.js +0 -121
  368. package/src/peer-store/key-book.js +0 -141
  369. package/src/peer-store/metadata-book.js +0 -250
  370. package/src/peer-store/pb/peer.d.ts +0 -222
  371. package/src/peer-store/pb/peer.js +0 -643
  372. package/src/peer-store/pb/peer.proto +0 -31
  373. package/src/peer-store/proto-book.js +0 -237
  374. package/src/peer-store/store.js +0 -263
  375. package/src/peer-store/types.ts +0 -245
  376. package/src/ping/constants.js +0 -8
  377. package/src/ping/index.js +0 -85
  378. package/src/ping/util.js +0 -18
  379. package/src/pnet/crypto.js +0 -84
  380. package/src/pnet/errors.js +0 -7
  381. package/src/pnet/index.js +0 -86
  382. package/src/pnet/key-generator.js +0 -33
  383. package/src/pubsub-adapter.js +0 -61
  384. package/src/record/README.md +0 -130
  385. package/src/record/envelope/envelope.d.ts +0 -77
  386. package/src/record/envelope/envelope.js +0 -243
  387. package/src/record/envelope/envelope.proto +0 -19
  388. package/src/record/envelope/index.js +0 -183
  389. package/src/record/peer-record/consts.js +0 -14
  390. package/src/record/peer-record/index.js +0 -113
  391. package/src/record/peer-record/peer-record.d.ts +0 -133
  392. package/src/record/peer-record/peer-record.js +0 -367
  393. package/src/record/peer-record/peer-record.proto +0 -18
  394. package/src/record/utils.js +0 -25
  395. package/src/registrar.js +0 -127
  396. package/src/transport-manager.js +0 -269
  397. package/src/types.ts +0 -98
  398. package/src/upgrader.js +0 -492
@@ -1,132 +0,0 @@
1
- 'use strict'
2
-
3
- const debug = require('debug')
4
- const mergeOptions = require('merge-options')
5
- // @ts-ignore retimer does not have types
6
- const retimer = require('retimer')
7
- const all = require('it-all')
8
- const { pipe } = require('it-pipe')
9
- const filter = require('it-filter')
10
- const sort = require('it-sort')
11
-
12
- const log = Object.assign(debug('libp2p:connection-manager:auto-dialler'), {
13
- error: debug('libp2p:connection-manager:auto-dialler:err')
14
- })
15
-
16
- const defaultOptions = {
17
- enabled: true,
18
- minConnections: 0,
19
- autoDialInterval: 10000
20
- }
21
-
22
- /**
23
- * @typedef {import('../index')} Libp2p
24
- * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection
25
- */
26
-
27
- /**
28
- * @typedef {Object} AutoDiallerOptions
29
- * @property {boolean} [enabled = true] - Should preemptively guarantee connections are above the low watermark
30
- * @property {number} [minConnections = 0] - The minimum number of connections to avoid pruning
31
- * @property {number} [autoDialInterval = 10000] - How often, in milliseconds, it should preemptively guarantee connections are above the low watermark
32
- */
33
-
34
- class AutoDialler {
35
- /**
36
- * Proactively tries to connect to known peers stored in the PeerStore.
37
- * It will keep the number of connections below the upper limit and sort
38
- * the peers to connect based on wether we know their keys and protocols.
39
- *
40
- * @class
41
- * @param {Libp2p} libp2p
42
- * @param {AutoDiallerOptions} options
43
- */
44
- constructor (libp2p, options = {}) {
45
- this._options = mergeOptions.call({ ignoreUndefined: true }, defaultOptions, options)
46
- this._libp2p = libp2p
47
- this._running = false
48
- this._autoDialTimeout = null
49
- this._autoDial = this._autoDial.bind(this)
50
-
51
- log('options: %j', this._options)
52
- }
53
-
54
- /**
55
- * Starts the auto dialer
56
- */
57
- async start () {
58
- if (!this._options.enabled) {
59
- log('not enabled')
60
- return
61
- }
62
-
63
- this._running = true
64
- this._autoDial().catch(err => {
65
- log.error('could start autodial', err)
66
- })
67
- log('started')
68
- }
69
-
70
- /**
71
- * Stops the auto dialler
72
- */
73
- async stop () {
74
- if (!this._options.enabled) {
75
- log('not enabled')
76
- return
77
- }
78
-
79
- this._running = false
80
- this._autoDialTimeout && this._autoDialTimeout.clear()
81
- log('stopped')
82
- }
83
-
84
- async _autoDial () {
85
- const minConnections = this._options.minConnections
86
-
87
- // Already has enough connections
88
- if (this._libp2p.connections.size >= minConnections) {
89
- this._autoDialTimeout = retimer(this._autoDial, this._options.autoDialInterval)
90
- return
91
- }
92
-
93
- // Sort peers on whether we know protocols of public keys for them
94
- // TODO: assuming the `peerStore.getPeers()` order is stable this will mean
95
- // we keep trying to connect to the same peers?
96
- const peers = await pipe(
97
- this._libp2p.peerStore.getPeers(),
98
- (source) => filter(source, (peer) => !peer.id.equals(this._libp2p.peerId)),
99
- (source) => sort(source, (a, b) => {
100
- if (b.protocols && b.protocols.length && (!a.protocols || !a.protocols.length)) {
101
- return 1
102
- } else if (b.id.pubKey && !a.id.pubKey) {
103
- return 1
104
- }
105
- return -1
106
- }),
107
- (source) => all(source)
108
- )
109
-
110
- for (let i = 0; this._running && i < peers.length && this._libp2p.connections.size < minConnections; i++) {
111
- const peer = peers[i]
112
-
113
- if (!this._libp2p.connectionManager.get(peer.id)) {
114
- log('connecting to a peerStore stored peer %s', peer.id.toB58String())
115
- try {
116
- await this._libp2p.dialer.connectToPeer(peer.id)
117
- } catch (/** @type {any} */ err) {
118
- log.error('could not connect to peerStore stored peer', err)
119
- }
120
- }
121
- }
122
-
123
- // Connection Manager was stopped
124
- if (!this._running) {
125
- return
126
- }
127
-
128
- this._autoDialTimeout = retimer(this._autoDial, this._options.autoDialInterval)
129
- }
130
- }
131
-
132
- module.exports = AutoDialler
@@ -1,363 +0,0 @@
1
- 'use strict'
2
-
3
- const debug = require('debug')
4
- const log = Object.assign(debug('libp2p:connection-manager'), {
5
- error: debug('libp2p:connection-manager:err')
6
- })
7
-
8
- const errcode = require('err-code')
9
- const mergeOptions = require('merge-options')
10
- const LatencyMonitor = require('./latency-monitor')
11
- // @ts-ignore retimer does not have types
12
- const retimer = require('retimer')
13
-
14
- const { EventEmitter } = require('events')
15
- const trackedMap = require('../metrics/tracked-map')
16
- const PeerId = require('peer-id')
17
-
18
- const {
19
- codes: { ERR_INVALID_PARAMETERS }
20
- } = require('../errors')
21
-
22
- const defaultOptions = {
23
- maxConnections: Infinity,
24
- minConnections: 0,
25
- maxData: Infinity,
26
- maxSentData: Infinity,
27
- maxReceivedData: Infinity,
28
- maxEventLoopDelay: Infinity,
29
- pollInterval: 2000,
30
- autoDialInterval: 10000,
31
- movingAverageInterval: 60000,
32
- defaultPeerValue: 1
33
- }
34
-
35
- const METRICS_COMPONENT = 'connection-manager'
36
- const METRICS_PEER_CONNECTIONS = 'peer-connections'
37
- const METRICS_PEER_VALUES = 'peer-values'
38
-
39
- /**
40
- * @typedef {import('../')} Libp2p
41
- * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection
42
- */
43
-
44
- /**
45
- * @typedef {Object} ConnectionManagerOptions
46
- * @property {number} [maxConnections = Infinity] - The maximum number of connections allowed.
47
- * @property {number} [minConnections = 0] - The minimum number of connections to avoid pruning.
48
- * @property {number} [maxData = Infinity] - The max data (in and out), per average interval to allow.
49
- * @property {number} [maxSentData = Infinity] - The max outgoing data, per average interval to allow.
50
- * @property {number} [maxReceivedData = Infinity] - The max incoming data, per average interval to allow.
51
- * @property {number} [maxEventLoopDelay = Infinity] - The upper limit the event loop can take to run.
52
- * @property {number} [pollInterval = 2000] - How often, in milliseconds, metrics and latency should be checked.
53
- * @property {number} [movingAverageInterval = 60000] - How often, in milliseconds, to compute averages.
54
- * @property {number} [defaultPeerValue = 1] - The value of the peer.
55
- * @property {boolean} [autoDial = true] - Should preemptively guarantee connections are above the low watermark.
56
- * @property {number} [autoDialInterval = 10000] - How often, in milliseconds, it should preemptively guarantee connections are above the low watermark.
57
- */
58
-
59
- /**
60
- *
61
- * @fires ConnectionManager#peer:connect Emitted when a new peer is connected.
62
- * @fires ConnectionManager#peer:disconnect Emitted when a peer is disconnected.
63
- */
64
- class ConnectionManager extends EventEmitter {
65
- /**
66
- * Responsible for managing known connections.
67
- *
68
- * @class
69
- * @param {Libp2p} libp2p
70
- * @param {ConnectionManagerOptions} options
71
- */
72
- constructor (libp2p, options = {}) {
73
- super()
74
-
75
- this._libp2p = libp2p
76
- this._peerId = libp2p.peerId.toB58String()
77
-
78
- this._options = mergeOptions.call({ ignoreUndefined: true }, defaultOptions, options)
79
- if (this._options.maxConnections < this._options.minConnections) {
80
- throw errcode(new Error('Connection Manager maxConnections must be greater than minConnections'), ERR_INVALID_PARAMETERS)
81
- }
82
-
83
- log('options: %j', this._options)
84
-
85
- /**
86
- * Map of peer identifiers to their peer value for pruning connections.
87
- *
88
- * @type {Map<string, number>}
89
- */
90
- this._peerValues = trackedMap({
91
- component: METRICS_COMPONENT,
92
- metric: METRICS_PEER_VALUES,
93
- metrics: this._libp2p.metrics
94
- })
95
-
96
- /**
97
- * Map of connections per peer
98
- *
99
- * @type {Map<string, Connection[]>}
100
- */
101
- this.connections = trackedMap({
102
- component: METRICS_COMPONENT,
103
- metric: METRICS_PEER_CONNECTIONS,
104
- metrics: this._libp2p.metrics
105
- })
106
-
107
- this._started = false
108
- this._timer = null
109
- this._checkMetrics = this._checkMetrics.bind(this)
110
-
111
- this._latencyMonitor = new LatencyMonitor({
112
- latencyCheckIntervalMs: this._options.pollInterval,
113
- dataEmitIntervalMs: this._options.pollInterval
114
- })
115
-
116
- // This emitter gets listened to a lot
117
- this.setMaxListeners(Infinity)
118
- }
119
-
120
- /**
121
- * Get current number of open connections.
122
- */
123
- get size () {
124
- return Array.from(this.connections.values())
125
- .reduce((accumulator, value) => accumulator + value.length, 0)
126
- }
127
-
128
- /**
129
- * Starts the Connection Manager. If Metrics are not enabled on libp2p
130
- * only event loop and connection limits will be monitored.
131
- */
132
- start () {
133
- if (this._libp2p.metrics) {
134
- this._timer = this._timer || retimer(this._checkMetrics, this._options.pollInterval)
135
- }
136
-
137
- // latency monitor
138
- this._latencyMonitor.start()
139
- this._onLatencyMeasure = this._onLatencyMeasure.bind(this)
140
- this._latencyMonitor.on('data', this._onLatencyMeasure)
141
-
142
- this._started = true
143
- log('started')
144
- }
145
-
146
- /**
147
- * Stops the Connection Manager
148
- *
149
- * @async
150
- */
151
- async stop () {
152
- this._timer && this._timer.clear()
153
-
154
- this._latencyMonitor.removeListener('data', this._onLatencyMeasure)
155
- this._latencyMonitor.stop()
156
-
157
- this._started = false
158
- await this._close()
159
- log('stopped')
160
- }
161
-
162
- /**
163
- * Cleans up the connections
164
- *
165
- * @async
166
- */
167
- async _close () {
168
- // Close all connections we're tracking
169
- const tasks = []
170
- for (const connectionList of this.connections.values()) {
171
- for (const connection of connectionList) {
172
- tasks.push(connection.close())
173
- }
174
- }
175
-
176
- await Promise.all(tasks)
177
- this.connections.clear()
178
- }
179
-
180
- /**
181
- * Sets the value of the given peer. Peers with lower values
182
- * will be disconnected first.
183
- *
184
- * @param {PeerId} peerId
185
- * @param {number} value - A number between 0 and 1
186
- * @returns {void}
187
- */
188
- setPeerValue (peerId, value) {
189
- if (value < 0 || value > 1) {
190
- throw new Error('value should be a number between 0 and 1')
191
- }
192
- this._peerValues.set(peerId.toB58String(), value)
193
- }
194
-
195
- /**
196
- * Checks the libp2p metrics to determine if any values have exceeded
197
- * the configured maximums.
198
- *
199
- * @private
200
- */
201
- async _checkMetrics () {
202
- if (this._libp2p.metrics) {
203
- try {
204
- const movingAverages = this._libp2p.metrics.global.movingAverages
205
- // @ts-ignore moving averages object types
206
- const received = movingAverages.dataReceived[this._options.movingAverageInterval].movingAverage()
207
- await this._checkMaxLimit('maxReceivedData', received)
208
- // @ts-ignore moving averages object types
209
- const sent = movingAverages.dataSent[this._options.movingAverageInterval].movingAverage()
210
- await this._checkMaxLimit('maxSentData', sent)
211
- const total = received + sent
212
- await this._checkMaxLimit('maxData', total)
213
- log('metrics update', total)
214
- } finally {
215
- this._timer = retimer(this._checkMetrics, this._options.pollInterval)
216
- }
217
- }
218
- }
219
-
220
- /**
221
- * Tracks the incoming connection and check the connection limit
222
- *
223
- * @param {Connection} connection
224
- */
225
- async onConnect (connection) {
226
- const peerId = connection.remotePeer
227
- const peerIdStr = peerId.toB58String()
228
- const storedConn = this.connections.get(peerIdStr)
229
-
230
- this.emit('peer:connect', connection)
231
-
232
- if (storedConn) {
233
- storedConn.push(connection)
234
- } else {
235
- this.connections.set(peerIdStr, [connection])
236
- }
237
-
238
- await this._libp2p.peerStore.keyBook.set(peerId, peerId.pubKey)
239
-
240
- if (!this._peerValues.has(peerIdStr)) {
241
- this._peerValues.set(peerIdStr, this._options.defaultPeerValue)
242
- }
243
-
244
- await this._checkMaxLimit('maxConnections', this.size)
245
- }
246
-
247
- /**
248
- * Removes the connection from tracking
249
- *
250
- * @param {Connection} connection
251
- * @returns {void}
252
- */
253
- onDisconnect (connection) {
254
- const peerId = connection.remotePeer.toB58String()
255
- let storedConn = this.connections.get(peerId)
256
-
257
- if (storedConn && storedConn.length > 1) {
258
- storedConn = storedConn.filter((conn) => conn.id !== connection.id)
259
- this.connections.set(peerId, storedConn)
260
- } else if (storedConn) {
261
- this.connections.delete(peerId)
262
- this._peerValues.delete(connection.remotePeer.toB58String())
263
- this.emit('peer:disconnect', connection)
264
-
265
- this._libp2p.metrics && this._libp2p.metrics.onPeerDisconnected(connection.remotePeer)
266
- }
267
- }
268
-
269
- /**
270
- * Get a connection with a peer.
271
- *
272
- * @param {PeerId} peerId
273
- * @returns {Connection|null}
274
- */
275
- get (peerId) {
276
- const connections = this.getAll(peerId)
277
- if (connections.length) {
278
- return connections[0]
279
- }
280
- return null
281
- }
282
-
283
- /**
284
- * Get all open connections with a peer.
285
- *
286
- * @param {PeerId} peerId
287
- * @returns {Connection[]}
288
- */
289
- getAll (peerId) {
290
- if (!PeerId.isPeerId(peerId)) {
291
- throw errcode(new Error('peerId must be an instance of peer-id'), ERR_INVALID_PARAMETERS)
292
- }
293
-
294
- const id = peerId.toB58String()
295
- const connections = this.connections.get(id)
296
-
297
- // Return all open connections
298
- if (connections) {
299
- return connections.filter(connection => connection.stat.status === 'open')
300
- }
301
- return []
302
- }
303
-
304
- /**
305
- * If the event loop is slow, maybe close a connection
306
- *
307
- * @private
308
- * @param {*} summary - The LatencyMonitor summary
309
- */
310
- _onLatencyMeasure (summary) {
311
- this._checkMaxLimit('maxEventLoopDelay', summary.avgMs)
312
- .catch(err => {
313
- log.error(err)
314
- })
315
- }
316
-
317
- /**
318
- * If the `value` of `name` has exceeded its limit, maybe close a connection
319
- *
320
- * @private
321
- * @param {string} name - The name of the field to check limits for
322
- * @param {number} value - The current value of the field
323
- */
324
- async _checkMaxLimit (name, value) {
325
- const limit = this._options[name]
326
- log('checking limit of %s. current value: %d of %d', name, value, limit)
327
- if (value > limit) {
328
- log('%s: limit exceeded: %s, %d', this._peerId, name, value)
329
- await this._maybeDisconnectOne()
330
- }
331
- }
332
-
333
- /**
334
- * If we have more connections than our maximum, close a connection
335
- * to the lowest valued peer.
336
- *
337
- * @private
338
- */
339
- async _maybeDisconnectOne () {
340
- if (this._options.minConnections < this.connections.size) {
341
- const peerValues = Array.from(new Map([...this._peerValues.entries()].sort((a, b) => a[1] - b[1])))
342
- log('%s: sorted peer values: %j', this._peerId, peerValues)
343
- const disconnectPeer = peerValues[0]
344
- if (disconnectPeer) {
345
- const peerId = disconnectPeer[0]
346
- log('%s: lowest value peer is %s', this._peerId, peerId)
347
- log('%s: closing a connection to %j', this._peerId, peerId)
348
- for (const connections of this.connections.values()) {
349
- if (connections[0].remotePeer.toB58String() === peerId) {
350
- connections[0].close().catch(err => {
351
- log.error(err)
352
- })
353
- // TODO: should not need to invoke this manually
354
- this.onDisconnect(connections[0])
355
- break
356
- }
357
- }
358
- }
359
- }
360
- }
361
- }
362
-
363
- module.exports = ConnectionManager