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