libp2p 0.36.2 → 0.37.0

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