libp2p 0.36.0 → 0.36.2-1473044

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 (415) 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 +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 +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/pb/index.d.ts +51 -0
  44. package/dist/src/circuit/pb/index.d.ts.map +1 -0
  45. package/dist/src/circuit/pb/index.js +72 -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 +190 -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 +93 -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/index.d.ts +79 -144
  64. package/dist/src/connection-manager/index.d.ts.map +1 -1
  65. package/dist/src/connection-manager/index.js +295 -0
  66. package/dist/src/connection-manager/index.js.map +1 -0
  67. package/dist/src/connection-manager/latency-monitor.d.ts +72 -97
  68. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  69. package/dist/src/connection-manager/latency-monitor.js +220 -0
  70. package/dist/src/connection-manager/latency-monitor.js.map +1 -0
  71. package/dist/src/connection-manager/visibility-change-emitter.d.ts +15 -16
  72. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  73. package/dist/src/connection-manager/visibility-change-emitter.js +118 -0
  74. package/dist/src/connection-manager/visibility-change-emitter.js.map +1 -0
  75. package/dist/src/constants.d.ts +22 -10
  76. package/dist/src/constants.d.ts.map +1 -1
  77. package/dist/src/constants.js +27 -0
  78. package/dist/src/constants.js.map +1 -0
  79. package/dist/src/content-routing/index.d.ts +26 -81
  80. package/dist/src/content-routing/index.d.ts.map +1 -1
  81. package/dist/src/content-routing/index.js +99 -0
  82. package/dist/src/content-routing/index.js.map +1 -0
  83. package/dist/src/content-routing/utils.d.ts +6 -49
  84. package/dist/src/content-routing/utils.d.ts.map +1 -1
  85. package/dist/src/content-routing/utils.js +42 -0
  86. package/dist/src/content-routing/utils.js.map +1 -0
  87. package/dist/src/dht/dht-content-routing.d.ts +10 -24
  88. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  89. package/dist/src/dht/dht-content-routing.js +32 -0
  90. package/dist/src/dht/dht-content-routing.js.map +1 -0
  91. package/dist/src/dht/dht-peer-routing.d.ts +9 -24
  92. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  93. package/dist/src/dht/dht-peer-routing.js +26 -0
  94. package/dist/src/dht/dht-peer-routing.js.map +1 -0
  95. package/dist/src/dialer/auto-dialer.d.ts +14 -0
  96. package/dist/src/dialer/auto-dialer.d.ts.map +1 -0
  97. package/dist/src/dialer/auto-dialer.js +24 -0
  98. package/dist/src/dialer/auto-dialer.js.map +1 -0
  99. package/dist/src/dialer/dial-request.d.ts +18 -46
  100. package/dist/src/dialer/dial-request.d.ts.map +1 -1
  101. package/dist/src/dialer/dial-request.js +83 -0
  102. package/dist/src/dialer/dial-request.js.map +1 -0
  103. package/dist/src/dialer/index.d.ts +41 -148
  104. package/dist/src/dialer/index.d.ts.map +1 -1
  105. package/dist/src/dialer/index.js +280 -0
  106. package/dist/src/dialer/index.js.map +1 -0
  107. package/dist/src/errors.d.ts +68 -63
  108. package/dist/src/errors.d.ts.map +1 -1
  109. package/dist/src/errors.js +73 -0
  110. package/dist/src/errors.js.map +1 -0
  111. package/dist/src/fetch/constants.d.ts +1 -1
  112. package/dist/src/fetch/constants.d.ts.map +1 -1
  113. package/dist/src/fetch/constants.js +3 -0
  114. package/dist/src/fetch/constants.js.map +1 -0
  115. package/dist/src/fetch/index.d.ts +30 -49
  116. package/dist/src/fetch/index.d.ts.map +1 -1
  117. package/dist/src/fetch/index.js +129 -0
  118. package/dist/src/fetch/index.js.map +1 -0
  119. package/dist/src/fetch/pb/proto.d.ts +26 -0
  120. package/dist/src/fetch/pb/proto.d.ts.map +1 -0
  121. package/dist/src/fetch/pb/proto.js +44 -0
  122. package/dist/src/fetch/pb/proto.js.map +1 -0
  123. package/dist/src/get-peer.d.ts +4 -11
  124. package/dist/src/get-peer.d.ts.map +1 -1
  125. package/dist/src/get-peer.js +43 -0
  126. package/dist/src/get-peer.js.map +1 -0
  127. package/dist/src/identify/consts.d.ts +9 -9
  128. package/dist/src/identify/consts.d.ts.map +1 -1
  129. package/dist/src/identify/consts.js +11 -0
  130. package/dist/src/identify/consts.js.map +1 -0
  131. package/dist/src/identify/index.d.ts +42 -96
  132. package/dist/src/identify/index.d.ts.map +1 -1
  133. package/dist/src/identify/index.js +322 -0
  134. package/dist/src/identify/index.js.map +1 -0
  135. package/dist/src/identify/pb/message.d.ts +15 -0
  136. package/dist/src/identify/pb/message.d.ts.map +1 -0
  137. package/dist/src/identify/pb/message.js +24 -0
  138. package/dist/src/identify/pb/message.js.map +1 -0
  139. package/dist/src/index.d.ts +162 -581
  140. package/dist/src/index.d.ts.map +1 -1
  141. package/dist/src/index.js +9 -0
  142. package/dist/src/index.js.map +1 -0
  143. package/dist/src/insecure/index.d.ts +9 -0
  144. package/dist/src/insecure/index.d.ts.map +1 -0
  145. package/dist/src/insecure/index.js +81 -0
  146. package/dist/src/insecure/index.js.map +1 -0
  147. package/dist/src/insecure/pb/proto.d.ts +28 -0
  148. package/dist/src/insecure/pb/proto.d.ts.map +1 -0
  149. package/dist/src/insecure/pb/proto.js +46 -0
  150. package/dist/src/insecure/pb/proto.js.map +1 -0
  151. package/dist/src/keychain/cms.d.ts +6 -14
  152. package/dist/src/keychain/cms.d.ts.map +1 -1
  153. package/dist/src/keychain/cms.js +129 -0
  154. package/dist/src/keychain/cms.js.map +1 -0
  155. package/dist/src/keychain/index.d.ts +61 -81
  156. package/dist/src/keychain/index.d.ts.map +1 -1
  157. package/dist/src/keychain/index.js +493 -0
  158. package/dist/src/keychain/index.js.map +1 -0
  159. package/dist/src/keychain/util.d.ts +3 -6
  160. package/dist/src/keychain/util.d.ts.map +1 -1
  161. package/dist/src/keychain/util.js +79 -0
  162. package/dist/src/keychain/util.js.map +1 -0
  163. package/dist/src/libp2p.d.ts +78 -0
  164. package/dist/src/libp2p.d.ts.map +1 -0
  165. package/dist/src/libp2p.js +375 -0
  166. package/dist/src/libp2p.js.map +1 -0
  167. package/dist/src/metrics/index.d.ts +47 -104
  168. package/dist/src/metrics/index.d.ts.map +1 -1
  169. package/dist/src/metrics/index.js +231 -0
  170. package/dist/src/metrics/index.js.map +1 -0
  171. package/dist/src/metrics/moving-average.d.ts +14 -0
  172. package/dist/src/metrics/moving-average.d.ts.map +1 -0
  173. package/dist/src/metrics/moving-average.js +40 -0
  174. package/dist/src/metrics/moving-average.js.map +1 -0
  175. package/dist/src/metrics/stats.d.ts +41 -93
  176. package/dist/src/metrics/stats.d.ts.map +1 -1
  177. package/dist/src/metrics/stats.js +183 -0
  178. package/dist/src/metrics/stats.js.map +1 -0
  179. package/dist/src/nat-manager.d.ts +42 -99
  180. package/dist/src/nat-manager.d.ts.map +1 -1
  181. package/dist/src/nat-manager.js +114 -0
  182. package/dist/src/nat-manager.js.map +1 -0
  183. package/dist/src/peer-record-updater.d.ts +15 -0
  184. package/dist/src/peer-record-updater.d.ts.map +1 -0
  185. package/dist/src/peer-record-updater.js +44 -0
  186. package/dist/src/peer-record-updater.js.map +1 -0
  187. package/dist/src/peer-routing.d.ts +39 -84
  188. package/dist/src/peer-routing.d.ts.map +1 -1
  189. package/dist/src/peer-routing.js +108 -0
  190. package/dist/src/peer-routing.js.map +1 -0
  191. package/dist/src/ping/constants.d.ts +4 -4
  192. package/dist/src/ping/constants.d.ts.map +1 -1
  193. package/dist/src/ping/constants.js +5 -0
  194. package/dist/src/ping/constants.js.map +1 -0
  195. package/dist/src/ping/index.d.ts +26 -33
  196. package/dist/src/ping/index.d.ts.map +1 -1
  197. package/dist/src/ping/index.js +56 -0
  198. package/dist/src/ping/index.js.map +1 -0
  199. package/dist/src/pnet/crypto.d.ts +15 -5
  200. package/dist/src/pnet/crypto.d.ts.map +1 -1
  201. package/dist/src/pnet/crypto.js +60 -0
  202. package/dist/src/pnet/crypto.js.map +1 -0
  203. package/dist/src/pnet/errors.d.ts +5 -5
  204. package/dist/src/pnet/errors.d.ts.map +1 -1
  205. package/dist/src/pnet/errors.js +6 -0
  206. package/dist/src/pnet/errors.js.map +1 -0
  207. package/dist/src/pnet/index.d.ts +11 -20
  208. package/dist/src/pnet/index.d.ts.map +1 -1
  209. package/dist/src/pnet/index.js +66 -0
  210. package/dist/src/pnet/index.js.map +1 -0
  211. package/dist/src/pnet/key-generator.d.ts +3 -7
  212. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  213. package/dist/src/pnet/key-generator.js +25 -0
  214. package/dist/src/pnet/key-generator.js.map +1 -0
  215. package/dist/src/registrar.d.ts +27 -65
  216. package/dist/src/registrar.d.ts.map +1 -1
  217. package/dist/src/registrar.js +159 -0
  218. package/dist/src/registrar.js.map +1 -0
  219. package/dist/src/transport-manager.d.ts +34 -82
  220. package/dist/src/transport-manager.d.ts.map +1 -1
  221. package/dist/src/transport-manager.js +223 -0
  222. package/dist/src/transport-manager.js.map +1 -0
  223. package/dist/src/upgrader.d.ts +49 -129
  224. package/dist/src/upgrader.d.ts.map +1 -1
  225. package/dist/src/upgrader.js +402 -0
  226. package/dist/src/upgrader.js.map +1 -0
  227. package/dist/src/version.d.ts +3 -0
  228. package/dist/src/version.d.ts.map +1 -0
  229. package/dist/src/version.js +3 -0
  230. package/dist/src/version.js.map +1 -0
  231. package/package.json +150 -197
  232. package/src/address-manager/index.ts +129 -0
  233. package/src/circuit/README.md +16 -11
  234. package/src/circuit/auto-relay.ts +284 -0
  235. package/src/circuit/circuit/hop.ts +211 -0
  236. package/src/circuit/circuit/stop.ts +78 -0
  237. package/src/circuit/circuit/stream-handler.ts +86 -0
  238. package/src/circuit/circuit/{utils.js → utils.ts} +9 -25
  239. package/src/circuit/constants.ts +31 -0
  240. package/src/circuit/index.ts +120 -0
  241. package/src/circuit/{listener.js → listener.ts} +21 -27
  242. package/src/circuit/multicodec.ts +2 -0
  243. package/src/circuit/{protocol → pb}/index.proto +1 -1
  244. package/src/circuit/pb/index.ts +88 -0
  245. package/src/circuit/transport.ts +216 -0
  246. package/src/circuit/utils.ts +12 -0
  247. package/src/config.ts +101 -0
  248. package/src/connection-manager/auto-dialler.ts +154 -0
  249. package/src/connection-manager/index.ts +422 -0
  250. package/src/connection-manager/latency-monitor.ts +319 -0
  251. package/src/connection-manager/{visibility-change-emitter.js → visibility-change-emitter.ts} +48 -38
  252. package/src/constants.ts +31 -0
  253. package/src/content-routing/index.ts +143 -0
  254. package/src/content-routing/utils.ts +54 -0
  255. package/src/dht/dht-content-routing.ts +43 -0
  256. package/src/dht/dht-peer-routing.ts +35 -0
  257. package/src/dialer/auto-dialer.ts +40 -0
  258. package/src/dialer/{dial-request.js → dial-request.ts} +60 -51
  259. package/src/dialer/index.ts +371 -0
  260. package/src/errors.ts +71 -0
  261. package/src/fetch/README.md +1 -1
  262. package/src/fetch/constants.ts +3 -0
  263. package/src/fetch/index.ts +167 -0
  264. package/src/fetch/{proto.proto → pb/proto.proto} +0 -0
  265. package/src/fetch/pb/proto.ts +58 -0
  266. package/src/get-peer.ts +57 -0
  267. package/src/identify/consts.ts +13 -0
  268. package/src/identify/index.ts +445 -0
  269. package/src/identify/{message.proto → pb/message.proto} +0 -0
  270. package/src/identify/pb/message.ts +36 -0
  271. package/src/index.ts +242 -0
  272. package/src/insecure/index.ts +101 -0
  273. package/src/insecure/{proto.proto → pb/proto.proto} +0 -0
  274. package/src/insecure/pb/proto.ts +61 -0
  275. package/src/keychain/{cms.js → cms.ts} +62 -58
  276. package/src/keychain/index.ts +588 -0
  277. package/src/keychain/{util.js → util.ts} +7 -17
  278. package/src/libp2p.ts +513 -0
  279. package/src/metrics/index.ts +310 -0
  280. package/src/metrics/moving-average.ts +53 -0
  281. package/src/metrics/stats.ts +238 -0
  282. package/src/nat-manager.ts +194 -0
  283. package/src/peer-record-updater.ts +55 -0
  284. package/src/peer-routing.ts +185 -0
  285. package/src/ping/README.md +1 -1
  286. package/src/ping/constants.ts +5 -0
  287. package/src/ping/index.ts +83 -0
  288. package/src/pnet/README.md +2 -2
  289. package/src/pnet/crypto.ts +67 -0
  290. package/src/pnet/errors.ts +5 -0
  291. package/src/pnet/index.ts +95 -0
  292. package/src/pnet/key-generator.ts +28 -0
  293. package/src/registrar.ts +205 -0
  294. package/src/transport-manager.ts +279 -0
  295. package/src/upgrader.ts +499 -0
  296. package/src/version.ts +3 -0
  297. package/dist/index.min.js +0 -55
  298. package/dist/src/circuit/protocol/index.d.ts +0 -173
  299. package/dist/src/fetch/proto.d.ts +0 -134
  300. package/dist/src/identify/message.d.ts +0 -95
  301. package/dist/src/insecure/plaintext.d.ts +0 -12
  302. package/dist/src/insecure/plaintext.d.ts.map +0 -1
  303. package/dist/src/insecure/proto.d.ts +0 -128
  304. package/dist/src/metrics/old-peers.d.ts +0 -3
  305. package/dist/src/metrics/old-peers.d.ts.map +0 -1
  306. package/dist/src/metrics/tracked-map.d.ts +0 -8
  307. package/dist/src/metrics/tracked-map.d.ts.map +0 -1
  308. package/dist/src/peer-store/address-book.d.ts +0 -67
  309. package/dist/src/peer-store/address-book.d.ts.map +0 -1
  310. package/dist/src/peer-store/index.d.ts +0 -58
  311. package/dist/src/peer-store/index.d.ts.map +0 -1
  312. package/dist/src/peer-store/key-book.d.ts +0 -40
  313. package/dist/src/peer-store/key-book.d.ts.map +0 -1
  314. package/dist/src/peer-store/metadata-book.d.ts +0 -58
  315. package/dist/src/peer-store/metadata-book.d.ts.map +0 -1
  316. package/dist/src/peer-store/pb/peer.d.ts +0 -222
  317. package/dist/src/peer-store/proto-book.d.ts +0 -43
  318. package/dist/src/peer-store/proto-book.d.ts.map +0 -1
  319. package/dist/src/peer-store/store.d.ts +0 -73
  320. package/dist/src/peer-store/store.d.ts.map +0 -1
  321. package/dist/src/peer-store/types.d.ts +0 -202
  322. package/dist/src/peer-store/types.d.ts.map +0 -1
  323. package/dist/src/ping/util.d.ts +0 -5
  324. package/dist/src/ping/util.d.ts.map +0 -1
  325. package/dist/src/pubsub-adapter.d.ts +0 -22
  326. package/dist/src/pubsub-adapter.d.ts.map +0 -1
  327. package/dist/src/record/envelope/envelope.d.ts +0 -77
  328. package/dist/src/record/envelope/index.d.ts +0 -80
  329. package/dist/src/record/envelope/index.d.ts.map +0 -1
  330. package/dist/src/record/peer-record/consts.d.ts +0 -4
  331. package/dist/src/record/peer-record/consts.d.ts.map +0 -1
  332. package/dist/src/record/peer-record/index.d.ts +0 -60
  333. package/dist/src/record/peer-record/index.d.ts.map +0 -1
  334. package/dist/src/record/peer-record/peer-record.d.ts +0 -133
  335. package/dist/src/record/utils.d.ts +0 -12
  336. package/dist/src/record/utils.d.ts.map +0 -1
  337. package/dist/src/types.d.ts +0 -90
  338. package/dist/src/types.d.ts.map +0 -1
  339. package/src/address-manager/index.js +0 -96
  340. package/src/circuit/auto-relay.js +0 -302
  341. package/src/circuit/circuit/hop.js +0 -205
  342. package/src/circuit/circuit/stop.js +0 -81
  343. package/src/circuit/circuit/stream-handler.js +0 -94
  344. package/src/circuit/constants.js +0 -12
  345. package/src/circuit/index.js +0 -102
  346. package/src/circuit/multicodec.js +0 -5
  347. package/src/circuit/protocol/index.d.ts +0 -173
  348. package/src/circuit/protocol/index.js +0 -530
  349. package/src/circuit/transport.js +0 -229
  350. package/src/circuit/utils.js +0 -17
  351. package/src/config.js +0 -114
  352. package/src/connection-manager/auto-dialler.js +0 -132
  353. package/src/connection-manager/index.js +0 -363
  354. package/src/connection-manager/latency-monitor.js +0 -264
  355. package/src/constants.js +0 -18
  356. package/src/content-routing/index.js +0 -163
  357. package/src/content-routing/utils.js +0 -89
  358. package/src/dht/dht-content-routing.js +0 -44
  359. package/src/dht/dht-peer-routing.js +0 -51
  360. package/src/dialer/index.js +0 -376
  361. package/src/errors.js +0 -66
  362. package/src/fetch/constants.js +0 -6
  363. package/src/fetch/index.js +0 -159
  364. package/src/fetch/proto.d.ts +0 -134
  365. package/src/fetch/proto.js +0 -333
  366. package/src/get-peer.js +0 -49
  367. package/src/identify/consts.js +0 -15
  368. package/src/identify/index.js +0 -384
  369. package/src/identify/message.d.ts +0 -95
  370. package/src/identify/message.js +0 -328
  371. package/src/index.js +0 -811
  372. package/src/insecure/plaintext.js +0 -95
  373. package/src/insecure/proto.d.ts +0 -128
  374. package/src/insecure/proto.js +0 -371
  375. package/src/keychain/index.js +0 -561
  376. package/src/metrics/index.js +0 -290
  377. package/src/metrics/old-peers.js +0 -16
  378. package/src/metrics/stats.js +0 -270
  379. package/src/metrics/tracked-map.js +0 -94
  380. package/src/nat-manager.js +0 -197
  381. package/src/peer-routing.js +0 -176
  382. package/src/peer-store/README.md +0 -145
  383. package/src/peer-store/address-book.js +0 -382
  384. package/src/peer-store/index.js +0 -121
  385. package/src/peer-store/key-book.js +0 -141
  386. package/src/peer-store/metadata-book.js +0 -250
  387. package/src/peer-store/pb/peer.d.ts +0 -222
  388. package/src/peer-store/pb/peer.js +0 -643
  389. package/src/peer-store/pb/peer.proto +0 -31
  390. package/src/peer-store/proto-book.js +0 -237
  391. package/src/peer-store/store.js +0 -263
  392. package/src/peer-store/types.ts +0 -245
  393. package/src/ping/constants.js +0 -8
  394. package/src/ping/index.js +0 -85
  395. package/src/ping/util.js +0 -18
  396. package/src/pnet/crypto.js +0 -84
  397. package/src/pnet/errors.js +0 -7
  398. package/src/pnet/index.js +0 -86
  399. package/src/pnet/key-generator.js +0 -33
  400. package/src/pubsub-adapter.js +0 -61
  401. package/src/record/README.md +0 -130
  402. package/src/record/envelope/envelope.d.ts +0 -77
  403. package/src/record/envelope/envelope.js +0 -243
  404. package/src/record/envelope/envelope.proto +0 -19
  405. package/src/record/envelope/index.js +0 -183
  406. package/src/record/peer-record/consts.js +0 -14
  407. package/src/record/peer-record/index.js +0 -113
  408. package/src/record/peer-record/peer-record.d.ts +0 -133
  409. package/src/record/peer-record/peer-record.js +0 -367
  410. package/src/record/peer-record/peer-record.proto +0 -18
  411. package/src/record/utils.js +0 -25
  412. package/src/registrar.js +0 -127
  413. package/src/transport-manager.js +0 -269
  414. package/src/types.ts +0 -98
  415. 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'
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'
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
+ }