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
@@ -1,139 +1,87 @@
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, TransferStats } 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 declare class DefaultStats extends EventEmitter<StatsEvents> implements Stats {
14
+ private readonly enabled;
15
+ queue: Array<[string, number, number]>;
16
+ private stats;
17
+ private frequencyLastTime;
18
+ private frequencyAccumulators;
19
+ private movingAverages;
20
+ private timeout?;
21
+ private readonly computeThrottleMaxQueueSize;
22
+ private readonly computeThrottleTimeout;
23
+ private readonly movingAverageIntervals;
7
24
  /**
8
25
  * A queue based manager for stat processing
9
- *
10
- * @class
11
- * @param {string[]} initialCounters
12
- * @param {any} options
13
26
  */
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
- */
40
- private _update;
27
+ constructor(init: StatsInit);
41
28
  /**
42
29
  * Initializes the internal timer if there are items in the queue. This
43
30
  * 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}
31
+ * `Stats.push` will also start the processing
47
32
  */
48
33
  start(): void;
49
34
  /**
50
35
  * Stops processing and computing of stats by clearing the internal
51
- * timer.
52
- *
53
- * @returns {void}
36
+ * timer
54
37
  */
55
38
  stop(): void;
56
- _timeout: any;
57
39
  /**
58
40
  * Returns a clone of the current stats.
59
41
  */
60
- get snapshot(): {
61
- dataReceived: Big;
62
- dataSent: Big;
63
- };
42
+ getSnapshot(): TransferStats;
64
43
  /**
65
44
  * Returns a clone of the internal movingAverages
66
45
  */
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;
46
+ getMovingAverages(): MovingAverages;
77
47
  /**
78
48
  * Pushes the given operation data to the queue, along with the
79
49
  * current Timestamp, then resets the update timer.
80
- *
81
- * @param {string} counter
82
- * @param {number} inc
83
- * @returns {void}
84
50
  */
85
51
  push(counter: string, inc: number): void;
86
52
  /**
87
53
  * Resets the timeout for triggering updates.
88
- *
89
- * @private
90
- * @returns {void}
91
54
  */
92
- private _resetComputeTimeout;
55
+ _resetComputeTimeout(): void;
93
56
  /**
94
57
  * Calculates and returns the timeout for the next update based on
95
58
  * the urgency of the update.
59
+ */
60
+ _nextTimeout(): number;
61
+ /**
62
+ * If there are items in the queue, they will will be processed and
63
+ * the frequency for all items will be updated based on the Timestamp
64
+ * of the last item in the queue. The `update` event will also be emitted
65
+ * with the latest stats.
96
66
  *
97
- * @private
98
- * @returns {number}
67
+ * If there are no items in the queue, no action is taken.
99
68
  */
100
- private _nextTimeout;
69
+ _update(): void;
101
70
  /**
102
71
  * For each key in the stats, the frequency and moving averages
103
72
  * will be updated via Stats._updateFrequencyFor based on the time
104
73
  * difference between calls to this method.
105
- *
106
- * @private
107
- * @param {Timestamp} latestTime
108
- * @returns {void}
109
74
  */
110
- private _updateFrequency;
75
+ _updateFrequency(latestTime: number): void;
111
76
  /**
112
77
  * Updates the `movingAverages` for the given `key` and also
113
78
  * 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
79
  */
121
- private _updateFrequencyFor;
80
+ _updateFrequencyFor(key: 'dataReceived' | 'dataSent', timeDiffMS: number, latestTime: number): void;
122
81
  /**
123
82
  * For the given operation, `op`, the stats and `frequencyAccumulator`
124
83
  * 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
84
  */
131
- private _applyOp;
132
- }
133
- declare namespace Stats {
134
- export { IMovingAverage, Big };
85
+ _applyOp(op: [string, number, number]): void;
135
86
  }
136
- import { EventEmitter } from "events";
137
- type IMovingAverage = import('@vascosantos/moving-average').IMovingAverage;
138
- type Big = import('bignumber.js').BigNumber;
139
87
  //# 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,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAEtF,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,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