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,139 +1,91 @@
1
- export = Stats;
2
- /**
3
- * @typedef {import('@vascosantos/moving-average').IMovingAverage} IMovingAverage
4
- * @typedef {import('bignumber.js').BigNumber} Big
5
- */
6
- declare class Stats extends EventEmitter {
1
+ import { EventEmitter } from '@libp2p/interfaces';
2
+ import type { MovingAverages, Stats } from '@libp2p/interfaces/metrics';
3
+ export interface StatsEvents {
4
+ 'update': CustomEvent<TransferStats>;
5
+ }
6
+ export interface StatsInit {
7
+ enabled: boolean;
8
+ initialCounters: ['dataReceived', 'dataSent'];
9
+ movingAverageIntervals: number[];
10
+ computeThrottleMaxQueueSize: number;
11
+ computeThrottleTimeout: number;
12
+ }
13
+ export interface TransferStats {
14
+ dataReceived: BigInt;
15
+ dataSent: BigInt;
16
+ }
17
+ export declare class DefaultStats extends EventEmitter<StatsEvents> implements Stats {
18
+ private readonly enabled;
19
+ queue: Array<[string, number, number]>;
20
+ private stats;
21
+ private frequencyLastTime;
22
+ private frequencyAccumulators;
23
+ private movingAverages;
24
+ private timeout?;
25
+ private readonly computeThrottleMaxQueueSize;
26
+ private readonly computeThrottleTimeout;
27
+ private readonly movingAverageIntervals;
7
28
  /**
8
29
  * A queue based manager for stat processing
9
- *
10
- * @class
11
- * @param {string[]} initialCounters
12
- * @param {any} options
13
- */
14
- constructor(initialCounters: string[], options: any);
15
- _options: any;
16
- _queue: any[];
17
- /** @type {{ dataReceived: Big, dataSent: Big }} */
18
- _stats: {
19
- dataReceived: Big;
20
- dataSent: Big;
21
- };
22
- _frequencyLastTime: number;
23
- _frequencyAccumulators: {};
24
- /** @type {{ dataReceived: IMovingAverage[], dataSent: IMovingAverage[] }} */
25
- _movingAverages: {
26
- dataReceived: IMovingAverage[];
27
- dataSent: IMovingAverage[];
28
- };
29
- /**
30
- * If there are items in the queue, they will will be processed and
31
- * the frequency for all items will be updated based on the Timestamp
32
- * of the last item in the queue. The `update` event will also be emitted
33
- * with the latest stats.
34
- *
35
- * If there are no items in the queue, no action is taken.
36
- *
37
- * @private
38
- * @returns {void}
39
30
  */
40
- private _update;
31
+ constructor(init: StatsInit);
41
32
  /**
42
33
  * Initializes the internal timer if there are items in the queue. This
43
34
  * should only need to be called if `Stats.stop` was previously called, as
44
- * `Stats.push` will also start the processing.
45
- *
46
- * @returns {void}
35
+ * `Stats.push` will also start the processing
47
36
  */
48
37
  start(): void;
49
38
  /**
50
39
  * Stops processing and computing of stats by clearing the internal
51
- * timer.
52
- *
53
- * @returns {void}
40
+ * timer
54
41
  */
55
42
  stop(): void;
56
- _timeout: any;
57
43
  /**
58
44
  * Returns a clone of the current stats.
59
45
  */
60
- get snapshot(): {
61
- dataReceived: Big;
62
- dataSent: Big;
63
- };
46
+ getSnapshot(): TransferStats;
64
47
  /**
65
48
  * Returns a clone of the internal movingAverages
66
49
  */
67
- get movingAverages(): {
68
- dataReceived: IMovingAverage[];
69
- dataSent: IMovingAverage[];
70
- };
71
- /**
72
- * Returns a plain JSON object of the stats
73
- *
74
- * @returns {*}
75
- */
76
- toJSON(): any;
50
+ getMovingAverages(): MovingAverages;
77
51
  /**
78
52
  * Pushes the given operation data to the queue, along with the
79
53
  * current Timestamp, then resets the update timer.
80
- *
81
- * @param {string} counter
82
- * @param {number} inc
83
- * @returns {void}
84
54
  */
85
55
  push(counter: string, inc: number): void;
86
56
  /**
87
57
  * Resets the timeout for triggering updates.
88
- *
89
- * @private
90
- * @returns {void}
91
58
  */
92
- private _resetComputeTimeout;
59
+ _resetComputeTimeout(): void;
93
60
  /**
94
61
  * Calculates and returns the timeout for the next update based on
95
62
  * the urgency of the update.
63
+ */
64
+ _nextTimeout(): number;
65
+ /**
66
+ * If there are items in the queue, they will will be processed and
67
+ * the frequency for all items will be updated based on the Timestamp
68
+ * of the last item in the queue. The `update` event will also be emitted
69
+ * with the latest stats.
96
70
  *
97
- * @private
98
- * @returns {number}
71
+ * If there are no items in the queue, no action is taken.
99
72
  */
100
- private _nextTimeout;
73
+ _update(): void;
101
74
  /**
102
75
  * For each key in the stats, the frequency and moving averages
103
76
  * will be updated via Stats._updateFrequencyFor based on the time
104
77
  * difference between calls to this method.
105
- *
106
- * @private
107
- * @param {Timestamp} latestTime
108
- * @returns {void}
109
78
  */
110
- private _updateFrequency;
79
+ _updateFrequency(latestTime: number): void;
111
80
  /**
112
81
  * Updates the `movingAverages` for the given `key` and also
113
82
  * resets the `frequencyAccumulator` for the `key`.
114
- *
115
- * @private
116
- * @param {string} key
117
- * @param {number} timeDiffMS - Time in milliseconds
118
- * @param {Timestamp} latestTime - Time in ticks
119
- * @returns {void}
120
83
  */
121
- private _updateFrequencyFor;
84
+ _updateFrequencyFor(key: 'dataReceived' | 'dataSent', timeDiffMS: number, latestTime: number): void;
122
85
  /**
123
86
  * For the given operation, `op`, the stats and `frequencyAccumulator`
124
87
  * will be updated or initialized if they don't already exist.
125
- *
126
- * @private
127
- * @param {{string, number}[]} op
128
- * @throws {InvalidNumber}
129
- * @returns {void}
130
88
  */
131
- private _applyOp;
132
- }
133
- declare namespace Stats {
134
- export { IMovingAverage, Big };
89
+ _applyOp(op: [string, number, number]): void;
135
90
  }
136
- import { EventEmitter } from "events";
137
- type IMovingAverage = import('@vascosantos/moving-average').IMovingAverage;
138
- type Big = import('bignumber.js').BigNumber;
139
91
  //# sourceMappingURL=stats.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/metrics/stats.js"],"names":[],"mappings":";AAQA;;;GAGG;AAEH;IACE;;;;;;OAMG;IACH,6BAHW,MAAM,EAAE,WACR,GAAG,EAkCb;IA7BC,cAAuB;IACvB,cAAgB;IAEhB,mDAAmD;IACnD;sBAD2B,GAAG;kBAAY,GAAG;MAI5C;IAED,2BAAoC;IACpC,2BAAgC;IAEhC,6EAA6E;IAC7E;sBAD2B,cAAc,EAAE;kBAAY,cAAc,EAAE;MAC9C;IAwH3B;;;;;;;;;;OAUG;IACH,gBAaC;IA9HD;;;;;;OAMG;IACH,SAFa,IAAI,CAMhB;IAED;;;;;OAKG;IACH,QAFa,IAAI,CAOhB;IAFG,cAAoB;IAIxB;;OAEG;IACH;sBAzD6B,GAAG;kBAAY,GAAG;MA2D9C;IAED;;OAEG;IACH;sBAvD6B,cAAc,EAAE;kBAAY,cAAc,EAAE;MAyDxE;IAED;;;;OAIG;IACH,cAkBC;IAED;;;;;;;OAOG;IACH,cAJW,MAAM,OACN,MAAM,GACJ,IAAI,CAKhB;IAED;;;;;OAKG;IACH,6BAEC;IAED;;;;;;OAMG;IACH,qBAKC;IA4BD;;;;;;;;OAQG;IACH,yBAQC;IAED;;;;;;;;;OASG;IACH,4BAsBC;IAED;;;;;;;;OAQG;IACH,iBAqBC;CACF;;;;;sBAlQY,OAAO,6BAA6B,EAAE,cAAc;WACpD,OAAO,cAAc,EAAE,SAAS"}
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/metrics/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAI9D,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAEvE,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,WAAW,CAAC,aAAa,CAAC,CAAA;CACrC;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,eAAe,EAAE,CAAC,cAAc,EAAE,UAAU,CAAC,CAAA;IAC7C,sBAAsB,EAAE,MAAM,EAAE,CAAA;IAChC,2BAA2B,EAAE,MAAM,CAAA;IACnC,sBAAsB,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,YAAa,SAAQ,YAAY,CAAC,WAAW,CAAE,YAAW,KAAK;IAC1E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAC1B,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC7C,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,iBAAiB,CAAQ;IACjC,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,OAAO,CAAC,CAAK;IACrB,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAQ;IACpD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAQ;IAC/C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAU;IAEjD;;OAEG;gBACU,IAAI,EAAE,SAAS;IAmC5B;;;;OAIG;IACH,KAAK;IAUL;;;OAGG;IACH,IAAI;IAOJ;;OAEG;IACH,WAAW;IAIX;;OAEG;IACH,iBAAiB,IAAK,cAAc;IAIpC;;;OAGG;IACH,IAAI,CAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAKlC;;OAEG;IACH,oBAAoB;IAIpB;;;OAGG;IACH,YAAY;IAOZ;;;;;;;OAOG;IACH,OAAO;IAqBP;;;;OAIG;IACH,gBAAgB,CAAE,UAAU,EAAE,MAAM;IASpC;;;OAGG;IACH,mBAAmB,CAAE,GAAG,EAAE,cAAc,GAAG,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAwB7F;;;OAGG;IACH,QAAQ,CAAE,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;CA2BvC"}
@@ -0,0 +1,183 @@
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
+ export class DefaultStats extends EventEmitter {
6
+ /**
7
+ * A queue based manager for stat processing
8
+ */
9
+ constructor(init) {
10
+ super();
11
+ this.enabled = init.enabled;
12
+ this.queue = [];
13
+ this.stats = {
14
+ dataReceived: 0n,
15
+ dataSent: 0n
16
+ };
17
+ this.frequencyLastTime = Date.now();
18
+ this.frequencyAccumulators = {};
19
+ this.movingAverages = {
20
+ dataReceived: [],
21
+ dataSent: []
22
+ };
23
+ this.computeThrottleMaxQueueSize = init.computeThrottleMaxQueueSize;
24
+ this.computeThrottleTimeout = init.computeThrottleTimeout;
25
+ this._update = this._update.bind(this);
26
+ this.movingAverageIntervals = init.movingAverageIntervals;
27
+ for (let i = 0; i < init.initialCounters.length; i++) {
28
+ const key = init.initialCounters[i];
29
+ this.stats[key] = 0n;
30
+ this.movingAverages[key] = [];
31
+ for (let k = 0; k < this.movingAverageIntervals.length; k++) {
32
+ const interval = this.movingAverageIntervals[k];
33
+ const ma = this.movingAverages[key][interval] = createMovingAverage(interval);
34
+ ma.push(this.frequencyLastTime, 0);
35
+ }
36
+ }
37
+ }
38
+ /**
39
+ * Initializes the internal timer if there are items in the queue. This
40
+ * should only need to be called if `Stats.stop` was previously called, as
41
+ * `Stats.push` will also start the processing
42
+ */
43
+ start() {
44
+ if (!this.enabled) {
45
+ return;
46
+ }
47
+ if (this.queue.length > 0) {
48
+ this._resetComputeTimeout();
49
+ }
50
+ }
51
+ /**
52
+ * Stops processing and computing of stats by clearing the internal
53
+ * timer
54
+ */
55
+ stop() {
56
+ if (this.timeout != null) {
57
+ this.timeout.clear();
58
+ this.timeout = null;
59
+ }
60
+ }
61
+ /**
62
+ * Returns a clone of the current stats.
63
+ */
64
+ getSnapshot() {
65
+ return Object.assign({}, this.stats);
66
+ }
67
+ /**
68
+ * Returns a clone of the internal movingAverages
69
+ */
70
+ getMovingAverages() {
71
+ return Object.assign({}, this.movingAverages);
72
+ }
73
+ /**
74
+ * Pushes the given operation data to the queue, along with the
75
+ * current Timestamp, then resets the update timer.
76
+ */
77
+ push(counter, inc) {
78
+ this.queue.push([counter, inc, Date.now()]);
79
+ this._resetComputeTimeout();
80
+ }
81
+ /**
82
+ * Resets the timeout for triggering updates.
83
+ */
84
+ _resetComputeTimeout() {
85
+ this.timeout = retimer(this._update, this._nextTimeout());
86
+ }
87
+ /**
88
+ * Calculates and returns the timeout for the next update based on
89
+ * the urgency of the update.
90
+ */
91
+ _nextTimeout() {
92
+ // calculate the need for an update, depending on the queue length
93
+ const urgency = this.queue.length / this.computeThrottleMaxQueueSize;
94
+ const timeout = Math.max(this.computeThrottleTimeout * (1 - urgency), 0);
95
+ return timeout;
96
+ }
97
+ /**
98
+ * If there are items in the queue, they will will be processed and
99
+ * the frequency for all items will be updated based on the Timestamp
100
+ * of the last item in the queue. The `update` event will also be emitted
101
+ * with the latest stats.
102
+ *
103
+ * If there are no items in the queue, no action is taken.
104
+ */
105
+ _update() {
106
+ this.timeout = null;
107
+ if (this.queue.length > 0) {
108
+ let last = ['', 0, 0];
109
+ for (last of this.queue) {
110
+ this._applyOp(last);
111
+ }
112
+ this.queue = [];
113
+ if (last.length > 2 && last[0] !== '') {
114
+ this._updateFrequency(last[2]); // contains timestamp of last op
115
+ }
116
+ this.dispatchEvent(new CustomEvent('update', {
117
+ detail: this.stats
118
+ }));
119
+ }
120
+ }
121
+ /**
122
+ * For each key in the stats, the frequency and moving averages
123
+ * will be updated via Stats._updateFrequencyFor based on the time
124
+ * difference between calls to this method.
125
+ */
126
+ _updateFrequency(latestTime) {
127
+ const timeDiff = latestTime - this.frequencyLastTime;
128
+ this._updateFrequencyFor('dataReceived', timeDiff, latestTime);
129
+ this._updateFrequencyFor('dataSent', timeDiff, latestTime);
130
+ this.frequencyLastTime = latestTime;
131
+ }
132
+ /**
133
+ * Updates the `movingAverages` for the given `key` and also
134
+ * resets the `frequencyAccumulator` for the `key`.
135
+ */
136
+ _updateFrequencyFor(key, timeDiffMS, latestTime) {
137
+ const count = this.frequencyAccumulators[key] ?? 0;
138
+ this.frequencyAccumulators[key] = 0;
139
+ // if `timeDiff` is zero, `hz` becomes Infinity, so we fallback to 1ms
140
+ const safeTimeDiff = timeDiffMS ?? 1;
141
+ const hz = (count / safeTimeDiff) * 1000;
142
+ let movingAverages = this.movingAverages[key];
143
+ if (movingAverages == null) {
144
+ movingAverages = this.movingAverages[key] = [];
145
+ }
146
+ const intervals = this.movingAverageIntervals;
147
+ for (let i = 0; i < intervals.length; i++) {
148
+ const movingAverageInterval = intervals[i];
149
+ let movingAverage = movingAverages[movingAverageInterval];
150
+ if (movingAverage == null) {
151
+ movingAverage = movingAverages[movingAverageInterval] = createMovingAverage(movingAverageInterval);
152
+ }
153
+ movingAverage.push(latestTime, hz);
154
+ }
155
+ }
156
+ /**
157
+ * For the given operation, `op`, the stats and `frequencyAccumulator`
158
+ * will be updated or initialized if they don't already exist.
159
+ */
160
+ _applyOp(op) {
161
+ const key = op[0];
162
+ const inc = op[1];
163
+ if (typeof inc !== 'number') {
164
+ throw new Error('invalid increment number');
165
+ }
166
+ let n;
167
+ if (!Object.prototype.hasOwnProperty.call(this.stats, key)) {
168
+ // @ts-expect-error cannot index type with key
169
+ n = this.stats[key] = 0n;
170
+ }
171
+ else {
172
+ // @ts-expect-error cannot index type with key
173
+ n = this.stats[key];
174
+ }
175
+ // @ts-expect-error cannot index type with key
176
+ this.stats[key] = n + BigInt(inc);
177
+ if (this.frequencyAccumulators[key] == null) {
178
+ this.frequencyAccumulators[key] = 0;
179
+ }
180
+ this.frequencyAccumulators[key] += inc;
181
+ }
182
+ }
183
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/metrics/stats.ts"],"names":[],"mappings":"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"}
@@ -1,121 +1,64 @@
1
- export = NatManager;
2
- declare class NatManager {
1
+ import { NatAPI } from '@achingbrain/nat-port-mapper';
2
+ import type { Startable } from '@libp2p/interfaces';
3
+ import type { Components } from '@libp2p/interfaces/components';
4
+ export interface PMPOptions {
3
5
  /**
4
- * @class
5
- * @param {NatManagerProperties & NatManagerOptions} options
6
+ * Whether to enable PMP as well as UPnP
6
7
  */
7
- constructor({ peerId, addressManager, transportManager, ...options }: NatManagerProperties & NatManagerOptions);
8
- _peerId: import("peer-id");
9
- _addressManager: import("./address-manager");
10
- _transportManager: import("./transport-manager");
11
- _enabled: boolean;
12
- _externalIp: string | undefined;
13
- _options: {
14
- description: string;
15
- ttl: number;
16
- autoUpdate: true;
17
- gateway: string | undefined;
18
- enablePMP: boolean;
19
- };
20
- /**
21
- * Starts the NAT manager
22
- */
23
- start(): void;
24
- _start(): Promise<void>;
25
- _getClient(): {
26
- /**
27
- * @param {...any} args
28
- * @returns {Promise<void>}
29
- */
30
- map: (...args: any[]) => Promise<void>;
31
- /**
32
- * @param {...any} args
33
- * @returns {Promise<void>}
34
- */
35
- destroy: (...args: any[]) => Promise<void>;
36
- /**
37
- * @param {...any} args
38
- * @returns {Promise<string>}
39
- */
40
- externalIp: (...args: any[]) => Promise<string>;
41
- };
42
- _client: {
43
- /**
44
- * @param {...any} args
45
- * @returns {Promise<void>}
46
- */
47
- map: (...args: any[]) => Promise<void>;
48
- /**
49
- * @param {...any} args
50
- * @returns {Promise<void>}
51
- */
52
- destroy: (...args: any[]) => Promise<void>;
53
- /**
54
- * @param {...any} args
55
- * @returns {Promise<string>}
56
- */
57
- externalIp: (...args: any[]) => Promise<string>;
58
- } | null | undefined;
59
- /**
60
- * Stops the NAT manager
61
- *
62
- * @async
63
- */
64
- stop(): Promise<void>;
8
+ enabled?: boolean;
65
9
  }
66
- declare namespace NatManager {
67
- export { PeerId, TransportManager, AddressManager, NatManagerProperties, NatManagerOptions };
68
- }
69
- type NatManagerProperties = {
10
+ export interface NatManagerInit {
70
11
  /**
71
- * - The peer ID of the current node
12
+ * Whether to enable the NAT manager
72
13
  */
73
- peerId: PeerId;
74
- /**
75
- * - A transport manager
76
- */
77
- transportManager: TransportManager;
14
+ enabled: boolean;
78
15
  /**
79
- * - An address manager
16
+ * Pass a value to use instead of auto-detection
80
17
  */
81
- addressManager: AddressManager;
82
- };
83
- type NatManagerOptions = {
18
+ externalAddress?: string;
84
19
  /**
85
- * - Whether to enable the NAT manager
20
+ * Pass a value to use instead of auto-detection
86
21
  */
87
- enabled: boolean;
22
+ localAddress?: string;
88
23
  /**
89
- * - Pass a value to use instead of auto-detection
24
+ * A string value to use for the port mapping description on the gateway
90
25
  */
91
- externalIp?: string | undefined;
26
+ description?: string;
92
27
  /**
93
- * - A string value to use for the port mapping description on the gateway
28
+ * How long UPnP port mappings should last for in seconds (minimum 1200)
94
29
  */
95
- description?: string | undefined;
30
+ ttl?: number;
96
31
  /**
97
- * - How long UPnP port mappings should last for in seconds (minimum 1200)
32
+ * Whether to automatically refresh UPnP port mappings when their TTL is reached
98
33
  */
99
- ttl?: number | undefined;
34
+ keepAlive: boolean;
100
35
  /**
101
- * - Whether to automatically refresh UPnP port mappings when their TTL is reached
36
+ * Pass a value to use instead of auto-detection
102
37
  */
103
- keepAlive?: boolean | undefined;
38
+ gateway?: string;
39
+ }
40
+ export declare class NatManager implements Startable {
41
+ private readonly components;
42
+ private readonly enabled;
43
+ private readonly externalAddress?;
44
+ private readonly localAddress?;
45
+ private readonly description;
46
+ private readonly ttl;
47
+ private readonly keepAlive;
48
+ private readonly gateway?;
49
+ private started;
50
+ private client?;
51
+ constructor(components: Components, init: NatManagerInit);
52
+ isStarted(): boolean;
104
53
  /**
105
- * - Pass a value to use instead of auto-detection
54
+ * Starts the NAT manager
106
55
  */
107
- gateway?: string | undefined;
56
+ start(): void;
57
+ _start(): Promise<void>;
58
+ _getClient(): Promise<NatAPI>;
108
59
  /**
109
- * - PMP options
60
+ * Stops the NAT manager
110
61
  */
111
- pmp?: {
112
- /**
113
- * - Whether to enable PMP as well as UPnP
114
- */
115
- enabled?: boolean | undefined;
116
- } | undefined;
117
- };
118
- type PeerId = import('peer-id');
119
- type TransportManager = import('./transport-manager');
120
- type AddressManager = import('./address-manager');
62
+ stop(): Promise<void>;
63
+ }
121
64
  //# sourceMappingURL=nat-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nat-manager.d.ts","sourceRoot":"","sources":["../../src/nat-manager.js"],"names":[],"mappings":";AAiDA;IACE;;;OAGG;IACH,sEAFW,oBAAoB,GAAG,iBAAiB,EAoBlD;IAjBC,2BAAqB;IACrB,6CAAqC;IACrC,iDAAyC;IAEzC,kBAA+B;IAC/B,gCAAqC;IACrC;;;;;;MAMC;IAOH;;OAEG;IACH,cAUC;IAED,wBAgDC;IAED;QAgBI;;;WAGG;uBAFY,GAAG,OACL,QAAQ,IAAI,CAAC;QAI1B;;;WAGG;2BAFY,GAAG,OACL,QAAQ,IAAI,CAAC;QAI1B;;;WAGG;8BAFY,GAAG,OACL,QAAQ,MAAM,CAAC;MAM/B;IArBC;QACE;;;WAGG;uBAFY,GAAG,OACL,QAAQ,IAAI,CAAC;QAI1B;;;WAGG;2BAFY,GAAG,OACL,QAAQ,IAAI,CAAC;QAI1B;;;WAGG;8BAFY,GAAG,OACL,QAAQ,MAAM,CAAC;yBAG7B;IAKH;;;;OAIG;IACH,sBAWC;CACF;;;;;;;;YApKa,MAAM;;;;sBACN,gBAAgB;;;;oBAChB,cAAc;;;;;;aAGd,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAZR,OAAO,SAAS,CAAC;wBACjB,OAAO,qBAAqB,CAAC;sBAC7B,OAAO,mBAAmB,CAAC"}
1
+ {"version":3,"file":"nat-manager.d.ts","sourceRoot":"","sources":["../../src/nat-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAS9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAS/D,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;IAEhB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,SAAS,EAAE,OAAO,CAAA;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,UAAW,YAAW,SAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAQ;IACjC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAQ;gBAEV,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc;IAiBzD,SAAS;IAIT;;OAEG;IACH,KAAK;IAcC,MAAM;IAkDN,UAAU;IAehB;;OAEG;IACG,IAAI;CAYX"}
@@ -0,0 +1,114 @@
1
+ import { upnpNat } from '@achingbrain/nat-port-mapper';
2
+ import { logger } from '@libp2p/logger';
3
+ import { Multiaddr } from '@multiformats/multiaddr';
4
+ import { isBrowser } from 'wherearewe';
5
+ import isPrivateIp from 'private-ip';
6
+ import * as pkg from './version.js';
7
+ import errCode from 'err-code';
8
+ import { codes } from './errors.js';
9
+ import { isLoopback } from '@libp2p/utils/multiaddr/is-loopback';
10
+ const log = logger('libp2p:nat');
11
+ const DEFAULT_TTL = 7200;
12
+ function highPort(min = 1024, max = 65535) {
13
+ return Math.floor(Math.random() * (max - min + 1) + min);
14
+ }
15
+ export class NatManager {
16
+ constructor(components, init) {
17
+ this.components = components;
18
+ this.started = false;
19
+ this.enabled = init.enabled;
20
+ this.externalAddress = init.externalAddress;
21
+ this.localAddress = init.localAddress;
22
+ this.description = init.description ?? `${pkg.name}@${pkg.version} ${this.components.getPeerId().toString()}`;
23
+ this.ttl = init.ttl ?? DEFAULT_TTL;
24
+ this.keepAlive = init.keepAlive ?? true;
25
+ this.gateway = init.gateway;
26
+ if (this.ttl < DEFAULT_TTL) {
27
+ throw errCode(new Error(`NatManager ttl should be at least ${DEFAULT_TTL} seconds`), codes.ERR_INVALID_PARAMETERS);
28
+ }
29
+ }
30
+ isStarted() {
31
+ return this.started;
32
+ }
33
+ /**
34
+ * Starts the NAT manager
35
+ */
36
+ start() {
37
+ if (isBrowser || !this.enabled || this.started) {
38
+ return;
39
+ }
40
+ this.started = true;
41
+ // done async to not slow down startup
42
+ this._start().catch((err) => {
43
+ // hole punching errors are non-fatal
44
+ log.error(err);
45
+ });
46
+ }
47
+ async _start() {
48
+ const addrs = this.components.getTransportManager().getAddrs();
49
+ for (const addr of addrs) {
50
+ // try to open uPnP ports for each thin waist address
51
+ const { family, host, port, transport } = addr.toOptions();
52
+ if (!addr.isThinWaistAddress() || transport !== 'tcp') {
53
+ // only bare tcp addresses
54
+ // eslint-disable-next-line no-continue
55
+ continue;
56
+ }
57
+ if (isLoopback(addr)) {
58
+ // eslint-disable-next-line no-continue
59
+ continue;
60
+ }
61
+ if (family !== 4) {
62
+ // ignore ipv6
63
+ // eslint-disable-next-line no-continue
64
+ continue;
65
+ }
66
+ const client = await this._getClient();
67
+ const publicIp = this.externalAddress ?? await client.externalIp();
68
+ if (isPrivateIp(publicIp)) {
69
+ throw new Error(`${publicIp} is private - please set config.nat.externalIp to an externally routable IP or ensure you are not behind a double NAT`);
70
+ }
71
+ const publicPort = highPort();
72
+ log(`opening uPnP connection from ${publicIp}:${publicPort} to ${host}:${port}`);
73
+ await client.map({
74
+ publicPort,
75
+ localPort: port,
76
+ localAddress: this.localAddress,
77
+ protocol: transport.toUpperCase() === 'TCP' ? 'TCP' : 'UDP'
78
+ });
79
+ this.components.getAddressManager().addObservedAddr(Multiaddr.fromNodeAddress({
80
+ family: 4,
81
+ address: publicIp,
82
+ port: publicPort
83
+ }, transport));
84
+ }
85
+ }
86
+ async _getClient() {
87
+ if (this.client != null) {
88
+ return this.client;
89
+ }
90
+ this.client = await upnpNat({
91
+ description: this.description,
92
+ ttl: this.ttl,
93
+ keepAlive: this.keepAlive,
94
+ gateway: this.gateway
95
+ });
96
+ return this.client;
97
+ }
98
+ /**
99
+ * Stops the NAT manager
100
+ */
101
+ async stop() {
102
+ if (isBrowser || this.client == null) {
103
+ return;
104
+ }
105
+ try {
106
+ await this.client.close();
107
+ this.client = undefined;
108
+ }
109
+ catch (err) {
110
+ log.error(err);
111
+ }
112
+ }
113
+ }
114
+ //# sourceMappingURL=nat-manager.js.map