@archipelagolab/lobi 1.0.5 → 1.0.6
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.
- package/dist/APEv2Parser-FYYGMFPI.js +15 -0
- package/dist/APEv2Parser-FYYGMFPI.js.map +7 -0
- package/dist/AiffParser-JHSDQA7T.js +194 -0
- package/dist/AiffParser-JHSDQA7T.js.map +7 -0
- package/dist/AsfParser-TPCQDEJB.js +620 -0
- package/dist/AsfParser-TPCQDEJB.js.map +7 -0
- package/dist/DsdiffParser-CGD3C3TL.js +192 -0
- package/dist/DsdiffParser-CGD3C3TL.js.map +7 -0
- package/dist/DsfParser-3UTIJVNF.js +114 -0
- package/dist/DsfParser-3UTIJVNF.js.map +7 -0
- package/dist/FlacParser-HLLYPJ76.js +16 -0
- package/dist/FlacParser-HLLYPJ76.js.map +7 -0
- package/dist/MP4Parser-SM7HYL3Z.js +1145 -0
- package/dist/MP4Parser-SM7HYL3Z.js.map +7 -0
- package/dist/MatroskaParser-X7WRZ6D4.js +662 -0
- package/dist/MatroskaParser-X7WRZ6D4.js.map +7 -0
- package/dist/MpegParser-KXQEC6KD.js +652 -0
- package/dist/MpegParser-KXQEC6KD.js.map +7 -0
- package/dist/MusepackParser-NURI46TG.js +331 -0
- package/dist/MusepackParser-NURI46TG.js.map +7 -0
- package/dist/OggParser-5IYVBXPS.js +448 -0
- package/dist/OggParser-5IYVBXPS.js.map +7 -0
- package/dist/WavPackParser-RTEHKSJH.js +209 -0
- package/dist/WavPackParser-RTEHKSJH.js.map +7 -0
- package/dist/WaveParser-3R2NLXGP.js +300 -0
- package/dist/WaveParser-3R2NLXGP.js.map +7 -0
- package/dist/auth-presence.js +2 -2
- package/dist/channel-plugin-api.js +68 -68
- package/dist/chunk-2GFROLI2.js +261 -0
- package/dist/chunk-2GFROLI2.js.map +7 -0
- package/dist/chunk-2IQWKATM.js +127 -0
- package/dist/chunk-2IQWKATM.js.map +7 -0
- package/dist/chunk-2V6Y4CAN.js +25 -0
- package/dist/chunk-2V6Y4CAN.js.map +7 -0
- package/dist/chunk-2WHRUMOM.js +321 -0
- package/dist/chunk-2WHRUMOM.js.map +7 -0
- package/dist/chunk-3GIK7SAA.js +109 -0
- package/dist/chunk-3GIK7SAA.js.map +7 -0
- package/dist/chunk-3OXOEMBS.js +123 -0
- package/dist/chunk-3OXOEMBS.js.map +7 -0
- package/dist/chunk-3R4ATE4Q.js +176 -0
- package/dist/chunk-3R4ATE4Q.js.map +7 -0
- package/dist/chunk-4CFQNJ7F.js +7 -0
- package/dist/chunk-4CFQNJ7F.js.map +7 -0
- package/dist/chunk-4COI4L2Y.js +31 -0
- package/dist/chunk-4COI4L2Y.js.map +7 -0
- package/dist/chunk-4EKKDVG3.js +1662 -0
- package/dist/chunk-4EKKDVG3.js.map +7 -0
- package/dist/chunk-4L2QI6AY.js +71 -0
- package/dist/chunk-4L2QI6AY.js.map +7 -0
- package/dist/chunk-4OXPPDV6.js +676 -0
- package/dist/chunk-4OXPPDV6.js.map +7 -0
- package/dist/chunk-4QTZHELX.js +51 -0
- package/dist/chunk-4QTZHELX.js.map +7 -0
- package/dist/chunk-4U42OJMK.js +217 -0
- package/dist/chunk-4U42OJMK.js.map +7 -0
- package/dist/chunk-4WCKVGQ5.js +193 -0
- package/dist/chunk-4WCKVGQ5.js.map +7 -0
- package/dist/chunk-4XXERLFH.js +95 -0
- package/dist/chunk-4XXERLFH.js.map +7 -0
- package/dist/chunk-4ZY2BOQ4.js +123 -0
- package/dist/chunk-4ZY2BOQ4.js.map +7 -0
- package/dist/chunk-57ROEOHB.js +183 -0
- package/dist/chunk-57ROEOHB.js.map +7 -0
- package/dist/chunk-5BQ6LLNU.js +39 -0
- package/dist/chunk-5BQ6LLNU.js.map +7 -0
- package/dist/chunk-63QTHDJL.js +52 -0
- package/dist/chunk-63QTHDJL.js.map +7 -0
- package/dist/chunk-65UUVZ6B.js +151 -0
- package/dist/chunk-65UUVZ6B.js.map +7 -0
- package/dist/chunk-6COVTMAO.js +3586 -0
- package/dist/chunk-6COVTMAO.js.map +7 -0
- package/dist/chunk-6EYPDJUD.js +34 -0
- package/dist/chunk-6EYPDJUD.js.map +7 -0
- package/dist/chunk-6HDYPVA4.js +15 -0
- package/dist/chunk-6HDYPVA4.js.map +7 -0
- package/dist/chunk-6OP3FK5F.js +266 -0
- package/dist/chunk-6OP3FK5F.js.map +7 -0
- package/dist/chunk-6RBDFNSX.js +88 -0
- package/dist/chunk-6RBDFNSX.js.map +7 -0
- package/dist/chunk-6TWWCETB.js +70 -0
- package/dist/chunk-6TWWCETB.js.map +7 -0
- package/dist/chunk-6WFHPMUF.js +17 -0
- package/dist/chunk-6WFHPMUF.js.map +7 -0
- package/dist/chunk-77BEEAPD.js +86 -0
- package/dist/chunk-77BEEAPD.js.map +7 -0
- package/dist/chunk-77JJ6QJK.js +50 -0
- package/dist/chunk-77JJ6QJK.js.map +7 -0
- package/dist/chunk-7BIUNV33.js +62 -0
- package/dist/chunk-7BIUNV33.js.map +7 -0
- package/dist/chunk-7L37R42D.js +52 -0
- package/dist/chunk-7L37R42D.js.map +7 -0
- package/dist/chunk-7ZP3KYVO.js +104 -0
- package/dist/chunk-7ZP3KYVO.js.map +7 -0
- package/dist/chunk-ARGF232V.js +32 -0
- package/dist/chunk-ARGF232V.js.map +7 -0
- package/dist/chunk-ATCJOK3K.js +24 -0
- package/dist/chunk-ATCJOK3K.js.map +7 -0
- package/dist/chunk-AUUABFHL.js +124 -0
- package/dist/chunk-AUUABFHL.js.map +7 -0
- package/dist/chunk-B3NTODO7.js +57 -0
- package/dist/chunk-B3NTODO7.js.map +7 -0
- package/dist/chunk-BM7J2W36.js +86 -0
- package/dist/chunk-BM7J2W36.js.map +7 -0
- package/dist/chunk-CEB5S2Z5.js +127 -0
- package/dist/chunk-CEB5S2Z5.js.map +7 -0
- package/dist/chunk-CEKNTCJD.js +177 -0
- package/dist/chunk-CEKNTCJD.js.map +7 -0
- package/dist/chunk-CGFDIH77.js +94 -0
- package/dist/chunk-CGFDIH77.js.map +7 -0
- package/dist/chunk-CPLEC5LJ.js +26 -0
- package/dist/chunk-CPLEC5LJ.js.map +7 -0
- package/dist/chunk-D4GYYYMW.js +155 -0
- package/dist/chunk-D4GYYYMW.js.map +7 -0
- package/dist/chunk-D64CZG54.js +78 -0
- package/dist/chunk-D64CZG54.js.map +7 -0
- package/dist/chunk-DSGPDHF2.js +737 -0
- package/dist/chunk-DSGPDHF2.js.map +7 -0
- package/dist/chunk-EBXHW7ZO.js +108 -0
- package/dist/chunk-EBXHW7ZO.js.map +7 -0
- package/dist/chunk-EO35SCFP.js +7 -0
- package/dist/chunk-EO35SCFP.js.map +7 -0
- package/dist/chunk-ER2XTD2S.js +271 -0
- package/dist/chunk-ER2XTD2S.js.map +7 -0
- package/dist/chunk-ERXO3674.js +54 -0
- package/dist/chunk-ERXO3674.js.map +7 -0
- package/dist/chunk-F43CC2X2.js +49 -0
- package/dist/chunk-F43CC2X2.js.map +7 -0
- package/dist/chunk-F64TXVJJ.js +158 -0
- package/dist/chunk-F64TXVJJ.js.map +7 -0
- package/dist/chunk-F6APWSAA.js +51 -0
- package/dist/chunk-F6APWSAA.js.map +7 -0
- package/dist/chunk-F7LNS7G3.js +235 -0
- package/dist/chunk-F7LNS7G3.js.map +7 -0
- package/dist/chunk-FCNWR7ZX.js +16352 -0
- package/dist/chunk-FCNWR7ZX.js.map +7 -0
- package/dist/chunk-FFCG5NRU.js +87 -0
- package/dist/chunk-FFCG5NRU.js.map +7 -0
- package/dist/chunk-FJFC6CRR.js +446 -0
- package/dist/chunk-FJFC6CRR.js.map +7 -0
- package/dist/chunk-FK6RGYBB.js +46 -0
- package/dist/chunk-FK6RGYBB.js.map +7 -0
- package/dist/chunk-FMY6KXK6.js +251 -0
- package/dist/chunk-FMY6KXK6.js.map +7 -0
- package/dist/chunk-FPH56SCM.js +21 -0
- package/dist/chunk-FPH56SCM.js.map +7 -0
- package/dist/chunk-FVSH4Z6T.js +173 -0
- package/dist/chunk-FVSH4Z6T.js.map +7 -0
- package/dist/chunk-FVWBLEAD.js +44 -0
- package/dist/chunk-FVWBLEAD.js.map +7 -0
- package/dist/chunk-FYSARMGS.js +93 -0
- package/dist/chunk-FYSARMGS.js.map +7 -0
- package/dist/chunk-FZJOJ6P4.js +28 -0
- package/dist/chunk-FZJOJ6P4.js.map +7 -0
- package/dist/chunk-G46GHNDU.js +4890 -0
- package/dist/chunk-G46GHNDU.js.map +7 -0
- package/dist/chunk-G4TIS2SC.js +56 -0
- package/dist/chunk-G4TIS2SC.js.map +7 -0
- package/dist/chunk-GGWS7NQP.js +247 -0
- package/dist/chunk-GGWS7NQP.js.map +7 -0
- package/dist/chunk-GRBJYAYF.js +129 -0
- package/dist/chunk-GRBJYAYF.js.map +7 -0
- package/dist/chunk-GXDQGBA2.js +106 -0
- package/dist/chunk-GXDQGBA2.js.map +7 -0
- package/dist/chunk-H2HY73I6.js +122 -0
- package/dist/chunk-H2HY73I6.js.map +7 -0
- package/dist/chunk-H5MLA6PA.js +29 -0
- package/dist/chunk-H5MLA6PA.js.map +7 -0
- package/dist/chunk-H7KAUMBC.js +635 -0
- package/dist/chunk-H7KAUMBC.js.map +7 -0
- package/dist/chunk-HGHU3TVL.js +174 -0
- package/dist/chunk-HGHU3TVL.js.map +7 -0
- package/dist/chunk-HJ5E2JRL.js +88 -0
- package/dist/chunk-HJ5E2JRL.js.map +7 -0
- package/dist/chunk-HJW3CKZL.js +94 -0
- package/dist/chunk-HJW3CKZL.js.map +7 -0
- package/dist/chunk-HKF5EBER.js +418 -0
- package/dist/chunk-HKF5EBER.js.map +7 -0
- package/dist/chunk-HLUR35G5.js +30 -0
- package/dist/chunk-HLUR35G5.js.map +7 -0
- package/dist/chunk-HNIW2NZU.js +120 -0
- package/dist/chunk-HNIW2NZU.js.map +7 -0
- package/dist/chunk-HSXRCP25.js +171 -0
- package/dist/chunk-HSXRCP25.js.map +7 -0
- package/dist/chunk-I26OPZLO.js +28 -0
- package/dist/chunk-I26OPZLO.js.map +7 -0
- package/dist/chunk-I7JJQ4BQ.js +30 -0
- package/dist/chunk-I7JJQ4BQ.js.map +7 -0
- package/dist/chunk-IJ6Y4W7F.js +392 -0
- package/dist/chunk-IJ6Y4W7F.js.map +7 -0
- package/dist/chunk-IJH4NOQ4.js +18 -0
- package/dist/chunk-IJH4NOQ4.js.map +7 -0
- package/dist/chunk-IMHRZQRH.js +76 -0
- package/dist/chunk-IMHRZQRH.js.map +7 -0
- package/dist/chunk-JB6ZQEVR.js +465 -0
- package/dist/chunk-JB6ZQEVR.js.map +7 -0
- package/dist/chunk-JCWNMWNY.js +102 -0
- package/dist/chunk-JCWNMWNY.js.map +7 -0
- package/dist/chunk-JGIZPU2Y.js +39 -0
- package/dist/chunk-JGIZPU2Y.js.map +7 -0
- package/dist/chunk-JIU4FXA7.js +485 -0
- package/dist/chunk-JIU4FXA7.js.map +7 -0
- package/dist/chunk-JU2Y33DB.js +60 -0
- package/dist/chunk-JU2Y33DB.js.map +7 -0
- package/dist/chunk-JVLRI4RU.js +62 -0
- package/dist/chunk-JVLRI4RU.js.map +7 -0
- package/dist/chunk-JZ3AVNZC.js +44117 -0
- package/dist/chunk-JZ3AVNZC.js.map +7 -0
- package/dist/chunk-K3HEWOHN.js +30 -0
- package/dist/chunk-K3HEWOHN.js.map +7 -0
- package/dist/chunk-K5EK4WZV.js +7 -0
- package/dist/chunk-K5EK4WZV.js.map +7 -0
- package/dist/chunk-KAWXMSYC.js +58 -0
- package/dist/chunk-KAWXMSYC.js.map +7 -0
- package/dist/chunk-KEGPHS4C.js +80 -0
- package/dist/chunk-KEGPHS4C.js.map +7 -0
- package/dist/chunk-KXXVR3DC.js +244 -0
- package/dist/chunk-KXXVR3DC.js.map +7 -0
- package/dist/chunk-L5T6XUDP.js +412 -0
- package/dist/chunk-L5T6XUDP.js.map +7 -0
- package/dist/chunk-LIFXTQ4U.js +7287 -0
- package/dist/chunk-LIFXTQ4U.js.map +7 -0
- package/dist/chunk-LMD5UTKM.js +169 -0
- package/dist/chunk-LMD5UTKM.js.map +7 -0
- package/dist/chunk-LTXNC6JX.js +27 -0
- package/dist/chunk-LTXNC6JX.js.map +7 -0
- package/dist/chunk-LUGTGPT6.js +138 -0
- package/dist/chunk-LUGTGPT6.js.map +7 -0
- package/dist/chunk-LZQFDJNW.js +300 -0
- package/dist/chunk-LZQFDJNW.js.map +7 -0
- package/dist/chunk-M4VQPIF4.js +5853 -0
- package/dist/chunk-M4VQPIF4.js.map +7 -0
- package/dist/chunk-M64QE4QC.js +64 -0
- package/dist/chunk-M64QE4QC.js.map +7 -0
- package/dist/chunk-MJ2GW6SU.js +163 -0
- package/dist/chunk-MJ2GW6SU.js.map +7 -0
- package/dist/chunk-MYSK3SIM.js +55 -0
- package/dist/chunk-MYSK3SIM.js.map +7 -0
- package/dist/chunk-N46MIZXB.js +154 -0
- package/dist/chunk-N46MIZXB.js.map +7 -0
- package/dist/chunk-N53537P6.js +31 -0
- package/dist/chunk-N53537P6.js.map +7 -0
- package/dist/chunk-N5CTFOLX.js +40 -0
- package/dist/chunk-N5CTFOLX.js.map +7 -0
- package/dist/chunk-NIFG55CE.js +52 -0
- package/dist/chunk-NIFG55CE.js.map +7 -0
- package/dist/chunk-NJ63ALPX.js +7 -0
- package/dist/chunk-NJ63ALPX.js.map +7 -0
- package/dist/chunk-NZVHE4IT.js +3101 -0
- package/dist/chunk-NZVHE4IT.js.map +7 -0
- package/dist/chunk-O7ORICEC.js +82 -0
- package/dist/chunk-O7ORICEC.js.map +7 -0
- package/dist/chunk-OBMBAM3N.js +73 -0
- package/dist/chunk-OBMBAM3N.js.map +7 -0
- package/dist/chunk-OJJBD5K3.js +45 -0
- package/dist/chunk-OJJBD5K3.js.map +7 -0
- package/dist/chunk-OKDOVX4B.js +699 -0
- package/dist/chunk-OKDOVX4B.js.map +7 -0
- package/dist/chunk-OVMDMCZ5.js +241 -0
- package/dist/chunk-OVMDMCZ5.js.map +7 -0
- package/dist/chunk-OVU43GJK.js +63 -0
- package/dist/chunk-OVU43GJK.js.map +7 -0
- package/dist/chunk-P3TMARA6.js +18 -0
- package/dist/chunk-P3TMARA6.js.map +7 -0
- package/dist/chunk-PLMOTQ42.js +335 -0
- package/dist/chunk-PLMOTQ42.js.map +7 -0
- package/dist/chunk-Q6H5OV2R.js +180 -0
- package/dist/chunk-Q6H5OV2R.js.map +7 -0
- package/dist/chunk-QAR5POXD.js +472 -0
- package/dist/chunk-QAR5POXD.js.map +7 -0
- package/dist/chunk-R5S76YR5.js +12 -0
- package/dist/chunk-R5S76YR5.js.map +7 -0
- package/dist/chunk-R7ZBOXPS.js +163 -0
- package/dist/chunk-R7ZBOXPS.js.map +7 -0
- package/dist/chunk-RAL3KX76.js +239 -0
- package/dist/chunk-RAL3KX76.js.map +7 -0
- package/dist/chunk-RHITG64O.js +50 -0
- package/dist/chunk-RHITG64O.js.map +7 -0
- package/dist/chunk-RK5HZFP6.js +111 -0
- package/dist/chunk-RK5HZFP6.js.map +7 -0
- package/dist/chunk-RQ26XXFS.js +45 -0
- package/dist/chunk-RQ26XXFS.js.map +7 -0
- package/dist/chunk-RSA7PKZH.js +187 -0
- package/dist/chunk-RSA7PKZH.js.map +7 -0
- package/dist/chunk-RTSINQ4T.js +78 -0
- package/dist/chunk-RTSINQ4T.js.map +7 -0
- package/dist/chunk-SH6Y4CGQ.js +175 -0
- package/dist/chunk-SH6Y4CGQ.js.map +7 -0
- package/dist/chunk-SHBAAFFH.js +74 -0
- package/dist/chunk-SHBAAFFH.js.map +7 -0
- package/dist/chunk-SPNSM6SB.js +36 -0
- package/dist/chunk-SPNSM6SB.js.map +7 -0
- package/dist/chunk-SQUHLLK5.js +125 -0
- package/dist/chunk-SQUHLLK5.js.map +7 -0
- package/dist/chunk-SWWK35VQ.js +84 -0
- package/dist/chunk-SWWK35VQ.js.map +7 -0
- package/dist/chunk-TC5ZVFV6.js +292 -0
- package/dist/chunk-TC5ZVFV6.js.map +7 -0
- package/dist/chunk-TFD7ZIYD.js +105 -0
- package/dist/chunk-TFD7ZIYD.js.map +7 -0
- package/dist/chunk-TH6ONRWT.js +516 -0
- package/dist/chunk-TH6ONRWT.js.map +7 -0
- package/dist/chunk-TMQMQ67T.js +81 -0
- package/dist/chunk-TMQMQ67T.js.map +7 -0
- package/dist/chunk-TPYWUZOR.js +178 -0
- package/dist/chunk-TPYWUZOR.js.map +7 -0
- package/dist/chunk-U2O4LE6S.js +22 -0
- package/dist/chunk-U2O4LE6S.js.map +7 -0
- package/dist/chunk-U44IVNP2.js +91 -0
- package/dist/chunk-U44IVNP2.js.map +7 -0
- package/dist/chunk-UDDWLWKZ.js +82 -0
- package/dist/chunk-UDDWLWKZ.js.map +7 -0
- package/dist/chunk-UMMPB6FL.js +506 -0
- package/dist/chunk-UMMPB6FL.js.map +7 -0
- package/dist/chunk-UP42ACP7.js +27 -0
- package/dist/chunk-UP42ACP7.js.map +7 -0
- package/dist/chunk-UPEF7ETP.js +92 -0
- package/dist/chunk-UPEF7ETP.js.map +7 -0
- package/dist/chunk-VBDLTKI2.js +130 -0
- package/dist/chunk-VBDLTKI2.js.map +7 -0
- package/dist/chunk-VCWIKEJ7.js +7 -0
- package/dist/chunk-VCWIKEJ7.js.map +7 -0
- package/dist/chunk-VPQICZQR.js +93 -0
- package/dist/chunk-VPQICZQR.js.map +7 -0
- package/dist/chunk-VRBJNFPL.js +114 -0
- package/dist/chunk-VRBJNFPL.js.map +7 -0
- package/dist/chunk-VUU5KFH3.js +38 -0
- package/dist/chunk-VUU5KFH3.js.map +7 -0
- package/dist/chunk-VVBL5CFF.js +7 -0
- package/dist/chunk-VVBL5CFF.js.map +7 -0
- package/dist/chunk-VYZEQ6KY.js +22 -0
- package/dist/chunk-VYZEQ6KY.js.map +7 -0
- package/dist/chunk-WBPQVWSU.js +198 -0
- package/dist/chunk-WBPQVWSU.js.map +7 -0
- package/dist/chunk-WS6HWBKT.js +30 -0
- package/dist/chunk-WS6HWBKT.js.map +7 -0
- package/dist/chunk-XOZPOHLG.js +233 -0
- package/dist/chunk-XOZPOHLG.js.map +7 -0
- package/dist/chunk-XR7DPSNX.js +195 -0
- package/dist/chunk-XR7DPSNX.js.map +7 -0
- package/dist/chunk-XYH4JC3U.js +7 -0
- package/dist/chunk-XYH4JC3U.js.map +7 -0
- package/dist/chunk-YB5UCHLN.js +314 -0
- package/dist/chunk-YB5UCHLN.js.map +7 -0
- package/dist/chunk-YF5DYD3X.js +97 -0
- package/dist/chunk-YF5DYD3X.js.map +7 -0
- package/dist/chunk-YGVQZCE7.js +30 -0
- package/dist/chunk-YGVQZCE7.js.map +7 -0
- package/dist/chunk-YNHADHHS.js +138 -0
- package/dist/chunk-YNHADHHS.js.map +7 -0
- package/dist/chunk-YOAMBAM2.js +70 -0
- package/dist/chunk-YOAMBAM2.js.map +7 -0
- package/dist/chunk-YWE5AQPZ.js +258 -0
- package/dist/chunk-YWE5AQPZ.js.map +7 -0
- package/dist/chunk-YWHH3MB6.js +1405 -0
- package/dist/chunk-YWHH3MB6.js.map +7 -0
- package/dist/chunk-YZ6F5N7R.js +455 -0
- package/dist/chunk-YZ6F5N7R.js.map +7 -0
- package/dist/chunk-ZFGRQIB6.js +38 -0
- package/dist/chunk-ZFGRQIB6.js.map +7 -0
- package/dist/chunk-ZGAUVPAB.js +14 -0
- package/dist/chunk-ZGAUVPAB.js.map +7 -0
- package/dist/chunk-ZGCATLM5.js +18 -0
- package/dist/chunk-ZGCATLM5.js.map +7 -0
- package/dist/chunk-ZSOPE7DO.js +92 -0
- package/dist/chunk-ZSOPE7DO.js.map +7 -0
- package/dist/chunk-ZY247PXY.js +135 -0
- package/dist/chunk-ZY247PXY.js.map +7 -0
- package/dist/cli-metadata.js +3 -3
- package/dist/contract-api.js +64 -64
- package/dist/dist-DVBXHDB4.js +549 -0
- package/dist/dist-DVBXHDB4.js.map +7 -0
- package/dist/helper-api.js +6 -6
- package/dist/index.js +8 -9
- package/dist/index.js.map +1 -1
- package/dist/magic-string.es-ITIPPYGW.js +1315 -0
- package/dist/magic-string.es-ITIPPYGW.js.map +7 -0
- package/dist/package.json +1 -1
- package/dist/plugin-entry.handlers.runtime-JLRK5XTV.js +20 -0
- package/dist/plugin-entry.handlers.runtime-JLRK5XTV.js.map +7 -0
- package/dist/runtime-api.js +9 -9
- package/dist/rust-crypto-7KS7OJ3F.js +5323 -0
- package/dist/rust-crypto-7KS7OJ3F.js.map +7 -0
- package/dist/secret-contract-api.js +3 -3
- package/dist/setup-entry.js +2 -3
- package/dist/setup-entry.js.map +1 -1
- package/dist/src/account-selection.js +5 -5
- package/dist/src/actions.js +18 -18
- package/dist/src/approval-auth.js +19 -19
- package/dist/src/approval-handler.runtime.js +55 -55
- package/dist/src/approval-ids.js +3 -3
- package/dist/src/approval-native.js +22 -22
- package/dist/src/approval-reactions.js +2 -2
- package/dist/src/auth-precedence.js +2 -2
- package/dist/src/channel-account-paths.js +3 -3
- package/dist/src/channel.js +68 -68
- package/dist/src/channel.runtime.js +51 -51
- package/dist/src/cli-metadata.js +2 -2
- package/dist/src/cli.js +63 -63
- package/dist/src/config-adapter.js +18 -18
- package/dist/src/config-schema.js +2 -2
- package/dist/src/directory-live.js +27 -27
- package/dist/src/doctor-contract.js +3 -3
- package/dist/src/doctor.js +24 -24
- package/dist/src/env-vars.js +2 -2
- package/dist/src/exec-approval-resolver.js +2 -2
- package/dist/src/exec-approvals.js +20 -20
- package/dist/src/group-mentions.js +20 -20
- package/dist/src/legacy-crypto-inspector-availability.js +2 -2
- package/dist/src/legacy-crypto.js +18 -18
- package/dist/src/legacy-state.js +16 -16
- package/dist/src/matrix/account-config.js +2 -2
- package/dist/src/matrix/accounts.js +16 -16
- package/dist/src/matrix/actions/client.js +30 -30
- package/dist/src/matrix/actions/devices.js +32 -32
- package/dist/src/matrix/actions/limits.js +2 -2
- package/dist/src/matrix/actions/messages.js +37 -37
- package/dist/src/matrix/actions/pins.js +36 -36
- package/dist/src/matrix/actions/polls.js +31 -31
- package/dist/src/matrix/actions/profile.js +32 -32
- package/dist/src/matrix/actions/reactions.js +32 -32
- package/dist/src/matrix/actions/room.js +32 -32
- package/dist/src/matrix/actions/summary.js +9 -9
- package/dist/src/matrix/actions/types.js +3 -3
- package/dist/src/matrix/actions/verification.js +37 -37
- package/dist/src/matrix/actions.js +51 -51
- package/dist/src/matrix/active-client.js +2 -2
- package/dist/src/matrix/async-lock.js +2 -2
- package/dist/src/matrix/backup-health.js +2 -2
- package/dist/src/matrix/client/config-runtime-api.js +3 -3
- package/dist/src/matrix/client/config-secret-input.runtime.js +1 -1
- package/dist/src/matrix/client/config.js +13 -13
- package/dist/src/matrix/client/create-client.js +14 -14
- package/dist/src/matrix/client/env-auth.js +14 -14
- package/dist/src/matrix/client/file-sync-store.js +17 -17
- package/dist/src/matrix/client/logging.js +5 -5
- package/dist/src/matrix/client/migration-snapshot.runtime.js +2 -2
- package/dist/src/matrix/client/private-network-host.js +2 -2
- package/dist/src/matrix/client/runtime.js +2 -2
- package/dist/src/matrix/client/shared.js +16 -16
- package/dist/src/matrix/client/storage.js +8 -8
- package/dist/src/matrix/client/types.js +1 -1
- package/dist/src/matrix/client-bootstrap.js +5 -5
- package/dist/src/matrix/client-resolver.test-helpers.js +2 -2
- package/dist/src/matrix/client.js +19 -19
- package/dist/src/matrix/config-paths.js +2 -2
- package/dist/src/matrix/config-update.js +4 -4
- package/dist/src/matrix/credentials-read.js +8 -8
- package/dist/src/matrix/credentials-write.runtime.js +1 -1
- package/dist/src/matrix/credentials.js +10 -10
- package/dist/src/matrix/deps.js +2 -2
- package/dist/src/matrix/device-health.js +2 -2
- package/dist/src/matrix/direct-management.js +6 -6
- package/dist/src/matrix/direct-room.js +2 -2
- package/dist/src/matrix/draft-stream.js +27 -27
- package/dist/src/matrix/encryption-guidance.js +7 -7
- package/dist/src/matrix/errors.js +2 -2
- package/dist/src/matrix/format.js +3 -3
- package/dist/src/matrix/legacy-crypto-inspector.js +3 -4
- package/dist/src/matrix/legacy-crypto-inspector.js.map +1 -1
- package/dist/src/matrix/media-errors.js +2 -2
- package/dist/src/matrix/media-text.js +2 -2
- package/dist/src/matrix/monitor/access-state.js +3 -3
- package/dist/src/matrix/monitor/ack-config.js +4 -4
- package/dist/src/matrix/monitor/allowlist.js +2 -2
- package/dist/src/matrix/monitor/auto-join.js +3 -3
- package/dist/src/matrix/monitor/config.js +31 -31
- package/dist/src/matrix/monitor/context-summary.js +5 -5
- package/dist/src/matrix/monitor/direct.js +7 -7
- package/dist/src/matrix/monitor/events.js +14 -14
- package/dist/src/matrix/monitor/handler.js +70 -70
- package/dist/src/matrix/monitor/handler.test-helpers.js +71 -71
- package/dist/src/matrix/monitor/inbound-dedupe.js +11 -11
- package/dist/src/matrix/monitor/index.js +100 -100
- package/dist/src/matrix/monitor/legacy-crypto-restore.js +8 -8
- package/dist/src/matrix/monitor/location.js +5 -5
- package/dist/src/matrix/monitor/media.js +4 -4
- package/dist/src/matrix/monitor/mentions.js +3 -3
- package/dist/src/matrix/monitor/reaction-events.js +30 -30
- package/dist/src/matrix/monitor/recent-invite.js +4 -4
- package/dist/src/matrix/monitor/replies.js +27 -27
- package/dist/src/matrix/monitor/reply-context.js +6 -6
- package/dist/src/matrix/monitor/room-history.js +2 -2
- package/dist/src/matrix/monitor/room-info.js +3 -3
- package/dist/src/matrix/monitor/rooms.js +3 -3
- package/dist/src/matrix/monitor/route.js +6 -6
- package/dist/src/matrix/monitor/runtime-api.js +2 -2
- package/dist/src/matrix/monitor/startup-verification.js +9 -9
- package/dist/src/matrix/monitor/startup.js +3 -3
- package/dist/src/matrix/monitor/status.js +4 -4
- package/dist/src/matrix/monitor/sync-lifecycle.js +3 -3
- package/dist/src/matrix/monitor/task-runner.js +2 -2
- package/dist/src/matrix/monitor/thread-context.js +6 -6
- package/dist/src/matrix/monitor/threads.js +4 -4
- package/dist/src/matrix/monitor/types.js +3 -3
- package/dist/src/matrix/monitor/verification-events.js +7 -7
- package/dist/src/matrix/monitor/verification-utils.js +2 -2
- package/dist/src/matrix/outbound-media-runtime.js +3 -3
- package/dist/src/matrix/poll-summary.js +4 -4
- package/dist/src/matrix/poll-types.js +3 -3
- package/dist/src/matrix/probe.js +3 -3
- package/dist/src/matrix/probe.runtime.js +19 -19
- package/dist/src/matrix/profile.js +2 -2
- package/dist/src/matrix/reaction-common.js +2 -2
- package/dist/src/matrix/sdk/crypto-bootstrap.js +9 -9
- package/dist/src/matrix/sdk/crypto-facade.js +2 -2
- package/dist/src/matrix/sdk/crypto-node.runtime.js +2 -3
- package/dist/src/matrix/sdk/crypto-node.runtime.js.map +1 -1
- package/dist/src/matrix/sdk/crypto-runtime.js +16 -16
- package/dist/src/matrix/sdk/decrypt-bridge.js +5 -5
- package/dist/src/matrix/sdk/event-helpers.js +2 -2
- package/dist/src/matrix/sdk/http-client.js +7 -7
- package/dist/src/matrix/sdk/idb-persistence-lock.js +2 -2
- package/dist/src/matrix/sdk/idb-persistence.js +5 -5
- package/dist/src/matrix/sdk/idb-persistence.test-helpers.js +1 -1
- package/dist/src/matrix/sdk/logger.js +3 -3
- package/dist/src/matrix/sdk/read-response-with-limit.js +2 -2
- package/dist/src/matrix/sdk/recovery-key-store.js +6 -6
- package/dist/src/matrix/sdk/transport.js +5 -5
- package/dist/src/matrix/sdk/types.js +1 -1
- package/dist/src/matrix/sdk/verification-manager.js +5 -5
- package/dist/src/matrix/sdk/verification-status.js +2 -2
- package/dist/src/matrix/sdk.js +31 -31
- package/dist/src/matrix/send/client.js +4 -4
- package/dist/src/matrix/send/formatting.js +7 -7
- package/dist/src/matrix/send/media.js +12 -12
- package/dist/src/matrix/send/targets.js +7 -7
- package/dist/src/matrix/send/types.js +3 -3
- package/dist/src/matrix/send.js +26 -26
- package/dist/src/matrix/session-store-metadata.js +3 -3
- package/dist/src/matrix/startup-abort.js +2 -2
- package/dist/src/matrix/sync-state.js +2 -2
- package/dist/src/matrix/target-ids.js +2 -2
- package/dist/src/matrix/thread-bindings-shared.js +2 -2
- package/dist/src/matrix/thread-bindings.js +34 -34
- package/dist/src/matrix-migration.runtime.js +22 -22
- package/dist/src/migration-config.js +15 -15
- package/dist/src/migration-snapshot-backup.js +2 -2
- package/dist/src/migration-snapshot.js +21 -21
- package/dist/src/onboarding.js +37 -37
- package/dist/src/onboarding.test-harness.js +2 -2
- package/dist/src/outbound.js +27 -27
- package/dist/src/plugin-entry.runtime.js +3 -3
- package/dist/src/profile-update.js +35 -35
- package/dist/src/record-shared.js +2 -2
- package/dist/src/resolve-targets.js +28 -28
- package/dist/src/resolver.js +2 -2
- package/dist/src/runtime-api.js +2 -2
- package/dist/src/runtime.js +2 -2
- package/dist/src/secret-contract.js +3 -3
- package/dist/src/session-route.js +19 -19
- package/dist/src/setup-bootstrap.js +46 -46
- package/dist/src/setup-config.js +18 -18
- package/dist/src/setup-contract.js +2 -2
- package/dist/src/setup-core.js +19 -19
- package/dist/src/setup-surface.js +38 -38
- package/dist/src/startup-maintenance.js +23 -23
- package/dist/src/storage-paths.js +2 -2
- package/dist/src/test-helpers.js +1 -1
- package/dist/src/test-mocks.js +2 -2
- package/dist/src/test-runtime.js +3 -3
- package/dist/src/tool-actions.js +62 -62
- package/dist/src/tool-actions.runtime.js +62 -62
- package/dist/src/types.js +1 -1
- package/dist/test-api.js +68 -68
- package/dist/thread-bindings-runtime.js +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
import {
|
|
2
|
+
decodeRecoveryKey
|
|
3
|
+
} from "./chunk-RSA7PKZH.js";
|
|
4
|
+
import {
|
|
5
|
+
formatMatrixErrorMessage,
|
|
6
|
+
formatMatrixErrorReason
|
|
7
|
+
} from "./chunk-H5MLA6PA.js";
|
|
8
|
+
import {
|
|
9
|
+
LogService
|
|
10
|
+
} from "./chunk-YF5DYD3X.js";
|
|
11
|
+
import {
|
|
12
|
+
init_shims
|
|
13
|
+
} from "./chunk-G4TIS2SC.js";
|
|
14
|
+
|
|
15
|
+
// src/matrix/sdk/recovery-key-store.ts
|
|
16
|
+
init_shims();
|
|
17
|
+
import fs from "node:fs";
|
|
18
|
+
import path from "node:path";
|
|
19
|
+
function isRepairableSecretStorageAccessError(err) {
|
|
20
|
+
const message = formatMatrixErrorReason(err);
|
|
21
|
+
if (!message) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
if (message.includes("getsecretstoragekey callback returned falsey")) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
if (message.includes("decrypting secret") && message.includes("bad mac")) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
var MatrixRecoveryKeyStore = class {
|
|
33
|
+
constructor(recoveryKeyPath) {
|
|
34
|
+
this.recoveryKeyPath = recoveryKeyPath;
|
|
35
|
+
this.secretStorageKeyCache = /* @__PURE__ */ new Map();
|
|
36
|
+
this.stagedRecoveryKey = null;
|
|
37
|
+
this.stagedCacheKeyIds = /* @__PURE__ */ new Set();
|
|
38
|
+
}
|
|
39
|
+
buildCryptoCallbacks() {
|
|
40
|
+
return {
|
|
41
|
+
getSecretStorageKey: async ({ keys }) => {
|
|
42
|
+
const requestedKeyIds = Object.keys(keys ?? {});
|
|
43
|
+
if (requestedKeyIds.length === 0) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
for (const keyId of requestedKeyIds) {
|
|
47
|
+
const cached = this.secretStorageKeyCache.get(keyId);
|
|
48
|
+
if (cached) {
|
|
49
|
+
return [keyId, new Uint8Array(cached.key)];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const staged = this.stagedRecoveryKey;
|
|
53
|
+
if (staged?.privateKeyBase64) {
|
|
54
|
+
const privateKey2 = new Uint8Array(Buffer.from(staged.privateKeyBase64, "base64"));
|
|
55
|
+
if (privateKey2.length > 0) {
|
|
56
|
+
const stagedKeyId = staged.keyId && requestedKeyIds.includes(staged.keyId) ? staged.keyId : requestedKeyIds[0];
|
|
57
|
+
if (stagedKeyId) {
|
|
58
|
+
this.rememberSecretStorageKey(stagedKeyId, privateKey2, staged.keyInfo);
|
|
59
|
+
this.stagedCacheKeyIds.add(stagedKeyId);
|
|
60
|
+
return [stagedKeyId, privateKey2];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const stored = this.loadStoredRecoveryKey();
|
|
65
|
+
if (!stored?.privateKeyBase64) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
const privateKey = new Uint8Array(Buffer.from(stored.privateKeyBase64, "base64"));
|
|
69
|
+
if (privateKey.length === 0) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
if (stored.keyId && requestedKeyIds.includes(stored.keyId)) {
|
|
73
|
+
this.rememberSecretStorageKey(stored.keyId, privateKey, stored.keyInfo);
|
|
74
|
+
return [stored.keyId, privateKey];
|
|
75
|
+
}
|
|
76
|
+
const firstRequestedKeyId = requestedKeyIds[0];
|
|
77
|
+
if (!firstRequestedKeyId) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
this.rememberSecretStorageKey(firstRequestedKeyId, privateKey, stored.keyInfo);
|
|
81
|
+
return [firstRequestedKeyId, privateKey];
|
|
82
|
+
},
|
|
83
|
+
cacheSecretStorageKey: (keyId, keyInfo, key) => {
|
|
84
|
+
const privateKey = new Uint8Array(key);
|
|
85
|
+
const normalizedKeyInfo = {
|
|
86
|
+
passphrase: keyInfo?.passphrase,
|
|
87
|
+
name: typeof keyInfo?.name === "string" ? keyInfo.name : void 0
|
|
88
|
+
};
|
|
89
|
+
this.rememberSecretStorageKey(keyId, privateKey, normalizedKeyInfo);
|
|
90
|
+
const stored = this.loadStoredRecoveryKey();
|
|
91
|
+
this.saveRecoveryKeyToDisk({
|
|
92
|
+
keyId,
|
|
93
|
+
keyInfo: normalizedKeyInfo,
|
|
94
|
+
privateKey,
|
|
95
|
+
encodedPrivateKey: stored?.encodedPrivateKey
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
getRecoveryKeySummary() {
|
|
101
|
+
const stored = this.loadStoredRecoveryKey();
|
|
102
|
+
if (!stored) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
encodedPrivateKey: stored.encodedPrivateKey,
|
|
107
|
+
keyId: stored.keyId,
|
|
108
|
+
createdAt: stored.createdAt
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
resolveEncodedRecoveryKeyInput(params) {
|
|
112
|
+
const encodedPrivateKey = params.encodedPrivateKey.trim();
|
|
113
|
+
if (!encodedPrivateKey) {
|
|
114
|
+
throw new Error("Matrix recovery key is required");
|
|
115
|
+
}
|
|
116
|
+
let privateKey;
|
|
117
|
+
try {
|
|
118
|
+
privateKey = decodeRecoveryKey(encodedPrivateKey);
|
|
119
|
+
} catch (err) {
|
|
120
|
+
throw new Error(`Invalid Matrix recovery key: ${formatMatrixErrorMessage(err)}`, {
|
|
121
|
+
cause: err
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
const keyId = typeof params.keyId === "string" && params.keyId.trim() ? params.keyId.trim() : null;
|
|
125
|
+
return {
|
|
126
|
+
encodedPrivateKey,
|
|
127
|
+
privateKey,
|
|
128
|
+
keyId,
|
|
129
|
+
keyInfo: params.keyInfo ?? this.loadStoredRecoveryKey()?.keyInfo
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
storeEncodedRecoveryKey(params) {
|
|
133
|
+
const prepared = this.resolveEncodedRecoveryKeyInput(params);
|
|
134
|
+
this.saveRecoveryKeyToDisk({
|
|
135
|
+
keyId: prepared.keyId,
|
|
136
|
+
keyInfo: prepared.keyInfo,
|
|
137
|
+
privateKey: prepared.privateKey,
|
|
138
|
+
encodedPrivateKey: prepared.encodedPrivateKey
|
|
139
|
+
});
|
|
140
|
+
if (prepared.keyId) {
|
|
141
|
+
this.rememberSecretStorageKey(prepared.keyId, prepared.privateKey, prepared.keyInfo);
|
|
142
|
+
}
|
|
143
|
+
return this.getRecoveryKeySummary() ?? {};
|
|
144
|
+
}
|
|
145
|
+
stageEncodedRecoveryKey(params) {
|
|
146
|
+
const prepared = this.resolveEncodedRecoveryKeyInput(params);
|
|
147
|
+
this.discardStagedRecoveryKey();
|
|
148
|
+
this.stagedRecoveryKey = {
|
|
149
|
+
version: 1,
|
|
150
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
151
|
+
keyId: prepared.keyId,
|
|
152
|
+
encodedPrivateKey: prepared.encodedPrivateKey,
|
|
153
|
+
privateKeyBase64: Buffer.from(prepared.privateKey).toString("base64"),
|
|
154
|
+
keyInfo: prepared.keyInfo
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
commitStagedRecoveryKey(params) {
|
|
158
|
+
if (!this.stagedRecoveryKey) {
|
|
159
|
+
return this.getRecoveryKeySummary();
|
|
160
|
+
}
|
|
161
|
+
const staged = this.stagedRecoveryKey;
|
|
162
|
+
const privateKey = new Uint8Array(Buffer.from(staged.privateKeyBase64, "base64"));
|
|
163
|
+
const keyId = typeof params?.keyId === "string" && params.keyId.trim() ? params.keyId.trim() : staged.keyId;
|
|
164
|
+
this.saveRecoveryKeyToDisk({
|
|
165
|
+
keyId,
|
|
166
|
+
keyInfo: params?.keyInfo ?? staged.keyInfo,
|
|
167
|
+
privateKey,
|
|
168
|
+
encodedPrivateKey: staged.encodedPrivateKey
|
|
169
|
+
});
|
|
170
|
+
this.clearStagedRecoveryKeyTracking();
|
|
171
|
+
return this.getRecoveryKeySummary();
|
|
172
|
+
}
|
|
173
|
+
discardStagedRecoveryKey() {
|
|
174
|
+
for (const keyId of this.stagedCacheKeyIds) {
|
|
175
|
+
this.secretStorageKeyCache.delete(keyId);
|
|
176
|
+
}
|
|
177
|
+
this.clearStagedRecoveryKeyTracking();
|
|
178
|
+
}
|
|
179
|
+
async bootstrapSecretStorageWithRecoveryKey(crypto, options = {}) {
|
|
180
|
+
let status = null;
|
|
181
|
+
const getSecretStorageStatus = crypto.getSecretStorageStatus;
|
|
182
|
+
if (typeof getSecretStorageStatus === "function") {
|
|
183
|
+
try {
|
|
184
|
+
status = await getSecretStorageStatus.call(crypto);
|
|
185
|
+
} catch (err) {
|
|
186
|
+
LogService.warn("MatrixClientLite", "Failed to read secret storage status:", err);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
const hasDefaultSecretStorageKey = Boolean(status?.defaultKeyId);
|
|
190
|
+
const hasKnownInvalidSecrets = Object.values(status?.secretStorageKeyValidityMap ?? {}).some(
|
|
191
|
+
(valid) => !valid
|
|
192
|
+
);
|
|
193
|
+
let generatedRecoveryKey = false;
|
|
194
|
+
const storedRecovery = this.loadStoredRecoveryKey();
|
|
195
|
+
const stagedRecovery = this.stagedRecoveryKey;
|
|
196
|
+
const sourceRecovery = stagedRecovery ?? storedRecovery;
|
|
197
|
+
let recoveryKey = sourceRecovery ? {
|
|
198
|
+
keyInfo: sourceRecovery.keyInfo,
|
|
199
|
+
privateKey: new Uint8Array(Buffer.from(sourceRecovery.privateKeyBase64, "base64")),
|
|
200
|
+
encodedPrivateKey: sourceRecovery.encodedPrivateKey
|
|
201
|
+
} : null;
|
|
202
|
+
if (recoveryKey && status?.defaultKeyId) {
|
|
203
|
+
const defaultKeyId = status.defaultKeyId;
|
|
204
|
+
this.rememberSecretStorageKey(defaultKeyId, recoveryKey.privateKey, recoveryKey.keyInfo);
|
|
205
|
+
if (!stagedRecovery && storedRecovery && storedRecovery.keyId !== defaultKeyId) {
|
|
206
|
+
this.saveRecoveryKeyToDisk({
|
|
207
|
+
keyId: defaultKeyId,
|
|
208
|
+
keyInfo: recoveryKey.keyInfo,
|
|
209
|
+
privateKey: recoveryKey.privateKey,
|
|
210
|
+
encodedPrivateKey: recoveryKey.encodedPrivateKey
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
const ensureRecoveryKey = async () => {
|
|
215
|
+
if (recoveryKey) {
|
|
216
|
+
return recoveryKey;
|
|
217
|
+
}
|
|
218
|
+
if (typeof crypto.createRecoveryKeyFromPassphrase !== "function") {
|
|
219
|
+
throw new Error(
|
|
220
|
+
"Matrix crypto backend does not support recovery key generation (createRecoveryKeyFromPassphrase missing)"
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
recoveryKey = await crypto.createRecoveryKeyFromPassphrase();
|
|
224
|
+
this.saveRecoveryKeyToDisk(recoveryKey);
|
|
225
|
+
generatedRecoveryKey = true;
|
|
226
|
+
return recoveryKey;
|
|
227
|
+
};
|
|
228
|
+
const shouldRecreateSecretStorage = options.forceNewSecretStorage === true || !hasDefaultSecretStorageKey || !recoveryKey && status?.ready === false || hasKnownInvalidSecrets;
|
|
229
|
+
if (hasKnownInvalidSecrets) {
|
|
230
|
+
recoveryKey = null;
|
|
231
|
+
}
|
|
232
|
+
const secretStorageOptions = {
|
|
233
|
+
setupNewKeyBackup: options.setupNewKeyBackup === true
|
|
234
|
+
};
|
|
235
|
+
if (shouldRecreateSecretStorage) {
|
|
236
|
+
secretStorageOptions.setupNewSecretStorage = true;
|
|
237
|
+
secretStorageOptions.createSecretStorageKey = ensureRecoveryKey;
|
|
238
|
+
}
|
|
239
|
+
try {
|
|
240
|
+
await crypto.bootstrapSecretStorage(secretStorageOptions);
|
|
241
|
+
} catch (err) {
|
|
242
|
+
const shouldRecreateWithoutRecoveryKey = options.allowSecretStorageRecreateWithoutRecoveryKey === true && hasDefaultSecretStorageKey && isRepairableSecretStorageAccessError(err);
|
|
243
|
+
if (!shouldRecreateWithoutRecoveryKey) {
|
|
244
|
+
throw err;
|
|
245
|
+
}
|
|
246
|
+
recoveryKey = null;
|
|
247
|
+
LogService.warn(
|
|
248
|
+
"MatrixClientLite",
|
|
249
|
+
"Secret storage exists on the server but local recovery material cannot unlock it; recreating secret storage during explicit bootstrap."
|
|
250
|
+
);
|
|
251
|
+
await crypto.bootstrapSecretStorage({
|
|
252
|
+
setupNewSecretStorage: true,
|
|
253
|
+
setupNewKeyBackup: options.setupNewKeyBackup === true,
|
|
254
|
+
createSecretStorageKey: ensureRecoveryKey
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
if (generatedRecoveryKey && this.recoveryKeyPath) {
|
|
258
|
+
LogService.warn(
|
|
259
|
+
"MatrixClientLite",
|
|
260
|
+
`Generated Matrix recovery key and saved it to ${this.recoveryKeyPath}. Keep this file secure.`
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
clearStagedRecoveryKeyTracking() {
|
|
265
|
+
this.stagedRecoveryKey = null;
|
|
266
|
+
this.stagedCacheKeyIds.clear();
|
|
267
|
+
}
|
|
268
|
+
rememberSecretStorageKey(keyId, key, keyInfo) {
|
|
269
|
+
if (!keyId.trim()) {
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
this.secretStorageKeyCache.set(keyId, {
|
|
273
|
+
key: new Uint8Array(key),
|
|
274
|
+
keyInfo
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
loadStoredRecoveryKey() {
|
|
278
|
+
if (!this.recoveryKeyPath) {
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
try {
|
|
282
|
+
if (!fs.existsSync(this.recoveryKeyPath)) {
|
|
283
|
+
return null;
|
|
284
|
+
}
|
|
285
|
+
const raw = fs.readFileSync(this.recoveryKeyPath, "utf8");
|
|
286
|
+
const parsed = JSON.parse(raw);
|
|
287
|
+
if (parsed.version !== 1 || typeof parsed.createdAt !== "string" || typeof parsed.privateKeyBase64 !== "string" || // pragma: allowlist secret
|
|
288
|
+
!parsed.privateKeyBase64.trim()) {
|
|
289
|
+
return null;
|
|
290
|
+
}
|
|
291
|
+
return {
|
|
292
|
+
version: 1,
|
|
293
|
+
createdAt: parsed.createdAt,
|
|
294
|
+
keyId: typeof parsed.keyId === "string" ? parsed.keyId : null,
|
|
295
|
+
encodedPrivateKey: typeof parsed.encodedPrivateKey === "string" ? parsed.encodedPrivateKey : void 0,
|
|
296
|
+
privateKeyBase64: parsed.privateKeyBase64,
|
|
297
|
+
keyInfo: parsed.keyInfo && typeof parsed.keyInfo === "object" ? {
|
|
298
|
+
passphrase: parsed.keyInfo.passphrase,
|
|
299
|
+
name: typeof parsed.keyInfo.name === "string" ? parsed.keyInfo.name : void 0
|
|
300
|
+
} : void 0
|
|
301
|
+
};
|
|
302
|
+
} catch {
|
|
303
|
+
return null;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
saveRecoveryKeyToDisk(params) {
|
|
307
|
+
if (!this.recoveryKeyPath) {
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
try {
|
|
311
|
+
const payload = {
|
|
312
|
+
version: 1,
|
|
313
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
314
|
+
keyId: typeof params.keyId === "string" ? params.keyId : null,
|
|
315
|
+
encodedPrivateKey: params.encodedPrivateKey,
|
|
316
|
+
privateKeyBase64: Buffer.from(params.privateKey).toString("base64"),
|
|
317
|
+
keyInfo: params.keyInfo ? {
|
|
318
|
+
passphrase: params.keyInfo.passphrase,
|
|
319
|
+
name: params.keyInfo.name
|
|
320
|
+
} : void 0
|
|
321
|
+
};
|
|
322
|
+
fs.mkdirSync(path.dirname(this.recoveryKeyPath), { recursive: true });
|
|
323
|
+
fs.writeFileSync(this.recoveryKeyPath, JSON.stringify(payload, null, 2), "utf8");
|
|
324
|
+
fs.chmodSync(this.recoveryKeyPath, 384);
|
|
325
|
+
} catch (err) {
|
|
326
|
+
LogService.warn("MatrixClientLite", "Failed to persist recovery key:", err);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
export {
|
|
332
|
+
isRepairableSecretStorageAccessError,
|
|
333
|
+
MatrixRecoveryKeyStore
|
|
334
|
+
};
|
|
335
|
+
//# sourceMappingURL=chunk-PLMOTQ42.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/matrix/sdk/recovery-key-store.ts"],
|
|
4
|
+
"sourcesContent": ["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { decodeRecoveryKey } from \"@archipelagolab/lobi-js-sdk/lib/crypto-api/recovery-key.js\";\nimport { formatMatrixErrorMessage, formatMatrixErrorReason } from \"../errors.js\";\nimport { LogService } from \"./logger.js\";\nimport type {\n MatrixCryptoBootstrapApi,\n MatrixCryptoCallbacks,\n MatrixGeneratedSecretStorageKey,\n MatrixSecretStorageStatus,\n MatrixStoredRecoveryKey,\n} from \"./types.js\";\n\nexport function isRepairableSecretStorageAccessError(err: unknown): boolean {\n const message = formatMatrixErrorReason(err);\n if (!message) {\n return false;\n }\n if (message.includes(\"getsecretstoragekey callback returned falsey\")) {\n return true;\n }\n // The homeserver still has secret storage, but the local recovery key cannot\n // authenticate/decrypt a required secret. During explicit bootstrap we can\n // recreate secret storage and continue with a new local baseline.\n if (message.includes(\"decrypting secret\") && message.includes(\"bad mac\")) {\n return true;\n }\n return false;\n}\n\nexport class MatrixRecoveryKeyStore {\n private readonly secretStorageKeyCache = new Map<\n string,\n { key: Uint8Array; keyInfo?: MatrixStoredRecoveryKey[\"keyInfo\"] }\n >();\n private stagedRecoveryKey: MatrixStoredRecoveryKey | null = null;\n private readonly stagedCacheKeyIds = new Set<string>();\n\n constructor(private readonly recoveryKeyPath?: string) {}\n\n buildCryptoCallbacks(): MatrixCryptoCallbacks {\n return {\n getSecretStorageKey: async ({ keys }) => {\n const requestedKeyIds = Object.keys(keys ?? {});\n if (requestedKeyIds.length === 0) {\n return null;\n }\n\n for (const keyId of requestedKeyIds) {\n const cached = this.secretStorageKeyCache.get(keyId);\n if (cached) {\n return [keyId, new Uint8Array(cached.key)];\n }\n }\n\n const staged = this.stagedRecoveryKey;\n if (staged?.privateKeyBase64) {\n const privateKey = new Uint8Array(Buffer.from(staged.privateKeyBase64, \"base64\"));\n if (privateKey.length > 0) {\n const stagedKeyId =\n staged.keyId && requestedKeyIds.includes(staged.keyId)\n ? staged.keyId\n : requestedKeyIds[0];\n if (stagedKeyId) {\n this.rememberSecretStorageKey(stagedKeyId, privateKey, staged.keyInfo);\n this.stagedCacheKeyIds.add(stagedKeyId);\n return [stagedKeyId, privateKey];\n }\n }\n }\n\n const stored = this.loadStoredRecoveryKey();\n if (!stored?.privateKeyBase64) {\n return null;\n }\n const privateKey = new Uint8Array(Buffer.from(stored.privateKeyBase64, \"base64\"));\n if (privateKey.length === 0) {\n return null;\n }\n\n if (stored.keyId && requestedKeyIds.includes(stored.keyId)) {\n this.rememberSecretStorageKey(stored.keyId, privateKey, stored.keyInfo);\n return [stored.keyId, privateKey];\n }\n\n const firstRequestedKeyId = requestedKeyIds[0];\n if (!firstRequestedKeyId) {\n return null;\n }\n this.rememberSecretStorageKey(firstRequestedKeyId, privateKey, stored.keyInfo);\n return [firstRequestedKeyId, privateKey];\n },\n cacheSecretStorageKey: (keyId, keyInfo, key) => {\n const privateKey = new Uint8Array(key);\n const normalizedKeyInfo: MatrixStoredRecoveryKey[\"keyInfo\"] = {\n passphrase: keyInfo?.passphrase,\n name: typeof keyInfo?.name === \"string\" ? keyInfo.name : undefined,\n };\n this.rememberSecretStorageKey(keyId, privateKey, normalizedKeyInfo);\n\n const stored = this.loadStoredRecoveryKey();\n this.saveRecoveryKeyToDisk({\n keyId,\n keyInfo: normalizedKeyInfo,\n privateKey,\n encodedPrivateKey: stored?.encodedPrivateKey,\n });\n },\n };\n }\n\n getRecoveryKeySummary(): {\n encodedPrivateKey?: string;\n keyId?: string | null;\n createdAt?: string;\n } | null {\n const stored = this.loadStoredRecoveryKey();\n if (!stored) {\n return null;\n }\n return {\n encodedPrivateKey: stored.encodedPrivateKey,\n keyId: stored.keyId,\n createdAt: stored.createdAt,\n };\n }\n\n private resolveEncodedRecoveryKeyInput(params: {\n encodedPrivateKey: string;\n keyId?: string | null;\n keyInfo?: MatrixStoredRecoveryKey[\"keyInfo\"];\n }): {\n encodedPrivateKey: string;\n privateKey: Uint8Array;\n keyId: string | null;\n keyInfo?: MatrixStoredRecoveryKey[\"keyInfo\"];\n } {\n const encodedPrivateKey = params.encodedPrivateKey.trim();\n if (!encodedPrivateKey) {\n throw new Error(\"Matrix recovery key is required\");\n }\n let privateKey: Uint8Array;\n try {\n privateKey = decodeRecoveryKey(encodedPrivateKey);\n } catch (err) {\n throw new Error(`Invalid Matrix recovery key: ${formatMatrixErrorMessage(err)}`, {\n cause: err,\n });\n }\n const keyId =\n typeof params.keyId === \"string\" && params.keyId.trim() ? params.keyId.trim() : null;\n return {\n encodedPrivateKey,\n privateKey,\n keyId,\n keyInfo: params.keyInfo ?? this.loadStoredRecoveryKey()?.keyInfo,\n };\n }\n\n storeEncodedRecoveryKey(params: {\n encodedPrivateKey: string;\n keyId?: string | null;\n keyInfo?: MatrixStoredRecoveryKey[\"keyInfo\"];\n }): {\n encodedPrivateKey?: string;\n keyId?: string | null;\n createdAt?: string;\n } {\n const prepared = this.resolveEncodedRecoveryKeyInput(params);\n this.saveRecoveryKeyToDisk({\n keyId: prepared.keyId,\n keyInfo: prepared.keyInfo,\n privateKey: prepared.privateKey,\n encodedPrivateKey: prepared.encodedPrivateKey,\n });\n if (prepared.keyId) {\n this.rememberSecretStorageKey(prepared.keyId, prepared.privateKey, prepared.keyInfo);\n }\n return this.getRecoveryKeySummary() ?? {};\n }\n\n stageEncodedRecoveryKey(params: {\n encodedPrivateKey: string;\n keyId?: string | null;\n keyInfo?: MatrixStoredRecoveryKey[\"keyInfo\"];\n }): void {\n const prepared = this.resolveEncodedRecoveryKeyInput(params);\n this.discardStagedRecoveryKey();\n this.stagedRecoveryKey = {\n version: 1,\n createdAt: new Date().toISOString(),\n keyId: prepared.keyId,\n encodedPrivateKey: prepared.encodedPrivateKey,\n privateKeyBase64: Buffer.from(prepared.privateKey).toString(\"base64\"),\n keyInfo: prepared.keyInfo,\n };\n }\n\n commitStagedRecoveryKey(params?: {\n keyId?: string | null;\n keyInfo?: MatrixStoredRecoveryKey[\"keyInfo\"];\n }): {\n encodedPrivateKey?: string;\n keyId?: string | null;\n createdAt?: string;\n } | null {\n if (!this.stagedRecoveryKey) {\n return this.getRecoveryKeySummary();\n }\n const staged = this.stagedRecoveryKey;\n const privateKey = new Uint8Array(Buffer.from(staged.privateKeyBase64, \"base64\"));\n const keyId =\n typeof params?.keyId === \"string\" && params.keyId.trim() ? params.keyId.trim() : staged.keyId;\n this.saveRecoveryKeyToDisk({\n keyId,\n keyInfo: params?.keyInfo ?? staged.keyInfo,\n privateKey,\n encodedPrivateKey: staged.encodedPrivateKey,\n });\n this.clearStagedRecoveryKeyTracking();\n return this.getRecoveryKeySummary();\n }\n\n discardStagedRecoveryKey(): void {\n for (const keyId of this.stagedCacheKeyIds) {\n this.secretStorageKeyCache.delete(keyId);\n }\n this.clearStagedRecoveryKeyTracking();\n }\n\n async bootstrapSecretStorageWithRecoveryKey(\n crypto: MatrixCryptoBootstrapApi,\n options: {\n setupNewKeyBackup?: boolean;\n allowSecretStorageRecreateWithoutRecoveryKey?: boolean;\n forceNewSecretStorage?: boolean;\n } = {},\n ): Promise<void> {\n let status: MatrixSecretStorageStatus | null = null;\n const getSecretStorageStatus = crypto.getSecretStorageStatus; // pragma: allowlist secret\n if (typeof getSecretStorageStatus === \"function\") {\n try {\n status = await getSecretStorageStatus.call(crypto);\n } catch (err) {\n LogService.warn(\"MatrixClientLite\", \"Failed to read secret storage status:\", err);\n }\n }\n\n const hasDefaultSecretStorageKey = Boolean(status?.defaultKeyId);\n const hasKnownInvalidSecrets = Object.values(status?.secretStorageKeyValidityMap ?? {}).some(\n (valid) => !valid,\n );\n let generatedRecoveryKey = false;\n const storedRecovery = this.loadStoredRecoveryKey();\n const stagedRecovery = this.stagedRecoveryKey;\n const sourceRecovery = stagedRecovery ?? storedRecovery;\n let recoveryKey: MatrixGeneratedSecretStorageKey | null = sourceRecovery\n ? {\n keyInfo: sourceRecovery.keyInfo,\n privateKey: new Uint8Array(Buffer.from(sourceRecovery.privateKeyBase64, \"base64\")),\n encodedPrivateKey: sourceRecovery.encodedPrivateKey,\n }\n : null;\n\n if (recoveryKey && status?.defaultKeyId) {\n const defaultKeyId = status.defaultKeyId;\n this.rememberSecretStorageKey(defaultKeyId, recoveryKey.privateKey, recoveryKey.keyInfo);\n if (!stagedRecovery && storedRecovery && storedRecovery.keyId !== defaultKeyId) {\n this.saveRecoveryKeyToDisk({\n keyId: defaultKeyId,\n keyInfo: recoveryKey.keyInfo,\n privateKey: recoveryKey.privateKey,\n encodedPrivateKey: recoveryKey.encodedPrivateKey,\n });\n }\n }\n\n const ensureRecoveryKey = async (): Promise<MatrixGeneratedSecretStorageKey> => {\n if (recoveryKey) {\n return recoveryKey;\n }\n if (typeof crypto.createRecoveryKeyFromPassphrase !== \"function\") {\n throw new Error(\n \"Matrix crypto backend does not support recovery key generation (createRecoveryKeyFromPassphrase missing)\",\n );\n }\n recoveryKey = await crypto.createRecoveryKeyFromPassphrase();\n this.saveRecoveryKeyToDisk(recoveryKey);\n generatedRecoveryKey = true;\n return recoveryKey;\n };\n\n const shouldRecreateSecretStorage =\n options.forceNewSecretStorage === true ||\n !hasDefaultSecretStorageKey ||\n (!recoveryKey && status?.ready === false) ||\n hasKnownInvalidSecrets;\n\n if (hasKnownInvalidSecrets) {\n // Existing secret storage keys can't decrypt required secrets. Generate a fresh recovery key.\n recoveryKey = null;\n }\n\n const secretStorageOptions: {\n createSecretStorageKey?: () => Promise<MatrixGeneratedSecretStorageKey>;\n setupNewSecretStorage?: boolean;\n setupNewKeyBackup?: boolean;\n } = {\n setupNewKeyBackup: options.setupNewKeyBackup === true,\n };\n\n if (shouldRecreateSecretStorage) {\n secretStorageOptions.setupNewSecretStorage = true;\n secretStorageOptions.createSecretStorageKey = ensureRecoveryKey;\n }\n\n try {\n await crypto.bootstrapSecretStorage(secretStorageOptions);\n } catch (err) {\n const shouldRecreateWithoutRecoveryKey =\n options.allowSecretStorageRecreateWithoutRecoveryKey === true &&\n hasDefaultSecretStorageKey &&\n isRepairableSecretStorageAccessError(err);\n if (!shouldRecreateWithoutRecoveryKey) {\n throw err;\n }\n\n recoveryKey = null;\n LogService.warn(\n \"MatrixClientLite\",\n \"Secret storage exists on the server but local recovery material cannot unlock it; recreating secret storage during explicit bootstrap.\",\n );\n await crypto.bootstrapSecretStorage({\n setupNewSecretStorage: true,\n setupNewKeyBackup: options.setupNewKeyBackup === true,\n createSecretStorageKey: ensureRecoveryKey,\n });\n }\n\n if (generatedRecoveryKey && this.recoveryKeyPath) {\n LogService.warn(\n \"MatrixClientLite\",\n `Generated Matrix recovery key and saved it to ${this.recoveryKeyPath}. Keep this file secure.`,\n );\n }\n }\n\n private clearStagedRecoveryKeyTracking(): void {\n this.stagedRecoveryKey = null;\n this.stagedCacheKeyIds.clear();\n }\n\n private rememberSecretStorageKey(\n keyId: string,\n key: Uint8Array,\n keyInfo?: MatrixStoredRecoveryKey[\"keyInfo\"],\n ): void {\n if (!keyId.trim()) {\n return;\n }\n this.secretStorageKeyCache.set(keyId, {\n key: new Uint8Array(key),\n keyInfo,\n });\n }\n\n private loadStoredRecoveryKey(): MatrixStoredRecoveryKey | null {\n if (!this.recoveryKeyPath) {\n return null;\n }\n try {\n if (!fs.existsSync(this.recoveryKeyPath)) {\n return null;\n }\n const raw = fs.readFileSync(this.recoveryKeyPath, \"utf8\");\n const parsed = JSON.parse(raw) as Partial<MatrixStoredRecoveryKey>;\n if (\n parsed.version !== 1 ||\n typeof parsed.createdAt !== \"string\" ||\n typeof parsed.privateKeyBase64 !== \"string\" || // pragma: allowlist secret\n !parsed.privateKeyBase64.trim()\n ) {\n return null;\n }\n return {\n version: 1,\n createdAt: parsed.createdAt,\n keyId: typeof parsed.keyId === \"string\" ? parsed.keyId : null,\n encodedPrivateKey:\n typeof parsed.encodedPrivateKey === \"string\" ? parsed.encodedPrivateKey : undefined,\n privateKeyBase64: parsed.privateKeyBase64,\n keyInfo:\n parsed.keyInfo && typeof parsed.keyInfo === \"object\"\n ? {\n passphrase: parsed.keyInfo.passphrase,\n name: typeof parsed.keyInfo.name === \"string\" ? parsed.keyInfo.name : undefined,\n }\n : undefined,\n };\n } catch {\n return null;\n }\n }\n\n private saveRecoveryKeyToDisk(params: MatrixGeneratedSecretStorageKey): void {\n if (!this.recoveryKeyPath) {\n return;\n }\n try {\n const payload: MatrixStoredRecoveryKey = {\n version: 1,\n createdAt: new Date().toISOString(),\n keyId: typeof params.keyId === \"string\" ? params.keyId : null,\n encodedPrivateKey: params.encodedPrivateKey,\n privateKeyBase64: Buffer.from(params.privateKey).toString(\"base64\"),\n keyInfo: params.keyInfo\n ? {\n passphrase: params.keyInfo.passphrase,\n name: params.keyInfo.name,\n }\n : undefined,\n };\n fs.mkdirSync(path.dirname(this.recoveryKeyPath), { recursive: true });\n fs.writeFileSync(this.recoveryKeyPath, JSON.stringify(payload, null, 2), \"utf8\");\n fs.chmodSync(this.recoveryKeyPath, 0o600);\n } catch (err) {\n LogService.warn(\"MatrixClientLite\", \"Failed to persist recovery key:\", err);\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["privateKey"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import {
|
|
2
|
+
init_shims
|
|
3
|
+
} from "./chunk-G4TIS2SC.js";
|
|
4
|
+
|
|
5
|
+
// src/matrix/deps.ts
|
|
6
|
+
init_shims();
|
|
7
|
+
import { spawn } from "node:child_process";
|
|
8
|
+
import fs from "node:fs";
|
|
9
|
+
import { createRequire } from "node:module";
|
|
10
|
+
import path from "node:path";
|
|
11
|
+
import { fileURLToPath } from "node:url";
|
|
12
|
+
import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
|
|
13
|
+
var REQUIRED_MATRIX_PACKAGES = [
|
|
14
|
+
"@archipelagolab/lobi-js-sdk",
|
|
15
|
+
"@matrix-org/matrix-sdk-crypto-nodejs",
|
|
16
|
+
"@matrix-org/matrix-sdk-crypto-wasm"
|
|
17
|
+
];
|
|
18
|
+
function resolveMissingMatrixPackages() {
|
|
19
|
+
try {
|
|
20
|
+
const req = createRequire(import.meta.url);
|
|
21
|
+
return REQUIRED_MATRIX_PACKAGES.filter((pkg) => {
|
|
22
|
+
try {
|
|
23
|
+
req.resolve(pkg);
|
|
24
|
+
return false;
|
|
25
|
+
} catch {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
} catch {
|
|
30
|
+
return [...REQUIRED_MATRIX_PACKAGES];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function isMatrixSdkAvailable() {
|
|
34
|
+
return resolveMissingMatrixPackages().length === 0;
|
|
35
|
+
}
|
|
36
|
+
function resolvePluginRoot() {
|
|
37
|
+
const currentDir = path.dirname(fileURLToPath(import.meta.url));
|
|
38
|
+
return path.resolve(currentDir, "..", "..");
|
|
39
|
+
}
|
|
40
|
+
async function runFixedCommandWithTimeout(params) {
|
|
41
|
+
return await new Promise((resolve) => {
|
|
42
|
+
const [command, ...args] = params.argv;
|
|
43
|
+
if (!command) {
|
|
44
|
+
resolve({
|
|
45
|
+
code: 1,
|
|
46
|
+
stdout: "",
|
|
47
|
+
stderr: "command is required"
|
|
48
|
+
});
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const proc = spawn(command, args, {
|
|
52
|
+
cwd: params.cwd,
|
|
53
|
+
env: { ...process.env, ...params.env },
|
|
54
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
55
|
+
});
|
|
56
|
+
let stdout = "";
|
|
57
|
+
let stderr = "";
|
|
58
|
+
let settled = false;
|
|
59
|
+
let timer = null;
|
|
60
|
+
const finalize = (result) => {
|
|
61
|
+
if (settled) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
settled = true;
|
|
65
|
+
if (timer) {
|
|
66
|
+
clearTimeout(timer);
|
|
67
|
+
}
|
|
68
|
+
resolve(result);
|
|
69
|
+
};
|
|
70
|
+
proc.stdout?.on("data", (chunk) => {
|
|
71
|
+
stdout += chunk.toString();
|
|
72
|
+
});
|
|
73
|
+
proc.stderr?.on("data", (chunk) => {
|
|
74
|
+
stderr += chunk.toString();
|
|
75
|
+
});
|
|
76
|
+
timer = setTimeout(() => {
|
|
77
|
+
proc.kill("SIGKILL");
|
|
78
|
+
finalize({
|
|
79
|
+
code: 124,
|
|
80
|
+
stdout,
|
|
81
|
+
stderr: stderr || `command timed out after ${params.timeoutMs}ms`
|
|
82
|
+
});
|
|
83
|
+
}, params.timeoutMs);
|
|
84
|
+
proc.on("error", (err) => {
|
|
85
|
+
finalize({
|
|
86
|
+
code: 1,
|
|
87
|
+
stdout,
|
|
88
|
+
stderr: err.message
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
proc.on("close", (code) => {
|
|
92
|
+
finalize({
|
|
93
|
+
code: code ?? 1,
|
|
94
|
+
stdout,
|
|
95
|
+
stderr
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
function defaultRequireFn(id) {
|
|
101
|
+
return createRequire(import.meta.url)(id);
|
|
102
|
+
}
|
|
103
|
+
function defaultResolveFn(id) {
|
|
104
|
+
return createRequire(import.meta.url).resolve(id);
|
|
105
|
+
}
|
|
106
|
+
function isMissingMatrixCryptoRuntimeError(error) {
|
|
107
|
+
const message = formatErrorMessage(error);
|
|
108
|
+
return message.includes("@matrix-org/matrix-sdk-crypto-nodejs-") || message.includes("matrix-sdk-crypto-nodejs") || message.includes("download-lib.js");
|
|
109
|
+
}
|
|
110
|
+
async function ensureMatrixCryptoRuntime(params = {}) {
|
|
111
|
+
const requireFn = params.requireFn ?? defaultRequireFn;
|
|
112
|
+
try {
|
|
113
|
+
requireFn("@matrix-org/matrix-sdk-crypto-nodejs");
|
|
114
|
+
return;
|
|
115
|
+
} catch (err) {
|
|
116
|
+
if (!isMissingMatrixCryptoRuntimeError(err)) {
|
|
117
|
+
throw err;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const resolveFn = params.resolveFn ?? defaultResolveFn;
|
|
121
|
+
const scriptPath = resolveFn("@matrix-org/matrix-sdk-crypto-nodejs/download-lib.js");
|
|
122
|
+
params.log?.("matrix: bootstrapping native crypto runtime");
|
|
123
|
+
const runCommand = params.runCommand ?? runFixedCommandWithTimeout;
|
|
124
|
+
const nodeExecutable = params.nodeExecutable ?? process.execPath;
|
|
125
|
+
const result = await runCommand({
|
|
126
|
+
argv: [nodeExecutable, scriptPath],
|
|
127
|
+
cwd: path.dirname(scriptPath),
|
|
128
|
+
timeoutMs: 3e5,
|
|
129
|
+
env: { COREPACK_ENABLE_DOWNLOAD_PROMPT: "0" }
|
|
130
|
+
});
|
|
131
|
+
if (result.code !== 0) {
|
|
132
|
+
throw new Error(
|
|
133
|
+
result.stderr.trim() || result.stdout.trim() || "Matrix crypto runtime bootstrap failed."
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
requireFn("@matrix-org/matrix-sdk-crypto-nodejs");
|
|
137
|
+
}
|
|
138
|
+
async function ensureMatrixSdkInstalled(params) {
|
|
139
|
+
if (isMatrixSdkAvailable()) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
const confirm = params.confirm;
|
|
143
|
+
if (confirm) {
|
|
144
|
+
const ok = await confirm(
|
|
145
|
+
"Matrix requires @archipelagolab/lobi-js-sdk, @matrix-org/matrix-sdk-crypto-nodejs, and @matrix-org/matrix-sdk-crypto-wasm. Install now?"
|
|
146
|
+
);
|
|
147
|
+
if (!ok) {
|
|
148
|
+
throw new Error(
|
|
149
|
+
"Matrix requires @archipelagolab/lobi-js-sdk, @matrix-org/matrix-sdk-crypto-nodejs, and @matrix-org/matrix-sdk-crypto-wasm (install dependencies first)."
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
const root = resolvePluginRoot();
|
|
154
|
+
const command = fs.existsSync(path.join(root, "pnpm-lock.yaml")) ? ["pnpm", "install"] : ["npm", "install", "--omit=dev", "--silent"];
|
|
155
|
+
params.runtime.log?.(`matrix: installing dependencies via ${command[0]} (${root})\u2026`);
|
|
156
|
+
const result = await runFixedCommandWithTimeout({
|
|
157
|
+
argv: command,
|
|
158
|
+
cwd: root,
|
|
159
|
+
timeoutMs: 3e5,
|
|
160
|
+
env: { COREPACK_ENABLE_DOWNLOAD_PROMPT: "0" }
|
|
161
|
+
});
|
|
162
|
+
if (result.code !== 0) {
|
|
163
|
+
throw new Error(
|
|
164
|
+
result.stderr.trim() || result.stdout.trim() || "Matrix dependency install failed."
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
if (!isMatrixSdkAvailable()) {
|
|
168
|
+
const missing = resolveMissingMatrixPackages();
|
|
169
|
+
throw new Error(
|
|
170
|
+
missing.length > 0 ? `Matrix dependency install completed but required packages are still missing: ${missing.join(", ")}` : "Matrix dependency install completed but Matrix dependencies are still missing."
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export {
|
|
176
|
+
isMatrixSdkAvailable,
|
|
177
|
+
ensureMatrixCryptoRuntime,
|
|
178
|
+
ensureMatrixSdkInstalled
|
|
179
|
+
};
|
|
180
|
+
//# sourceMappingURL=chunk-Q6H5OV2R.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/matrix/deps.ts"],
|
|
4
|
+
"sourcesContent": ["import { spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { formatErrorMessage } from \"openclaw/plugin-sdk/error-runtime\";\nimport type { RuntimeEnv } from \"../runtime-api.js\";\n\nconst REQUIRED_MATRIX_PACKAGES = [\n \"@archipelagolab/lobi-js-sdk\",\n \"@matrix-org/matrix-sdk-crypto-nodejs\",\n \"@matrix-org/matrix-sdk-crypto-wasm\",\n];\n\ntype MatrixCryptoRuntimeDeps = {\n requireFn?: (id: string) => unknown;\n runCommand?: (params: {\n argv: string[];\n cwd: string;\n timeoutMs: number;\n env?: NodeJS.ProcessEnv;\n }) => Promise<CommandResult>;\n resolveFn?: (id: string) => string;\n nodeExecutable?: string;\n log?: (message: string) => void;\n};\n\nfunction resolveMissingMatrixPackages(): string[] {\n try {\n const req = createRequire(import.meta.url);\n return REQUIRED_MATRIX_PACKAGES.filter((pkg) => {\n try {\n req.resolve(pkg);\n return false;\n } catch {\n return true;\n }\n });\n } catch {\n return [...REQUIRED_MATRIX_PACKAGES];\n }\n}\n\nexport function isMatrixSdkAvailable(): boolean {\n return resolveMissingMatrixPackages().length === 0;\n}\n\nfunction resolvePluginRoot(): string {\n const currentDir = path.dirname(fileURLToPath(import.meta.url));\n return path.resolve(currentDir, \"..\", \"..\");\n}\n\ntype CommandResult = {\n code: number;\n stdout: string;\n stderr: string;\n};\n\nasync function runFixedCommandWithTimeout(params: {\n argv: string[];\n cwd: string;\n timeoutMs: number;\n env?: NodeJS.ProcessEnv;\n}): Promise<CommandResult> {\n return await new Promise((resolve) => {\n const [command, ...args] = params.argv;\n if (!command) {\n resolve({\n code: 1,\n stdout: \"\",\n stderr: \"command is required\",\n });\n return;\n }\n\n const proc = spawn(command, args, {\n cwd: params.cwd,\n env: { ...process.env, ...params.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n let stdout = \"\";\n let stderr = \"\";\n let settled = false;\n let timer: NodeJS.Timeout | null = null;\n\n const finalize = (result: CommandResult) => {\n if (settled) {\n return;\n }\n settled = true;\n if (timer) {\n clearTimeout(timer);\n }\n resolve(result);\n };\n\n proc.stdout?.on(\"data\", (chunk: Buffer | string) => {\n stdout += chunk.toString();\n });\n proc.stderr?.on(\"data\", (chunk: Buffer | string) => {\n stderr += chunk.toString();\n });\n\n timer = setTimeout(() => {\n proc.kill(\"SIGKILL\");\n finalize({\n code: 124,\n stdout,\n stderr: stderr || `command timed out after ${params.timeoutMs}ms`,\n });\n }, params.timeoutMs);\n\n proc.on(\"error\", (err) => {\n finalize({\n code: 1,\n stdout,\n stderr: err.message,\n });\n });\n\n proc.on(\"close\", (code) => {\n finalize({\n code: code ?? 1,\n stdout,\n stderr,\n });\n });\n });\n}\n\nfunction defaultRequireFn(id: string): unknown {\n return createRequire(import.meta.url)(id);\n}\n\nfunction defaultResolveFn(id: string): string {\n return createRequire(import.meta.url).resolve(id);\n}\n\nfunction isMissingMatrixCryptoRuntimeError(error: unknown): boolean {\n const message = formatErrorMessage(error);\n return (\n message.includes(\"@matrix-org/matrix-sdk-crypto-nodejs-\") ||\n message.includes(\"matrix-sdk-crypto-nodejs\") ||\n message.includes(\"download-lib.js\")\n );\n}\n\nexport async function ensureMatrixCryptoRuntime(\n params: MatrixCryptoRuntimeDeps = {},\n): Promise<void> {\n const requireFn = params.requireFn ?? defaultRequireFn;\n try {\n requireFn(\"@matrix-org/matrix-sdk-crypto-nodejs\");\n return;\n } catch (err) {\n if (!isMissingMatrixCryptoRuntimeError(err)) {\n throw err;\n }\n }\n\n const resolveFn = params.resolveFn ?? defaultResolveFn;\n const scriptPath = resolveFn(\"@matrix-org/matrix-sdk-crypto-nodejs/download-lib.js\");\n params.log?.(\"matrix: bootstrapping native crypto runtime\");\n const runCommand = params.runCommand ?? runFixedCommandWithTimeout;\n const nodeExecutable = params.nodeExecutable ?? process.execPath;\n const result = await runCommand({\n argv: [nodeExecutable, scriptPath],\n cwd: path.dirname(scriptPath),\n timeoutMs: 300_000,\n env: { COREPACK_ENABLE_DOWNLOAD_PROMPT: \"0\" },\n });\n if (result.code !== 0) {\n throw new Error(\n result.stderr.trim() || result.stdout.trim() || \"Matrix crypto runtime bootstrap failed.\",\n );\n }\n\n requireFn(\"@matrix-org/matrix-sdk-crypto-nodejs\");\n}\n\nexport async function ensureMatrixSdkInstalled(params: {\n runtime: RuntimeEnv;\n confirm?: (message: string) => Promise<boolean>;\n}): Promise<void> {\n if (isMatrixSdkAvailable()) {\n return;\n }\n const confirm = params.confirm;\n if (confirm) {\n const ok = await confirm(\n \"Matrix requires @archipelagolab/lobi-js-sdk, @matrix-org/matrix-sdk-crypto-nodejs, and @matrix-org/matrix-sdk-crypto-wasm. Install now?\",\n );\n if (!ok) {\n throw new Error(\n \"Matrix requires @archipelagolab/lobi-js-sdk, @matrix-org/matrix-sdk-crypto-nodejs, and @matrix-org/matrix-sdk-crypto-wasm (install dependencies first).\",\n );\n }\n }\n\n const root = resolvePluginRoot();\n const command = fs.existsSync(path.join(root, \"pnpm-lock.yaml\"))\n ? [\"pnpm\", \"install\"]\n : [\"npm\", \"install\", \"--omit=dev\", \"--silent\"];\n params.runtime.log?.(`matrix: installing dependencies via ${command[0]} (${root})\u2026`);\n const result = await runFixedCommandWithTimeout({\n argv: command,\n cwd: root,\n timeoutMs: 300_000,\n env: { COREPACK_ENABLE_DOWNLOAD_PROMPT: \"0\" },\n });\n if (result.code !== 0) {\n throw new Error(\n result.stderr.trim() || result.stdout.trim() || \"Matrix dependency install failed.\",\n );\n }\n if (!isMatrixSdkAvailable()) {\n const missing = resolveMissingMatrixPackages();\n throw new Error(\n missing.length > 0\n ? `Matrix dependency install completed but required packages are still missing: ${missing.join(\", \")}`\n : \"Matrix dependency install completed but Matrix dependencies are still missing.\",\n );\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|