libp2p 0.36.2 → 0.37.0

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 (430) 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 +83 -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 +267 -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 +333 -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 +70 -63
  112. package/dist/src/errors.d.ts.map +1 -1
  113. package/dist/src/errors.js +75 -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 +42 -99
  184. package/dist/src/nat-manager.d.ts.map +1 -1
  185. package/dist/src/nat-manager.js +114 -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 +108 -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 +402 -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 +144 -201
  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/{dialer/dial-request.js → connection-manager/dialer/dial-request.ts} +60 -51
  259. package/src/connection-manager/dialer/index.ts +382 -0
  260. package/src/connection-manager/index.ts +508 -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 +73 -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 +194 -0
  292. package/src/peer-record-updater.ts +55 -0
  293. package/src/peer-routing.ts +186 -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 +499 -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/index.js +0 -376
  376. package/src/errors.js +0 -66
  377. package/src/fetch/constants.js +0 -6
  378. package/src/fetch/index.js +0 -159
  379. package/src/fetch/proto.d.ts +0 -134
  380. package/src/fetch/proto.js +0 -333
  381. package/src/get-peer.js +0 -49
  382. package/src/identify/consts.js +0 -15
  383. package/src/identify/index.js +0 -384
  384. package/src/identify/message.d.ts +0 -95
  385. package/src/identify/message.js +0 -328
  386. package/src/index.js +0 -813
  387. package/src/insecure/plaintext.js +0 -95
  388. package/src/insecure/proto.d.ts +0 -128
  389. package/src/insecure/proto.js +0 -371
  390. package/src/keychain/index.js +0 -561
  391. package/src/metrics/index.js +0 -290
  392. package/src/metrics/old-peers.js +0 -16
  393. package/src/metrics/stats.js +0 -270
  394. package/src/metrics/tracked-map.js +0 -94
  395. package/src/nat-manager.js +0 -197
  396. package/src/peer-routing.js +0 -176
  397. package/src/peer-store/README.md +0 -145
  398. package/src/peer-store/address-book.js +0 -382
  399. package/src/peer-store/index.js +0 -121
  400. package/src/peer-store/key-book.js +0 -141
  401. package/src/peer-store/metadata-book.js +0 -250
  402. package/src/peer-store/pb/peer.d.ts +0 -222
  403. package/src/peer-store/pb/peer.js +0 -643
  404. package/src/peer-store/pb/peer.proto +0 -31
  405. package/src/peer-store/proto-book.js +0 -237
  406. package/src/peer-store/store.js +0 -263
  407. package/src/peer-store/types.ts +0 -245
  408. package/src/ping/constants.js +0 -8
  409. package/src/ping/index.js +0 -84
  410. package/src/ping/util.js +0 -18
  411. package/src/pnet/crypto.js +0 -84
  412. package/src/pnet/errors.js +0 -7
  413. package/src/pnet/index.js +0 -86
  414. package/src/pnet/key-generator.js +0 -33
  415. package/src/pubsub-adapter.js +0 -61
  416. package/src/record/README.md +0 -130
  417. package/src/record/envelope/envelope.d.ts +0 -77
  418. package/src/record/envelope/envelope.js +0 -243
  419. package/src/record/envelope/envelope.proto +0 -19
  420. package/src/record/envelope/index.js +0 -183
  421. package/src/record/peer-record/consts.js +0 -14
  422. package/src/record/peer-record/index.js +0 -113
  423. package/src/record/peer-record/peer-record.d.ts +0 -133
  424. package/src/record/peer-record/peer-record.js +0 -367
  425. package/src/record/peer-record/peer-record.proto +0 -18
  426. package/src/record/utils.js +0 -25
  427. package/src/registrar.js +0 -127
  428. package/src/transport-manager.js +0 -269
  429. package/src/types.ts +0 -98
  430. package/src/upgrader.js +0 -492
@@ -0,0 +1,310 @@
1
+ import { pipe } from 'it-pipe'
2
+ import each from 'it-foreach'
3
+ import LRU from 'hashlru'
4
+ import { METRICS as defaultOptions } from '../constants.js'
5
+ import { DefaultStats, StatsInit } from './stats.js'
6
+ import type { ComponentMetricsUpdate, Metrics, Stats, TrackStreamOptions } from '@libp2p/interfaces/metrics'
7
+ import type { PeerId } from '@libp2p/interfaces/peer-id'
8
+ import type { Startable } from '@libp2p/interfaces/startable'
9
+ import type { Duplex } from 'it-stream-types'
10
+
11
+ const initialCounters: ['dataReceived', 'dataSent'] = [
12
+ 'dataReceived',
13
+ 'dataSent'
14
+ ]
15
+
16
+ const directionToEvent = {
17
+ in: 'dataReceived',
18
+ out: 'dataSent'
19
+ }
20
+
21
+ export interface OnMessageOptions {
22
+ remotePeer: PeerId
23
+ protocol?: string
24
+ direction: 'in' | 'out'
25
+ dataLength: number
26
+ }
27
+
28
+ export interface MetricsInit {
29
+ enabled: boolean
30
+ computeThrottleMaxQueueSize: number
31
+ computeThrottleTimeout: number
32
+ movingAverageIntervals: number[]
33
+ maxOldPeersRetention: number
34
+ }
35
+
36
+ export class DefaultMetrics implements Metrics, Startable {
37
+ public globalStats: DefaultStats
38
+
39
+ private readonly enabled: boolean
40
+ private readonly peerStats: Map<string, DefaultStats>
41
+ private readonly protocolStats: Map<string, DefaultStats>
42
+ private readonly oldPeers: ReturnType<typeof LRU>
43
+ private running: boolean
44
+ private readonly systems: Map<string, Map<string, Map<string, number>>>
45
+ private readonly statsInit: StatsInit
46
+
47
+ constructor (init: MetricsInit) {
48
+ this.enabled = init.enabled
49
+ this.statsInit = {
50
+ ...init,
51
+ initialCounters
52
+ }
53
+ this.globalStats = new DefaultStats(this.statsInit)
54
+ this.peerStats = new Map()
55
+ this.protocolStats = new Map()
56
+ this.oldPeers = LRU(init.maxOldPeersRetention ?? defaultOptions.maxOldPeersRetention)
57
+ this.running = false
58
+ this._onMessage = this._onMessage.bind(this)
59
+ this.systems = new Map()
60
+ }
61
+
62
+ isStarted () {
63
+ return this.running
64
+ }
65
+
66
+ /**
67
+ * Must be called for stats to saved. Any data pushed for tracking
68
+ * will be ignored.
69
+ */
70
+ async start () {
71
+ if (!this.enabled) {
72
+ return
73
+ }
74
+
75
+ this.running = true
76
+ }
77
+
78
+ /**
79
+ * Stops all averages timers and prevents new data from being tracked.
80
+ * Once `stop` is called, `start` must be called to resume stats tracking.
81
+ */
82
+ async stop () {
83
+ if (!this.running) {
84
+ return
85
+ }
86
+
87
+ this.running = false
88
+ this.globalStats.stop()
89
+
90
+ for (const stats of this.peerStats.values()) {
91
+ stats.stop()
92
+ }
93
+
94
+ for (const stats of this.protocolStats.values()) {
95
+ stats.stop()
96
+ }
97
+ }
98
+
99
+ /**
100
+ * Gets the global `Stats` object
101
+ */
102
+ getGlobal () {
103
+ return this.globalStats
104
+ }
105
+
106
+ /**
107
+ * Returns a list of `PeerId` strings currently being tracked
108
+ */
109
+ getPeers () {
110
+ return Array.from(this.peerStats.keys())
111
+ }
112
+
113
+ getComponentMetrics () {
114
+ return this.systems
115
+ }
116
+
117
+ updateComponentMetric (update: ComponentMetricsUpdate) {
118
+ const { system = 'libp2p', component, metric, value } = update
119
+
120
+ if (!this.systems.has(system)) {
121
+ this.systems.set(system, new Map())
122
+ }
123
+
124
+ const systemMetrics = this.systems.get(system)
125
+
126
+ if (systemMetrics == null) {
127
+ throw new Error('Unknown metric system')
128
+ }
129
+
130
+ if (!systemMetrics.has(component)) {
131
+ systemMetrics.set(component, new Map())
132
+ }
133
+
134
+ const componentMetrics = systemMetrics.get(component)
135
+
136
+ if (componentMetrics == null) {
137
+ throw new Error('Unknown metric component')
138
+ }
139
+
140
+ componentMetrics.set(metric, value)
141
+ }
142
+
143
+ /**
144
+ * Returns the `Stats` object for the given `PeerId` whether it
145
+ * is a live peer, or in the disconnected peer LRU cache.
146
+ */
147
+ forPeer (peerId: PeerId): Stats | undefined {
148
+ const idString = peerId.toString()
149
+ return this.peerStats.get(idString) ?? this.oldPeers.get(idString)
150
+ }
151
+
152
+ /**
153
+ * Returns a list of all protocol strings currently being tracked
154
+ */
155
+ getProtocols (): string[] {
156
+ return Array.from(this.protocolStats.keys())
157
+ }
158
+
159
+ /**
160
+ * Returns the `Stats` object for the given `protocol`
161
+ */
162
+ forProtocol (protocol: string): Stats | undefined {
163
+ return this.protocolStats.get(protocol)
164
+ }
165
+
166
+ /**
167
+ * Should be called when all connections to a given peer
168
+ * have closed. The `Stats` collection for the peer will
169
+ * be stopped and moved to an LRU for temporary retention.
170
+ */
171
+ onPeerDisconnected (peerId: PeerId) {
172
+ const idString = peerId.toString()
173
+ const peerStats = this.peerStats.get(idString)
174
+
175
+ if (peerStats != null) {
176
+ peerStats.stop()
177
+
178
+ this.peerStats.delete(idString)
179
+ this.oldPeers.set(idString, peerStats)
180
+ }
181
+ }
182
+
183
+ /**
184
+ * Takes the metadata for a message and tracks it in the
185
+ * appropriate categories. If the protocol is present, protocol
186
+ * stats will also be tracked.
187
+ */
188
+ _onMessage (opts: OnMessageOptions) {
189
+ if (!this.running) {
190
+ return
191
+ }
192
+
193
+ const { remotePeer, protocol, direction, dataLength } = opts
194
+
195
+ const key = directionToEvent[direction]
196
+
197
+ let peerStats = this.forPeer(remotePeer)
198
+ if (peerStats == null) {
199
+ const stats = new DefaultStats(this.statsInit)
200
+ this.peerStats.set(remotePeer.toString(), stats)
201
+ peerStats = stats
202
+ }
203
+
204
+ // Peer and global stats
205
+ peerStats.push(key, dataLength)
206
+ this.globalStats.push(key, dataLength)
207
+
208
+ // Protocol specific stats
209
+ if (protocol != null) {
210
+ let protocolStats = this.forProtocol(protocol)
211
+
212
+ if (protocolStats == null) {
213
+ const stats = new DefaultStats(this.statsInit)
214
+ this.protocolStats.set(protocol, stats)
215
+ protocolStats = stats
216
+ }
217
+
218
+ protocolStats.push(key, dataLength)
219
+ }
220
+ }
221
+
222
+ /**
223
+ * Replaces the `PeerId` string with the given `peerId`.
224
+ * If stats are already being tracked for the given `peerId`, the
225
+ * placeholder stats will be merged with the existing stats.
226
+ *
227
+ * @param {PeerId} placeholder - A peerId string
228
+ * @param {PeerId} peerId
229
+ * @returns {void}
230
+ */
231
+ updatePlaceholder (placeholder: PeerId, peerId: PeerId) {
232
+ if (!this.running) {
233
+ return
234
+ }
235
+
236
+ const placeholderString = placeholder.toString()
237
+ const placeholderStats = this.peerStats.get(placeholderString) ?? this.oldPeers.get(placeholderString)
238
+ const peerIdString = peerId.toString()
239
+ const existingStats = this.peerStats.get(peerIdString) ?? this.oldPeers.get(peerIdString)
240
+ let mergedStats = placeholderStats
241
+
242
+ // If we already have stats, merge the two
243
+ if (existingStats != null) {
244
+ // If existing, merge
245
+ mergedStats = mergeStats(existingStats, mergedStats)
246
+ // Attempt to delete from the old peers list just in case it was tracked there
247
+ this.oldPeers.remove(peerIdString)
248
+ }
249
+
250
+ this.peerStats.delete(placeholder.toString())
251
+ this.peerStats.set(peerIdString, mergedStats)
252
+ mergedStats.start()
253
+ }
254
+
255
+ /**
256
+ * Tracks data running through a given Duplex Iterable `stream`. If
257
+ * the `peerId` is not provided, a placeholder string will be created and
258
+ * returned. This allows lazy tracking of a peer when the peer is not yet known.
259
+ * When the `PeerId` is known, `Metrics.updatePlaceholder` should be called
260
+ * with the placeholder string returned from here, and the known `PeerId`.
261
+ */
262
+ trackStream <T extends Duplex<Uint8Array>> (opts: TrackStreamOptions<T>): T {
263
+ const { stream, remotePeer, protocol } = opts
264
+
265
+ if (!this.running) {
266
+ return stream
267
+ }
268
+
269
+ const source = stream.source
270
+ stream.source = each(source, chunk => this._onMessage({
271
+ remotePeer,
272
+ protocol,
273
+ direction: 'in',
274
+ dataLength: chunk.length
275
+ }))
276
+
277
+ const sink = stream.sink
278
+ stream.sink = async source => {
279
+ return await pipe(
280
+ source,
281
+ (source) => each(source, chunk => {
282
+ this._onMessage({
283
+ remotePeer,
284
+ protocol,
285
+ direction: 'out',
286
+ dataLength: chunk.length
287
+ })
288
+ }),
289
+ sink
290
+ )
291
+ }
292
+
293
+ return stream
294
+ }
295
+ }
296
+
297
+ /**
298
+ * Merges `other` into `target`. `target` will be modified
299
+ * and returned
300
+ */
301
+ function mergeStats (target: DefaultStats, other: DefaultStats) {
302
+ target.stop()
303
+ other.stop()
304
+
305
+ // Merge queues
306
+ target.queue = [...target.queue, ...other.queue]
307
+
308
+ // TODO: how to merge moving averages?
309
+ return target
310
+ }
@@ -0,0 +1,53 @@
1
+ import type { MovingAverage } from '@libp2p/interfaces/metrics'
2
+
3
+ export class DefaultMovingAverage {
4
+ public movingAverage: number
5
+ public variance: number
6
+ public deviation: number
7
+ public forecast: number
8
+ private readonly timespan: number
9
+ private previousTime?: number
10
+
11
+ constructor (timespan: number) {
12
+ if (typeof timespan !== 'number') {
13
+ throw new Error('must provide a timespan to the moving average constructor')
14
+ }
15
+
16
+ if (timespan <= 0) {
17
+ throw new Error('must provide a timespan > 0 to the moving average constructor')
18
+ }
19
+
20
+ this.timespan = timespan
21
+ this.movingAverage = 0
22
+ this.variance = 0
23
+ this.deviation = 0
24
+ this.forecast = 0
25
+ }
26
+
27
+ alpha (t: number, pt: number) {
28
+ return 1 - (Math.exp(-(t - pt) / this.timespan))
29
+ }
30
+
31
+ push (time: number, value: number) {
32
+ if (this.previousTime != null) {
33
+ // calculate moving average
34
+ const a = this.alpha(time, this.previousTime)
35
+ const diff = value - this.movingAverage
36
+ const incr = a * diff
37
+ this.movingAverage = a * value + (1 - a) * this.movingAverage
38
+ // calculate variance & deviation
39
+ this.variance = (1 - a) * (this.variance + diff * incr)
40
+ this.deviation = Math.sqrt(this.variance)
41
+ // calculate forecast
42
+ this.forecast = this.movingAverage + a * diff
43
+ } else {
44
+ this.movingAverage = value
45
+ }
46
+
47
+ this.previousTime = time
48
+ }
49
+ }
50
+
51
+ export function createMovingAverage (timespan: number): MovingAverage {
52
+ return new DefaultMovingAverage(timespan)
53
+ }
@@ -0,0 +1,238 @@
1
+ import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events'
2
+ import { createMovingAverage } from './moving-average.js'
3
+ // @ts-expect-error no types
4
+ import retimer from 'retimer'
5
+ import type { MovingAverages, Stats, TransferStats } from '@libp2p/interfaces/metrics'
6
+
7
+ export interface StatsEvents {
8
+ 'update': CustomEvent<TransferStats>
9
+ }
10
+
11
+ export interface StatsInit {
12
+ enabled: boolean
13
+ initialCounters: ['dataReceived', 'dataSent']
14
+ movingAverageIntervals: number[]
15
+ computeThrottleMaxQueueSize: number
16
+ computeThrottleTimeout: number
17
+ }
18
+
19
+ export class DefaultStats extends EventEmitter<StatsEvents> implements Stats {
20
+ private readonly enabled: boolean
21
+ public queue: Array<[string, number, number]>
22
+ private stats: TransferStats
23
+ private frequencyLastTime: number
24
+ private frequencyAccumulators: Record<string, number>
25
+ private movingAverages: MovingAverages
26
+ private timeout?: any
27
+ private readonly computeThrottleMaxQueueSize: number
28
+ private readonly computeThrottleTimeout: number
29
+ private readonly movingAverageIntervals: number[]
30
+
31
+ /**
32
+ * A queue based manager for stat processing
33
+ */
34
+ constructor (init: StatsInit) {
35
+ super()
36
+
37
+ this.enabled = init.enabled
38
+ this.queue = []
39
+ this.stats = {
40
+ dataReceived: 0n,
41
+ dataSent: 0n
42
+ }
43
+ this.frequencyLastTime = Date.now()
44
+ this.frequencyAccumulators = {}
45
+ this.movingAverages = {
46
+ dataReceived: [],
47
+ dataSent: []
48
+ }
49
+ this.computeThrottleMaxQueueSize = init.computeThrottleMaxQueueSize
50
+ this.computeThrottleTimeout = init.computeThrottleTimeout
51
+
52
+ this._update = this._update.bind(this)
53
+
54
+ this.movingAverageIntervals = init.movingAverageIntervals
55
+
56
+ for (let i = 0; i < init.initialCounters.length; i++) {
57
+ const key = init.initialCounters[i]
58
+ this.stats[key] = 0n
59
+ this.movingAverages[key] = []
60
+
61
+ for (let k = 0; k < this.movingAverageIntervals.length; k++) {
62
+ const interval = this.movingAverageIntervals[k]
63
+ const ma = this.movingAverages[key][interval] = createMovingAverage(interval)
64
+ ma.push(this.frequencyLastTime, 0)
65
+ }
66
+ }
67
+ }
68
+
69
+ /**
70
+ * Initializes the internal timer if there are items in the queue. This
71
+ * should only need to be called if `Stats.stop` was previously called, as
72
+ * `Stats.push` will also start the processing
73
+ */
74
+ start () {
75
+ if (!this.enabled) {
76
+ return
77
+ }
78
+
79
+ if (this.queue.length > 0) {
80
+ this._resetComputeTimeout()
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Stops processing and computing of stats by clearing the internal
86
+ * timer
87
+ */
88
+ stop () {
89
+ if (this.timeout != null) {
90
+ this.timeout.clear()
91
+ this.timeout = null
92
+ }
93
+ }
94
+
95
+ /**
96
+ * Returns a clone of the current stats.
97
+ */
98
+ getSnapshot () {
99
+ return Object.assign({}, this.stats)
100
+ }
101
+
102
+ /**
103
+ * Returns a clone of the internal movingAverages
104
+ */
105
+ getMovingAverages (): MovingAverages {
106
+ return Object.assign({}, this.movingAverages)
107
+ }
108
+
109
+ /**
110
+ * Pushes the given operation data to the queue, along with the
111
+ * current Timestamp, then resets the update timer.
112
+ */
113
+ push (counter: string, inc: number) {
114
+ this.queue.push([counter, inc, Date.now()])
115
+ this._resetComputeTimeout()
116
+ }
117
+
118
+ /**
119
+ * Resets the timeout for triggering updates.
120
+ */
121
+ _resetComputeTimeout () {
122
+ this.timeout = retimer(this._update, this._nextTimeout())
123
+ }
124
+
125
+ /**
126
+ * Calculates and returns the timeout for the next update based on
127
+ * the urgency of the update.
128
+ */
129
+ _nextTimeout () {
130
+ // calculate the need for an update, depending on the queue length
131
+ const urgency = this.queue.length / this.computeThrottleMaxQueueSize
132
+ const timeout = Math.max(this.computeThrottleTimeout * (1 - urgency), 0)
133
+ return timeout
134
+ }
135
+
136
+ /**
137
+ * If there are items in the queue, they will will be processed and
138
+ * the frequency for all items will be updated based on the Timestamp
139
+ * of the last item in the queue. The `update` event will also be emitted
140
+ * with the latest stats.
141
+ *
142
+ * If there are no items in the queue, no action is taken.
143
+ */
144
+ _update () {
145
+ this.timeout = null
146
+ if (this.queue.length > 0) {
147
+ let last: [string, number, number] = ['', 0, 0]
148
+
149
+ for (last of this.queue) {
150
+ this._applyOp(last)
151
+ }
152
+
153
+ this.queue = []
154
+
155
+ if (last.length > 2 && last[0] !== '') {
156
+ this._updateFrequency(last[2]) // contains timestamp of last op
157
+ }
158
+
159
+ this.dispatchEvent(new CustomEvent<TransferStats>('update', {
160
+ detail: this.stats
161
+ }))
162
+ }
163
+ }
164
+
165
+ /**
166
+ * For each key in the stats, the frequency and moving averages
167
+ * will be updated via Stats._updateFrequencyFor based on the time
168
+ * difference between calls to this method.
169
+ */
170
+ _updateFrequency (latestTime: number) {
171
+ const timeDiff = latestTime - this.frequencyLastTime
172
+
173
+ this._updateFrequencyFor('dataReceived', timeDiff, latestTime)
174
+ this._updateFrequencyFor('dataSent', timeDiff, latestTime)
175
+
176
+ this.frequencyLastTime = latestTime
177
+ }
178
+
179
+ /**
180
+ * Updates the `movingAverages` for the given `key` and also
181
+ * resets the `frequencyAccumulator` for the `key`.
182
+ */
183
+ _updateFrequencyFor (key: 'dataReceived' | 'dataSent', timeDiffMS: number, latestTime: number) {
184
+ const count = this.frequencyAccumulators[key] ?? 0
185
+ this.frequencyAccumulators[key] = 0
186
+ // if `timeDiff` is zero, `hz` becomes Infinity, so we fallback to 1ms
187
+ const safeTimeDiff = timeDiffMS ?? 1
188
+ const hz = (count / safeTimeDiff) * 1000
189
+
190
+ let movingAverages = this.movingAverages[key]
191
+ if (movingAverages == null) {
192
+ movingAverages = this.movingAverages[key] = []
193
+ }
194
+
195
+ const intervals = this.movingAverageIntervals
196
+
197
+ for (let i = 0; i < intervals.length; i++) {
198
+ const movingAverageInterval = intervals[i]
199
+ let movingAverage = movingAverages[movingAverageInterval]
200
+ if (movingAverage == null) {
201
+ movingAverage = movingAverages[movingAverageInterval] = createMovingAverage(movingAverageInterval)
202
+ }
203
+ movingAverage.push(latestTime, hz)
204
+ }
205
+ }
206
+
207
+ /**
208
+ * For the given operation, `op`, the stats and `frequencyAccumulator`
209
+ * will be updated or initialized if they don't already exist.
210
+ */
211
+ _applyOp (op: [string, number, number]) {
212
+ const key = op[0]
213
+ const inc = op[1]
214
+
215
+ if (typeof inc !== 'number') {
216
+ throw new Error('invalid increment number')
217
+ }
218
+
219
+ let n: bigint
220
+
221
+ if (!Object.prototype.hasOwnProperty.call(this.stats, key)) {
222
+ // @ts-expect-error cannot index type with key
223
+ n = this.stats[key] = 0n
224
+ } else {
225
+ // @ts-expect-error cannot index type with key
226
+ n = this.stats[key]
227
+ }
228
+
229
+ // @ts-expect-error cannot index type with key
230
+ this.stats[key] = n + BigInt(inc)
231
+
232
+ if (this.frequencyAccumulators[key] == null) {
233
+ this.frequencyAccumulators[key] = 0
234
+ }
235
+
236
+ this.frequencyAccumulators[key] += inc
237
+ }
238
+ }