@poe-platform/safe-bash 0.1.803 → 0.1.804
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/README.md +56 -31
- package/dist/image-ast/ast.d.ts +1 -0
- package/dist/image-ast/browser/ast.d.ts +1 -0
- package/dist/image-ast/browser/codecs/jpeg.d.ts +2 -2
- package/dist/image-ast/codecs/jpeg.d.ts +2 -2
- package/dist/image-ast/index.browser.js +692 -8364
- package/dist/image-ast/index.js +692 -8364
- package/dist/mp4-ast/codecs.d.ts +7 -2
- package/dist/safe-bash/chunks/{chunk-CHYGPFVM.js → chunk-22SX3F2R.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-FBUCWVTE.js → chunk-2IVBJTBD.js} +1 -1
- package/dist/safe-bash/chunks/chunk-2POETUMB.js +190 -0
- package/dist/safe-bash/chunks/{chunk-XVOSKJE2.js → chunk-47D7WBJK.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-VKNVHEX3.js → chunk-4ESI236Y.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-74GHTNJA.js → chunk-4KTMKD5W.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-55YJASTN.js → chunk-4T53AERN.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-DQP3VHSB.js → chunk-5XIFJVOO.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-5OHX7C2V.js → chunk-62BOHHJT.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-HZAMGT5I.js → chunk-67WIFM3N.js} +17 -6
- package/dist/safe-bash/chunks/{chunk-4D4N7IU2.js → chunk-6LNFRPW5.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-6O77NL2S.js → chunk-6SMICPI3.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-4BSJLKNM.js → chunk-7O76UFQD.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-PNBBUWSM.js → chunk-AW5KIT6V.js} +3488 -39
- package/dist/safe-bash/chunks/{chunk-JMMEIDPF.js → chunk-B2Z73HTZ.js} +52 -28
- package/dist/safe-bash/chunks/chunk-B3ZMOJVM.js +319 -0
- package/dist/safe-bash/chunks/{chunk-7ZBU7KYV.js → chunk-CFAWS3O4.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-I5HZ4FGE.js → chunk-CL2FCTTO.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-2LSAMQER.js → chunk-CTXNARJH.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-TFIBK2GI.js → chunk-D5Q7NFWI.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-OQRVVGR6.js → chunk-DSOOVZ6Q.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-VTH3MLDU.js → chunk-DUTAG6ZD.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-XAQMU6OY.js → chunk-EE5YGFIZ.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-FZE4HW6G.js → chunk-EJOYT2ME.js} +1 -1
- package/dist/safe-bash/chunks/chunk-FAAIR6EJ.js +887 -0
- package/dist/safe-bash/chunks/{chunk-OV6IHKO6.js → chunk-FOB2FZR4.js} +2 -2
- package/dist/safe-bash/chunks/chunk-G6V4RRSQ.js +14 -0
- package/dist/safe-bash/chunks/{chunk-UTBUUFDM.js → chunk-GGQAGQXQ.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-K6VCD7IY.js → chunk-HIIYIJ5G.js} +2 -4
- package/dist/safe-bash/chunks/{chunk-VBTDHOWC.js → chunk-IOHH2GTI.js} +4 -3
- package/dist/safe-bash/chunks/{chunk-CTVWDACF.js → chunk-IQW34XQT.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-HZ7BWKQ3.js → chunk-IS572AAT.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-AUSNDQTJ.js → chunk-JPSUHHOA.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-ZVD5IS4V.js → chunk-KBZ4UB2O.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-AM5ESLPH.js → chunk-KU5CVWKA.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-RYFQ3LZG.js → chunk-LPOVNKNB.js} +173 -153
- package/dist/safe-bash/chunks/{chunk-46Z5E5EV.js → chunk-MBOC3LZ4.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-6PAVEFT3.js → chunk-N4BQFD3P.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-CS4MNM6I.js → chunk-NGKCVNWS.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-7R5BDCG7.js → chunk-OHML2BEU.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-C5OWC2TL.js → chunk-OQ3AGYCZ.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-B7TAL7S5.js → chunk-PTAEWLSE.js} +0 -2
- package/dist/safe-bash/chunks/{chunk-LVOBFF4D.js → chunk-Q4FNLOTI.js} +1 -1
- package/dist/safe-bash/chunks/chunk-Q5XO3NAS.js +1036 -0
- package/dist/safe-bash/chunks/{chunk-GEG3BWGE.js → chunk-RHFRJIWQ.js} +1 -1
- package/dist/safe-bash/chunks/chunk-RUR6J33T.js +11 -0
- package/dist/safe-bash/chunks/{chunk-EEEWOYEG.js → chunk-S4RFUUXO.js} +839 -24
- package/dist/safe-bash/chunks/{chunk-RRR7AQ24.js → chunk-SD2ISU5L.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-3NDIFSNM.js → chunk-SUJ3NTMH.js} +3 -3
- package/dist/safe-bash/chunks/{chunk-R3NAKOED.js → chunk-SZRUU5HS.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-PH63PLPZ.js → chunk-TC3F4UFF.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-3R3AANOR.js → chunk-TCKYOLUE.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-D3ANYGMC.js → chunk-UV4X32QU.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-E7OYNDGL.js → chunk-V7QT2RWC.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-B7PIL77G.js → chunk-W2IYOVHK.js} +804 -1195
- package/dist/safe-bash/chunks/{chunk-3HQU4OJO.js → chunk-XNGVOSGI.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-J42RIHHJ.js → chunk-XQWCQSRN.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-A7XEHALN.js → chunk-Y7FW6GLT.js} +6 -6
- package/dist/safe-bash/chunks/{chunk-QGUV42T5.js → chunk-YL3GBUG4.js} +1 -1
- package/dist/safe-bash/chunks/chunk-YOXUCJER.js +389 -0
- package/dist/safe-bash/chunks/{chunk-HBCN24ZA.js → chunk-Z2AAYYJN.js} +2 -2
- package/dist/safe-bash/chunks/chunk-ZKYKJCZZ.js +30 -0
- package/dist/safe-bash/chunks/core-IE3AFIDX.js +85806 -0
- package/dist/safe-bash/chunks/{ffmpeg-WTC3TEFI.js → ffmpeg-YANDK6HU.js} +2 -2
- package/dist/safe-bash/chunks/{gh-6WU6PXL4.js → gh-4MBJ2S5V.js} +2 -2
- package/dist/safe-bash/chunks/{git-EFZIGJW4.js → git-2QONJNRQ.js} +2 -2
- package/dist/safe-bash/chunks/{imagemagick-EIEYGWPF.js → imagemagick-JLEHGYSN.js} +2 -2
- package/dist/safe-bash/chunks/{mmdc-ROQJT5HQ.js → mmdc-6LD7A6ND.js} +2 -2
- package/dist/safe-bash/chunks/{pdfimages-DW7LWXFI.js → pdfimages-RSHL7LOP.js} +2 -2
- package/dist/safe-bash/chunks/{pdfinfo-TIP6XLUQ.js → pdfinfo-L3SGWPNG.js} +2 -2
- package/dist/safe-bash/chunks/{pdftk-DMG22ITZ.js → pdftk-LFBJNU5A.js} +2 -2
- package/dist/safe-bash/chunks/{pdftoppm-WNDYR72T.js → pdftoppm-NXXFUIHG.js} +2 -2
- package/dist/safe-bash/chunks/{pdftotext-5IPZ4NI7.js → pdftotext-4IHNWT6F.js} +2 -2
- package/dist/safe-bash/chunks/{qpdf-TTX2DIUA.js → qpdf-ZEIREV63.js} +2 -2
- package/dist/safe-bash/chunks/read-builtin-A4QKAT45.js +9 -0
- package/dist/safe-bash/chunks/{sips-XYS46JPJ.js → sips-D5YBG2V3.js} +2 -2
- package/dist/safe-bash/chunks/{soffice-TU73E5KL.js → soffice-RAJU3JUT.js} +2 -2
- package/dist/safe-bash/chunks/source-files-3XWRRHFA.js +7 -0
- package/dist/safe-bash/chunks/{wkhtmltopdf-FSZ2CHGE.js → wkhtmltopdf-7UE4FORZ.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-7KWZXKY6.js → chunk-26RTBV2I.js} +1 -0
- package/dist/safe-bash/command-chunks/{chunk-AQJ2ROJO.js → chunk-2WYNMZR2.js} +10 -8
- package/dist/safe-bash/command-chunks/{chunk-BDSMROQZ.js → chunk-36GFRF2N.js} +2 -1
- package/dist/safe-bash/command-chunks/{chunk-GC5TJZOF.js → chunk-3VIA2IA7.js} +114 -31
- package/dist/safe-bash/command-chunks/{chunk-NKFYQSES.js → chunk-4CTI3ZTX.js} +1 -0
- package/dist/safe-bash/command-chunks/{chunk-WH627NJL.js → chunk-4MYP2FX4.js} +2 -1
- package/dist/safe-bash/command-chunks/{chunk-ZDN7MJE6.js → chunk-4R5ADJM5.js} +11 -1
- package/dist/safe-bash/command-chunks/{chunk-P2N33UMN.js → chunk-5MIKM54M.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-DB453IE6.js → chunk-6FZQUOSJ.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-PICVQ6B5.js → chunk-6GKYHPJG.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-7K6JYKPJ.js → chunk-6M2ELGEN.js} +17 -15
- package/dist/safe-bash/command-chunks/{chunk-PXEIT2O4.js → chunk-6UR7V3ET.js} +8 -1
- package/dist/safe-bash/command-chunks/{chunk-6KJ3LPI2.js → chunk-6XBS5B46.js} +26 -3
- package/dist/safe-bash/command-chunks/{chunk-5PWJG2UK.js → chunk-6YXLZX7L.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-EK6YNAXT.js → chunk-753YOR54.js} +31 -5
- package/dist/safe-bash/command-chunks/{chunk-RMWQAAO5.js → chunk-7IR4NRNE.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-FZTK4MFI.js → chunk-7NM73SVK.js} +8 -8
- package/dist/safe-bash/command-chunks/{chunk-NXEQ3ESQ.js → chunk-7QD5YY4F.js} +6 -11
- package/dist/safe-bash/command-chunks/{chunk-EMPU65ZK.js → chunk-A5LBSJGH.js} +1 -0
- package/dist/safe-bash/command-chunks/{chunk-4FEVBOL5.js → chunk-ARZMP2L2.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-NKIELG7Y.js → chunk-BAKFZ477.js} +40 -19
- package/dist/safe-bash/command-chunks/{chunk-QRRYN2KO.js → chunk-BC7BK6R6.js} +0 -2424
- package/dist/safe-bash/command-chunks/{chunk-CQHP3I66.js → chunk-BOEOJS2Q.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-XS72HTMA.js → chunk-BWGGLYEB.js} +5 -22
- package/dist/safe-bash/command-chunks/{chunk-PMBFZXTK.js → chunk-C5ZZKP7V.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-LHIOAFWW.js → chunk-C7SEB6WU.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-XPT2UGBF.js → chunk-CHJKFRT7.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-TIOCQVUQ.js → chunk-CON26Q2O.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-E55UKBIE.js → chunk-DBAT3IK2.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-Z45N42QC.js → chunk-DPAYAVMS.js} +15 -1
- package/dist/safe-bash/command-chunks/chunk-DS3NXVUM.js +368 -0
- package/dist/safe-bash/command-chunks/{chunk-5ZMZ573Q.js → chunk-DSJ3VRL3.js} +16 -4
- package/dist/safe-bash/command-chunks/{chunk-K2GDEMEU.js → chunk-EFRCFWVR.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-DZCY63VJ.js → chunk-EV6HIJ5H.js} +6 -5
- package/dist/safe-bash/command-chunks/{chunk-JDYXY44P.js → chunk-FJURV46Y.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-TZZ4WUKH.js → chunk-FZAWGKSE.js} +6 -4
- package/dist/safe-bash/command-chunks/{chunk-YHFXOX6U.js → chunk-GOCFQ6XV.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-QVOS4YXL.js → chunk-HH5O7DJI.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-3HHCU5YU.js → chunk-HK7F5SDC.js} +13 -0
- package/dist/safe-bash/command-chunks/{chunk-JNZ3CVAE.js → chunk-HQBXIZC7.js} +8 -3
- package/dist/safe-bash/command-chunks/{chunk-V4K2JDYU.js → chunk-I63DBZXZ.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-WNE7FPVR.js → chunk-I64TLTIW.js} +24 -16
- package/dist/safe-bash/command-chunks/{chunk-GFC2NTDG.js → chunk-ICANWOXH.js} +5 -29
- package/dist/safe-bash/command-chunks/{chunk-SQRQW3CT.js → chunk-IJ6LGLXM.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-TGSNCQSR.js → chunk-JT4RYCA6.js} +1771 -1663
- package/dist/safe-bash/command-chunks/{chunk-II77KPZN.js → chunk-JWW6FYBN.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-ZYXH3B66.js → chunk-LCJWKTCJ.js} +250 -203
- package/dist/safe-bash/command-chunks/chunk-LU4HBPP2.js +97 -0
- package/dist/safe-bash/command-chunks/{chunk-XJXU3VVH.js → chunk-LWOE65OE.js} +20 -5
- package/dist/safe-bash/command-chunks/{chunk-GMIHJYDG.js → chunk-M32HFSX7.js} +22 -6
- package/dist/safe-bash/command-chunks/{chunk-YG4EPFWC.js → chunk-M3NINRDU.js} +2880 -172
- package/dist/safe-bash/command-chunks/chunk-MQREDAL6.js +164 -0
- package/dist/safe-bash/command-chunks/{chunk-LWS62ISU.js → chunk-N6DIASO2.js} +1 -1
- package/dist/safe-bash/command-chunks/chunk-NGL7YK7O.js +188 -0
- package/dist/safe-bash/command-chunks/{chunk-EARHPPPJ.js → chunk-NJYHWKIL.js} +39 -9
- package/dist/safe-bash/command-chunks/{chunk-6JSIFWYT.js → chunk-OJQRSCBP.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-OQU6UT6X.js → chunk-OV3XREFN.js} +11 -0
- package/dist/safe-bash/command-chunks/{chunk-MIXBO6U7.js → chunk-PTZLF456.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-ALDC4XP4.js → chunk-QILLRNES.js} +34 -10
- package/dist/safe-bash/command-chunks/{chunk-L22T3H7L.js → chunk-QR25JLKO.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-NASVPT6F.js → chunk-R7C4MGZ5.js} +17 -224
- package/dist/safe-bash/command-chunks/{chunk-LCF3OB7P.js → chunk-RBME3JEH.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-2KG2QLJE.js → chunk-RFWGYT7G.js} +3 -0
- package/dist/safe-bash/command-chunks/{chunk-5TBUOBDE.js → chunk-RZMVRT26.js} +27 -13
- package/dist/safe-bash/command-chunks/chunk-TFR6B3WB.js +44 -0
- package/dist/safe-bash/command-chunks/chunk-TOH3OF3O.js +179 -0
- package/dist/safe-bash/command-chunks/chunk-TT4DAFBT.js +13621 -0
- package/dist/safe-bash/command-chunks/{chunk-LWSBAWLT.js → chunk-TXI64OAG.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-GIRNFXP3.js → chunk-TZRI7BJZ.js} +45 -15
- package/dist/safe-bash/command-chunks/{chunk-QOKBZFFD.js → chunk-U3MMODA5.js} +2 -7
- package/dist/safe-bash/command-chunks/{chunk-ZYHTWNAE.js → chunk-UAW423ZL.js} +11 -11
- package/dist/safe-bash/command-chunks/{chunk-C5YYCQHW.js → chunk-UXEEUGOV.js} +222 -12
- package/dist/safe-bash/command-chunks/{chunk-GY3BWK7K.js → chunk-VOZPMJRX.js} +87 -80
- package/dist/safe-bash/command-chunks/{chunk-ILX2NOLF.js → chunk-WPANOB4A.js} +20 -20
- package/dist/safe-bash/command-chunks/{chunk-Y2WBSJG6.js → chunk-X4QZQI5Q.js} +65 -64
- package/dist/safe-bash/command-chunks/{chunk-HDCNKOIX.js → chunk-XGI57GCN.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-5UBXNSFZ.js → chunk-XUCU7QQT.js} +1281 -1278
- package/dist/safe-bash/command-chunks/chunk-Y22VXJBD.js +296 -0
- package/dist/safe-bash/command-chunks/{chunk-WVHONVZ4.js → chunk-YMFUUPDX.js} +5 -3
- package/dist/safe-bash/command-chunks/{chunk-IR2BY7EL.js → chunk-YYGIBXFZ.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-MSFXC3OC.js → chunk-Z4FO6OHE.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-WWIBP2ET.js → chunk-Z5ZZVDUD.js} +143 -22
- package/dist/safe-bash/command-chunks/{chunk-LOICUCHG.js → chunk-ZHN3QDCI.js} +1 -1
- package/dist/safe-bash/commands/alias/index.d.ts +2 -0
- package/dist/safe-bash/commands/alias/index.js +2 -0
- package/dist/safe-bash/commands/apply-patch/index.browser.js +2 -3
- package/dist/safe-bash/commands/apply-patch/index.d.ts +0 -1
- package/dist/safe-bash/commands/apply-patch/index.js +0 -1
- package/dist/safe-bash/commands/archive/index.browser.js +2 -3
- package/dist/safe-bash/commands/archive/index.d.ts +0 -1
- package/dist/safe-bash/commands/archive/index.js +0 -1
- package/dist/safe-bash/commands/bytes/index.js +2 -1
- package/dist/safe-bash/commands/chmod/index.browser.js +1 -1
- package/dist/safe-bash/commands/column/index.browser.js +2 -3
- package/dist/safe-bash/commands/column/index.d.ts +0 -1
- package/dist/safe-bash/commands/column/index.js +0 -1
- package/dist/safe-bash/commands/copy-source.js +1 -0
- package/dist/safe-bash/commands/csplit/index.browser.js +2 -2
- package/dist/safe-bash/commands/csvkit/index.browser.js +72 -0
- package/dist/safe-bash/commands/csvkit/index.d.ts +0 -5
- package/dist/safe-bash/commands/csvkit/index.js +0 -50
- package/dist/safe-bash/commands/docx/index.browser.js +5 -7
- package/dist/safe-bash/commands/du/index.browser.js +2 -3
- package/dist/safe-bash/commands/du/index.d.ts +0 -1
- package/dist/safe-bash/commands/du/index.js +0 -1
- package/dist/safe-bash/commands/expr/index.browser.js +2 -3
- package/dist/safe-bash/commands/expr/index.d.ts +0 -1
- package/dist/safe-bash/commands/expr/index.js +0 -1
- package/dist/safe-bash/commands/factor/index.browser.js +2 -2
- package/dist/safe-bash/commands/file/index.browser.js +2 -3
- package/dist/safe-bash/commands/file/index.d.ts +0 -1
- package/dist/safe-bash/commands/file/index.js +0 -1
- package/dist/safe-bash/commands/filesystem.js +1 -1
- package/dist/safe-bash/commands/getopt/index.browser.js +2 -2
- package/dist/safe-bash/commands/grep-aliases/index.browser.js +3 -3
- package/dist/safe-bash/commands/hexdump/index.browser.js +2 -2
- package/dist/safe-bash/commands/html-to-markdown/index.browser.js +2 -3
- package/dist/safe-bash/commands/html-to-markdown/index.d.ts +0 -1
- package/dist/safe-bash/commands/html-to-markdown/index.js +0 -1
- package/dist/safe-bash/commands/htmlq/index.d.ts +1 -5
- package/dist/safe-bash/commands/htmlq/index.js +1 -143
- package/dist/safe-bash/commands/iconv/index.browser.js +2 -2
- package/dist/safe-bash/commands/line-endings/index.browser.js +2 -2
- package/dist/safe-bash/commands/llm/index.browser.js +2 -2
- package/dist/safe-bash/commands/llm/providers/index.browser.js +1 -1
- package/dist/safe-bash/commands/mdq/index.browser.js +3 -3
- package/dist/safe-bash/commands/media/index.browser.js +4 -16314
- package/dist/safe-bash/commands/media/index.d.ts +1 -5
- package/dist/safe-bash/commands/media/index.js +1 -3
- package/dist/safe-bash/commands/media/plugin.d.ts +1 -18
- package/dist/safe-bash/commands/media/plugin.js +1 -90
- package/dist/safe-bash/commands/media/remote.d.ts +1 -63
- package/dist/safe-bash/commands/media/remote.js +1 -405
- package/dist/safe-bash/commands/media/settings.d.ts +1 -4
- package/dist/safe-bash/commands/media/settings.js +1 -26
- package/dist/safe-bash/commands/metadata/index.browser.js +3 -4
- package/dist/safe-bash/commands/metadata/index.d.ts +0 -1
- package/dist/safe-bash/commands/metadata/index.js +2 -2
- package/dist/safe-bash/commands/mktemp/index.browser.js +1 -1
- package/dist/safe-bash/commands/network/curl.js +1 -3
- package/dist/safe-bash/commands/network/index.browser.js +3 -4
- package/dist/safe-bash/commands/network/public.d.ts +0 -1
- package/dist/safe-bash/commands/network/public.js +0 -1
- package/dist/safe-bash/commands/network/transport.js +2 -1
- package/dist/safe-bash/commands/network/wget.js +1 -3
- package/dist/safe-bash/commands/node/browser.d.ts +0 -1
- package/dist/safe-bash/commands/node/browser.js +0 -1
- package/dist/safe-bash/commands/node/default-runtime.d.ts +3 -0
- package/dist/safe-bash/commands/node/default-runtime.js +15 -0
- package/dist/safe-bash/commands/node/index.browser.js +7 -8
- package/dist/safe-bash/commands/node/index.js +3 -3
- package/dist/safe-bash/commands/node/path.js +1 -1
- package/dist/safe-bash/commands/node/preload.d.ts +1 -1
- package/dist/safe-bash/commands/node/preload.js +4 -1
- package/dist/safe-bash/commands/node/quickjs.d.ts +2 -0
- package/dist/safe-bash/commands/node/quickjs.js +2 -0
- package/dist/safe-bash/commands/node/safejs.js +26 -12
- package/dist/safe-bash/commands/op/index.browser.js +2 -3
- package/dist/safe-bash/commands/op/index.d.ts +0 -11
- package/dist/safe-bash/commands/op/index.js +0 -84
- package/dist/safe-bash/commands/pandoc/index.browser.js +44 -0
- package/dist/safe-bash/commands/pandoc/index.d.ts +0 -1
- package/dist/safe-bash/commands/pandoc/index.js +0 -1
- package/dist/safe-bash/commands/pr/index.browser.js +2 -2
- package/dist/safe-bash/commands/python/docker-runner.js +4 -3
- package/dist/safe-bash/commands/python/docker.d.ts +1 -0
- package/dist/safe-bash/commands/python/docker.js +5 -2
- package/dist/safe-bash/commands/python/index.browser.js +17 -13
- package/dist/safe-bash/commands/python/index.d.ts +2 -1
- package/dist/safe-bash/commands/python/index.js +10 -8
- package/dist/safe-bash/commands/python/llm-capability.js +65 -2
- package/dist/safe-bash/commands/python/llm-dependencies.d.ts +27 -0
- package/dist/safe-bash/commands/python/llm-dependencies.js +66 -0
- package/dist/safe-bash/commands/python/llm-module.js +6 -4
- package/dist/safe-bash/commands/python/llm-reference-module.d.ts +3 -0
- package/dist/safe-bash/commands/python/llm-reference-module.js +690 -0
- package/dist/safe-bash/commands/python/worker.browser.js +2 -3
- package/dist/safe-bash/commands/python/worker.d.ts +0 -1
- package/dist/safe-bash/commands/python/worker.js +0 -1
- package/dist/safe-bash/commands/regex-execution/ere/transport/wire-engine.d.ts +1 -1
- package/dist/safe-bash/commands/regex-execution/ere/transport/wire-engine.js +3 -3
- package/dist/safe-bash/commands/regex-execution/public.browser.js +7 -7
- package/dist/safe-bash/commands/safejs/options.js +5 -1
- package/dist/safe-bash/commands/safejs/runtime.d.ts +1 -0
- package/dist/safe-bash/commands/safejs/runtime.js +1 -1
- package/dist/safe-bash/commands/split/index.browser.js +2 -3
- package/dist/safe-bash/commands/split/index.d.ts +0 -1
- package/dist/safe-bash/commands/split/index.js +0 -1
- package/dist/safe-bash/commands/ssconvert/index.browser.js +98 -0
- package/dist/safe-bash/commands/stat/index.browser.js +1 -1
- package/dist/safe-bash/commands/stream-format/index.browser.js +3 -4
- package/dist/safe-bash/commands/stream-format/index.d.ts +0 -1
- package/dist/safe-bash/commands/stream-format/index.js +0 -1
- package/dist/safe-bash/commands/stream-inspection/index.browser.js +3 -4
- package/dist/safe-bash/commands/stream-inspection/index.d.ts +0 -1
- package/dist/safe-bash/commands/stream-inspection/index.js +0 -1
- package/dist/safe-bash/commands/streams.js +2 -1
- package/dist/safe-bash/commands/table-text/index.browser.js +3 -4
- package/dist/safe-bash/commands/table-text/index.d.ts +0 -1
- package/dist/safe-bash/commands/table-text/index.js +0 -1
- package/dist/safe-bash/commands/text.js +28 -24
- package/dist/safe-bash/commands/time-env/index.browser.js +3 -4
- package/dist/safe-bash/commands/time-env/index.d.ts +0 -1
- package/dist/safe-bash/commands/time-env/index.js +0 -1
- package/dist/safe-bash/commands/tree/index.browser.js +2 -3
- package/dist/safe-bash/commands/tree/index.d.ts +0 -1
- package/dist/safe-bash/commands/tree/index.js +0 -1
- package/dist/safe-bash/commands/tsort/index.browser.js +2 -2
- package/dist/safe-bash/commands/unalias/index.d.ts +2 -0
- package/dist/safe-bash/commands/unalias/index.js +2 -0
- package/dist/safe-bash/commands/xml/index.browser.js +2 -2
- package/dist/safe-bash/commands/yq/index.browser.js +2 -2
- package/dist/safe-bash/core.browser.js +2 -2
- package/dist/safe-bash/core.d.ts +7 -1
- package/dist/safe-bash/core.js +7 -1
- package/dist/safe-bash/execution-runtime.js +2 -1
- package/dist/safe-bash/fs/s3/http/index.d.ts +2 -2
- package/dist/safe-bash/fs/s3/http/index.js +1 -1
- package/dist/safe-bash/full-core.browser.js +283 -945
- package/dist/safe-bash/internal/op/types.d.ts +1 -0
- package/dist/safe-bash/jobs.browser.js +5 -5
- package/dist/safe-bash/lazy-optional.d.ts +3 -3
- package/dist/safe-bash/lazy-optional.js +1 -1
- package/dist/safe-bash/opt-in/commands/cmp/index.js +7 -6
- package/dist/safe-bash/opt-in/commands/dd/index.js +1 -1
- package/dist/safe-bash/opt-in/commands/dd/io.js +51 -5
- package/dist/safe-bash/opt-in/commands/truncate/index.js +2 -2
- package/dist/safe-bash/opt-in/commands/yq/native-work.js +2 -0
- package/dist/safe-bash/opt-in/optional/commands/shuf/input.js +2 -1
- package/dist/safe-bash/opt-in/optional/commands/shuf/shuf.js +4 -2
- package/dist/safe-bash/opt-in/optional.d.ts +1 -1
- package/dist/safe-bash/opt-in/optional.js +1 -1
- package/dist/safe-bash/opt-in/shell/extensions/read/index.js +2 -344
- package/dist/safe-bash/optional-host.browser.js +23 -18
- package/dist/safe-bash/optional-host.d.ts +1 -0
- package/dist/safe-bash/optional-host.js +1 -0
- package/dist/safe-bash/playwright/controller.js +41 -3
- package/dist/safe-bash/playwright/native-storage-targets.js +4 -2
- package/dist/safe-bash/plugins/base.d.ts +1 -1
- package/dist/safe-bash/plugins/base.js +3 -3
- package/dist/safe-bash/plugins/composition.d.ts +5 -2
- package/dist/safe-bash/plugins/composition.js +10 -7
- package/dist/safe-bash/plugins/index.browser.js +44 -41
- package/dist/safe-bash/plugins/index.js +3 -2
- package/dist/safe-bash/plugins/portable-commands.d.ts +3 -0
- package/dist/safe-bash/plugins/portable-commands.js +31 -0
- package/dist/safe-bash/registry-entry.browser.js +41 -42
- package/dist/safe-bash/search.browser.js +32 -33
- package/dist/safe-bash/shell/arithmetic.js +19 -6
- package/dist/safe-bash/shell/arrays/state.js +1 -1
- package/dist/safe-bash/shell/arrays/syntax.js +4 -3
- package/dist/safe-bash/shell/index.d.ts +0 -1
- package/dist/safe-bash/shell/index.js +0 -1
- package/dist/safe-bash/shell/parser.d.ts +2 -2
- package/dist/safe-bash/shell/parser.js +268 -64
- package/dist/safe-bash/shell/read-builtin.d.ts +3 -0
- package/dist/safe-bash/shell/read-builtin.js +344 -0
- package/dist/safe-bash/shell/runtime.d.ts +21 -4
- package/dist/safe-bash/shell/runtime.js +373 -412
- package/dist/safe-bash/shell/session-state.js +25 -0
- package/dist/safe-bash/shell/shell.js +76 -154
- package/dist/safe-bash/shell/tilde-expansion.d.ts +1 -1
- package/dist/safe-bash/shell/tilde-expansion.js +2 -2
- package/dist/safe-bash/shell/types.d.ts +5 -0
- package/dist/safe-bash/shell/value-state.js +1 -1
- package/dist/safe-bash/shell-entry.browser.js +32 -33
- package/dist/safe-bash/trap.browser.js +4 -4
- package/dist/safe-bash/yq-browser/index.js +1 -1
- package/dist/safe-bash-calendar-engine/time-env/calendar.d.ts +1 -1
- package/dist/safe-bash-calendar-engine/time-env/calendar.js +1 -1
- package/dist/safe-bash-calendar-engine/time-env/format.js +1 -1
- package/dist/safe-bash-command-alias/index.d.ts +13 -0
- package/dist/safe-bash-command-alias/index.js +88 -0
- package/dist/safe-bash-command-apply-patch/apply.js +3 -3
- package/dist/safe-bash-command-apply-patch/index.js +3 -3
- package/dist/safe-bash-command-apply-patch/matcher.js +1 -1
- package/dist/safe-bash-command-apply-patch/parser.js +1 -1
- package/dist/safe-bash-command-awk/awk-pipes.js +2 -2
- package/dist/safe-bash-command-awk/awk-reader.js +1 -1
- package/dist/safe-bash-command-awk/awk-runtime.js +3 -3
- package/dist/safe-bash-command-awk/awk.js +5 -5
- package/dist/safe-bash-command-awk/index.js +5 -5
- package/dist/safe-bash-command-bc/index.js +206 -60
- package/dist/safe-bash-command-cmp/index.js +7 -6
- package/dist/safe-bash-command-column/column.js +3 -3
- package/dist/safe-bash-command-column/index.js +3 -3
- package/dist/safe-bash-command-column/layout.js +2 -2
- package/dist/safe-bash-command-csvkit/index.d.ts +1 -0
- package/dist/safe-bash-command-csvkit/index.js +1505 -7
- package/dist/safe-bash-command-csvkit/sync-support.js +2 -7
- package/dist/safe-bash-command-curl/curl.js +1 -1
- package/dist/safe-bash-command-curl/index.js +1 -1
- package/dist/safe-bash-command-date/date.js +1 -1
- package/dist/safe-bash-command-date/index.js +1 -1
- package/dist/safe-bash-command-dd/index.js +1 -1
- package/dist/safe-bash-command-dd/io.js +51 -5
- package/dist/safe-bash-command-diff/diff.js +1 -1
- package/dist/safe-bash-command-diff/index.js +1 -1
- package/dist/safe-bash-command-diff3/index.js +10 -13
- package/dist/safe-bash-command-exiftool/index.js +278 -50
- package/dist/safe-bash-command-exiftool/registry.d.ts +4 -2
- package/dist/safe-bash-command-factor/command.js +2 -2
- package/dist/safe-bash-command-factor/index.js +2 -2
- package/dist/safe-bash-command-fd/arguments.d.ts +2 -0
- package/dist/safe-bash-command-fd/index.js +42 -12
- package/dist/safe-bash-command-ffmpeg/index.js +356 -66
- package/dist/safe-bash-command-find/find-format.d.ts +3 -0
- package/dist/safe-bash-command-find/find-format.js +1 -1
- package/dist/safe-bash-command-find/find.js +2 -2
- package/dist/safe-bash-command-find/index.js +2 -2
- package/dist/safe-bash-command-fmt/index.js +1 -4
- package/dist/safe-bash-command-fold/engine.d.ts +1 -1
- package/dist/safe-bash-command-fold/family.js +2 -2
- package/dist/safe-bash-command-fold/index.js +1 -1
- package/dist/safe-bash-command-hexdump/command.js +2 -2
- package/dist/safe-bash-command-hexdump/index.js +2 -2
- package/dist/safe-bash-command-html-to-markdown/entities.js +1 -1
- package/dist/safe-bash-command-html-to-markdown/index.js +4 -4
- package/dist/safe-bash-command-html-to-markdown/input.js +3 -3
- package/dist/safe-bash-command-html-to-markdown/parser.js +2 -2
- package/dist/safe-bash-command-html-to-markdown/render.js +3 -3
- package/dist/safe-bash-command-htmlq/contracts.d.ts +5 -2
- package/dist/safe-bash-command-htmlq/index.d.ts +2 -1
- package/dist/safe-bash-command-htmlq/index.js +175 -49
- package/dist/safe-bash-command-htmlq/sync.d.ts +1 -0
- package/dist/safe-bash-command-imagemagick/index.js +56 -6
- package/dist/safe-bash-command-install/arguments.d.ts +27 -0
- package/dist/safe-bash-command-install/arguments.js +224 -0
- package/dist/safe-bash-command-install/index.d.ts +7 -0
- package/dist/safe-bash-command-install/index.js +942 -0
- package/dist/safe-bash-command-install/mode.d.ts +6 -0
- package/dist/safe-bash-command-install/mode.js +71 -0
- package/dist/safe-bash-command-install/options.d.ts +40 -0
- package/dist/safe-bash-command-install/options.js +27 -0
- package/dist/safe-bash-command-jq/index.js +1 -1
- package/dist/safe-bash-command-jq/jq.js +1 -1
- package/dist/safe-bash-command-less/index.js +37 -61
- package/dist/safe-bash-command-llm/command.js +1 -1
- package/dist/safe-bash-command-llm/elevenlabs.js +2 -2
- package/dist/safe-bash-command-llm/index.js +4 -4
- package/dist/safe-bash-command-llm/openai.js +2 -2
- package/dist/safe-bash-command-llm/providers/elevenlabs.js +2 -2
- package/dist/safe-bash-command-llm/providers/index.js +3 -3
- package/dist/safe-bash-command-llm/providers/openai.js +2 -2
- package/dist/safe-bash-command-llm/providers/shared.js +1 -1
- package/dist/{safe-bash-mcp → safe-bash-command-mcp}/index.browser.d.ts +463 -46
- package/dist/safe-bash-command-mcp/index.browser.js +19308 -0
- package/dist/{safe-bash-mcp → safe-bash-command-mcp}/index.d.ts +15 -6
- package/dist/{safe-bash-mcp → safe-bash-command-mcp}/index.js +2804 -2771
- package/dist/safe-bash-command-media/LICENSE +21 -0
- package/dist/safe-bash-command-media/index.d.ts +6 -0
- package/dist/safe-bash-command-media/index.js +30 -0
- package/dist/safe-bash-command-media/plugin.d.ts +18 -0
- package/dist/safe-bash-command-media/plugin.js +11 -0
- package/dist/safe-bash-command-media/remote.d.ts +63 -0
- package/dist/safe-bash-command-media/remote.js +11 -0
- package/dist/safe-bash-command-media/settings.d.ts +4 -0
- package/dist/safe-bash-command-media/settings.js +41 -0
- package/dist/safe-bash-command-mktemp/command.js +1 -1
- package/dist/safe-bash-command-mktemp/index.js +1 -1
- package/dist/safe-bash-command-mmdc/arguments.d.ts +1 -0
- package/dist/safe-bash-command-mmdc/command.d.ts +2 -0
- package/dist/safe-bash-command-mmdc/contracts.d.ts +8 -1
- package/dist/safe-bash-command-mmdc/index.js +359 -7
- package/dist/safe-bash-command-nl/index.js +1 -1
- package/dist/safe-bash-command-nl/nl.js +1 -1
- package/dist/safe-bash-command-node/LICENSE +21 -0
- package/dist/safe-bash-command-node/index.d.ts +17 -0
- package/dist/safe-bash-command-node/index.js +328 -0
- package/dist/safe-bash-command-numfmt/index.js +1 -0
- package/dist/safe-bash-command-od/index.js +10 -6
- package/dist/safe-bash-command-op/index.js +39 -32
- package/dist/safe-bash-command-op/types.d.ts +1 -0
- package/dist/safe-bash-command-pandoc/command.js +3 -3
- package/dist/safe-bash-command-pandoc/index.d.ts +1 -0
- package/dist/safe-bash-command-pandoc/index.js +5 -3
- package/dist/safe-bash-command-pandoc/sync.d.ts +1 -0
- package/dist/safe-bash-command-patch/index.js +4 -4
- package/dist/safe-bash-command-patch/patch.js +4 -4
- package/dist/safe-bash-command-pdfimages/index.js +1 -1
- package/dist/safe-bash-command-pdfinfo/index.js +30 -5
- package/dist/safe-bash-command-pdftk/index.js +21 -23
- package/dist/safe-bash-command-pdftoppm/index.js +17 -4
- package/dist/safe-bash-command-pdftotext/index.js +11 -14
- package/dist/safe-bash-command-qpdf/index.d.ts +1 -0
- package/dist/safe-bash-command-qpdf/index.js +9 -6
- package/dist/safe-bash-command-rg/index.js +1 -1
- package/dist/safe-bash-command-rg/rg-command.js +1 -1
- package/dist/safe-bash-command-sed/index.js +1 -1
- package/dist/safe-bash-command-sed/sed.js +1 -1
- package/dist/safe-bash-command-shuf/input.d.ts +2 -2
- package/dist/safe-bash-command-shuf/input.js +2 -1
- package/dist/safe-bash-command-shuf/shuf.js +4 -2
- package/dist/safe-bash-command-sips/index.js +2 -2
- package/dist/safe-bash-command-soffice/index.js +97 -12
- package/dist/safe-bash-command-sponge/index.js +4 -1
- package/dist/safe-bash-command-sqlite3/engine.d.ts +1 -0
- package/dist/safe-bash-command-sqlite3/index.js +510 -70
- package/dist/safe-bash-command-ssconvert/formats/xlsx.js +2 -2
- package/dist/safe-bash-command-ssconvert/index.js +44 -22
- package/dist/safe-bash-command-stat/command.js +1 -1
- package/dist/safe-bash-command-stat/index.js +1 -1
- package/dist/safe-bash-command-tar/create.d.ts +1 -0
- package/dist/safe-bash-command-tar/create.js +2 -2
- package/dist/safe-bash-command-tar/extract.js +2 -2
- package/dist/safe-bash-command-tar/index.js +4 -4
- package/dist/safe-bash-command-tar/modes.js +4 -4
- package/dist/safe-bash-command-tar/options.js +1 -1
- package/dist/safe-bash-command-truncate/index.js +2 -2
- package/dist/safe-bash-command-tsort/command.js +2 -2
- package/dist/safe-bash-command-tsort/index.js +2 -2
- package/dist/safe-bash-command-unalias/index.d.ts +12 -0
- package/dist/safe-bash-command-unalias/index.js +67 -0
- package/dist/safe-bash-command-unrtf/index.js +26 -4
- package/dist/safe-bash-command-xan/argv.d.ts +1 -1
- package/dist/safe-bash-command-xan/argv.js +2 -2
- package/dist/safe-bash-command-xan/budget.d.ts +0 -1
- package/dist/safe-bash-command-xan/budget.js +1 -1
- package/dist/safe-bash-command-xan/commands.js +6 -6
- package/dist/safe-bash-command-xan/csv.js +2 -2
- package/dist/safe-bash-command-xan/index.js +8 -9
- package/dist/safe-bash-command-xan/io.js +4 -4
- package/dist/safe-bash-command-xan/options.js +1 -1
- package/dist/safe-bash-command-xan/selector.js +2 -2
- package/dist/safe-bash-command-xmllint/index.js +45 -23
- package/dist/safe-bash-command-xxd/index.js +41 -10
- package/dist/safe-bash-command-yq/accounting.js +1 -1
- package/dist/safe-bash-command-yq/index.js +3 -2
- package/dist/safe-bash-command-yq/native-work.js +2 -0
- package/dist/safe-bash-command-yq/parser.js +2 -2
- package/dist/safe-bash-command-yq/query.js +5 -5
- package/dist/safe-bash-command-yq/toml.js +2 -2
- package/dist/safe-bash-command-zip/index.js +3 -3
- package/dist/safe-bash-compression-engine/bounded-codec.js +2 -2
- package/dist/safe-bash-compression-engine/codec-loader.js +1 -1
- package/dist/safe-bash-compression-engine/files.js +5 -5
- package/dist/safe-bash-compression-engine/index.js +4 -4
- package/dist/safe-bash-compression-engine/operand.js +5 -5
- package/dist/safe-bash-compression-engine/stream.js +4 -4
- package/dist/safe-bash-compression-engine/zstd-decode.js +3 -3
- package/dist/safe-bash-contracts/command.js +3 -3
- package/dist/safe-bash-contracts/default-executor.js +2 -2
- package/dist/safe-bash-contracts/diagnostics.js +3 -3
- package/dist/safe-bash-contracts/escaping.js +6 -6
- package/dist/safe-bash-contracts/filesystem-descriptor.js +3 -3
- package/dist/safe-bash-contracts/filesystem-output.js +5 -5
- package/dist/safe-bash-contracts/http.d.ts +7 -0
- package/dist/safe-bash-contracts/index.js +8 -8
- package/dist/safe-bash-contracts/io.js +2 -2
- package/dist/safe-bash-contracts/output.js +3 -3
- package/dist/safe-bash-contracts/runtime-control.d.ts +2 -2
- package/dist/safe-bash-contracts/runtime-control.js +4 -2
- package/dist/safe-bash-contracts/signals.d.ts +2 -0
- package/dist/safe-bash-contracts/signals.js +3 -1
- package/dist/safe-bash-contracts/yield.js +1 -1
- package/dist/safe-bash-csv-engine/index.d.ts +2 -1
- package/dist/safe-bash-csv-engine/index.js +21 -15
- package/dist/safe-bash-io-engine/commands/search/requirements.js +2 -2
- package/dist/safe-bash-io-engine/commands/text-programs/shared.js +6 -6
- package/dist/safe-bash-io-engine/internal.js +1 -1
- package/dist/safe-bash-io-engine/shell/pattern.js +38 -18
- package/dist/safe-bash-line-ending-engine/convert.js +9 -204
- package/dist/safe-bash-line-ending-engine/encoding.js +9 -42
- package/dist/safe-bash-line-ending-engine/index.js +48 -0
- package/dist/safe-bash-line-ending-engine/info.js +9 -90
- package/dist/safe-bash-line-ending-engine/internal.js +15 -160
- package/dist/safe-bash-line-ending-engine/io.js +12 -289
- package/dist/safe-bash-line-ending-engine/stage.js +10 -160
- package/dist/safe-bash-markdown-engine/index.js +3 -3
- package/dist/safe-bash-network-engine/args.d.ts +6 -0
- package/dist/safe-bash-network-engine/args.js +4 -2
- package/dist/safe-bash-network-engine/body.js +1 -1
- package/dist/safe-bash-network-engine/fetch-transport.js +3 -1
- package/dist/safe-bash-network-engine/index.js +3 -1
- package/dist/safe-bash-network-engine/input.js +2 -2
- package/dist/safe-bash-network-engine/platform-portable.js +3 -1
- package/dist/safe-bash-query-engine/dates.d.ts +1 -1
- package/dist/safe-bash-query-engine/dates.js +1 -1
- package/dist/safe-bash-query-engine/index.js +6 -6
- package/dist/safe-bash-query-engine/interpreter.js +4 -4
- package/dist/safe-bash-query-engine/parser.js +1 -1
- package/dist/safe-bash-query-engine/query-core.js +6 -6
- package/dist/safe-bash-regex-engine/execution/bounded-provider.js +10 -0
- package/dist/safe-bash-regex-engine/index.js +1 -1
- package/dist/safe-bash-regex-engine/text/regex.d.ts +1 -1
- package/dist/safe-bash-regex-engine/text/regex.js +1 -1
- package/dist/safe-bash-search-engine/ergonomic-regex.d.ts +1 -0
- package/dist/safe-bash-search-engine/ergonomic-regex.js +1 -1
- package/dist/safe-bash-search-engine/grep.js +16 -9
- package/dist/safe-bash-search-engine/matcher.d.ts +2 -2
- package/dist/safe-bash-search-engine/matcher.js +12 -8
- package/dist/safe-bash-search-engine/shared.js +1 -1
- package/dist/safe-bash-search-engine/walk.js +13 -1
- package/dist/safe-bash-text-stream-engine/stream-format/shared.d.ts +1 -1
- package/dist/safe-bash-text-stream-engine/stream-format/shared.js +2 -1
- package/dist/safe-bash-xml-engine/document.js +3 -3
- package/dist/safe-bash-xml-engine/evaluate.js +2 -2
- package/dist/safe-bash-xml-engine/index.js +4 -4
- package/dist/safe-bash-xml-engine/io.js +7 -2
- package/dist/safe-bash-xml-engine/limits.d.ts +0 -2
- package/dist/safe-bash-xml-engine/limits.js +1 -1
- package/dist/safe-bash-xml-engine/query.js +3 -3
- package/dist/safe-bash-zip-engine/index.js +3 -3
- package/dist/safe-bash-zip-engine/zip/repair.js +3 -3
- package/dist/safe-bash-zip-engine/zip/safety.js +1 -1
- package/dist/safe-bash-zip-engine/zip/sfx.js +3 -3
- package/dist/safe-bash-zip-engine/zip/volumes.js +1 -1
- package/dist/safe-bash-zip-engine/zip-format.js +3 -3
- package/dist/safe-playwright-cloudflare/browser-socket-closure.js +18 -3
- package/dist/safe-playwright-cloudflare/shell-browser-resource.js +1 -1
- package/dist/xlsx-ast/xlsx.js +6 -5
- package/package.json +86 -98
- package/dist/media-cli/bytes.d.ts +0 -8
- package/dist/media-cli/bytes.js +0 -40
- package/dist/media-cli/concat.d.ts +0 -30
- package/dist/media-cli/concat.js +0 -197
- package/dist/media-cli/content.js +0 -66
- package/dist/media-cli/dependency-grammars.d.ts +0 -12
- package/dist/media-cli/dependency-grammars.js +0 -557
- package/dist/media-cli/discover.js +0 -286
- package/dist/media-cli/engine.js +0 -190
- package/dist/media-cli/filename-expression.js +0 -147
- package/dist/media-cli/filesystem.js +0 -35
- package/dist/media-cli/frontend-contract.js +0 -8
- package/dist/media-cli/frontend-issues.d.ts +0 -6
- package/dist/media-cli/frontend-issues.js +0 -9
- package/dist/media-cli/imagemagick-operand.d.ts +0 -42
- package/dist/media-cli/imagemagick-operand.js +0 -229
- package/dist/media-cli/imagemagick-references.d.ts +0 -7
- package/dist/media-cli/imagemagick-references.js +0 -42
- package/dist/media-cli/imagemagick.generated.js +0 -3254
- package/dist/media-cli/imagemagick.js +0 -615
- package/dist/media-cli/index.js +0 -12
- package/dist/media-cli/mvg.d.ts +0 -10
- package/dist/media-cli/mvg.js +0 -102
- package/dist/media-cli/network.js +0 -78
- package/dist/media-cli/options.generated.js +0 -3312
- package/dist/media-cli/preset.d.ts +0 -11
- package/dist/media-cli/preset.js +0 -57
- package/dist/media-cli/resolution-path.d.ts +0 -23
- package/dist/media-cli/resolution-path.js +0 -217
- package/dist/media-cli/resolver.js +0 -494
- package/dist/media-cli/resources.d.ts +0 -16
- package/dist/media-cli/resources.js +0 -187
- package/dist/media-cli/shim.js +0 -52
- package/dist/media-cli/tee.d.ts +0 -6
- package/dist/media-cli/tee.js +0 -38
- package/dist/office-package/zip-sync.js +0 -111
- package/dist/remote-execution/binary.js +0 -178
- package/dist/remote-execution/callback-result.js +0 -26
- package/dist/remote-execution/canonical-capabilities.d.ts +0 -5
- package/dist/remote-execution/canonical-capabilities.js +0 -45
- package/dist/remote-execution/canonical-metadata.d.ts +0 -4
- package/dist/remote-execution/canonical-metadata.js +0 -32
- package/dist/remote-execution/client.js +0 -824
- package/dist/remote-execution/deployment.js +0 -131
- package/dist/remote-execution/descriptors.js +0 -267
- package/dist/remote-execution/effects.js +0 -357
- package/dist/remote-execution/endpoint.js +0 -224
- package/dist/remote-execution/files.js +0 -291
- package/dist/remote-execution/hosting-operation.js +0 -26
- package/dist/remote-execution/hosting-request.d.ts +0 -4
- package/dist/remote-execution/hosting-request.js +0 -12
- package/dist/remote-execution/hosting-stream.d.ts +0 -8
- package/dist/remote-execution/hosting-stream.js +0 -64
- package/dist/remote-execution/index.js +0 -18
- package/dist/remote-execution/invocation-admission.d.ts +0 -3
- package/dist/remote-execution/invocation-admission.js +0 -17
- package/dist/remote-execution/job-binding.js +0 -1269
- package/dist/remote-execution/materializations.js +0 -284
- package/dist/remote-execution/modal-driver.js +0 -90
- package/dist/remote-execution/native-result.d.ts +0 -3
- package/dist/remote-execution/native-result.js +0 -16
- package/dist/remote-execution/output-freshness.d.ts +0 -4
- package/dist/remote-execution/output-freshness.js +0 -19
- package/dist/remote-execution/output-retrieval.js +0 -474
- package/dist/remote-execution/process-http.js +0 -607
- package/dist/remote-execution/process.js +0 -577
- package/dist/remote-execution/protocol.js +0 -208
- package/dist/remote-execution/relay.js +0 -91
- package/dist/remote-execution/rest-driver.js +0 -93
- package/dist/remote-execution/upload-descriptor.js +0 -201
- package/dist/remote-execution/upload-protocol.js +0 -62
- package/dist/remote-execution/uploads.js +0 -324
- package/dist/remote-execution/wire-json.d.ts +0 -4
- package/dist/remote-execution/wire-json.js +0 -44
- package/dist/remote-execution/wire-validation.js +0 -131
- package/dist/remote-execution/wire.generated.js +0 -4224
- package/dist/safe-bash/chunks/chunk-GDYNCWRV.js +0 -161
- package/dist/safe-bash/chunks/chunk-IWDICZVK.js +0 -20
- package/dist/safe-bash/chunks/chunk-MHMMRCYC.js +0 -3464
- package/dist/safe-bash/chunks/chunk-UE5KZDEK.js +0 -77
- package/dist/safe-bash/chunks/csvkit-TACDU7FC.js +0 -1618
- package/dist/safe-bash/chunks/implementation-MLFHUQ5M.js +0 -133
- package/dist/safe-bash/commands/csvkit/sync.js +0 -1639
- package/dist/safe-bash/commands/node/unconfigured.d.ts +0 -3
- package/dist/safe-bash/commands/node/unconfigured.js +0 -10
- package/dist/safe-bash/commands/pandoc/implementation.d.ts +0 -8
- package/dist/safe-bash/commands/pandoc/implementation.js +0 -94
- package/dist/safe-bash-mcp/index.browser.js +0 -9167
- package/dist/safe-bash/command-chunks/{chunk-ZRRBXU3M.js → chunk-GIN5GUDP.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-LAOM65EE.js → chunk-IEO4XVN6.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-BXCXRYVU.js → chunk-JNANXVJV.js} +0 -0
- package/dist/safe-bash/command-chunks/{chunk-364TMWBT.js → chunk-MWREVL44.js} +6 -6
- package/dist/safe-bash/command-chunks/{chunk-464RVBGB.js → chunk-Q5TDKFHK.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-AJR3AQYA.js → chunk-UKX3LZHR.js} +0 -0
- package/dist/safe-bash/command-chunks/{chunk-XIIBTGC5.js → chunk-XPXEQKRW.js} +9 -9
- package/dist/safe-bash/command-chunks/{chunk-FDBUV4HJ.js → chunk-Y4HGTG3E.js} +3 -3
- /package/dist/{safe-bash/commands/csvkit → safe-bash-command-csvkit}/sync.d.ts +0 -0
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
import { validateWire } from './wire-validation.js';
|
|
2
|
-
export { validateWire };
|
|
3
|
-
export { validateCallbackResult } from './callback-result.js';
|
|
4
|
-
/** Readiness is more than a schema-shaped state label. Use the same progress
|
|
5
|
-
* semantics on server results and recovered SDK observations. */
|
|
6
|
-
export function validateDependencyMaterialization(value) {
|
|
7
|
-
validateWire('DependencyMaterialization', value);
|
|
8
|
-
const status = value;
|
|
9
|
-
if (new Set(status.callbackGrantIds).size !== status.callbackGrantIds.length
|
|
10
|
-
|| status.entries.some((entry, index) => entry.index !== index || entry.state === 'applied' && entry.revision === null)
|
|
11
|
-
|| status.state === 'ready' && (status.directoryRevision === null || status.error !== undefined || status.entries.some(entry => entry.state !== 'applied')))
|
|
12
|
-
throw new TypeError('Invalid dependency preparation progress or readiness');
|
|
13
|
-
}
|
|
14
|
-
function reject() { throw new TypeError('Invalid dependency manifest'); }
|
|
15
|
-
function record(value, keys) {
|
|
16
|
-
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
17
|
-
reject();
|
|
18
|
-
const result = value;
|
|
19
|
-
if (Object.keys(result).some(key => !keys.includes(key)))
|
|
20
|
-
reject();
|
|
21
|
-
return result;
|
|
22
|
-
}
|
|
23
|
-
function id(value) {
|
|
24
|
-
if (typeof value !== 'string' || value.length === 0 || value.length > 256)
|
|
25
|
-
reject();
|
|
26
|
-
}
|
|
27
|
-
function bytes(value, limit) {
|
|
28
|
-
if (!Array.isArray(value) || !value.length || value.length > limit)
|
|
29
|
-
reject();
|
|
30
|
-
// Iteration visits holes as undefined; Array#some skips them and would admit
|
|
31
|
-
// SDK values whose JSON wire representation contains invalid null octets.
|
|
32
|
-
for (const n of value)
|
|
33
|
-
if (!Number.isInteger(n) || n < 1 || n > 255)
|
|
34
|
-
reject();
|
|
35
|
-
}
|
|
36
|
-
function decimal(value, signed = false) {
|
|
37
|
-
if (typeof value !== 'string' || !value.length || value.length > 20)
|
|
38
|
-
reject();
|
|
39
|
-
const digits = signed && value.startsWith('-') ? value.slice(1) : value;
|
|
40
|
-
if (!digits.length || (digits.length > 1 && digits[0] === '0') || value === '-0'
|
|
41
|
-
|| Array.from(digits).some(c => c < '0' || c > '9'))
|
|
42
|
-
reject();
|
|
43
|
-
const n = BigInt(value);
|
|
44
|
-
if (n < (signed ? -9223372036854775808n : 0n) || n > 9223372036854775807n)
|
|
45
|
-
reject();
|
|
46
|
-
}
|
|
47
|
-
/** Pure wire/structural validation shared by REST and SDK. Does no IO and grants
|
|
48
|
-
* no authority. Server admission must additionally verify bindings, collisions,
|
|
49
|
-
* blobs, snapshot guarantees and callback rights using authenticated host state. */
|
|
50
|
-
/** Preparation accepts host-issued identities, never caller-selected physical
|
|
51
|
-
* destinations. Scope and revision authority are separately checked by the host. */
|
|
52
|
-
export function validateDependencyMaterializeRequest(value) {
|
|
53
|
-
const request = record(value, ['sessionId', 'epoch', 'manifestId', 'manifestRevision', 'bindingId', 'expectedDirectoryRevision', 'operationKey']);
|
|
54
|
-
for (const field of ['sessionId', 'epoch', 'manifestId', 'manifestRevision', 'bindingId', 'operationKey'])
|
|
55
|
-
id(request[field]);
|
|
56
|
-
if (request.expectedDirectoryRevision !== null)
|
|
57
|
-
id(request.expectedDirectoryRevision);
|
|
58
|
-
}
|
|
59
|
-
export function validateDependencyManifest(value, limits) {
|
|
60
|
-
if (!Number.isSafeInteger(limits.maxEntries) || limits.maxEntries < 0
|
|
61
|
-
|| !Number.isSafeInteger(limits.maxPathBytes) || limits.maxPathBytes < 1)
|
|
62
|
-
reject();
|
|
63
|
-
const m = record(value, ['version', 'sessionId', 'epoch', 'namespaceId', 'revision', 'logicalRoot', 'cwd', 'sourceAuthorityId', 'entries']);
|
|
64
|
-
if (m.version !== 1)
|
|
65
|
-
reject();
|
|
66
|
-
for (const key of ['sessionId', 'epoch', 'namespaceId', 'revision', 'sourceAuthorityId'])
|
|
67
|
-
id(m[key]);
|
|
68
|
-
for (const key of ['logicalRoot', 'cwd']) {
|
|
69
|
-
bytes(m[key], limits.maxPathBytes);
|
|
70
|
-
if (m[key][0] !== 47)
|
|
71
|
-
reject();
|
|
72
|
-
}
|
|
73
|
-
if (!Array.isArray(m.entries) || m.entries.length > limits.maxEntries)
|
|
74
|
-
reject();
|
|
75
|
-
const paths = new Map();
|
|
76
|
-
const identities = new Map();
|
|
77
|
-
let previous;
|
|
78
|
-
for (const raw of m.entries) {
|
|
79
|
-
const kind = record(raw, ['kind', 'path', 'source', 'metadata', 'blob', 'identityRef', 'target', 'operations']).kind;
|
|
80
|
-
const fields = { directory: [], file: ['blob', 'identityRef'], symlink: ['target'], hardlink: ['identityRef'], 'output-intent': ['operations'] };
|
|
81
|
-
if (typeof kind !== 'string' || !Object.hasOwn(fields, kind))
|
|
82
|
-
reject();
|
|
83
|
-
const entry = record(raw, ['kind', 'path', 'source', 'metadata', ...fields[kind]]);
|
|
84
|
-
if (!Array.isArray(entry.path) || !entry.path.length)
|
|
85
|
-
reject();
|
|
86
|
-
const components = [];
|
|
87
|
-
for (const component of entry.path) {
|
|
88
|
-
bytes(component, limits.maxPathBytes);
|
|
89
|
-
if (component.includes(47) || (component.every(n => n === 46) && component.length <= 2))
|
|
90
|
-
reject();
|
|
91
|
-
components.push(component);
|
|
92
|
-
}
|
|
93
|
-
const flat = components.flatMap((c, i) => i === 0 ? c : [47, ...c]);
|
|
94
|
-
if (flat.length > limits.maxPathBytes)
|
|
95
|
-
reject();
|
|
96
|
-
const key = JSON.stringify(components);
|
|
97
|
-
if (paths.has(key))
|
|
98
|
-
reject();
|
|
99
|
-
if (components.length > 1 && paths.get(JSON.stringify(components.slice(0, -1))) !== 'directory')
|
|
100
|
-
reject();
|
|
101
|
-
if (previous) {
|
|
102
|
-
const different = flat.findIndex((n, i) => n !== previous?.[i]);
|
|
103
|
-
if (different < 0 || flat[different] < (previous[different] ?? -1))
|
|
104
|
-
reject();
|
|
105
|
-
}
|
|
106
|
-
previous = flat;
|
|
107
|
-
paths.set(key, kind);
|
|
108
|
-
const source = record(entry.source, ['authorityId', 'path', 'freshness', 'observedVersion', 'retainedIdentity', 'snapshotId', 'callbackGrantId']);
|
|
109
|
-
id(source.authorityId);
|
|
110
|
-
if (source.authorityId !== m.sourceAuthorityId)
|
|
111
|
-
reject();
|
|
112
|
-
bytes(source.path, limits.maxPathBytes);
|
|
113
|
-
if (source.path[0] !== 47)
|
|
114
|
-
reject();
|
|
115
|
-
for (const k of ['observedVersion', 'retainedIdentity'])
|
|
116
|
-
if (source[k] !== null)
|
|
117
|
-
id(source[k]);
|
|
118
|
-
if (source.freshness === 'immutable')
|
|
119
|
-
id(source.snapshotId);
|
|
120
|
-
else if (source.freshness === 'live' || source.freshness === 'revalidate-on-open')
|
|
121
|
-
id(source.callbackGrantId);
|
|
122
|
-
else
|
|
123
|
-
reject();
|
|
124
|
-
if (source.snapshotId !== undefined)
|
|
125
|
-
id(source.snapshotId);
|
|
126
|
-
if (source.callbackGrantId !== undefined)
|
|
127
|
-
id(source.callbackGrantId);
|
|
128
|
-
if (entry.metadata !== undefined) {
|
|
129
|
-
const meta = record(entry.metadata, ['mode', 'atimeNs', 'mtimeNs']);
|
|
130
|
-
if (meta.mode !== undefined && (typeof meta.mode !== 'number' || !Number.isInteger(meta.mode) || meta.mode < 0 || meta.mode > 0o7777))
|
|
131
|
-
reject();
|
|
132
|
-
for (const k of ['atimeNs', 'mtimeNs'])
|
|
133
|
-
if (meta[k] !== undefined)
|
|
134
|
-
decimal(meta[k], true);
|
|
135
|
-
}
|
|
136
|
-
if (kind === 'file') {
|
|
137
|
-
const blob = record(entry.blob, ['blobId', 'size', 'sha256']);
|
|
138
|
-
id(blob.blobId);
|
|
139
|
-
decimal(blob.size);
|
|
140
|
-
if (typeof blob.sha256 !== 'string' || blob.sha256.length !== 64
|
|
141
|
-
|| Array.from(blob.sha256).some(c => !'0123456789abcdef'.includes(c)))
|
|
142
|
-
reject();
|
|
143
|
-
if (entry.identityRef !== undefined) {
|
|
144
|
-
id(entry.identityRef);
|
|
145
|
-
if (identities.has(entry.identityRef))
|
|
146
|
-
reject();
|
|
147
|
-
identities.set(entry.identityRef, {});
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
if (kind === 'hardlink') {
|
|
151
|
-
id(entry.identityRef);
|
|
152
|
-
if (!identities.has(entry.identityRef))
|
|
153
|
-
reject();
|
|
154
|
-
}
|
|
155
|
-
if ((kind === 'file' || kind === 'hardlink') && entry.identityRef !== undefined && entry.metadata !== undefined) {
|
|
156
|
-
const metadata = entry.metadata;
|
|
157
|
-
const requested = identities.get(entry.identityRef);
|
|
158
|
-
for (const field of ['mode', 'atimeNs', 'mtimeNs']) {
|
|
159
|
-
if (metadata[field] === undefined)
|
|
160
|
-
continue;
|
|
161
|
-
if (requested[field] !== undefined && requested[field] !== metadata[field])
|
|
162
|
-
reject();
|
|
163
|
-
requested[field] = metadata[field];
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
if (kind === 'symlink')
|
|
167
|
-
bytes(entry.target, limits.maxPathBytes);
|
|
168
|
-
if (kind === 'output-intent') {
|
|
169
|
-
if (!Array.isArray(entry.operations) || !entry.operations.length
|
|
170
|
-
|| new Set(entry.operations).size !== entry.operations.length)
|
|
171
|
-
reject();
|
|
172
|
-
for (const op of entry.operations)
|
|
173
|
-
if (!['create', 'truncate', 'append', 'replace'].includes(op))
|
|
174
|
-
reject();
|
|
175
|
-
if (entry.metadata !== undefined || source.freshness === 'immutable')
|
|
176
|
-
reject();
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
/** Pure invocation admission. Host admission must separately match the manifest,
|
|
181
|
-
* ready revision and canonical cwd, and qualify the native launcher's byte support.
|
|
182
|
-
* maxArgvBytes includes one native NUL terminator per argument, never pointer bytes. */
|
|
183
|
-
export function validateManifestInvocation(value, limits) {
|
|
184
|
-
for (const limit of [limits.maxArguments, limits.maxArgvBytes]) {
|
|
185
|
-
if (!Number.isSafeInteger(limit) || limit < 0)
|
|
186
|
-
reject();
|
|
187
|
-
}
|
|
188
|
-
if (!Number.isSafeInteger(limits.maxPathBytes) || limits.maxPathBytes < 1)
|
|
189
|
-
reject();
|
|
190
|
-
const invocation = record(value, ['manifestId', 'manifestRevision', 'directoryRevision', 'cwd', 'originalArgv']);
|
|
191
|
-
for (const field of ['manifestId', 'manifestRevision', 'directoryRevision'])
|
|
192
|
-
id(invocation[field]);
|
|
193
|
-
bytes(invocation.cwd, limits.maxPathBytes);
|
|
194
|
-
if (invocation.cwd[0] !== 47)
|
|
195
|
-
reject();
|
|
196
|
-
if (!Array.isArray(invocation.originalArgv) || invocation.originalArgv.length > limits.maxArguments)
|
|
197
|
-
reject();
|
|
198
|
-
let remaining = limits.maxArgvBytes;
|
|
199
|
-
for (const argument of invocation.originalArgv) {
|
|
200
|
-
if (!Array.isArray(argument) || argument.length >= remaining)
|
|
201
|
-
reject();
|
|
202
|
-
// Empty arguments are valid; holes and NUL octets are never empty arguments.
|
|
203
|
-
if (argument.length > 0)
|
|
204
|
-
bytes(argument, remaining - 1);
|
|
205
|
-
remaining -= argument.length + 1;
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
export { uploadInteger, validateUploadRequest } from './upload-protocol.js';
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/** Transport-only forwarding. Native retains TLS, HTTP, redirects, cookies,
|
|
2
|
-
* ranges, retries and live reads. A runtime socket bridge is required to restore
|
|
3
|
-
* endpoint metadata; merely forwarding packets does not qualify peer identity.
|
|
4
|
-
* Frames are bounded to 1 MiB. Stream adapters may frame a larger byte stream;
|
|
5
|
-
* datagram adapters must reject oversized packets without splitting them. */
|
|
6
|
-
export async function relayTransport(semantics, left, right, signal) {
|
|
7
|
-
// Retain the authenticated adapters and their retirement methods before any
|
|
8
|
-
// I/O yields. Later producer mutation must not substitute a different port.
|
|
9
|
-
[left, right] = [left, right].map(port => ({
|
|
10
|
-
receive: port.receive.bind(port),
|
|
11
|
-
send: port.send.bind(port),
|
|
12
|
-
close: port.close.bind(port),
|
|
13
|
-
}));
|
|
14
|
-
const controller = new AbortController();
|
|
15
|
-
// AbortController replaces an undefined reason with AbortError. Retain the
|
|
16
|
-
// first adapter failure separately so cancellation cannot rewrite it.
|
|
17
|
-
let transportFailure;
|
|
18
|
-
const abort = () => controller.abort(signal?.reason);
|
|
19
|
-
signal?.addEventListener('abort', abort, { once: true });
|
|
20
|
-
if (signal?.aborted)
|
|
21
|
-
abort();
|
|
22
|
-
async function forward(source, target) {
|
|
23
|
-
let ended = false;
|
|
24
|
-
try {
|
|
25
|
-
for (;;) {
|
|
26
|
-
controller.signal.throwIfAborted();
|
|
27
|
-
const received = await source.receive(controller.signal);
|
|
28
|
-
controller.signal.throwIfAborted();
|
|
29
|
-
if (received === null)
|
|
30
|
-
return;
|
|
31
|
-
// Validate and forward the same metadata, even for adapter accessors.
|
|
32
|
-
const frame = { ...received };
|
|
33
|
-
if (semantics === 'datagram' ? frame.kind !== 'datagram' : frame.kind !== 'bytes' && frame.kind !== 'end') {
|
|
34
|
-
throw new Error('Relay frame violates admitted transport semantics');
|
|
35
|
-
}
|
|
36
|
-
if (frame.kind !== 'end' && !(frame.payload instanceof Uint8Array)) {
|
|
37
|
-
throw new Error('Relay frame requires native payload bytes');
|
|
38
|
-
}
|
|
39
|
-
// Typed-array metadata can be shadowed by an adapter. Bound the native
|
|
40
|
-
// buffer before allocation; datagrams must never be split to fit.
|
|
41
|
-
if (frame.kind !== 'end' && Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Uint8Array.prototype), 'byteLength').get.call(frame.payload) > 1024 * 1024) {
|
|
42
|
-
throw new Error('Relay frame exceeds transport limit');
|
|
43
|
-
}
|
|
44
|
-
if (frame.kind === 'datagram' && (typeof frame.source !== 'string' || !frame.source
|
|
45
|
-
|| typeof frame.destination !== 'string' || !frame.destination)) {
|
|
46
|
-
throw new Error('Relay frame requires native endpoint identities');
|
|
47
|
-
}
|
|
48
|
-
if (ended)
|
|
49
|
-
throw new Error('Relay received data after stream half-close');
|
|
50
|
-
if (frame.kind === 'end')
|
|
51
|
-
ended = true;
|
|
52
|
-
// Native metadata accessors can cancel while the frame is captured.
|
|
53
|
-
// Do not hand canceled work to a transport adapter after validation.
|
|
54
|
-
controller.signal.throwIfAborted();
|
|
55
|
-
await target.send(frame.kind === 'end' ? { kind: 'end' } : { ...frame, payload: new Uint8Array(frame.payload) }, controller.signal);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
if (!controller.signal.aborted)
|
|
60
|
-
transportFailure = { cause: error };
|
|
61
|
-
controller.abort(error);
|
|
62
|
-
throw error;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
const failures = [];
|
|
66
|
-
try {
|
|
67
|
-
if (semantics !== 'stream' && semantics !== 'datagram') {
|
|
68
|
-
throw new Error('Relay transport requires supported semantics');
|
|
69
|
-
}
|
|
70
|
-
const results = await Promise.allSettled([forward(left, right), forward(right, left)]);
|
|
71
|
-
if (controller.signal.aborted)
|
|
72
|
-
throw transportFailure ? transportFailure.cause : controller.signal.reason;
|
|
73
|
-
for (const result of results)
|
|
74
|
-
if (result.status === 'rejected')
|
|
75
|
-
throw result.reason;
|
|
76
|
-
}
|
|
77
|
-
catch (error) {
|
|
78
|
-
failures.push(error);
|
|
79
|
-
}
|
|
80
|
-
finally {
|
|
81
|
-
signal?.removeEventListener('abort', abort);
|
|
82
|
-
const cleanup = await Promise.allSettled([left, right].map(port => Promise.resolve().then(() => port.close())));
|
|
83
|
-
for (const result of cleanup)
|
|
84
|
-
if (result.status === 'rejected')
|
|
85
|
-
failures.push(result.reason);
|
|
86
|
-
}
|
|
87
|
-
if (failures.length === 1)
|
|
88
|
-
throw failures[0];
|
|
89
|
-
if (failures.length > 1)
|
|
90
|
-
throw new AggregateError(failures, 'Relay transport retirement failed');
|
|
91
|
-
}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { boundedTransfer } from './hosting-stream.js';
|
|
2
|
-
import { hostingRequest } from './hosting-request.js';
|
|
3
|
-
import { hostingOperation } from './hosting-operation.js';
|
|
4
|
-
/** The trusted resolver binds tenancy and readiness. Resolving on each request
|
|
5
|
-
* permits token/tunnel rotation and restart without replaying a request body.
|
|
6
|
-
* Existing servers are never provisioned or destroyed by this driver. */
|
|
7
|
-
export function createRestExecutionDriver(config, resolve, fetch = globalThis.fetch, now = Date.now, retire) {
|
|
8
|
-
if (config.transport !== 'https')
|
|
9
|
-
throw new TypeError('HTTPS transport required');
|
|
10
|
-
if (!resolve && !config.endpoints)
|
|
11
|
-
throw new TypeError('Existing-server bindings or resolver required');
|
|
12
|
-
const bindings = new Map(Object.entries(config.endpoints ?? {}).map(([namespaceId, endpoint]) => [namespaceId, { ...endpoint }]));
|
|
13
|
-
const endpoints = new Map();
|
|
14
|
-
const cleanups = new Map();
|
|
15
|
-
return {
|
|
16
|
-
async acquire(namespaceId) {
|
|
17
|
-
if (!namespaceId)
|
|
18
|
-
throw new TypeError('Trusted namespace identity required');
|
|
19
|
-
await cleanups.get(namespaceId);
|
|
20
|
-
let entry = endpoints.get(namespaceId);
|
|
21
|
-
if (!entry) {
|
|
22
|
-
entry = { retired: false, abort: new AbortController() };
|
|
23
|
-
endpoints.set(namespaceId, entry);
|
|
24
|
-
}
|
|
25
|
-
const lease = entry;
|
|
26
|
-
if (lease.retired)
|
|
27
|
-
throw new Error('Endpoint retired');
|
|
28
|
-
return { async fetch(request) {
|
|
29
|
-
if (lease.retired)
|
|
30
|
-
throw new Error('Endpoint retired');
|
|
31
|
-
request.signal.throwIfAborted();
|
|
32
|
-
const signal = AbortSignal.any([request.signal, lease.abort.signal]);
|
|
33
|
-
const endpoint = await hostingOperation(signal, async () => {
|
|
34
|
-
if (resolve)
|
|
35
|
-
return resolve(namespaceId, signal);
|
|
36
|
-
const binding = bindings.get(namespaceId);
|
|
37
|
-
if (!binding)
|
|
38
|
-
throw new Error('Existing-server tenant binding required');
|
|
39
|
-
return binding;
|
|
40
|
-
});
|
|
41
|
-
signal.throwIfAborted();
|
|
42
|
-
if (lease.retired)
|
|
43
|
-
throw new Error('Endpoint retired');
|
|
44
|
-
const remaining = endpoint.expiresAt - now();
|
|
45
|
-
if (!Number.isFinite(endpoint.expiresAt) || remaining <= 0)
|
|
46
|
-
throw new Error('Endpoint lease expired');
|
|
47
|
-
const origin = new URL(endpoint.origin);
|
|
48
|
-
if (origin.protocol !== 'https:' || origin.username || origin.password || origin.pathname !== '/' || origin.search || origin.hash)
|
|
49
|
-
throw new TypeError('Credential-free HTTPS origin required');
|
|
50
|
-
const incoming = new URL(request.url);
|
|
51
|
-
const target = new URL(origin);
|
|
52
|
-
target.pathname = incoming.pathname;
|
|
53
|
-
target.search = incoming.search;
|
|
54
|
-
// Retain the original stream and protocol headers without eager stdin pulls.
|
|
55
|
-
// Keep the deadline attached to the transport after headers arrive, so
|
|
56
|
-
// native fetch also cancels streaming request and response bodies at expiry.
|
|
57
|
-
const abort = new AbortController();
|
|
58
|
-
const transportSignal = AbortSignal.any([signal, abort.signal, AbortSignal.timeout(Math.min(Math.ceil(remaining), 2147483647))]);
|
|
59
|
-
const body = request.body ? boundedTransfer(request.body, undefined, transportSignal, abort, false, false) : null;
|
|
60
|
-
try {
|
|
61
|
-
const response = await hostingOperation(transportSignal, () => fetch(hostingRequest(request, target, { body, signal: transportSignal, redirect: 'manual' })), response => response.body?.cancel(transportSignal.reason));
|
|
62
|
-
const output = response.body ? boundedTransfer(response.body, undefined, transportSignal, abort) : null;
|
|
63
|
-
return new Response(output, { status: response.status, statusText: response.statusText, headers: response.headers });
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
abort.abort(error);
|
|
67
|
-
throw error;
|
|
68
|
-
}
|
|
69
|
-
} };
|
|
70
|
-
},
|
|
71
|
-
async destroy(namespaceId) {
|
|
72
|
-
if (!namespaceId)
|
|
73
|
-
throw new TypeError('Trusted namespace identity required');
|
|
74
|
-
const pending = cleanups.get(namespaceId);
|
|
75
|
-
if (pending)
|
|
76
|
-
return pending;
|
|
77
|
-
// Old handles cannot attach to a replacement tenant binding. Failed
|
|
78
|
-
// cleanup stays quarantined until the operator explicitly retries it.
|
|
79
|
-
const entry = endpoints.get(namespaceId) ?? { retired: false, abort: new AbortController() };
|
|
80
|
-
entry.retired = true;
|
|
81
|
-
endpoints.set(namespaceId, entry);
|
|
82
|
-
entry.abort.abort(new Error('Endpoint retired'));
|
|
83
|
-
const cleanup = Promise.resolve().then(() => retire?.(namespaceId)).then(() => { endpoints.delete(namespaceId); });
|
|
84
|
-
cleanups.set(namespaceId, cleanup);
|
|
85
|
-
try {
|
|
86
|
-
await cleanup;
|
|
87
|
-
}
|
|
88
|
-
finally {
|
|
89
|
-
cleanups.delete(namespaceId);
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
};
|
|
93
|
-
}
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
import { UploadError, uploadInteger, uploadRouteId, validateUploadRequest } from './upload-protocol.js';
|
|
2
|
-
/** The caller owns descriptor admission/accounting and close. This function never
|
|
3
|
-
* opens paths, replaces descriptors, or upgrades a live read to a snapshot.
|
|
4
|
-
* A rejected chunk/commit request has an unknown remote outcome: retain the
|
|
5
|
-
* upload for inspection instead of destroying resumable progress. Recovery must
|
|
6
|
-
* inspect its offset and validate the same canonical freshness binding. */
|
|
7
|
-
export async function uploadDescriptor(client, descriptor, declaration, options) {
|
|
8
|
-
// Host callbacks may await or mutate borrowed configuration. Retain the
|
|
9
|
-
// admitted bounds and recovery cursor for this capture.
|
|
10
|
-
options = { ...options, resume: options.resume ? { ...options.resume, source: { ...options.resume.source } } : undefined };
|
|
11
|
-
options.signal?.throwIfAborted();
|
|
12
|
-
if (!declaration || typeof declaration !== 'object' || Array.isArray(declaration))
|
|
13
|
-
throw new UploadError(400, 'Invalid upload request');
|
|
14
|
-
// Validate the same owned size/digest later sent and checked against receipts.
|
|
15
|
-
// Host getters cannot substitute a second declaration after admission.
|
|
16
|
-
declaration = { ...declaration };
|
|
17
|
-
validateUploadRequest(declaration);
|
|
18
|
-
const size = uploadInteger(declaration.size);
|
|
19
|
-
let offset = uploadInteger(options.resume?.offset ?? '0');
|
|
20
|
-
if (options.resume)
|
|
21
|
-
uploadRouteId(options.resume.uploadId);
|
|
22
|
-
if (offset > size)
|
|
23
|
-
throw new UploadError(400, 'Resume exceeds declared size');
|
|
24
|
-
if (!Number.isSafeInteger(options.maxChunkBytes) || options.maxChunkBytes < 1)
|
|
25
|
-
throw new UploadError(400, 'Invalid chunk bound');
|
|
26
|
-
const exact = descriptor.exact;
|
|
27
|
-
if (!exact && size > BigInt(Number.MAX_SAFE_INTEGER))
|
|
28
|
-
throw new UploadError(422, 'Canonical exact descriptor required');
|
|
29
|
-
if (size > 9223372036854775807n)
|
|
30
|
-
throw new UploadError(422, 'Canonical descriptor offset exceeds signed 64-bit profile');
|
|
31
|
-
if (!options.freshness || !['immutable', 'revalidate-on-open'].includes(options.freshness.profile))
|
|
32
|
-
throw new UploadError(422, 'Stable source freshness binding required');
|
|
33
|
-
const { signal, freshness } = options;
|
|
34
|
-
const { descriptor: authorizedDescriptor, identity, version, profile } = freshness;
|
|
35
|
-
if (authorizedDescriptor !== descriptor || identity === null || !['object', 'symbol'].includes(typeof identity)
|
|
36
|
-
|| typeof version !== 'string' || !version.length || version.length > 256
|
|
37
|
-
|| typeof freshness.assertCurrent !== 'function' || typeof freshness.invalidate !== 'function') {
|
|
38
|
-
throw new UploadError(422, 'Qualified retained source identity and version required');
|
|
39
|
-
}
|
|
40
|
-
if (options.resume && (options.resume.source.identity !== identity || options.resume.source.version !== version)) {
|
|
41
|
-
throw new UploadError(422, 'Resume belongs to another canonical object or content version');
|
|
42
|
-
}
|
|
43
|
-
// Retain the authorized capabilities before host callbacks can await. Keeping
|
|
44
|
-
// their receivers preserves backend revision state without allowing method or
|
|
45
|
-
// exact-facet replacement to change this capture's reader or freshness guard.
|
|
46
|
-
const read = descriptor.read.bind(descriptor);
|
|
47
|
-
const exactRead = exact?.read.bind(exact);
|
|
48
|
-
const assertCurrent = freshness.assertCurrent.bind(freshness);
|
|
49
|
-
const invalidate = freshness.invalidate.bind(freshness);
|
|
50
|
-
// Keep this capture on its admitted authenticated transport, including recovery
|
|
51
|
-
// and retirement. Awaited host guards cannot substitute another client facet.
|
|
52
|
-
client = Object.freeze({
|
|
53
|
-
beginUpload: client.beginUpload.bind(client), inspectUpload: client.inspectUpload.bind(client),
|
|
54
|
-
uploadChunk: client.uploadChunk.bind(client), commitUpload: client.commitUpload.bind(client),
|
|
55
|
-
abortUpload: client.abortUpload.bind(client),
|
|
56
|
-
});
|
|
57
|
-
let id = options.resume?.uploadId;
|
|
58
|
-
let admitted = false;
|
|
59
|
-
let unknownOutcome = false;
|
|
60
|
-
let stale = false;
|
|
61
|
-
function invalidateSource(cause) {
|
|
62
|
-
stale = true;
|
|
63
|
-
try {
|
|
64
|
-
invalidate(cause);
|
|
65
|
-
}
|
|
66
|
-
catch (failure) {
|
|
67
|
-
throw new AggregateError([cause, failure], 'Source freshness and manifest invalidation failed', { cause });
|
|
68
|
-
}
|
|
69
|
-
throw cause;
|
|
70
|
-
}
|
|
71
|
-
async function current() {
|
|
72
|
-
signal?.throwIfAborted();
|
|
73
|
-
try {
|
|
74
|
-
if (freshness.descriptor !== authorizedDescriptor || freshness.identity !== identity || freshness.version !== version || freshness.profile !== profile)
|
|
75
|
-
throw new UploadError(409, 'Canonical capture binding changed');
|
|
76
|
-
await assertCurrent(signal);
|
|
77
|
-
if (freshness.descriptor !== authorizedDescriptor || freshness.identity !== identity || freshness.version !== version || freshness.profile !== profile)
|
|
78
|
-
throw new UploadError(409, 'Canonical capture binding changed');
|
|
79
|
-
}
|
|
80
|
-
catch (error) {
|
|
81
|
-
// A canceled guard did not establish that the canonical source changed.
|
|
82
|
-
// Preserve resumable staging until this capture has actually admitted it.
|
|
83
|
-
signal?.throwIfAborted();
|
|
84
|
-
invalidateSource(error);
|
|
85
|
-
}
|
|
86
|
-
signal?.throwIfAborted();
|
|
87
|
-
}
|
|
88
|
-
try {
|
|
89
|
-
await current();
|
|
90
|
-
if (id) {
|
|
91
|
-
const { uploadId, state, size: receiptSize, digest, committedOffset, blobId } = await client.inspectUpload(id, signal);
|
|
92
|
-
const receipt = { uploadId, state, size: receiptSize, digest, committedOffset, blobId };
|
|
93
|
-
await current();
|
|
94
|
-
if (receipt.uploadId !== id || !['open', 'committed'].includes(receipt.state) || receipt.size !== declaration.size
|
|
95
|
-
|| receipt.digest !== declaration.digest || receipt.committedOffset !== String(offset))
|
|
96
|
-
throw new UploadError(409, 'Resume declaration or acknowledged offset mismatch');
|
|
97
|
-
if (receipt.state === 'committed') {
|
|
98
|
-
if (offset !== size || typeof receipt.blobId !== 'string' || !receipt.blobId.length || receipt.blobId.length > 256)
|
|
99
|
-
throw new UploadError(409, 'Committed upload acknowledgement mismatch');
|
|
100
|
-
try {
|
|
101
|
-
uploadRouteId(receipt.blobId);
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
throw new UploadError(409, 'Unroutable committed upload acknowledgement');
|
|
105
|
-
}
|
|
106
|
-
return { size: declaration.size, digest: declaration.digest, blobId: receipt.blobId };
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
unknownOutcome = true;
|
|
111
|
-
// Acquisition borrows its own copy. The capture's admitted size/digest
|
|
112
|
-
// remain authoritative for every subsequent read and acknowledgment.
|
|
113
|
-
const { uploadId, state, size: receiptSize, digest, committedOffset } = await client.beginUpload({ ...declaration }, signal);
|
|
114
|
-
const receipt = { uploadId, state, size: receiptSize, digest, committedOffset };
|
|
115
|
-
id = receipt.uploadId;
|
|
116
|
-
admitted = true;
|
|
117
|
-
if (typeof id !== 'string' || !id.length || id.length > 256 || receipt.state !== 'open'
|
|
118
|
-
|| receipt.size !== declaration.size || receipt.digest !== declaration.digest || receipt.committedOffset !== '0') {
|
|
119
|
-
throw new UploadError(502, 'Upload acquisition acknowledgement mismatch');
|
|
120
|
-
}
|
|
121
|
-
try {
|
|
122
|
-
uploadRouteId(id);
|
|
123
|
-
}
|
|
124
|
-
catch {
|
|
125
|
-
throw new UploadError(502, 'Unroutable upload acquisition acknowledgement');
|
|
126
|
-
}
|
|
127
|
-
unknownOutcome = false;
|
|
128
|
-
signal?.throwIfAborted();
|
|
129
|
-
}
|
|
130
|
-
admitted = true;
|
|
131
|
-
while (offset < size) {
|
|
132
|
-
await current();
|
|
133
|
-
const count = Number(size - offset > BigInt(options.maxChunkBytes) ? BigInt(options.maxChunkBytes) : size - offset);
|
|
134
|
-
const data = exactRead
|
|
135
|
-
? await exactRead(offset, count, { signal })
|
|
136
|
-
: await read(Number(offset), count, { signal });
|
|
137
|
-
if (!(data instanceof Uint8Array))
|
|
138
|
-
throw new UploadError(503, 'Invalid canonical read response');
|
|
139
|
-
const span = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Uint8Array.prototype), 'byteLength').get.call(data);
|
|
140
|
-
if (span > count)
|
|
141
|
-
throw new UploadError(503, 'Invalid canonical read response');
|
|
142
|
-
// Own the fragment before calling another asynchronous provider hook.
|
|
143
|
-
const owned = new Uint8Array(data);
|
|
144
|
-
await current();
|
|
145
|
-
if (!owned.length) {
|
|
146
|
-
invalidateSource(new UploadError(409, 'Unstable source length'));
|
|
147
|
-
}
|
|
148
|
-
const end = offset + BigInt(owned.length);
|
|
149
|
-
unknownOutcome = true;
|
|
150
|
-
const { uploadId, state, size: receiptSize, digest, committedOffset } = await client.uploadChunk(id, String(offset), owned, signal);
|
|
151
|
-
const receipt = { uploadId, state, size: receiptSize, digest, committedOffset };
|
|
152
|
-
if (receipt.uploadId !== id || receipt.state !== 'open' || receipt.size !== declaration.size
|
|
153
|
-
|| receipt.digest !== declaration.digest || receipt.committedOffset !== String(end)) {
|
|
154
|
-
throw new UploadError(502, 'Upload chunk acknowledgement mismatch; inspect before recovery');
|
|
155
|
-
}
|
|
156
|
-
unknownOutcome = false;
|
|
157
|
-
offset = end;
|
|
158
|
-
}
|
|
159
|
-
await current();
|
|
160
|
-
const extra = exactRead ? await exactRead(size, 1, { signal }) : await read(Number(size), 1, { signal });
|
|
161
|
-
if (!(extra instanceof Uint8Array))
|
|
162
|
-
throw new UploadError(503, 'Invalid canonical read response');
|
|
163
|
-
const extraSpan = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Uint8Array.prototype), 'byteLength').get.call(extra);
|
|
164
|
-
if (extraSpan > 1)
|
|
165
|
-
throw new UploadError(503, 'Invalid canonical read response');
|
|
166
|
-
if (extraSpan)
|
|
167
|
-
invalidateSource(new UploadError(409, 'Source exceeds declaration'));
|
|
168
|
-
await current();
|
|
169
|
-
unknownOutcome = true;
|
|
170
|
-
// A transport receipt is borrowed. Validate and return the same captured
|
|
171
|
-
// identity, including across the final asynchronous freshness check.
|
|
172
|
-
const { size: blobSize, digest, blobId } = await client.commitUpload(id, signal);
|
|
173
|
-
const blob = { size: blobSize, digest, blobId };
|
|
174
|
-
if (blob.size !== declaration.size || blob.digest !== declaration.digest
|
|
175
|
-
|| typeof blob.blobId !== 'string' || !blob.blobId.length || blob.blobId.length > 256)
|
|
176
|
-
throw new UploadError(502, 'Committed blob declaration or handle mismatch');
|
|
177
|
-
try {
|
|
178
|
-
uploadRouteId(blob.blobId);
|
|
179
|
-
}
|
|
180
|
-
catch {
|
|
181
|
-
throw new UploadError(502, 'Unroutable committed blob acknowledgement');
|
|
182
|
-
}
|
|
183
|
-
unknownOutcome = false;
|
|
184
|
-
await current();
|
|
185
|
-
return blob;
|
|
186
|
-
}
|
|
187
|
-
catch (error) {
|
|
188
|
-
// Await cooperative cleanup with a fresh request; preserve original failure.
|
|
189
|
-
if (id && (admitted || stale) && !unknownOutcome) {
|
|
190
|
-
try {
|
|
191
|
-
await client.abortUpload(id);
|
|
192
|
-
}
|
|
193
|
-
catch (cleanup) {
|
|
194
|
-
signal?.throwIfAborted();
|
|
195
|
-
throw new AggregateError([error, cleanup], 'Upload capture and staging retirement failed', { cause: error });
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
signal?.throwIfAborted();
|
|
199
|
-
throw error;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
/** Opaque IDs occupy one URL segment. URL dot-segment normalization must never
|
|
2
|
-
* redirect an authenticated transfer to another resource or lifecycle route. */
|
|
3
|
-
export function uploadRouteId(value) {
|
|
4
|
-
if (typeof value !== 'string' || !value.length || value.length > 256 || value === '.' || value === '..') {
|
|
5
|
-
throw new UploadError(400, 'Invalid upload resource ID');
|
|
6
|
-
}
|
|
7
|
-
return encodeURIComponent(value);
|
|
8
|
-
}
|
|
9
|
-
export class UploadError extends Error {
|
|
10
|
-
status;
|
|
11
|
-
code;
|
|
12
|
-
constructor(status, message, code) {
|
|
13
|
-
super(message);
|
|
14
|
-
this.status = status;
|
|
15
|
-
this.code = code;
|
|
16
|
-
this.name = 'UploadError';
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
export function uploadInteger(value) {
|
|
20
|
-
if (typeof value !== 'string' || !value.length || value.length > 20
|
|
21
|
-
|| (value.length > 1 && value[0] === '0') || [...value].some(c => c < '0' || c > '9')) {
|
|
22
|
-
throw new UploadError(400, 'Invalid v1 uint64');
|
|
23
|
-
}
|
|
24
|
-
const n = BigInt(value);
|
|
25
|
-
if (n > 18446744073709551615n)
|
|
26
|
-
throw new UploadError(400, 'Invalid v1 uint64');
|
|
27
|
-
return n;
|
|
28
|
-
}
|
|
29
|
-
export function validateUploadRequest(value) {
|
|
30
|
-
if (!value || typeof value !== 'object' || Array.isArray(value)
|
|
31
|
-
|| Object.keys(value).some(k => k !== 'size' && k !== 'digest'))
|
|
32
|
-
throw new UploadError(400, 'Invalid upload request');
|
|
33
|
-
const v = value;
|
|
34
|
-
uploadInteger(v.size);
|
|
35
|
-
if (typeof v.digest !== 'string' || v.digest.length !== 64 || [...v.digest].some(c => !'0123456789abcdef'.includes(c))) {
|
|
36
|
-
throw new UploadError(400, 'Invalid SHA-256');
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
/** Semantic checks after the v1 control record's shape has been validated. */
|
|
40
|
-
export function validateUploadState(upload, creationReplayed) {
|
|
41
|
-
try {
|
|
42
|
-
uploadRouteId(upload.uploadId);
|
|
43
|
-
if (upload.blobId !== undefined)
|
|
44
|
-
uploadRouteId(upload.blobId);
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
throw new UploadError(502, 'Unroutable upload acknowledgement');
|
|
48
|
-
}
|
|
49
|
-
if (uploadInteger(upload.committedOffset) > uploadInteger(upload.size)
|
|
50
|
-
|| (creationReplayed === false && (upload.state !== 'open' || upload.committedOffset !== '0'))
|
|
51
|
-
|| (upload.state !== 'committed' && upload.blobId !== undefined)
|
|
52
|
-
|| (upload.state === 'committed' && (!upload.blobId || upload.committedOffset !== upload.size))) {
|
|
53
|
-
throw new UploadError(502, 'Incomplete or inconsistent upload acknowledgement');
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
export function digestHeader(digest) {
|
|
57
|
-
return `sha-256=:${btoa(String.fromCharCode(...digest))}:`;
|
|
58
|
-
}
|
|
59
|
-
/** Read actual typed-array storage without producer-owned length properties. */
|
|
60
|
-
export function uploadByteLength(bytes) {
|
|
61
|
-
return Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Uint8Array.prototype), 'byteLength').get.call(bytes);
|
|
62
|
-
}
|