libp2p 0.36.0 → 0.36.2-199395d

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