libp2p 0.36.0 → 0.36.2-1473044

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