libp2p 0.36.0 → 0.36.2-1473044

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (415) hide show
  1. package/LICENSE +3 -21
  2. package/README.md +13 -10
  3. package/dist/src/address-manager/index.d.ts +33 -52
  4. package/dist/src/address-manager/index.d.ts.map +1 -1
  5. package/dist/src/address-manager/index.js +81 -0
  6. package/dist/src/address-manager/index.js.map +1 -0
  7. package/dist/src/circuit/auto-relay.d.ts +24 -85
  8. package/dist/src/circuit/auto-relay.d.ts.map +1 -1
  9. package/dist/src/circuit/auto-relay.js +215 -0
  10. package/dist/src/circuit/auto-relay.js.map +1 -0
  11. package/dist/src/circuit/circuit/hop.d.ts +26 -53
  12. package/dist/src/circuit/circuit/hop.d.ts.map +1 -1
  13. package/dist/src/circuit/circuit/hop.js +138 -0
  14. package/dist/src/circuit/circuit/hop.js.map +1 -0
  15. package/dist/src/circuit/circuit/stop.d.ts +18 -10
  16. package/dist/src/circuit/circuit/stop.d.ts.map +1 -1
  17. package/dist/src/circuit/circuit/stop.js +49 -0
  18. package/dist/src/circuit/circuit/stop.js.map +1 -0
  19. package/dist/src/circuit/circuit/stream-handler.d.ts +19 -38
  20. package/dist/src/circuit/circuit/stream-handler.d.ts.map +1 -1
  21. package/dist/src/circuit/circuit/stream-handler.js +59 -0
  22. package/dist/src/circuit/circuit/stream-handler.js.map +1 -0
  23. package/dist/src/circuit/circuit/utils.d.ts +3 -6
  24. package/dist/src/circuit/circuit/utils.d.ts.map +1 -1
  25. package/dist/src/circuit/circuit/utils.js +43 -0
  26. package/dist/src/circuit/circuit/utils.js.map +1 -0
  27. package/dist/src/circuit/constants.d.ts +24 -6
  28. package/dist/src/circuit/constants.d.ts.map +1 -1
  29. package/dist/src/circuit/constants.js +26 -0
  30. package/dist/src/circuit/constants.js.map +1 -0
  31. package/dist/src/circuit/index.d.ts +41 -74
  32. package/dist/src/circuit/index.d.ts.map +1 -1
  33. package/dist/src/circuit/index.js +69 -0
  34. package/dist/src/circuit/index.js.map +1 -0
  35. package/dist/src/circuit/listener.d.ts +8 -3
  36. package/dist/src/circuit/listener.d.ts.map +1 -1
  37. package/dist/src/circuit/listener.js +54 -0
  38. package/dist/src/circuit/listener.js.map +1 -0
  39. package/dist/src/circuit/multicodec.d.ts +1 -1
  40. package/dist/src/circuit/multicodec.d.ts.map +1 -1
  41. package/dist/src/circuit/multicodec.js +2 -0
  42. package/dist/src/circuit/multicodec.js.map +1 -0
  43. package/dist/src/circuit/pb/index.d.ts +51 -0
  44. package/dist/src/circuit/pb/index.d.ts.map +1 -0
  45. package/dist/src/circuit/pb/index.js +72 -0
  46. package/dist/src/circuit/pb/index.js.map +1 -0
  47. package/dist/src/circuit/transport.d.ts +18 -78
  48. package/dist/src/circuit/transport.d.ts.map +1 -1
  49. package/dist/src/circuit/transport.js +190 -0
  50. package/dist/src/circuit/transport.js.map +1 -0
  51. package/dist/src/circuit/utils.d.ts +5 -2
  52. package/dist/src/circuit/utils.d.ts.map +1 -1
  53. package/dist/src/circuit/utils.js +11 -0
  54. package/dist/src/circuit/utils.js.map +1 -0
  55. package/dist/src/config.d.ts +3 -85
  56. package/dist/src/config.d.ts.map +1 -1
  57. package/dist/src/config.js +93 -0
  58. package/dist/src/config.js.map +1 -0
  59. package/dist/src/connection-manager/auto-dialler.d.ts +24 -41
  60. package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
  61. package/dist/src/connection-manager/auto-dialler.js +105 -0
  62. package/dist/src/connection-manager/auto-dialler.js.map +1 -0
  63. package/dist/src/connection-manager/index.d.ts +79 -144
  64. package/dist/src/connection-manager/index.d.ts.map +1 -1
  65. package/dist/src/connection-manager/index.js +295 -0
  66. package/dist/src/connection-manager/index.js.map +1 -0
  67. package/dist/src/connection-manager/latency-monitor.d.ts +72 -97
  68. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  69. package/dist/src/connection-manager/latency-monitor.js +220 -0
  70. package/dist/src/connection-manager/latency-monitor.js.map +1 -0
  71. package/dist/src/connection-manager/visibility-change-emitter.d.ts +15 -16
  72. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  73. package/dist/src/connection-manager/visibility-change-emitter.js +118 -0
  74. package/dist/src/connection-manager/visibility-change-emitter.js.map +1 -0
  75. package/dist/src/constants.d.ts +22 -10
  76. package/dist/src/constants.d.ts.map +1 -1
  77. package/dist/src/constants.js +27 -0
  78. package/dist/src/constants.js.map +1 -0
  79. package/dist/src/content-routing/index.d.ts +26 -81
  80. package/dist/src/content-routing/index.d.ts.map +1 -1
  81. package/dist/src/content-routing/index.js +99 -0
  82. package/dist/src/content-routing/index.js.map +1 -0
  83. package/dist/src/content-routing/utils.d.ts +6 -49
  84. package/dist/src/content-routing/utils.d.ts.map +1 -1
  85. package/dist/src/content-routing/utils.js +42 -0
  86. package/dist/src/content-routing/utils.js.map +1 -0
  87. package/dist/src/dht/dht-content-routing.d.ts +10 -24
  88. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  89. package/dist/src/dht/dht-content-routing.js +32 -0
  90. package/dist/src/dht/dht-content-routing.js.map +1 -0
  91. package/dist/src/dht/dht-peer-routing.d.ts +9 -24
  92. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  93. package/dist/src/dht/dht-peer-routing.js +26 -0
  94. package/dist/src/dht/dht-peer-routing.js.map +1 -0
  95. package/dist/src/dialer/auto-dialer.d.ts +14 -0
  96. package/dist/src/dialer/auto-dialer.d.ts.map +1 -0
  97. package/dist/src/dialer/auto-dialer.js +24 -0
  98. package/dist/src/dialer/auto-dialer.js.map +1 -0
  99. package/dist/src/dialer/dial-request.d.ts +18 -46
  100. package/dist/src/dialer/dial-request.d.ts.map +1 -1
  101. package/dist/src/dialer/dial-request.js +83 -0
  102. package/dist/src/dialer/dial-request.js.map +1 -0
  103. package/dist/src/dialer/index.d.ts +41 -148
  104. package/dist/src/dialer/index.d.ts.map +1 -1
  105. package/dist/src/dialer/index.js +280 -0
  106. package/dist/src/dialer/index.js.map +1 -0
  107. package/dist/src/errors.d.ts +68 -63
  108. package/dist/src/errors.d.ts.map +1 -1
  109. package/dist/src/errors.js +73 -0
  110. package/dist/src/errors.js.map +1 -0
  111. package/dist/src/fetch/constants.d.ts +1 -1
  112. package/dist/src/fetch/constants.d.ts.map +1 -1
  113. package/dist/src/fetch/constants.js +3 -0
  114. package/dist/src/fetch/constants.js.map +1 -0
  115. package/dist/src/fetch/index.d.ts +30 -49
  116. package/dist/src/fetch/index.d.ts.map +1 -1
  117. package/dist/src/fetch/index.js +129 -0
  118. package/dist/src/fetch/index.js.map +1 -0
  119. package/dist/src/fetch/pb/proto.d.ts +26 -0
  120. package/dist/src/fetch/pb/proto.d.ts.map +1 -0
  121. package/dist/src/fetch/pb/proto.js +44 -0
  122. package/dist/src/fetch/pb/proto.js.map +1 -0
  123. package/dist/src/get-peer.d.ts +4 -11
  124. package/dist/src/get-peer.d.ts.map +1 -1
  125. package/dist/src/get-peer.js +43 -0
  126. package/dist/src/get-peer.js.map +1 -0
  127. package/dist/src/identify/consts.d.ts +9 -9
  128. package/dist/src/identify/consts.d.ts.map +1 -1
  129. package/dist/src/identify/consts.js +11 -0
  130. package/dist/src/identify/consts.js.map +1 -0
  131. package/dist/src/identify/index.d.ts +42 -96
  132. package/dist/src/identify/index.d.ts.map +1 -1
  133. package/dist/src/identify/index.js +322 -0
  134. package/dist/src/identify/index.js.map +1 -0
  135. package/dist/src/identify/pb/message.d.ts +15 -0
  136. package/dist/src/identify/pb/message.d.ts.map +1 -0
  137. package/dist/src/identify/pb/message.js +24 -0
  138. package/dist/src/identify/pb/message.js.map +1 -0
  139. package/dist/src/index.d.ts +162 -581
  140. package/dist/src/index.d.ts.map +1 -1
  141. package/dist/src/index.js +9 -0
  142. package/dist/src/index.js.map +1 -0
  143. package/dist/src/insecure/index.d.ts +9 -0
  144. package/dist/src/insecure/index.d.ts.map +1 -0
  145. package/dist/src/insecure/index.js +81 -0
  146. package/dist/src/insecure/index.js.map +1 -0
  147. package/dist/src/insecure/pb/proto.d.ts +28 -0
  148. package/dist/src/insecure/pb/proto.d.ts.map +1 -0
  149. package/dist/src/insecure/pb/proto.js +46 -0
  150. package/dist/src/insecure/pb/proto.js.map +1 -0
  151. package/dist/src/keychain/cms.d.ts +6 -14
  152. package/dist/src/keychain/cms.d.ts.map +1 -1
  153. package/dist/src/keychain/cms.js +129 -0
  154. package/dist/src/keychain/cms.js.map +1 -0
  155. package/dist/src/keychain/index.d.ts +61 -81
  156. package/dist/src/keychain/index.d.ts.map +1 -1
  157. package/dist/src/keychain/index.js +493 -0
  158. package/dist/src/keychain/index.js.map +1 -0
  159. package/dist/src/keychain/util.d.ts +3 -6
  160. package/dist/src/keychain/util.d.ts.map +1 -1
  161. package/dist/src/keychain/util.js +79 -0
  162. package/dist/src/keychain/util.js.map +1 -0
  163. package/dist/src/libp2p.d.ts +78 -0
  164. package/dist/src/libp2p.d.ts.map +1 -0
  165. package/dist/src/libp2p.js +375 -0
  166. package/dist/src/libp2p.js.map +1 -0
  167. package/dist/src/metrics/index.d.ts +47 -104
  168. package/dist/src/metrics/index.d.ts.map +1 -1
  169. package/dist/src/metrics/index.js +231 -0
  170. package/dist/src/metrics/index.js.map +1 -0
  171. package/dist/src/metrics/moving-average.d.ts +14 -0
  172. package/dist/src/metrics/moving-average.d.ts.map +1 -0
  173. package/dist/src/metrics/moving-average.js +40 -0
  174. package/dist/src/metrics/moving-average.js.map +1 -0
  175. package/dist/src/metrics/stats.d.ts +41 -93
  176. package/dist/src/metrics/stats.d.ts.map +1 -1
  177. package/dist/src/metrics/stats.js +183 -0
  178. package/dist/src/metrics/stats.js.map +1 -0
  179. package/dist/src/nat-manager.d.ts +42 -99
  180. package/dist/src/nat-manager.d.ts.map +1 -1
  181. package/dist/src/nat-manager.js +114 -0
  182. package/dist/src/nat-manager.js.map +1 -0
  183. package/dist/src/peer-record-updater.d.ts +15 -0
  184. package/dist/src/peer-record-updater.d.ts.map +1 -0
  185. package/dist/src/peer-record-updater.js +44 -0
  186. package/dist/src/peer-record-updater.js.map +1 -0
  187. package/dist/src/peer-routing.d.ts +39 -84
  188. package/dist/src/peer-routing.d.ts.map +1 -1
  189. package/dist/src/peer-routing.js +108 -0
  190. package/dist/src/peer-routing.js.map +1 -0
  191. package/dist/src/ping/constants.d.ts +4 -4
  192. package/dist/src/ping/constants.d.ts.map +1 -1
  193. package/dist/src/ping/constants.js +5 -0
  194. package/dist/src/ping/constants.js.map +1 -0
  195. package/dist/src/ping/index.d.ts +26 -33
  196. package/dist/src/ping/index.d.ts.map +1 -1
  197. package/dist/src/ping/index.js +56 -0
  198. package/dist/src/ping/index.js.map +1 -0
  199. package/dist/src/pnet/crypto.d.ts +15 -5
  200. package/dist/src/pnet/crypto.d.ts.map +1 -1
  201. package/dist/src/pnet/crypto.js +60 -0
  202. package/dist/src/pnet/crypto.js.map +1 -0
  203. package/dist/src/pnet/errors.d.ts +5 -5
  204. package/dist/src/pnet/errors.d.ts.map +1 -1
  205. package/dist/src/pnet/errors.js +6 -0
  206. package/dist/src/pnet/errors.js.map +1 -0
  207. package/dist/src/pnet/index.d.ts +11 -20
  208. package/dist/src/pnet/index.d.ts.map +1 -1
  209. package/dist/src/pnet/index.js +66 -0
  210. package/dist/src/pnet/index.js.map +1 -0
  211. package/dist/src/pnet/key-generator.d.ts +3 -7
  212. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  213. package/dist/src/pnet/key-generator.js +25 -0
  214. package/dist/src/pnet/key-generator.js.map +1 -0
  215. package/dist/src/registrar.d.ts +27 -65
  216. package/dist/src/registrar.d.ts.map +1 -1
  217. package/dist/src/registrar.js +159 -0
  218. package/dist/src/registrar.js.map +1 -0
  219. package/dist/src/transport-manager.d.ts +34 -82
  220. package/dist/src/transport-manager.d.ts.map +1 -1
  221. package/dist/src/transport-manager.js +223 -0
  222. package/dist/src/transport-manager.js.map +1 -0
  223. package/dist/src/upgrader.d.ts +49 -129
  224. package/dist/src/upgrader.d.ts.map +1 -1
  225. package/dist/src/upgrader.js +402 -0
  226. package/dist/src/upgrader.js.map +1 -0
  227. package/dist/src/version.d.ts +3 -0
  228. package/dist/src/version.d.ts.map +1 -0
  229. package/dist/src/version.js +3 -0
  230. package/dist/src/version.js.map +1 -0
  231. package/package.json +150 -197
  232. package/src/address-manager/index.ts +129 -0
  233. package/src/circuit/README.md +16 -11
  234. package/src/circuit/auto-relay.ts +284 -0
  235. package/src/circuit/circuit/hop.ts +211 -0
  236. package/src/circuit/circuit/stop.ts +78 -0
  237. package/src/circuit/circuit/stream-handler.ts +86 -0
  238. package/src/circuit/circuit/{utils.js → utils.ts} +9 -25
  239. package/src/circuit/constants.ts +31 -0
  240. package/src/circuit/index.ts +120 -0
  241. package/src/circuit/{listener.js → listener.ts} +21 -27
  242. package/src/circuit/multicodec.ts +2 -0
  243. package/src/circuit/{protocol → pb}/index.proto +1 -1
  244. package/src/circuit/pb/index.ts +88 -0
  245. package/src/circuit/transport.ts +216 -0
  246. package/src/circuit/utils.ts +12 -0
  247. package/src/config.ts +101 -0
  248. package/src/connection-manager/auto-dialler.ts +154 -0
  249. package/src/connection-manager/index.ts +422 -0
  250. package/src/connection-manager/latency-monitor.ts +319 -0
  251. package/src/connection-manager/{visibility-change-emitter.js → visibility-change-emitter.ts} +48 -38
  252. package/src/constants.ts +31 -0
  253. package/src/content-routing/index.ts +143 -0
  254. package/src/content-routing/utils.ts +54 -0
  255. package/src/dht/dht-content-routing.ts +43 -0
  256. package/src/dht/dht-peer-routing.ts +35 -0
  257. package/src/dialer/auto-dialer.ts +40 -0
  258. package/src/dialer/{dial-request.js → dial-request.ts} +60 -51
  259. package/src/dialer/index.ts +371 -0
  260. package/src/errors.ts +71 -0
  261. package/src/fetch/README.md +1 -1
  262. package/src/fetch/constants.ts +3 -0
  263. package/src/fetch/index.ts +167 -0
  264. package/src/fetch/{proto.proto → pb/proto.proto} +0 -0
  265. package/src/fetch/pb/proto.ts +58 -0
  266. package/src/get-peer.ts +57 -0
  267. package/src/identify/consts.ts +13 -0
  268. package/src/identify/index.ts +445 -0
  269. package/src/identify/{message.proto → pb/message.proto} +0 -0
  270. package/src/identify/pb/message.ts +36 -0
  271. package/src/index.ts +242 -0
  272. package/src/insecure/index.ts +101 -0
  273. package/src/insecure/{proto.proto → pb/proto.proto} +0 -0
  274. package/src/insecure/pb/proto.ts +61 -0
  275. package/src/keychain/{cms.js → cms.ts} +62 -58
  276. package/src/keychain/index.ts +588 -0
  277. package/src/keychain/{util.js → util.ts} +7 -17
  278. package/src/libp2p.ts +513 -0
  279. package/src/metrics/index.ts +310 -0
  280. package/src/metrics/moving-average.ts +53 -0
  281. package/src/metrics/stats.ts +238 -0
  282. package/src/nat-manager.ts +194 -0
  283. package/src/peer-record-updater.ts +55 -0
  284. package/src/peer-routing.ts +185 -0
  285. package/src/ping/README.md +1 -1
  286. package/src/ping/constants.ts +5 -0
  287. package/src/ping/index.ts +83 -0
  288. package/src/pnet/README.md +2 -2
  289. package/src/pnet/crypto.ts +67 -0
  290. package/src/pnet/errors.ts +5 -0
  291. package/src/pnet/index.ts +95 -0
  292. package/src/pnet/key-generator.ts +28 -0
  293. package/src/registrar.ts +205 -0
  294. package/src/transport-manager.ts +279 -0
  295. package/src/upgrader.ts +499 -0
  296. package/src/version.ts +3 -0
  297. package/dist/index.min.js +0 -55
  298. package/dist/src/circuit/protocol/index.d.ts +0 -173
  299. package/dist/src/fetch/proto.d.ts +0 -134
  300. package/dist/src/identify/message.d.ts +0 -95
  301. package/dist/src/insecure/plaintext.d.ts +0 -12
  302. package/dist/src/insecure/plaintext.d.ts.map +0 -1
  303. package/dist/src/insecure/proto.d.ts +0 -128
  304. package/dist/src/metrics/old-peers.d.ts +0 -3
  305. package/dist/src/metrics/old-peers.d.ts.map +0 -1
  306. package/dist/src/metrics/tracked-map.d.ts +0 -8
  307. package/dist/src/metrics/tracked-map.d.ts.map +0 -1
  308. package/dist/src/peer-store/address-book.d.ts +0 -67
  309. package/dist/src/peer-store/address-book.d.ts.map +0 -1
  310. package/dist/src/peer-store/index.d.ts +0 -58
  311. package/dist/src/peer-store/index.d.ts.map +0 -1
  312. package/dist/src/peer-store/key-book.d.ts +0 -40
  313. package/dist/src/peer-store/key-book.d.ts.map +0 -1
  314. package/dist/src/peer-store/metadata-book.d.ts +0 -58
  315. package/dist/src/peer-store/metadata-book.d.ts.map +0 -1
  316. package/dist/src/peer-store/pb/peer.d.ts +0 -222
  317. package/dist/src/peer-store/proto-book.d.ts +0 -43
  318. package/dist/src/peer-store/proto-book.d.ts.map +0 -1
  319. package/dist/src/peer-store/store.d.ts +0 -73
  320. package/dist/src/peer-store/store.d.ts.map +0 -1
  321. package/dist/src/peer-store/types.d.ts +0 -202
  322. package/dist/src/peer-store/types.d.ts.map +0 -1
  323. package/dist/src/ping/util.d.ts +0 -5
  324. package/dist/src/ping/util.d.ts.map +0 -1
  325. package/dist/src/pubsub-adapter.d.ts +0 -22
  326. package/dist/src/pubsub-adapter.d.ts.map +0 -1
  327. package/dist/src/record/envelope/envelope.d.ts +0 -77
  328. package/dist/src/record/envelope/index.d.ts +0 -80
  329. package/dist/src/record/envelope/index.d.ts.map +0 -1
  330. package/dist/src/record/peer-record/consts.d.ts +0 -4
  331. package/dist/src/record/peer-record/consts.d.ts.map +0 -1
  332. package/dist/src/record/peer-record/index.d.ts +0 -60
  333. package/dist/src/record/peer-record/index.d.ts.map +0 -1
  334. package/dist/src/record/peer-record/peer-record.d.ts +0 -133
  335. package/dist/src/record/utils.d.ts +0 -12
  336. package/dist/src/record/utils.d.ts.map +0 -1
  337. package/dist/src/types.d.ts +0 -90
  338. package/dist/src/types.d.ts.map +0 -1
  339. package/src/address-manager/index.js +0 -96
  340. package/src/circuit/auto-relay.js +0 -302
  341. package/src/circuit/circuit/hop.js +0 -205
  342. package/src/circuit/circuit/stop.js +0 -81
  343. package/src/circuit/circuit/stream-handler.js +0 -94
  344. package/src/circuit/constants.js +0 -12
  345. package/src/circuit/index.js +0 -102
  346. package/src/circuit/multicodec.js +0 -5
  347. package/src/circuit/protocol/index.d.ts +0 -173
  348. package/src/circuit/protocol/index.js +0 -530
  349. package/src/circuit/transport.js +0 -229
  350. package/src/circuit/utils.js +0 -17
  351. package/src/config.js +0 -114
  352. package/src/connection-manager/auto-dialler.js +0 -132
  353. package/src/connection-manager/index.js +0 -363
  354. package/src/connection-manager/latency-monitor.js +0 -264
  355. package/src/constants.js +0 -18
  356. package/src/content-routing/index.js +0 -163
  357. package/src/content-routing/utils.js +0 -89
  358. package/src/dht/dht-content-routing.js +0 -44
  359. package/src/dht/dht-peer-routing.js +0 -51
  360. package/src/dialer/index.js +0 -376
  361. package/src/errors.js +0 -66
  362. package/src/fetch/constants.js +0 -6
  363. package/src/fetch/index.js +0 -159
  364. package/src/fetch/proto.d.ts +0 -134
  365. package/src/fetch/proto.js +0 -333
  366. package/src/get-peer.js +0 -49
  367. package/src/identify/consts.js +0 -15
  368. package/src/identify/index.js +0 -384
  369. package/src/identify/message.d.ts +0 -95
  370. package/src/identify/message.js +0 -328
  371. package/src/index.js +0 -811
  372. package/src/insecure/plaintext.js +0 -95
  373. package/src/insecure/proto.d.ts +0 -128
  374. package/src/insecure/proto.js +0 -371
  375. package/src/keychain/index.js +0 -561
  376. package/src/metrics/index.js +0 -290
  377. package/src/metrics/old-peers.js +0 -16
  378. package/src/metrics/stats.js +0 -270
  379. package/src/metrics/tracked-map.js +0 -94
  380. package/src/nat-manager.js +0 -197
  381. package/src/peer-routing.js +0 -176
  382. package/src/peer-store/README.md +0 -145
  383. package/src/peer-store/address-book.js +0 -382
  384. package/src/peer-store/index.js +0 -121
  385. package/src/peer-store/key-book.js +0 -141
  386. package/src/peer-store/metadata-book.js +0 -250
  387. package/src/peer-store/pb/peer.d.ts +0 -222
  388. package/src/peer-store/pb/peer.js +0 -643
  389. package/src/peer-store/pb/peer.proto +0 -31
  390. package/src/peer-store/proto-book.js +0 -237
  391. package/src/peer-store/store.js +0 -263
  392. package/src/peer-store/types.ts +0 -245
  393. package/src/ping/constants.js +0 -8
  394. package/src/ping/index.js +0 -85
  395. package/src/ping/util.js +0 -18
  396. package/src/pnet/crypto.js +0 -84
  397. package/src/pnet/errors.js +0 -7
  398. package/src/pnet/index.js +0 -86
  399. package/src/pnet/key-generator.js +0 -33
  400. package/src/pubsub-adapter.js +0 -61
  401. package/src/record/README.md +0 -130
  402. package/src/record/envelope/envelope.d.ts +0 -77
  403. package/src/record/envelope/envelope.js +0 -243
  404. package/src/record/envelope/envelope.proto +0 -19
  405. package/src/record/envelope/index.js +0 -183
  406. package/src/record/peer-record/consts.js +0 -14
  407. package/src/record/peer-record/index.js +0 -113
  408. package/src/record/peer-record/peer-record.d.ts +0 -133
  409. package/src/record/peer-record/peer-record.js +0 -367
  410. package/src/record/peer-record/peer-record.proto +0 -18
  411. package/src/record/utils.js +0 -25
  412. package/src/registrar.js +0 -127
  413. package/src/transport-manager.js +0 -269
  414. package/src/types.ts +0 -98
  415. package/src/upgrader.js +0 -492
@@ -0,0 +1,194 @@
1
+ import { upnpNat, NatAPI } 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
+ import type { Startable } from '@libp2p/interfaces'
11
+ import type { Components } from '@libp2p/interfaces/components'
12
+
13
+ const log = logger('libp2p:nat')
14
+ const DEFAULT_TTL = 7200
15
+
16
+ function highPort (min = 1024, max = 65535) {
17
+ return Math.floor(Math.random() * (max - min + 1) + min)
18
+ }
19
+
20
+ export interface PMPOptions {
21
+ /**
22
+ * Whether to enable PMP as well as UPnP
23
+ */
24
+ enabled?: boolean
25
+ }
26
+
27
+ export interface NatManagerInit {
28
+ /**
29
+ * Whether to enable the NAT manager
30
+ */
31
+ enabled: boolean
32
+
33
+ /**
34
+ * Pass a value to use instead of auto-detection
35
+ */
36
+ externalAddress?: string
37
+
38
+ /**
39
+ * Pass a value to use instead of auto-detection
40
+ */
41
+ localAddress?: string
42
+
43
+ /**
44
+ * A string value to use for the port mapping description on the gateway
45
+ */
46
+ description?: string
47
+
48
+ /**
49
+ * How long UPnP port mappings should last for in seconds (minimum 1200)
50
+ */
51
+ ttl?: number
52
+
53
+ /**
54
+ * Whether to automatically refresh UPnP port mappings when their TTL is reached
55
+ */
56
+ keepAlive: boolean
57
+
58
+ /**
59
+ * Pass a value to use instead of auto-detection
60
+ */
61
+ gateway?: string
62
+ }
63
+
64
+ export class NatManager implements Startable {
65
+ private readonly components: Components
66
+ private readonly enabled: boolean
67
+ private readonly externalAddress?: string
68
+ private readonly localAddress?: string
69
+ private readonly description: string
70
+ private readonly ttl: number
71
+ private readonly keepAlive: boolean
72
+ private readonly gateway?: string
73
+ private started: boolean
74
+ private client?: NatAPI
75
+
76
+ constructor (components: Components, init: NatManagerInit) {
77
+ this.components = components
78
+
79
+ this.started = false
80
+ this.enabled = init.enabled
81
+ this.externalAddress = init.externalAddress
82
+ this.localAddress = init.localAddress
83
+ this.description = init.description ?? `${pkg.name}@${pkg.version} ${this.components.getPeerId().toString()}`
84
+ this.ttl = init.ttl ?? DEFAULT_TTL
85
+ this.keepAlive = init.keepAlive ?? true
86
+ this.gateway = init.gateway
87
+
88
+ if (this.ttl < DEFAULT_TTL) {
89
+ throw errCode(new Error(`NatManager ttl should be at least ${DEFAULT_TTL} seconds`), codes.ERR_INVALID_PARAMETERS)
90
+ }
91
+ }
92
+
93
+ isStarted () {
94
+ return this.started
95
+ }
96
+
97
+ /**
98
+ * Starts the NAT manager
99
+ */
100
+ start () {
101
+ if (isBrowser || !this.enabled || this.started) {
102
+ return
103
+ }
104
+
105
+ this.started = true
106
+
107
+ // done async to not slow down startup
108
+ this._start().catch((err) => {
109
+ // hole punching errors are non-fatal
110
+ log.error(err)
111
+ })
112
+ }
113
+
114
+ async _start () {
115
+ const addrs = this.components.getTransportManager().getAddrs()
116
+
117
+ for (const addr of addrs) {
118
+ // try to open uPnP ports for each thin waist address
119
+ const { family, host, port, transport } = addr.toOptions()
120
+
121
+ if (!addr.isThinWaistAddress() || transport !== 'tcp') {
122
+ // only bare tcp addresses
123
+ // eslint-disable-next-line no-continue
124
+ continue
125
+ }
126
+
127
+ if (isLoopback(addr)) {
128
+ // eslint-disable-next-line no-continue
129
+ continue
130
+ }
131
+
132
+ if (family !== 4) {
133
+ // ignore ipv6
134
+ // eslint-disable-next-line no-continue
135
+ continue
136
+ }
137
+
138
+ const client = await this._getClient()
139
+ const publicIp = this.externalAddress ?? await client.externalIp()
140
+
141
+ if (isPrivateIp(publicIp)) {
142
+ 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`)
143
+ }
144
+
145
+ const publicPort = highPort()
146
+
147
+ log(`opening uPnP connection from ${publicIp}:${publicPort} to ${host}:${port}`)
148
+
149
+ await client.map({
150
+ publicPort,
151
+ localPort: port,
152
+ localAddress: this.localAddress,
153
+ protocol: transport.toUpperCase() === 'TCP' ? 'TCP' : 'UDP'
154
+ })
155
+
156
+ this.components.getAddressManager().addObservedAddr(Multiaddr.fromNodeAddress({
157
+ family: 4,
158
+ address: publicIp,
159
+ port: publicPort
160
+ }, transport))
161
+ }
162
+ }
163
+
164
+ async _getClient () {
165
+ if (this.client != null) {
166
+ return this.client
167
+ }
168
+
169
+ this.client = await upnpNat({
170
+ description: this.description,
171
+ ttl: this.ttl,
172
+ keepAlive: this.keepAlive,
173
+ gateway: this.gateway
174
+ })
175
+
176
+ return this.client
177
+ }
178
+
179
+ /**
180
+ * Stops the NAT manager
181
+ */
182
+ async stop () {
183
+ if (isBrowser || this.client == null) {
184
+ return
185
+ }
186
+
187
+ try {
188
+ await this.client.close()
189
+ this.client = undefined
190
+ } catch (err: any) {
191
+ log.error(err)
192
+ }
193
+ }
194
+ }
@@ -0,0 +1,55 @@
1
+ import { RecordEnvelope, PeerRecord } from '@libp2p/peer-record'
2
+ import type { Components } from '@libp2p/interfaces/components'
3
+ import type { Startable } from '@libp2p/interfaces'
4
+ import { logger } from '@libp2p/logger'
5
+ import { protocols } from '@multiformats/multiaddr'
6
+
7
+ const log = logger('libp2p:peer-record-updater')
8
+
9
+ export class PeerRecordUpdater implements Startable {
10
+ private readonly components: Components
11
+ private started: boolean
12
+
13
+ constructor (components: Components) {
14
+ this.components = components
15
+ this.started = false
16
+ this.update = this.update.bind(this)
17
+ }
18
+
19
+ isStarted () {
20
+ return this.started
21
+ }
22
+
23
+ async start () {
24
+ this.started = true
25
+ this.components.getTransportManager().addEventListener('listener:listening', this.update)
26
+ this.components.getTransportManager().addEventListener('listener:close', this.update)
27
+ this.components.getAddressManager().addEventListener('change:addresses', this.update)
28
+ }
29
+
30
+ async stop () {
31
+ this.started = false
32
+ this.components.getTransportManager().removeEventListener('listener:listening', this.update)
33
+ this.components.getTransportManager().removeEventListener('listener:close', this.update)
34
+ this.components.getAddressManager().removeEventListener('change:addresses', this.update)
35
+ }
36
+
37
+ /**
38
+ * Create (or update if existing) self peer record and store it in the AddressBook.
39
+ */
40
+ update () {
41
+ Promise.resolve()
42
+ .then(async () => {
43
+ const peerRecord = new PeerRecord({
44
+ peerId: this.components.getPeerId(),
45
+ multiaddrs: this.components.getAddressManager().getAddresses().map(ma => ma.decapsulateCode(protocols('p2p').code))
46
+ })
47
+
48
+ const envelope = await RecordEnvelope.seal(peerRecord, this.components.getPeerId())
49
+ await this.components.getPeerStore().addressBook.consumePeerRecord(envelope)
50
+ })
51
+ .catch(err => {
52
+ log.error('Could not update self peer record: %o', err)
53
+ })
54
+ }
55
+ }
@@ -0,0 +1,185 @@
1
+ import { logger } from '@libp2p/logger'
2
+ import errCode from 'err-code'
3
+ import { codes, messages } from './errors.js'
4
+ import {
5
+ storeAddresses,
6
+ uniquePeers,
7
+ requirePeers
8
+ } from './content-routing/utils.js'
9
+ import { TimeoutController } from 'timeout-abort-controller'
10
+ import merge from 'it-merge'
11
+ import { pipe } from 'it-pipe'
12
+ import first from 'it-first'
13
+ import drain from 'it-drain'
14
+ import filter from 'it-filter'
15
+ import {
16
+ setDelayedInterval,
17
+ clearDelayedInterval
18
+ // @ts-expect-error module with no types
19
+ } from 'set-delayed-interval'
20
+ // @ts-expect-error setMaxListeners is missing from the node 16 types
21
+ import { setMaxListeners } from 'events'
22
+ import type { PeerId } from '@libp2p/interfaces/peer-id'
23
+ import type { PeerRouting } from '@libp2p/interfaces/peer-routing'
24
+ import type { AbortOptions, Startable } from '@libp2p/interfaces'
25
+ import type { PeerInfo } from '@libp2p/interfaces/peer-info'
26
+ import type { Components } from '@libp2p/interfaces/components'
27
+
28
+ const log = logger('libp2p:peer-routing')
29
+
30
+ export interface RefreshManagerInit {
31
+ /**
32
+ * Whether to enable the Refresh manager
33
+ */
34
+ enabled?: boolean
35
+
36
+ /**
37
+ * Boot delay to start the Refresh Manager (in ms)
38
+ */
39
+ bootDelay?: number
40
+
41
+ /**
42
+ * Interval between each Refresh Manager run (in ms)
43
+ */
44
+ interval?: number
45
+
46
+ /**
47
+ * How long to let each refresh run (in ms)
48
+ */
49
+ timeout?: number
50
+ }
51
+
52
+ export interface PeerRoutingInit {
53
+ routers: PeerRouting[]
54
+ refreshManager?: RefreshManagerInit
55
+ }
56
+
57
+ export class DefaultPeerRouting implements PeerRouting, Startable {
58
+ private readonly components: Components
59
+ private readonly routers: PeerRouting[]
60
+ private readonly refreshManagerInit: RefreshManagerInit
61
+ private timeoutId?: ReturnType<typeof setTimeout>
62
+ private started: boolean
63
+ private abortController?: TimeoutController
64
+
65
+ constructor (components: Components, init: PeerRoutingInit) {
66
+ this.components = components
67
+ this.routers = init.routers
68
+ this.refreshManagerInit = init.refreshManager ?? {}
69
+ this.started = false
70
+
71
+ this._findClosestPeersTask = this._findClosestPeersTask.bind(this)
72
+ }
73
+
74
+ isStarted () {
75
+ return this.started
76
+ }
77
+
78
+ /**
79
+ * Start peer routing service.
80
+ */
81
+ async start () {
82
+ if (this.started || this.routers.length === 0 || this.timeoutId != null || this.refreshManagerInit.enabled === false) {
83
+ return
84
+ }
85
+
86
+ this.timeoutId = setDelayedInterval(
87
+ this._findClosestPeersTask, this.refreshManagerInit.interval, this.refreshManagerInit.bootDelay
88
+ )
89
+
90
+ this.started = true
91
+ }
92
+
93
+ /**
94
+ * Recurrent task to find closest peers and add their addresses to the Address Book.
95
+ */
96
+ async _findClosestPeersTask () {
97
+ if (this.abortController != null) {
98
+ // we are already running the query
99
+ return
100
+ }
101
+
102
+ try {
103
+ this.abortController = new TimeoutController(this.refreshManagerInit.timeout ?? 10e3)
104
+
105
+ // this controller may be used while dialing lots of peers so prevent MaxListenersExceededWarning
106
+ // appearing in the console
107
+ try {
108
+ // fails on node < 15.4
109
+ setMaxListeners?.(Infinity, this.abortController.signal)
110
+ } catch {}
111
+
112
+ // nb getClosestPeers adds the addresses to the address book
113
+ await drain(this.getClosestPeers(this.components.getPeerId().toBytes(), { signal: this.abortController.signal }))
114
+ } catch (err: any) {
115
+ log.error(err)
116
+ } finally {
117
+ this.abortController?.clear()
118
+ this.abortController = undefined
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Stop peer routing service.
124
+ */
125
+ async stop () {
126
+ clearDelayedInterval(this.timeoutId)
127
+
128
+ // abort query if it is in-flight
129
+ this.abortController?.abort()
130
+
131
+ this.started = false
132
+ }
133
+
134
+ /**
135
+ * Iterates over all peer routers in parallel to find the given peer
136
+ */
137
+ async findPeer (id: PeerId, options?: AbortOptions): Promise<PeerInfo> {
138
+ if (this.routers.length === 0) {
139
+ throw errCode(new Error('No peer routers available'), codes.ERR_NO_ROUTERS_AVAILABLE)
140
+ }
141
+
142
+ if (id.toString() === this.components.getPeerId().toString()) {
143
+ throw errCode(new Error('Should not try to find self'), codes.ERR_FIND_SELF)
144
+ }
145
+
146
+ const output = await pipe(
147
+ merge(
148
+ ...this.routers.map(router => (async function * () {
149
+ try {
150
+ yield await router.findPeer(id, options)
151
+ } catch (err) {
152
+ log.error(err)
153
+ }
154
+ })())
155
+ ),
156
+ (source) => filter(source, Boolean),
157
+ (source) => storeAddresses(source, this.components.getPeerStore()),
158
+ async (source) => await first(source)
159
+ )
160
+
161
+ if (output != null) {
162
+ return output
163
+ }
164
+
165
+ throw errCode(new Error(messages.NOT_FOUND), codes.ERR_NOT_FOUND)
166
+ }
167
+
168
+ /**
169
+ * Attempt to find the closest peers on the network to the given key
170
+ */
171
+ async * getClosestPeers (key: Uint8Array, options?: AbortOptions): AsyncIterable<PeerInfo> {
172
+ if (this.routers.length === 0) {
173
+ throw errCode(new Error('No peer routers available'), codes.ERR_NO_ROUTERS_AVAILABLE)
174
+ }
175
+
176
+ yield * pipe(
177
+ merge(
178
+ ...this.routers.map(router => router.getClosestPeers(key, options))
179
+ ),
180
+ (source) => storeAddresses(source, this.components.getPeerStore()),
181
+ (source) => uniquePeers(source),
182
+ (source) => requirePeers(source)
183
+ )
184
+ }
185
+ }
@@ -8,7 +8,7 @@ libp2p-ping JavaScript Implementation
8
8
  ## Usage
9
9
 
10
10
  ```javascript
11
- var Ping = require('libp2p/src/ping')
11
+ import Ping from 'libp2p/src/ping'
12
12
 
13
13
  Ping.mount(libp2p) // Enable this peer to echo Ping requests
14
14
 
@@ -0,0 +1,5 @@
1
+
2
+ export const PROTOCOL = '/ipfs/ping/1.0.0'
3
+ export const PING_LENGTH = 32
4
+ export const PROTOCOL_VERSION = '1.0.0'
5
+ export const PROTOCOL_NAME = 'ping'
@@ -0,0 +1,83 @@
1
+ import { logger } from '@libp2p/logger'
2
+ import errCode from 'err-code'
3
+ import { codes } from '../errors.js'
4
+ import { randomBytes } from '@libp2p/crypto'
5
+ import { pipe } from 'it-pipe'
6
+ import first from 'it-first'
7
+ import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
8
+ import { PROTOCOL_NAME, PING_LENGTH, PROTOCOL_VERSION } from './constants.js'
9
+ import type { IncomingStreamData } from '@libp2p/interfaces/registrar'
10
+ import type { PeerId } from '@libp2p/interfaces/peer-id'
11
+ import type { Startable } from '@libp2p/interfaces'
12
+ import type { Components } from '@libp2p/interfaces/components'
13
+
14
+ const log = logger('libp2p:ping')
15
+
16
+ export interface PingServiceInit {
17
+ protocolPrefix: string
18
+ }
19
+
20
+ export class PingService implements Startable {
21
+ private readonly components: Components
22
+ private readonly protocol: string
23
+ private started: boolean
24
+
25
+ constructor (components: Components, init: PingServiceInit) {
26
+ this.components = components
27
+ this.started = false
28
+ this.protocol = `/${init.protocolPrefix}/${PROTOCOL_NAME}/${PROTOCOL_VERSION}`
29
+ }
30
+
31
+ async start () {
32
+ await this.components.getRegistrar().handle(this.protocol, this.handleMessage)
33
+ this.started = true
34
+ }
35
+
36
+ async stop () {
37
+ await this.components.getRegistrar().unhandle(this.protocol)
38
+ this.started = false
39
+ }
40
+
41
+ isStarted () {
42
+ return this.started
43
+ }
44
+
45
+ /**
46
+ * A handler to register with Libp2p to process ping messages
47
+ */
48
+ handleMessage (data: IncomingStreamData) {
49
+ const { stream } = data
50
+
51
+ void pipe(stream, stream)
52
+ .catch(err => {
53
+ log.error(err)
54
+ })
55
+ }
56
+
57
+ /**
58
+ * Ping a given peer and wait for its response, getting the operation latency.
59
+ *
60
+ * @param {PeerId|Multiaddr} peer
61
+ * @returns {Promise<number>}
62
+ */
63
+ async ping (peer: PeerId): Promise<number> {
64
+ log('dialing %s to %p', this.protocol, peer)
65
+
66
+ const { stream } = await this.components.getDialer().dialProtocol(peer, this.protocol)
67
+ const start = Date.now()
68
+ const data = randomBytes(PING_LENGTH)
69
+
70
+ const result = await pipe(
71
+ [data],
72
+ stream,
73
+ async (source) => await first(source)
74
+ )
75
+ const end = Date.now()
76
+
77
+ if (result == null || !uint8ArrayEquals(data, result)) {
78
+ throw errCode(new Error('Received wrong ping ack'), codes.ERR_WRONG_PING_ACK)
79
+ }
80
+
81
+ return end - start
82
+ }
83
+ }
@@ -20,7 +20,7 @@ js-libp2p-pnet
20
20
  ## Usage
21
21
 
22
22
  ```js
23
- const Protector = require('libp2p-pnet')
23
+ const Protector from 'libp2p-pnet')
24
24
  const protector = new Protector(swarmKeyBuffer)
25
25
  const privateConnection = protector.protect(myPublicConnection, (err) => { })
26
26
  ```
@@ -63,7 +63,7 @@ node -e "require('libp2p/src/pnet').generate(process.stdout)" > swarm.key
63
63
  #### Programmatically
64
64
 
65
65
  ```js
66
- const writeKey = require('libp2p/src/pnet').generate
66
+ const writeKey from 'libp2p/src/pnet').generate
67
67
  const swarmKey = new Uint8Array(95)
68
68
  writeKey(swarmKey)
69
69
  fs.writeFileSync('swarm.key', swarmKey)
@@ -0,0 +1,67 @@
1
+ import { logger } from '@libp2p/logger'
2
+ import * as Errors from './errors.js'
3
+ import xsalsa20 from 'xsalsa20'
4
+ import { KEY_LENGTH } from './key-generator.js'
5
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
6
+ import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
7
+ import type { Source } from 'it-stream-types'
8
+
9
+ const log = logger('libp2p:pnet')
10
+
11
+ /**
12
+ * Creates a stream iterable to encrypt messages in a private network
13
+ */
14
+ export function createBoxStream (nonce: Uint8Array, psk: Uint8Array) {
15
+ const xor = xsalsa20(nonce, psk)
16
+
17
+ return (source: Source<Uint8Array>) => (async function * () {
18
+ for await (const chunk of source) {
19
+ yield Uint8Array.from(xor.update(chunk.slice()))
20
+ }
21
+ })()
22
+ }
23
+
24
+ /**
25
+ * Creates a stream iterable to decrypt messages in a private network
26
+ */
27
+ export function createUnboxStream (nonce: Uint8Array, psk: Uint8Array) {
28
+ return (source: Source<Uint8Array>) => (async function * () {
29
+ const xor = xsalsa20(nonce, psk)
30
+ log.trace('Decryption enabled')
31
+
32
+ for await (const chunk of source) {
33
+ yield Uint8Array.from(xor.update(chunk.slice()))
34
+ }
35
+ })()
36
+ }
37
+
38
+ /**
39
+ * Decode the version 1 psk from the given Uint8Array
40
+ */
41
+ export function decodeV1PSK (pskBuffer: Uint8Array) {
42
+ try {
43
+ // This should pull from multibase/multicodec to allow for
44
+ // more encoding flexibility. Ideally we'd consume the codecs
45
+ // from the buffer line by line to evaluate the next line
46
+ // programmatically instead of making assumptions about the
47
+ // encodings of each line.
48
+ const metadata = uint8ArrayToString(pskBuffer).split(/(?:\r\n|\r|\n)/g)
49
+ const pskTag = metadata.shift()
50
+ const codec = metadata.shift()
51
+ const pskString = metadata.shift()
52
+ const psk = uint8ArrayFromString(pskString ?? '', 'base16')
53
+
54
+ if (psk.byteLength !== KEY_LENGTH) {
55
+ throw new Error(Errors.INVALID_PSK)
56
+ }
57
+
58
+ return {
59
+ tag: pskTag,
60
+ codecName: codec,
61
+ psk: psk
62
+ }
63
+ } catch (err: any) {
64
+ log.error(err)
65
+ throw new Error(Errors.INVALID_PSK)
66
+ }
67
+ }
@@ -0,0 +1,5 @@
1
+ export const INVALID_PEER = 'Not a valid peer connection'
2
+ export const INVALID_PSK = 'Your private shared key is invalid'
3
+ export const NO_LOCAL_ID = 'No local private key provided'
4
+ export const NO_HANDSHAKE_CONNECTION = 'No connection for the handshake provided'
5
+ export const STREAM_ENDED = 'Stream ended prematurely'