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,561 +0,0 @@
1
- /* eslint max-nested-callbacks: ["error", 5] */
2
- 'use strict'
3
- const debug = require('debug')
4
- const log = Object.assign(debug('libp2p:keychain'), {
5
- error: debug('libp2p:keychain:err')
6
- })
7
- const sanitize = require('sanitize-filename')
8
- const mergeOptions = require('merge-options')
9
- const crypto = require('libp2p-crypto')
10
- const { Key } = require('interface-datastore/key')
11
- const CMS = require('./cms')
12
- const errcode = require('err-code')
13
- const { codes } = require('../errors')
14
- const { toString: uint8ArrayToString } = require('uint8arrays/to-string')
15
- const { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')
16
-
17
- // @ts-ignore node-forge sha512 types not exported
18
- require('node-forge/lib/sha512')
19
-
20
- /**
21
- * @typedef {import('peer-id')} PeerId
22
- * @typedef {import('interface-datastore').Datastore} Datastore
23
- */
24
-
25
- /**
26
- * @typedef {Object} DekOptions
27
- * @property {string} hash
28
- * @property {string} salt
29
- * @property {number} iterationCount
30
- * @property {number} keyLength
31
- *
32
- * @typedef {Object} KeychainOptions
33
- * @property {string} [pass]
34
- * @property {DekOptions} [dek]
35
- */
36
-
37
- /**
38
- * Information about a key.
39
- *
40
- * @typedef {Object} KeyInfo
41
- * @property {string} id - The universally unique key id.
42
- * @property {string} name - The local key name.
43
- */
44
-
45
- const keyPrefix = '/pkcs8/'
46
- const infoPrefix = '/info/'
47
- const privates = new WeakMap()
48
-
49
- // NIST SP 800-132
50
- const NIST = {
51
- minKeyLength: 112 / 8,
52
- minSaltLength: 128 / 8,
53
- minIterationCount: 1000
54
- }
55
-
56
- const defaultOptions = {
57
- // See https://cryptosense.com/parametesr-choice-for-pbkdf2/
58
- dek: {
59
- keyLength: 512 / 8,
60
- iterationCount: 10000,
61
- salt: 'you should override this value with a crypto secure random number',
62
- hash: 'sha2-512'
63
- }
64
- }
65
-
66
- /**
67
- * @param {string} name
68
- */
69
- function validateKeyName (name) {
70
- if (!name) return false
71
- if (typeof name !== 'string') return false
72
- return name === sanitize(name.trim())
73
- }
74
-
75
- /**
76
- * Throws an error after a delay
77
- *
78
- * This assumes than an error indicates that the keychain is under attack. Delay returning an
79
- * error to make brute force attacks harder.
80
- *
81
- * @param {string|Error} err - The error
82
- * @returns {Promise<never>}
83
- * @private
84
- */
85
- async function throwDelayed (err) {
86
- const min = 200
87
- const max = 1000
88
- const delay = Math.random() * (max - min) + min
89
-
90
- await new Promise(resolve => setTimeout(resolve, delay))
91
- throw err
92
- }
93
-
94
- /**
95
- * Converts a key name into a datastore name.
96
- *
97
- * @param {string} name
98
- * @returns {Key}
99
- * @private
100
- */
101
- function DsName (name) {
102
- return new Key(keyPrefix + name)
103
- }
104
-
105
- /**
106
- * Converts a key name into a datastore info name.
107
- *
108
- * @param {string} name
109
- * @returns {Key}
110
- * @private
111
- */
112
- function DsInfoName (name) {
113
- return new Key(infoPrefix + name)
114
- }
115
-
116
- /**
117
- * Manages the lifecycle of a key. Keys are encrypted at rest using PKCS #8.
118
- *
119
- * A key in the store has two entries
120
- * - '/info/*key-name*', contains the KeyInfo for the key
121
- * - '/pkcs8/*key-name*', contains the PKCS #8 for the key
122
- *
123
- */
124
- class Keychain {
125
- /**
126
- * Creates a new instance of a key chain.
127
- *
128
- * @param {Datastore} store - where the key are.
129
- * @param {KeychainOptions} options
130
- * @class
131
- */
132
- constructor (store, options) {
133
- if (!store) {
134
- throw new Error('store is required')
135
- }
136
- this.store = store
137
-
138
- this.opts = mergeOptions(defaultOptions, options)
139
-
140
- // Enforce NIST SP 800-132
141
- if (this.opts.pass && this.opts.pass.length < 20) {
142
- throw new Error('pass must be least 20 characters')
143
- }
144
- if (this.opts.dek.keyLength < NIST.minKeyLength) {
145
- throw new Error(`dek.keyLength must be least ${NIST.minKeyLength} bytes`)
146
- }
147
- if (this.opts.dek.salt.length < NIST.minSaltLength) {
148
- throw new Error(`dek.saltLength must be least ${NIST.minSaltLength} bytes`)
149
- }
150
- if (this.opts.dek.iterationCount < NIST.minIterationCount) {
151
- throw new Error(`dek.iterationCount must be least ${NIST.minIterationCount}`)
152
- }
153
-
154
- const dek = this.opts.pass
155
- ? crypto.pbkdf2(
156
- this.opts.pass,
157
- this.opts.dek.salt,
158
- this.opts.dek.iterationCount,
159
- this.opts.dek.keyLength,
160
- this.opts.dek.hash)
161
- : ''
162
-
163
- privates.set(this, { dek })
164
- }
165
-
166
- /**
167
- * Gets an object that can encrypt/decrypt protected data
168
- * using the Cryptographic Message Syntax (CMS).
169
- *
170
- * CMS describes an encapsulation syntax for data protection. It
171
- * is used to digitally sign, digest, authenticate, or encrypt
172
- * arbitrary message content.
173
- *
174
- * @returns {CMS}
175
- */
176
- get cms () {
177
- return new CMS(this, privates.get(this).dek)
178
- }
179
-
180
- /**
181
- * Generates the options for a keychain. A random salt is produced.
182
- *
183
- * @returns {Object}
184
- */
185
- static generateOptions () {
186
- const options = Object.assign({}, defaultOptions)
187
- const saltLength = Math.ceil(NIST.minSaltLength / 3) * 3 // no base64 padding
188
- options.dek.salt = uint8ArrayToString(crypto.randomBytes(saltLength), 'base64')
189
- return options
190
- }
191
-
192
- /**
193
- * Gets an object that can encrypt/decrypt protected data.
194
- * The default options for a keychain.
195
- *
196
- * @returns {Object}
197
- */
198
- static get options () {
199
- return defaultOptions
200
- }
201
-
202
- /**
203
- * Create a new key.
204
- *
205
- * @param {string} name - The local key name; cannot already exist.
206
- * @param {string} type - One of the key types; 'rsa'.
207
- * @param {number} [size = 2048] - The key size in bits. Used for rsa keys only.
208
- * @returns {Promise<KeyInfo>}
209
- */
210
- async createKey (name, type, size = 2048) {
211
- const self = this
212
-
213
- if (!validateKeyName(name) || name === 'self') {
214
- return throwDelayed(errcode(new Error(`Invalid key name '${name}'`), codes.ERR_INVALID_KEY_NAME))
215
- }
216
-
217
- if (typeof type !== 'string') {
218
- return throwDelayed(errcode(new Error(`Invalid key type '${type}'`), codes.ERR_INVALID_KEY_TYPE))
219
- }
220
-
221
- const dsname = DsName(name)
222
- const exists = await self.store.has(dsname)
223
- if (exists) return throwDelayed(errcode(new Error(`Key '${name}' already exists`), codes.ERR_KEY_ALREADY_EXISTS))
224
-
225
- switch (type.toLowerCase()) {
226
- case 'rsa':
227
- if (!Number.isSafeInteger(size) || size < 2048) {
228
- return throwDelayed(errcode(new Error(`Invalid RSA key size ${size}`), codes.ERR_INVALID_KEY_SIZE))
229
- }
230
- break
231
- default:
232
- break
233
- }
234
-
235
- let keyInfo
236
- try {
237
- // @ts-ignore Differences between several crypto return types need to be fixed in libp2p-crypto
238
- const keypair = await crypto.keys.generateKeyPair(type, size)
239
- const kid = await keypair.id()
240
- /** @type {string} */
241
- const dek = privates.get(this).dek
242
- const pem = await keypair.export(dek)
243
- keyInfo = {
244
- name: name,
245
- id: kid
246
- }
247
- const batch = self.store.batch()
248
- batch.put(dsname, uint8ArrayFromString(pem))
249
- batch.put(DsInfoName(name), uint8ArrayFromString(JSON.stringify(keyInfo)))
250
-
251
- await batch.commit()
252
- } catch (/** @type {any} */ err) {
253
- return throwDelayed(err)
254
- }
255
-
256
- return keyInfo
257
- }
258
-
259
- /**
260
- * List all the keys.
261
- *
262
- * @returns {Promise<KeyInfo[]>}
263
- */
264
- async listKeys () {
265
- const self = this
266
- const query = {
267
- prefix: infoPrefix
268
- }
269
-
270
- const info = []
271
- for await (const value of self.store.query(query)) {
272
- info.push(JSON.parse(uint8ArrayToString(value.value)))
273
- }
274
-
275
- return info
276
- }
277
-
278
- /**
279
- * Find a key by it's id.
280
- *
281
- * @param {string} id - The universally unique key identifier.
282
- * @returns {Promise<KeyInfo|undefined>}
283
- */
284
- async findKeyById (id) {
285
- try {
286
- const keys = await this.listKeys()
287
- return keys.find((k) => k.id === id)
288
- } catch (/** @type {any} */ err) {
289
- return throwDelayed(err)
290
- }
291
- }
292
-
293
- /**
294
- * Find a key by it's name.
295
- *
296
- * @param {string} name - The local key name.
297
- * @returns {Promise<KeyInfo>}
298
- */
299
- async findKeyByName (name) {
300
- if (!validateKeyName(name)) {
301
- return throwDelayed(errcode(new Error(`Invalid key name '${name}'`), codes.ERR_INVALID_KEY_NAME))
302
- }
303
-
304
- const dsname = DsInfoName(name)
305
- try {
306
- const res = await this.store.get(dsname)
307
- return JSON.parse(uint8ArrayToString(res))
308
- } catch (/** @type {any} */ err) {
309
- return throwDelayed(errcode(new Error(`Key '${name}' does not exist. ${err.message}`), codes.ERR_KEY_NOT_FOUND))
310
- }
311
- }
312
-
313
- /**
314
- * Remove an existing key.
315
- *
316
- * @param {string} name - The local key name; must already exist.
317
- * @returns {Promise<KeyInfo>}
318
- */
319
- async removeKey (name) {
320
- const self = this
321
- if (!validateKeyName(name) || name === 'self') {
322
- return throwDelayed(errcode(new Error(`Invalid key name '${name}'`), codes.ERR_INVALID_KEY_NAME))
323
- }
324
- const dsname = DsName(name)
325
- const keyInfo = await self.findKeyByName(name)
326
- const batch = self.store.batch()
327
- batch.delete(dsname)
328
- batch.delete(DsInfoName(name))
329
- await batch.commit()
330
- return keyInfo
331
- }
332
-
333
- /**
334
- * Rename a key
335
- *
336
- * @param {string} oldName - The old local key name; must already exist.
337
- * @param {string} newName - The new local key name; must not already exist.
338
- * @returns {Promise<KeyInfo>}
339
- */
340
- async renameKey (oldName, newName) {
341
- const self = this
342
- if (!validateKeyName(oldName) || oldName === 'self') {
343
- return throwDelayed(errcode(new Error(`Invalid old key name '${oldName}'`), codes.ERR_OLD_KEY_NAME_INVALID))
344
- }
345
- if (!validateKeyName(newName) || newName === 'self') {
346
- return throwDelayed(errcode(new Error(`Invalid new key name '${newName}'`), codes.ERR_NEW_KEY_NAME_INVALID))
347
- }
348
- const oldDsname = DsName(oldName)
349
- const newDsname = DsName(newName)
350
- const oldInfoName = DsInfoName(oldName)
351
- const newInfoName = DsInfoName(newName)
352
-
353
- const exists = await self.store.has(newDsname)
354
- if (exists) return throwDelayed(errcode(new Error(`Key '${newName}' already exists`), codes.ERR_KEY_ALREADY_EXISTS))
355
-
356
- try {
357
- const pem = await self.store.get(oldDsname)
358
- const res = await self.store.get(oldInfoName)
359
-
360
- const keyInfo = JSON.parse(uint8ArrayToString(res))
361
- keyInfo.name = newName
362
- const batch = self.store.batch()
363
- batch.put(newDsname, pem)
364
- batch.put(newInfoName, uint8ArrayFromString(JSON.stringify(keyInfo)))
365
- batch.delete(oldDsname)
366
- batch.delete(oldInfoName)
367
- await batch.commit()
368
- return keyInfo
369
- } catch (/** @type {any} */ err) {
370
- return throwDelayed(err)
371
- }
372
- }
373
-
374
- /**
375
- * Export an existing key as a PEM encrypted PKCS #8 string
376
- *
377
- * @param {string} name - The local key name; must already exist.
378
- * @param {string} password - The password
379
- * @returns {Promise<string>}
380
- */
381
- async exportKey (name, password) {
382
- if (!validateKeyName(name)) {
383
- return throwDelayed(errcode(new Error(`Invalid key name '${name}'`), codes.ERR_INVALID_KEY_NAME))
384
- }
385
- if (!password) {
386
- return throwDelayed(errcode(new Error('Password is required'), codes.ERR_PASSWORD_REQUIRED))
387
- }
388
-
389
- const dsname = DsName(name)
390
- try {
391
- const res = await this.store.get(dsname)
392
- const pem = uint8ArrayToString(res)
393
- /** @type {string} */
394
- const dek = privates.get(this).dek
395
- const privateKey = await crypto.keys.import(pem, dek)
396
- return privateKey.export(password)
397
- } catch (/** @type {any} */ err) {
398
- return throwDelayed(err)
399
- }
400
- }
401
-
402
- /**
403
- * Import a new key from a PEM encoded PKCS #8 string
404
- *
405
- * @param {string} name - The local key name; must not already exist.
406
- * @param {string} pem - The PEM encoded PKCS #8 string
407
- * @param {string} password - The password.
408
- * @returns {Promise<KeyInfo>}
409
- */
410
- async importKey (name, pem, password) {
411
- const self = this
412
- if (!validateKeyName(name) || name === 'self') {
413
- return throwDelayed(errcode(new Error(`Invalid key name '${name}'`), codes.ERR_INVALID_KEY_NAME))
414
- }
415
- if (!pem) {
416
- return throwDelayed(errcode(new Error('PEM encoded key is required'), codes.ERR_PEM_REQUIRED))
417
- }
418
- const dsname = DsName(name)
419
- const exists = await self.store.has(dsname)
420
- if (exists) return throwDelayed(errcode(new Error(`Key '${name}' already exists`), codes.ERR_KEY_ALREADY_EXISTS))
421
-
422
- let privateKey
423
- try {
424
- privateKey = await crypto.keys.import(pem, password)
425
- } catch (/** @type {any} */ err) {
426
- return throwDelayed(errcode(new Error('Cannot read the key, most likely the password is wrong'), codes.ERR_CANNOT_READ_KEY))
427
- }
428
-
429
- let kid
430
- try {
431
- kid = await privateKey.id()
432
- /** @type {string} */
433
- const dek = privates.get(this).dek
434
- pem = await privateKey.export(dek)
435
- } catch (/** @type {any} */ err) {
436
- return throwDelayed(err)
437
- }
438
-
439
- const keyInfo = {
440
- name: name,
441
- id: kid
442
- }
443
- const batch = self.store.batch()
444
- batch.put(dsname, uint8ArrayFromString(pem))
445
- batch.put(DsInfoName(name), uint8ArrayFromString(JSON.stringify(keyInfo)))
446
- await batch.commit()
447
-
448
- return keyInfo
449
- }
450
-
451
- /**
452
- * Import a peer key
453
- *
454
- * @param {string} name - The local key name; must not already exist.
455
- * @param {PeerId} peer - The PEM encoded PKCS #8 string
456
- * @returns {Promise<KeyInfo>}
457
- */
458
- async importPeer (name, peer) {
459
- const self = this
460
- if (!validateKeyName(name)) {
461
- return throwDelayed(errcode(new Error(`Invalid key name '${name}'`), codes.ERR_INVALID_KEY_NAME))
462
- }
463
- if (!peer || !peer.privKey) {
464
- return throwDelayed(errcode(new Error('Peer.privKey is required'), codes.ERR_MISSING_PRIVATE_KEY))
465
- }
466
-
467
- const privateKey = peer.privKey
468
- const dsname = DsName(name)
469
- const exists = await self.store.has(dsname)
470
- if (exists) return throwDelayed(errcode(new Error(`Key '${name}' already exists`), codes.ERR_KEY_ALREADY_EXISTS))
471
-
472
- try {
473
- const kid = await privateKey.id()
474
- /** @type {string} */
475
- const dek = privates.get(this).dek
476
- const pem = await privateKey.export(dek)
477
- const keyInfo = {
478
- name: name,
479
- id: kid
480
- }
481
- const batch = self.store.batch()
482
- batch.put(dsname, uint8ArrayFromString(pem))
483
- batch.put(DsInfoName(name), uint8ArrayFromString(JSON.stringify(keyInfo)))
484
- await batch.commit()
485
- return keyInfo
486
- } catch (/** @type {any} */ err) {
487
- return throwDelayed(err)
488
- }
489
- }
490
-
491
- /**
492
- * Gets the private key as PEM encoded PKCS #8 string.
493
- *
494
- * @param {string} name
495
- * @returns {Promise<string>}
496
- */
497
- async _getPrivateKey (name) {
498
- if (!validateKeyName(name)) {
499
- return throwDelayed(errcode(new Error(`Invalid key name '${name}'`), codes.ERR_INVALID_KEY_NAME))
500
- }
501
-
502
- try {
503
- const dsname = DsName(name)
504
- const res = await this.store.get(dsname)
505
- return uint8ArrayToString(res)
506
- } catch (/** @type {any} */ err) {
507
- return throwDelayed(errcode(new Error(`Key '${name}' does not exist. ${err.message}`), codes.ERR_KEY_NOT_FOUND))
508
- }
509
- }
510
-
511
- /**
512
- * Rotate keychain password and re-encrypt all assosciated keys
513
- *
514
- * @param {string} oldPass - The old local keychain password
515
- * @param {string} newPass - The new local keychain password
516
- */
517
- async rotateKeychainPass (oldPass, newPass) {
518
- if (typeof oldPass !== 'string') {
519
- return throwDelayed(errcode(new Error(`Invalid old pass type '${typeof oldPass}'`), codes.ERR_INVALID_OLD_PASS_TYPE))
520
- }
521
- if (typeof newPass !== 'string') {
522
- return throwDelayed(errcode(new Error(`Invalid new pass type '${typeof newPass}'`), codes.ERR_INVALID_NEW_PASS_TYPE))
523
- }
524
- if (newPass.length < 20) {
525
- return throwDelayed(errcode(new Error(`Invalid pass length ${newPass.length}`), codes.ERR_INVALID_PASS_LENGTH))
526
- }
527
- log('recreating keychain')
528
- const oldDek = privates.get(this).dek
529
- this.opts.pass = newPass
530
- const newDek = newPass
531
- ? crypto.pbkdf2(
532
- newPass,
533
- this.opts.dek.salt,
534
- this.opts.dek.iterationCount,
535
- this.opts.dek.keyLength,
536
- this.opts.dek.hash)
537
- : ''
538
- privates.set(this, { dek: newDek })
539
- const keys = await this.listKeys()
540
- for (const key of keys) {
541
- const res = await this.store.get(DsName(key.name))
542
- const pem = uint8ArrayToString(res)
543
- const privateKey = await crypto.keys.import(pem, oldDek)
544
- const password = newDek.toString()
545
- const keyAsPEM = await privateKey.export(password)
546
-
547
- // Update stored key
548
- const batch = this.store.batch()
549
- const keyInfo = {
550
- name: key.name,
551
- id: key.id
552
- }
553
- batch.put(DsName(key.name), uint8ArrayFromString(keyAsPEM))
554
- batch.put(DsInfoName(key.name), uint8ArrayFromString(JSON.stringify(keyInfo)))
555
- await batch.commit()
556
- }
557
- log('keychain reconstructed')
558
- }
559
- }
560
-
561
- module.exports = Keychain