ryugi-artifacts 1.46.4 → 1.48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +34 -83
- package/dist/server.cjs +381 -148
- package/dist/viewer/ArtboardLayout-KQmamERB.js +12 -0
- package/dist/viewer/ArtifactList-BX7uyG0a.js +1 -0
- package/dist/viewer/AutoPublishPrompt-hLdShrr1.js +1 -0
- package/dist/viewer/Avatar-dVuGXaGv.js +1 -0
- package/dist/viewer/Canvas-DR9g_0g-.js +1 -0
- package/dist/viewer/DocumentLayout-BGmMGPWu.js +2 -0
- package/dist/viewer/DocumentPage-C7pveaCL.js +4 -0
- package/dist/viewer/{HtmlLayout-JbFepfOx.js → HtmlLayout-DN_RC8ER.js} +1 -1
- package/dist/viewer/MenuSubmenuTrigger-COtUZ7rK.js +1 -0
- package/dist/viewer/PopoverPopup-DbicV8QT.js +1 -0
- package/dist/viewer/PreviewLayout-bKeGBF-n.js +2 -0
- package/dist/viewer/Select-CyQRjxXp.js +1 -0
- package/dist/viewer/SelectScrollUpArrow-BquMl3kO.js +1 -0
- package/dist/viewer/SettingsDialog-DALEpAnA.js +1 -0
- package/dist/viewer/{SnapshotDocument-ClAWTjeM.js → SnapshotDocument-B4d-X_r-.js} +1 -1
- package/dist/viewer/Switch-C9DrBYMm.js +29 -0
- package/dist/viewer/TooltipPopup-BRiHjngV.js +1 -0
- package/dist/viewer/{VirtualizedEditor-D9Ivycdp-BLz9FUd_.js → VirtualizedEditor-D9Ivycdp-D5vZigul.js} +1 -1
- package/dist/viewer/{VirtualizedRenderer-C_d95FXi-lxFTJrCM.js → VirtualizedRenderer-C_d95FXi-jDSvsO_S.js} +1 -1
- package/dist/viewer/{WarningsBadge-CncFp0uo.js → WarningsBadge-Dq9MCOka.js} +1 -1
- package/dist/viewer/{abnfDiagram-VCTEODGH-mEPSnGnu.js → abnfDiagram-VCTEODGH-DvH3n-ag.js} +1 -1
- package/dist/viewer/{ar-SA-G6X2FPQ2-Cp857egn.js → ar-SA-G6X2FPQ2-D11wBsfI.js} +1 -1
- package/dist/viewer/{architecture-7GRP2DOG-BPphpWPh.js → architecture-7GRP2DOG-getNBIXu.js} +1 -1
- package/dist/viewer/{architectureDiagram-5GKGNRK7-udE5sVLB.js → architectureDiagram-5GKGNRK7-DacvQVV0.js} +1 -1
- package/dist/viewer/atoms-DfNSS4CQ.js +9 -0
- package/dist/viewer/{az-AZ-76LH7QW2-Bem2LSSt.js → az-AZ-76LH7QW2-DmjLQk0z.js} +1 -1
- package/dist/viewer/{bg-BG-XCXSNQG7-axI5dGVJ.js → bg-BG-XCXSNQG7-Dq5qUQzr.js} +1 -1
- package/dist/viewer/{blockDiagram-I7D4REHJ-BQzF8TVP.js → blockDiagram-I7D4REHJ-DYFZvVtR.js} +1 -1
- package/dist/viewer/{bn-BD-2XOGV67Q-YVYcHPPL.js → bn-BD-2XOGV67Q-CB5ihzW3.js} +1 -1
- package/dist/viewer/{c4Diagram-7LVT6UL2-CNYKrMr7.js → c4Diagram-7LVT6UL2-CItIeFst.js} +1 -1
- package/dist/viewer/{ca-ES-6MX7JW3Y-DyYMU4L7.js → ca-ES-6MX7JW3Y-B1vvpFRz.js} +1 -1
- package/dist/viewer/{channel-pL0Dn2nF.js → channel-NSE57aBD.js} +66 -66
- package/dist/viewer/channel-tQ-5o9x1.js +1 -0
- package/dist/viewer/{chunk-4HAMMTFA-CqdJF1HV.js → chunk-4HAMMTFA-BXjvEkTf.js} +1 -1
- package/dist/viewer/{chunk-75Z2AOVW-Cy-8N6eQ.js → chunk-75Z2AOVW-Cp5QYgru.js} +1 -1
- package/dist/viewer/{chunk-DU6HZSFF-BzTpxqAJ.js → chunk-DU6HZSFF-Co37jFu9.js} +1 -1
- package/dist/viewer/{chunk-EIO257PC-DXrO1LJ_.js → chunk-EIO257PC-BzoJi82T.js} +1 -1
- package/dist/viewer/{chunk-F27PBJKO-B_qZ0RYo.js → chunk-F27PBJKO-SOAeS3VX.js} +1 -1
- package/dist/viewer/{chunk-GMAD6QVW-5lCfV5dP.js → chunk-GMAD6QVW-Ozh-1h9J.js} +1 -1
- package/dist/viewer/{chunk-GVQU2GXP-DYfSQF-7.js → chunk-GVQU2GXP-DPXdyMxy.js} +1 -1
- package/dist/viewer/{chunk-IMKFNOWR-CxMz4Mtt.js → chunk-IMKFNOWR-D3-fYgRw.js} +1 -1
- package/dist/viewer/{chunk-L3NEJ4N5-DhiPR2id.js → chunk-L3NEJ4N5-CsXfjxgF.js} +1 -1
- package/dist/viewer/{chunk-OSK3NFVY-CO7KyC2S.js → chunk-OSK3NFVY-33dYvZp0.js} +1 -1
- package/dist/viewer/{chunk-P2QGCYS3-CCqOjUfu.js → chunk-P2QGCYS3-3KdzOSkK.js} +1 -1
- package/dist/viewer/{chunk-POPQ4Y6H-CMRQsjfW.js → chunk-POPQ4Y6H-DLxpEPms.js} +1 -1
- package/dist/viewer/{chunk-PWAF6VOD-So7CXUcO.js → chunk-PWAF6VOD-JePqG5w3.js} +1 -1
- package/dist/viewer/{chunk-SHT3W25Y-CWX2acMq.js → chunk-SHT3W25Y-D83tEMVR.js} +1 -1
- package/dist/viewer/{chunk-SVP7TREG-Cl29hMU_.js → chunk-SVP7TREG-B1VK1C1g.js} +1 -1
- package/dist/viewer/{chunk-TICWLB2K-C8GlShVX.js → chunk-TICWLB2K-Cn0lQFgz.js} +1 -1
- package/dist/viewer/classDiagram-ZZMXUADV-CbZZST1l.js +1 -0
- package/dist/viewer/classDiagram-v2-VYDZK3BY-CbZZST1l.js +1 -0
- package/dist/viewer/cloud-upload-Bjo_kLnp.js +1 -0
- package/dist/viewer/{cs-CZ-2BRQDIVT-DJH-JJF7.js → cs-CZ-2BRQDIVT-CMWJYUvu.js} +1 -1
- package/dist/viewer/{cynefin-OW5HDTMX-Lwpnu8BJ.js → cynefin-OW5HDTMX-Cg5yzGfm.js} +1 -1
- package/dist/viewer/{cynefinDiagram-5FMLGOSQ-DJmfTgH6.js → cynefinDiagram-5FMLGOSQ-DosdMrh6.js} +1 -1
- package/dist/viewer/{da-DK-5WZEPLOC-DSGDp-gX.js → da-DK-5WZEPLOC-D64URQaK.js} +1 -1
- package/dist/viewer/{dagre-GXQ25YYZ-DG__k9Q6.js → dagre-GXQ25YYZ-CTCCaVFG.js} +1 -1
- package/dist/viewer/{de-DE-XR44H4JA-DGlaIFnH.js → de-DE-XR44H4JA-41XC-cAS.js} +1 -1
- package/dist/viewer/{diagram-S7CK7UJ4-JMLjEgab.js → diagram-S7CK7UJ4-CxwnLwpO.js} +1 -1
- package/dist/viewer/{diagram-UQ7AKVKN-CbXj62Bz.js → diagram-UQ7AKVKN-AcI8HsSg.js} +1 -1
- package/dist/viewer/{diagram-VSXAHHWV-CCP_qXmC.js → diagram-VSXAHHWV-DlvGSQbP.js} +1 -1
- package/dist/viewer/{diagram-VX7I27RA-fPZSR2A3.js → diagram-VX7I27RA-BbKISGj6.js} +1 -1
- package/dist/viewer/{diagram-Z3DM3KII-CMld_a9M.js → diagram-Z3DM3KII-DNwxN4s8.js} +1 -1
- package/dist/viewer/{dist-DF_C3tPP.js → dist-BAhKEC7v.js} +1 -1
- package/dist/viewer/{dist-Dmcq26kl.js → dist-BPuOQwgt.js} +1 -1
- package/dist/viewer/{dist-DNsaADyM.js → dist-BR3etSjd.js} +1 -1
- package/dist/viewer/{dist-B73-AOMp.js → dist-BtMYPQ-R.js} +4 -4
- package/dist/viewer/{dist-D7p7PX97.js → dist-Bxn9izx8.js} +1 -1
- package/dist/viewer/{dist-DHH9S5VN.js → dist-C89I1Syb.js} +1 -1
- package/dist/viewer/{dist-DvZQ33zO.js → dist-C8gjGXlt.js} +1 -1
- package/dist/viewer/{dist-CKG9NFxz.js → dist-CCpihLKc.js} +1 -1
- package/dist/viewer/{dist-CttJDa2Y.js → dist-CaHvwSHf.js} +1 -1
- package/dist/viewer/{dist-DJPefqEH.js → dist-Cd5E_SnD.js} +1 -1
- package/dist/viewer/{dist-DO7f7LQh.js → dist-ChkKwRhM.js} +1 -1
- package/dist/viewer/{dist-Dqtlnhfg.js → dist-CjRmmbjs.js} +1 -1
- package/dist/viewer/{dist-HhgeDoR0.js → dist-Cl-9gKYC.js} +1 -1
- package/dist/viewer/{dist-C4r1juVz.js → dist-CsaZKHv_.js} +1 -1
- package/dist/viewer/{dist-C0frS6Eh.js → dist-D5nVsU3q.js} +1 -1
- package/dist/viewer/{dist-B9XcSkup.js → dist-D8In6BWy.js} +1 -1
- package/dist/viewer/{dist-DcJsVzc8.js → dist-DHiNxYl_.js} +1 -1
- package/dist/viewer/{dist-DSDVZsDP.js → dist-DY-Y4Me7.js} +1 -1
- package/dist/viewer/{dist-DgYPiJkH.js → dist-DfgStcdq.js} +1 -1
- package/dist/viewer/{dist-Br-YwkkI.js → dist-Do_avVXy.js} +1 -1
- package/dist/viewer/{dist-Bi6-eRhC.js → dist-DznxxRh9.js} +1 -1
- package/dist/viewer/{dist-CobzO6KF.js → dist-WPS0bgUa.js} +1 -1
- package/dist/viewer/{dist-BX_edK72.js → dist-u7oPbGhJ.js} +1 -1
- package/dist/viewer/{dist-CMWEZ8zE.js → dist-wui1iR0t.js} +1 -1
- package/dist/viewer/{ebnfDiagram-PWID7BFC-DIby0EeC.js → ebnfDiagram-PWID7BFC-LIQ-mL74.js} +1 -1
- package/dist/viewer/{el-GR-BZB4AONW-CkYn8ZGs.js → el-GR-BZB4AONW-nf4SIDWy.js} +1 -1
- package/dist/viewer/{en-B4ZKOASM-D307ZksO.js → en-B4ZKOASM-C3uSsrzN.js} +1 -1
- package/dist/viewer/{erDiagram-RLTQ6QDP-BKVkOLml.js → erDiagram-RLTQ6QDP-CtP4cA8a.js} +1 -1
- package/dist/viewer/{es-ES-U4NZUMDT-D3C8J_Fi.js → es-ES-U4NZUMDT-D83QBRdb.js} +1 -1
- package/dist/viewer/{eu-ES-A7QVB2H4-DCeKepff.js → eu-ES-A7QVB2H4-C1SzxCFV.js} +1 -1
- package/dist/viewer/{eventmodeling-NTZA5JFV-BWIuNKEz.js → eventmodeling-NTZA5JFV-Dzz8QjX3.js} +1 -1
- package/dist/viewer/{fa-IR-HGAKTJCU-CGv30knD.js → fa-IR-HGAKTJCU-DJ75mace.js} +1 -1
- package/dist/viewer/{fi-FI-Z5N7JZ37-C1g2EYnX.js → fi-FI-Z5N7JZ37-D0oIoDPa.js} +1 -1
- package/dist/viewer/flowDiagram-HODETNUW-Z8rwwmKe.js +1 -0
- package/dist/viewer/{fr-FR-RHASNOE6-dQ7Nbbew.js → fr-FR-RHASNOE6-CxrYpwSQ.js} +1 -1
- package/dist/viewer/{ganttDiagram-EL5Y4UJY-w6lIWxCW.js → ganttDiagram-EL5Y4UJY-Dm_GsqHo.js} +1 -1
- package/dist/viewer/{gitGraph-4MIJSDKK-C-eiy-ig.js → gitGraph-4MIJSDKK-Cmsi3QFW.js} +1 -1
- package/dist/viewer/{gitGraphDiagram-WWUBYQGX-sMknvoE_.js → gitGraphDiagram-WWUBYQGX-pE4QOFt6.js} +1 -1
- package/dist/viewer/{gl-ES-HMX3MZ6V-CZwfJ4WD.js → gl-ES-HMX3MZ6V-W_AoCFMi.js} +1 -1
- package/dist/viewer/{he-IL-6SHJWFNN-DCGNu7uR.js → he-IL-6SHJWFNN-iVqaubIb.js} +1 -1
- package/dist/viewer/{hi-IN-IWLTKZ5I-B8a_rStg.js → hi-IN-IWLTKZ5I-BCJYxdcu.js} +1 -1
- package/dist/viewer/{hu-HU-A5ZG7DT2-YP15l7aH.js → hu-HU-A5ZG7DT2-D_ufjwGq.js} +1 -1
- package/dist/viewer/{id-ID-SAP4L64H-Bh8n7Y-L.js → id-ID-SAP4L64H-ByGvK2Qg.js} +1 -1
- package/dist/viewer/{image-GAAHSSAO-CJ5UCWdJ.js → image-GAAHSSAO-DIF9SQU_.js} +1 -1
- package/dist/viewer/imperative-ChsionQQ.js +1 -0
- package/dist/viewer/index.html +7 -5
- package/dist/viewer/index.js +2 -2
- package/dist/viewer/index3.css +4 -0
- package/dist/viewer/{info-A6RAGUB7-4nZfUeGY.js → info-A6RAGUB7-CNgClLVH.js} +1 -1
- package/dist/viewer/{infoDiagram-27XIBGKW-B7BzPKF3.js → infoDiagram-27XIBGKW-BZqe2QYh.js} +1 -1
- package/dist/viewer/isElementDisabled-f0m04fH6.js +1 -0
- package/dist/viewer/{ishikawaDiagram-5VMMS53U-DRcTz2hp.js → ishikawaDiagram-5VMMS53U-DVh4zNCI.js} +1 -1
- package/dist/viewer/{it-IT-JPQ66NNP-Dlu6GmWL.js → it-IT-JPQ66NNP-Dv6_nr0a.js} +1 -1
- package/dist/viewer/{ja-JP-DBVTYXUO-jnhjV5V3.js → ja-JP-DBVTYXUO-KZ9e7KAQ.js} +1 -1
- package/dist/viewer/{journeyDiagram-3NMN7TZE-BsBEfZoO.js → journeyDiagram-3NMN7TZE-Hrs-56h0.js} +1 -1
- package/dist/viewer/{kaa-6HZHGXH3-BdkJfivx.js → kaa-6HZHGXH3-D811ofJi.js} +1 -1
- package/dist/viewer/{kab-KAB-ZGHBKWFO-Db5uHxJJ.js → kab-KAB-ZGHBKWFO-8_E4WiNI.js} +1 -1
- package/dist/viewer/{kanban-definition-UXKFOSKX-pkqloG2a.js → kanban-definition-UXKFOSKX-DDV_2Nle.js} +1 -1
- package/dist/viewer/{kk-KZ-P5N5QNE5-Euws25LL.js → kk-KZ-P5N5QNE5-XH-ncBcx.js} +1 -1
- package/dist/viewer/{km-KH-HSX4SM5Z-qX1KZZnO.js → km-KH-HSX4SM5Z-DfuMBSsH.js} +1 -1
- package/dist/viewer/{ko-KR-MTYHY66A-eEz94B_i.js → ko-KR-MTYHY66A-UTuAQHeO.js} +1 -1
- package/dist/viewer/{ku-TR-6OUDTVRD-Db7raW_I.js → ku-TR-6OUDTVRD-B6cXUJdZ.js} +1 -1
- package/dist/viewer/{lt-LT-XHIRWOB4-Omy4Er-_.js → lt-LT-XHIRWOB4-osfVDYh4.js} +1 -1
- package/dist/viewer/{lv-LV-5QDEKY6T-DT_-jlPU.js → lv-LV-5QDEKY6T-owEwthaJ.js} +1 -1
- package/dist/viewer/maximize-2-DcJIGEuQ.js +1 -0
- package/dist/viewer/{mermaid-parser.core-D3Vwhy2j.js → mermaid-parser.core-D7qGh1wC.js} +3 -3
- package/dist/viewer/{mindmap-definition-YA3MSWOX-CE0aLnZo.js → mindmap-definition-YA3MSWOX-CEjQFlyO.js} +1 -1
- package/dist/viewer/motion-i-14Q28p.js +1 -0
- package/dist/viewer/{mr-IN-CRQNXWMA-lU1Qm4EM.js → mr-IN-CRQNXWMA-Ble9F94R.js} +1 -1
- package/dist/viewer/{my-MM-5M5IBNSE-DzVy_UPC.js → my-MM-5M5IBNSE-CaN6NJFL.js} +1 -1
- package/dist/viewer/{nb-NO-T6EIAALU-DVT8FWIM.js → nb-NO-T6EIAALU-BDiEiYiE.js} +1 -1
- package/dist/viewer/{nl-NL-IS3SIHDZ-Cw652awd.js → nl-NL-IS3SIHDZ-C0QmOZo_.js} +1 -1
- package/dist/viewer/{nn-NO-6E72VCQL-lx1YxRiP.js → nn-NO-6E72VCQL-CQAbAV7N.js} +1 -1
- package/dist/viewer/{oc-FR-POXYY2M6-CsbQrAqy.js → oc-FR-POXYY2M6-00g3KTwj.js} +1 -1
- package/dist/viewer/{pa-IN-N4M65BXN-CtU0dHq3.js → pa-IN-N4M65BXN-zKA1yqPY.js} +1 -1
- package/dist/viewer/{packet-AYTQ26CC-BVY2voP5.js → packet-AYTQ26CC-Bbo7YLwV.js} +1 -1
- package/dist/viewer/{pegDiagram-XKGWAZYB-DEULzWAS.js → pegDiagram-XKGWAZYB-Bva2VVTO.js} +1 -1
- package/dist/viewer/percentages-BXMCSKIN-B9m0MHwS.js +1 -0
- package/dist/viewer/{pie-WAS4IAKB-Dkbj85g_.js → pie-WAS4IAKB-DR-1NEAB.js} +1 -1
- package/dist/viewer/{pieDiagram-E7YTZNPT-GG3jKLf1.js → pieDiagram-E7YTZNPT-DHxiq9Xw.js} +1 -1
- package/dist/viewer/{pl-PL-T2D74RX3-Cm4_j4mv.js → pl-PL-T2D74RX3-Ds5hI1PP.js} +1 -1
- package/dist/viewer/preview.html +4 -4
- package/dist/viewer/preview.js +1 -1
- package/dist/viewer/{prod-Dwrvp17C.js → prod-Bxq8Vdzv.js} +12 -12
- package/dist/viewer/{pt-BR-5N22H2LF-B6hDNCqf.js → pt-BR-5N22H2LF-D7XJA5jJ.js} +1 -1
- package/dist/viewer/{pt-PT-UZXXM6DQ-CUGC3Mx9.js → pt-PT-UZXXM6DQ-uJtX9Kj1.js} +1 -1
- package/dist/viewer/{quadrantDiagram-AXDQQJYC-4NnxPPkB.js → quadrantDiagram-AXDQQJYC-C8X4P0Un.js} +1 -1
- package/dist/viewer/{radar-RG4KPBEZ-CofsEHXw.js → radar-RG4KPBEZ-B2Nkysmm.js} +1 -1
- package/dist/viewer/{railroad-74A4TZTK-bsKEFfSz.js → railroad-74A4TZTK-CqyegNhY.js} +1 -1
- package/dist/viewer/{railroad-abnf-HS5TGJTU-Dzzcb9uT.js → railroad-abnf-HS5TGJTU-D437JbRt.js} +1 -1
- package/dist/viewer/{railroad-ebnf-LZEXJU2U-Det0-uSh.js → railroad-ebnf-LZEXJU2U-Cfjp24wu.js} +1 -1
- package/dist/viewer/{railroad-peg-WCYAUIDC-rXx5CKvp.js → railroad-peg-WCYAUIDC-DFKq1m4V.js} +1 -1
- package/dist/viewer/{railroadDiagram-O6MQD6OU-CiZzvw7p.js → railroadDiagram-O6MQD6OU-Bi0WDKNl.js} +1 -1
- package/dist/viewer/{requirementDiagram-BXWQKSXE-BEEWtFb-.js → requirementDiagram-BXWQKSXE-CPxbWN0o.js} +1 -1
- package/dist/viewer/{ro-RO-JPDTUUEW-2FdsNvh2.js → ro-RO-JPDTUUEW-CahCeDzl.js} +1 -1
- package/dist/viewer/{route-B-SV0Ufv.js → route-w3PXrIFf.js} +2 -2
- package/dist/viewer/{ru-RU-B4JR7IUQ-zY6mVYxz.js → ru-RU-B4JR7IUQ-CqoxmaXz.js} +1 -1
- package/dist/viewer/{sankeyDiagram-P5KCCOFB-DWe55lkp.js → sankeyDiagram-P5KCCOFB-DZw6r51H.js} +1 -1
- package/dist/viewer/{selection-BY4kx6qJ.js → selection-BWAAa3tl.js} +1 -1
- package/dist/viewer/{sequenceDiagram-WJ2MYXX4-CXuFPeac.js → sequenceDiagram-WJ2MYXX4-Thge-udC.js} +1 -1
- package/dist/viewer/settings-dialog-CsUVMGkR.js +1 -0
- package/dist/viewer/{si-LK-N5RQ5JYF-LCDQxPDU.js → si-LK-N5RQ5JYF-LdkAa2Ul.js} +1 -1
- package/dist/viewer/{sk-SK-C5VTKIMK-CT_QcC4j.js → sk-SK-C5VTKIMK-CKX2GUNt.js} +1 -1
- package/dist/viewer/{sl-SI-NN7IZMDC-f8D9KUki.js → sl-SI-NN7IZMDC-CzFyYKkG.js} +1 -1
- package/dist/viewer/{stateDiagram-D77RDMKH-eKfvcty_.js → stateDiagram-D77RDMKH-BIRU_cq9.js} +1 -1
- package/dist/viewer/stateDiagram-v2-MP3YSRHH-W6GM4mdH.js +1 -0
- package/dist/viewer/subset-shared.chunk-e43yvG81.js +1 -0
- package/dist/viewer/{subset-worker.chunk-BTmfsIdP.js → subset-worker.chunk-DnTcanba.js} +1 -1
- package/dist/viewer/{sv-SE-XGPEYMSR-DzPKng61.js → sv-SE-XGPEYMSR-DNC_mUSl.js} +1 -1
- package/dist/viewer/{swimlanes-42K2YHIH-B3Txfjzn.js → swimlanes-42K2YHIH-CjgoNxpA.js} +1 -1
- package/dist/viewer/swimlanesDiagram-VR7AAH4N-D5-PU8Pf.js +8 -0
- package/dist/viewer/{ta-IN-2NMHFXQM-ClWUqutl.js → ta-IN-2NMHFXQM-CYr9ZGr1.js} +1 -1
- package/dist/viewer/{th-TH-HPSO5L25-5YdWslH5.js → th-TH-HPSO5L25-C6bnXArK.js} +1 -1
- package/dist/viewer/{timeline-definition-24CTP7MA-BcQK4Zvc.js → timeline-definition-24CTP7MA-B9JpbwqJ.js} +1 -1
- package/dist/viewer/{tokens.stylex-DTpSQPzO.js → tokens.stylex-B6EH-D98.js} +1 -1
- package/dist/viewer/{tr-TR-DEFEU3FU-1cLBB9jW.js → tr-TR-DEFEU3FU-BYGOia6c.js} +1 -1
- package/dist/viewer/{treeView-Q6P3EWNA-BvEOsBta.js → treeView-Q6P3EWNA-Ak-ne88N.js} +1 -1
- package/dist/viewer/{treemap-WGGIJYW6-DdrABzv3.js → treemap-WGGIJYW6-DXjq0Uxk.js} +1 -1
- package/dist/viewer/type-icons-DfzR1Nvz.js +1 -0
- package/dist/viewer/{uk-UA-QMV73CPH-Fw9jveUt.js → uk-UA-QMV73CPH-Dqls9x9N.js} +1 -1
- package/dist/viewer/useArtifactFeed-BqkH8-F5.js +1 -0
- package/dist/viewer/useCloudStatus-1GLyX_cM.js +1 -0
- package/dist/viewer/useControlledState-BwJNbw5w.js +1 -0
- package/dist/viewer/useOpenInteractionType-DVZ9bVwU.js +1 -0
- package/dist/viewer/{useTranslation-CQxUhyeK.js → useTranslation-D91FrcSE.js} +1 -1
- package/dist/viewer/useTypeFavicon-DV0oFcwK.js +1 -0
- package/dist/viewer/{vennDiagram-4TSXK5OY-Dq69-1FP.js → vennDiagram-4TSXK5OY-CaR9-X17.js} +1 -1
- package/dist/viewer/{vi-VN-M7AON7JQ-DKrO5_b-.js → vi-VN-M7AON7JQ-Hm3jAJrG.js} +1 -1
- package/dist/viewer/view-Dzqqcsok.js +1 -0
- package/dist/viewer/{viewport-CFJHn_Y6-BZB106R-.js → viewport-CFJHn_Y6-CyNXuhKV.js} +1 -1
- package/dist/viewer/{wardley-WFR3VGLG-CcQnZwy_.js → wardley-WFR3VGLG-B8O3gzU6.js} +1 -1
- package/dist/viewer/{wardleyDiagram-VM6X3IG4-DLcJQWgG.js → wardleyDiagram-VM6X3IG4-CkGcY15o.js} +1 -1
- package/dist/viewer/{xychartDiagram-S5SC5T6Z-DtII7hKn.js → xychartDiagram-S5SC5T6Z-NfDIUsFv.js} +1 -1
- package/dist/viewer/{zh-CN-LNUGB5OW-BRO7tIN0.js → zh-CN-LNUGB5OW-DfOZAHSW.js} +1 -1
- package/dist/viewer/{zh-HK-E62DVLB3-BFPLUdPJ.js → zh-HK-E62DVLB3-BGA8Pz-Y.js} +1 -1
- package/dist/viewer/{zh-TW-RAJ6MFWO-Bxs4Qcmt.js → zh-TW-RAJ6MFWO-p--eir4S.js} +1 -1
- package/dist/viewer-lib/{Canvas-CGlzAGY2.js → Canvas-aHZz21RV.js} +224 -189
- package/dist/viewer-lib/{PreviewView-BuWEr0dA.js → PreviewView-Dhif0ukY.js} +64 -105
- package/dist/viewer-lib/{SnapshotDocument-ChRBCwGj.js → SnapshotDocument-DQoei-wY.js} +30 -30
- package/dist/viewer-lib/{VirtualizedEditor-D9Ivycdp-Bwb2YAAt.js → VirtualizedEditor-D9Ivycdp-Bpj7l983.js} +2 -2
- package/dist/viewer-lib/{VirtualizedRenderer-C_d95FXi-C9F5W34L.js → VirtualizedRenderer-C_d95FXi-DRkJ0i42.js} +3 -3
- package/dist/viewer-lib/{WarningsBadge-a5t1HRIQ.js → WarningsBadge-5iaPvvwB.js} +2 -2
- package/dist/viewer-lib/{abnfDiagram-VCTEODGH-BGAdTghi.js → abnfDiagram-VCTEODGH-2oGC_SOf.js} +2 -2
- package/dist/viewer-lib/{ar-SA-G6X2FPQ2-BCMxO7KZ.js → ar-SA-G6X2FPQ2-UGxMGw3Z.js} +1 -1
- package/dist/viewer-lib/{architectureDiagram-5GKGNRK7-D6Au97Dl.js → architectureDiagram-5GKGNRK7-aK3VEldj.js} +3 -3
- package/dist/viewer-lib/{az-AZ-76LH7QW2-B7Uea5Oe.js → az-AZ-76LH7QW2-Br-kWNFX.js} +1 -1
- package/dist/viewer-lib/{bg-BG-XCXSNQG7-BCDJP2WN.js → bg-BG-XCXSNQG7-CePxO9fZ.js} +1 -1
- package/dist/viewer-lib/{blockDiagram-I7D4REHJ-C2kcBkWi.js → blockDiagram-I7D4REHJ-Cy7B6_WS.js} +5 -5
- package/dist/viewer-lib/{bn-BD-2XOGV67Q-BsMm22Ga.js → bn-BD-2XOGV67Q-BMndDsUz.js} +1 -1
- package/dist/viewer-lib/{c4Diagram-7LVT6UL2-CdTb9k1X.js → c4Diagram-7LVT6UL2-Wc_dKVu0.js} +3 -3
- package/dist/viewer-lib/{ca-ES-6MX7JW3Y-DxAFfRh-.js → ca-ES-6MX7JW3Y-DX0wYh_m.js} +1 -1
- package/dist/viewer-lib/{chunk-4HAMMTFA-DKAx3up1.js → chunk-4HAMMTFA-DTiM30OK.js} +2 -2
- package/dist/viewer-lib/{chunk-EIO257PC-in-NFfKN.js → chunk-EIO257PC-Cl2w4hMW.js} +1 -1
- package/dist/viewer-lib/{chunk-GMAD6QVW-BmIwqmWI.js → chunk-GMAD6QVW-BpAAic9j.js} +1 -1
- package/dist/viewer-lib/{chunk-GVQU2GXP-B1F-95uf.js → chunk-GVQU2GXP-MoIByDJW.js} +1 -1
- package/dist/viewer-lib/{chunk-IMKFNOWR-B9jgtASu.js → chunk-IMKFNOWR-DEmuEt5u.js} +1 -1
- package/dist/viewer-lib/{chunk-L3NEJ4N5-HmasUpx4.js → chunk-L3NEJ4N5-CCae_om5.js} +3 -3
- package/dist/viewer-lib/{chunk-OSK3NFVY--lB5H4YE.js → chunk-OSK3NFVY-D6Lald9l.js} +4 -4
- package/dist/viewer-lib/{chunk-PWAF6VOD-BJBPoomP.js → chunk-PWAF6VOD-CoN0IeTe.js} +1 -1
- package/dist/viewer-lib/{chunk-SHT3W25Y-DotSVfe3.js → chunk-SHT3W25Y-DRKrPCgM.js} +2 -2
- package/dist/viewer-lib/{chunk-SVP7TREG-DqDym_EU.js → chunk-SVP7TREG-Dz-UpGpj.js} +1 -1
- package/dist/viewer-lib/{chunk-TICWLB2K-CAE--X4U.js → chunk-TICWLB2K-BKboFHm0.js} +1 -1
- package/dist/viewer-lib/{classDiagram-ZZMXUADV-C4ALzt-p.js → classDiagram-ZZMXUADV-B0RT3OhP.js} +8 -8
- package/dist/viewer-lib/{classDiagram-v2-VYDZK3BY-DEtOtdB3.js → classDiagram-v2-VYDZK3BY-DcVoUOJl.js} +8 -8
- package/dist/viewer-lib/core.js +3 -3
- package/dist/viewer-lib/{cs-CZ-2BRQDIVT-CvRGzq8g.js → cs-CZ-2BRQDIVT-D6PePaRC.js} +1 -1
- package/dist/viewer-lib/{cynefinDiagram-5FMLGOSQ-CKqlcbvg.js → cynefinDiagram-5FMLGOSQ-C3BffsgO.js} +1 -1
- package/dist/viewer-lib/{da-DK-5WZEPLOC-6YulLYfu.js → da-DK-5WZEPLOC-D-ME0_DD.js} +1 -1
- package/dist/viewer-lib/{dagre-GXQ25YYZ-YHmv7047.js → dagre-GXQ25YYZ-BjxNhu3R.js} +7 -7
- package/dist/viewer-lib/{de-DE-XR44H4JA-UiMLv8s8.js → de-DE-XR44H4JA-Bhu7D6Dv.js} +1 -1
- package/dist/viewer-lib/{diagram-S7CK7UJ4-BEWEaYtv.js → diagram-S7CK7UJ4-BpcdgVt8.js} +2 -2
- package/dist/viewer-lib/{diagram-UQ7AKVKN-6ArVweRa.js → diagram-UQ7AKVKN-BYHjP5v1.js} +1 -1
- package/dist/viewer-lib/{diagram-VX7I27RA-CiIs2Qw1.js → diagram-VX7I27RA-CV9KkXbE.js} +2 -2
- package/dist/viewer-lib/{diagram-Z3DM3KII-B2aIOSO9.js → diagram-Z3DM3KII-DOaH1tJi.js} +1 -1
- package/dist/viewer-lib/{dist-BsTyJi8g.js → dist-B80b1AhD.js} +3 -3
- package/dist/viewer-lib/{dist-CAj2xBlP.js → dist-BD9zyrsh.js} +3 -3
- package/dist/viewer-lib/{dist-0t6y6PUO.js → dist-BLeZty-1.js} +2 -2
- package/dist/viewer-lib/{dist-BnSu-IxX.js → dist-BXlobI-3.js} +2 -2
- package/dist/viewer-lib/{dist-BMlOy_9e.js → dist-CLTbkWsf.js} +3 -3
- package/dist/viewer-lib/{dist-Dbd9yAXM.js → dist-CTDrkMfV.js} +3 -3
- package/dist/viewer-lib/{dist-DwkDM0P-.js → dist-CVFCjsBk.js} +3 -3
- package/dist/viewer-lib/{dist-DMveTbVU.js → dist-CWvlUfDr.js} +2 -2
- package/dist/viewer-lib/{dist-BkKvKy8X.js → dist-CotkEjzY.js} +43 -43
- package/dist/viewer-lib/{dist-CK5l1KYD.js → dist-CyO0GXoh.js} +4 -4
- package/dist/viewer-lib/{dist-pMWiwB3R.js → dist-CzmNT9y_.js} +4 -4
- package/dist/viewer-lib/{dist-BuiCvtND.js → dist-DJY_oy_c.js} +2 -2
- package/dist/viewer-lib/{dist-DJyTgR15.js → dist-DQ9DWTie.js} +1 -1
- package/dist/viewer-lib/{dist-C1vHzwzb.js → dist-DgToSXz4.js} +2 -2
- package/dist/viewer-lib/{dist-ByPSjmEc.js → dist-DgaXgFE1.js} +1 -1
- package/dist/viewer-lib/{dist-DwvkNKkY.js → dist-DoX4WzbN.js} +3 -3
- package/dist/viewer-lib/{dist-CS1ylr3w.js → dist-DphbsbiY.js} +3 -3
- package/dist/viewer-lib/{dist-BiqYGwb3.js → dist-Dq-GuKEx.js} +4 -4
- package/dist/viewer-lib/{dist-BzLuw91l.js → dist-IMG8Vr9I.js} +2 -2
- package/dist/viewer-lib/{dist-DjB3D0Ee.js → dist-JWLNlP_m.js} +3 -3
- package/dist/viewer-lib/{dist-CB-taKGV.js → dist-KXzukSlV.js} +2 -2
- package/dist/viewer-lib/{dist-BPe0Iut1.js → dist-bM3vt8CJ.js} +2 -2
- package/dist/viewer-lib/{dist-Cww5Rvn0.js → dist-firtkIWN.js} +3 -3
- package/dist/viewer-lib/{dist-CL-A-FUV.js → dist-uWEDtK_c.js} +3 -3
- package/dist/viewer-lib/document.js +5 -5
- package/dist/viewer-lib/{ebnfDiagram-PWID7BFC-Cq5aE89w.js → ebnfDiagram-PWID7BFC-BrDC3-LV.js} +2 -2
- package/dist/viewer-lib/{el-GR-BZB4AONW-B6OFv_Qp.js → el-GR-BZB4AONW-0zYel3qI.js} +1 -1
- package/dist/viewer-lib/{en-B4ZKOASM-C4jMELVn.js → en-B4ZKOASM-DtLGkCyQ.js} +1 -1
- package/dist/viewer-lib/{erDiagram-RLTQ6QDP-CR8i8N1m.js → erDiagram-RLTQ6QDP-DowktsJX.js} +7 -7
- package/dist/viewer-lib/{es-ES-U4NZUMDT-CtkTYsR8.js → es-ES-U4NZUMDT-CTfLzrsG.js} +1 -1
- package/dist/viewer-lib/{eu-ES-A7QVB2H4-CD0q_VM9.js → eu-ES-A7QVB2H4-CRya35K2.js} +1 -1
- package/dist/viewer-lib/{fa-IR-HGAKTJCU-CmWv6Sam.js → fa-IR-HGAKTJCU-IJlsX9Ih.js} +1 -1
- package/dist/viewer-lib/{fi-FI-Z5N7JZ37-ZWiP3xdp.js → fi-FI-Z5N7JZ37-DaTLDE5R.js} +1 -1
- package/dist/viewer-lib/flowDiagram-HODETNUW-Bqrnk899.js +15 -0
- package/dist/viewer-lib/{fr-FR-RHASNOE6-B3G36IYS.js → fr-FR-RHASNOE6-EHKkBEx_.js} +1 -1
- package/dist/viewer-lib/{ganttDiagram-EL5Y4UJY-CU62ct0K.js → ganttDiagram-EL5Y4UJY-x7Vn9Glr.js} +1 -1
- package/dist/viewer-lib/{gl-ES-HMX3MZ6V-D9btWofF.js → gl-ES-HMX3MZ6V-DM85y0vm.js} +1 -1
- package/dist/viewer-lib/{he-IL-6SHJWFNN-CFG5VQFp.js → he-IL-6SHJWFNN-BuQ_9eF-.js} +1 -1
- package/dist/viewer-lib/{hi-IN-IWLTKZ5I-DuA7zQyY.js → hi-IN-IWLTKZ5I-DMvE0com.js} +1 -1
- package/dist/viewer-lib/{hu-HU-A5ZG7DT2-tjYIwSqX.js → hu-HU-A5ZG7DT2-DS1sP7wL.js} +1 -1
- package/dist/viewer-lib/{i18n-5m3zENwc.js → i18n-C0ysopzN.js} +42 -0
- package/dist/viewer-lib/{id-ID-SAP4L64H-DqU3Qkon.js → id-ID-SAP4L64H-CRfgLsSB.js} +1 -1
- package/dist/viewer-lib/ids.js +40 -0
- package/dist/viewer-lib/{image-GAAHSSAO-XIIBdtaX.js → image-GAAHSSAO-BsHmwfI_.js} +1 -1
- package/dist/viewer-lib/index.js +2322 -2536
- package/dist/viewer-lib/{infoDiagram-27XIBGKW-CZKEtT5d.js → infoDiagram-27XIBGKW-BJMCBPUi.js} +1 -1
- package/dist/viewer-lib/{ishikawaDiagram-5VMMS53U-B3golT3a.js → ishikawaDiagram-5VMMS53U-ByvUhsKB.js} +1 -1
- package/dist/viewer-lib/{it-IT-JPQ66NNP-Dz0Q22dy.js → it-IT-JPQ66NNP-CK_HA295.js} +1 -1
- package/dist/viewer-lib/{ja-JP-DBVTYXUO-CO-5nd02.js → ja-JP-DBVTYXUO-V6yZwl-p.js} +1 -1
- package/dist/viewer-lib/{journeyDiagram-3NMN7TZE-BvHvHsvO.js → journeyDiagram-3NMN7TZE-DHNZ_-p6.js} +1 -1
- package/dist/viewer-lib/{kaa-6HZHGXH3-DOD83F1q.js → kaa-6HZHGXH3-CVHD70WU.js} +1 -1
- package/dist/viewer-lib/{kab-KAB-ZGHBKWFO-CxqKLmgV.js → kab-KAB-ZGHBKWFO-BS47uT1K.js} +1 -1
- package/dist/viewer-lib/{kanban-definition-UXKFOSKX-BHHyeGOm.js → kanban-definition-UXKFOSKX-CJJQu2HV.js} +6 -6
- package/dist/viewer-lib/{kk-KZ-P5N5QNE5-CmB-r_Up.js → kk-KZ-P5N5QNE5-Bcu5hPs-.js} +1 -1
- package/dist/viewer-lib/{km-KH-HSX4SM5Z-Cs08ErgX.js → km-KH-HSX4SM5Z-DqS_KNtF.js} +1 -1
- package/dist/viewer-lib/{ko-KR-MTYHY66A-CcFjORrF.js → ko-KR-MTYHY66A-BCnIl6gm.js} +1 -1
- package/dist/viewer-lib/{ku-TR-6OUDTVRD-CE_ekNLF.js → ku-TR-6OUDTVRD-BrJRIwFC.js} +1 -1
- package/dist/viewer-lib/{lt-LT-XHIRWOB4-CTi3FMqX.js → lt-LT-XHIRWOB4-DTNZh4KC.js} +1 -1
- package/dist/viewer-lib/{lv-LV-5QDEKY6T-C_Vc5-m0.js → lv-LV-5QDEKY6T-DMWcZOaP.js} +1 -1
- package/dist/viewer-lib/{mindmap-definition-YA3MSWOX-CvL-wCLM.js → mindmap-definition-YA3MSWOX-BFaHWYtZ.js} +7 -7
- package/dist/viewer-lib/{motion-D-LmHwZA.js → motion-BkUMioN-.js} +1 -1
- package/dist/viewer-lib/{mr-IN-CRQNXWMA-B-oKF7gA.js → mr-IN-CRQNXWMA-DzScvkwn.js} +1 -1
- package/dist/viewer-lib/{my-MM-5M5IBNSE-LWZsqt2I.js → my-MM-5M5IBNSE-B6iUsZ1K.js} +1 -1
- package/dist/viewer-lib/{nb-NO-T6EIAALU-C4DmwePn.js → nb-NO-T6EIAALU-RIQOP8pT.js} +1 -1
- package/dist/viewer-lib/{nl-NL-IS3SIHDZ-CxaJJq-r.js → nl-NL-IS3SIHDZ-7f5uwLSs.js} +1 -1
- package/dist/viewer-lib/{nn-NO-6E72VCQL-CwCkdatj.js → nn-NO-6E72VCQL-BsKmNIwF.js} +1 -1
- package/dist/viewer-lib/{oc-FR-POXYY2M6-rcLu5C3f.js → oc-FR-POXYY2M6-BoMfenbW.js} +1 -1
- package/dist/viewer-lib/{pa-IN-N4M65BXN-VANjk3GV.js → pa-IN-N4M65BXN-5I9SoSYD.js} +1 -1
- package/dist/viewer-lib/{pegDiagram-XKGWAZYB-D6VOGhft.js → pegDiagram-XKGWAZYB-Pa26Psw5.js} +2 -2
- package/dist/viewer-lib/percentages-BXMCSKIN-DFm3a6gG.js +1 -0
- package/dist/viewer-lib/{pieDiagram-E7YTZNPT-BhC5evxk.js → pieDiagram-E7YTZNPT-Dd6_GVsW.js} +2 -2
- package/dist/viewer-lib/{pl-PL-T2D74RX3-CD51oHYd.js → pl-PL-T2D74RX3-LgJpn9D4.js} +1 -1
- package/dist/viewer-lib/{plugin-_bGVeqI0-CnfLdH0a.js → plugin-_bGVeqI0-Cn4lyhUu.js} +1 -1
- package/dist/viewer-lib/{prod-D7WblmUF.js → prod-VaTD1n99.js} +61 -61
- package/dist/viewer-lib/{pt-BR-5N22H2LF-D7GhIm4r.js → pt-BR-5N22H2LF-4t9sk55G.js} +1 -1
- package/dist/viewer-lib/{pt-PT-UZXXM6DQ-BffZf5Mg.js → pt-PT-UZXXM6DQ-B2P38n7-.js} +1 -1
- package/dist/viewer-lib/{quadrantDiagram-AXDQQJYC-BQcVQv-H.js → quadrantDiagram-AXDQQJYC-CP2L3QGv.js} +1 -1
- package/dist/viewer-lib/{railroadDiagram-O6MQD6OU-DViv1bb3.js → railroadDiagram-O6MQD6OU-8aKSwRcT.js} +2 -2
- package/dist/viewer-lib/{requirementDiagram-BXWQKSXE-CRbNBYvz.js → requirementDiagram-BXWQKSXE-CtOxPyOY.js} +7 -7
- package/dist/viewer-lib/{ro-RO-JPDTUUEW-Bs-sOf9x.js → ro-RO-JPDTUUEW-CkpRSUt6.js} +1 -1
- package/dist/viewer-lib/{ru-RU-B4JR7IUQ-DvTyRywC.js → ru-RU-B4JR7IUQ-Bz-gcOPe.js} +1 -1
- package/dist/viewer-lib/{sequenceDiagram-WJ2MYXX4-Dd18xexM.js → sequenceDiagram-WJ2MYXX4-s-W9J54D.js} +1 -1
- package/dist/viewer-lib/{si-LK-N5RQ5JYF-BMfVTTNU.js → si-LK-N5RQ5JYF-Dv5k3j26.js} +1 -1
- package/dist/viewer-lib/{sk-SK-C5VTKIMK-CmARane7.js → sk-SK-C5VTKIMK-CxtW6Vdm.js} +1 -1
- package/dist/viewer-lib/{sl-SI-NN7IZMDC-B8-fofR6.js → sl-SI-NN7IZMDC-CJ4TOjXZ.js} +1 -1
- package/dist/viewer-lib/{stateDiagram-D77RDMKH-DwQncAD_.js → stateDiagram-D77RDMKH-CYxCv8Qz.js} +9 -9
- package/dist/viewer-lib/{stateDiagram-v2-MP3YSRHH-C5k0DSQ5.js → stateDiagram-v2-MP3YSRHH-Gh3PW36k.js} +8 -8
- package/dist/viewer-lib/subset-shared.chunk-C8_4iTqz.js +2 -0
- package/dist/viewer-lib/{subset-worker.chunk-D2VG6did.js → subset-worker.chunk-DFTPi05K.js} +2 -2
- package/dist/viewer-lib/{sv-SE-XGPEYMSR-BXaQxg6w.js → sv-SE-XGPEYMSR-DZHmRatn.js} +1 -1
- package/dist/viewer-lib/{swimlanes-42K2YHIH-DDHkdc65.js → swimlanes-42K2YHIH-BiY2CFNS.js} +7 -7
- package/dist/viewer-lib/{swimlanesDiagram-VR7AAH4N-BceC_VQp.js → swimlanesDiagram-VR7AAH4N-C49_trC3.js} +8 -8
- package/dist/viewer-lib/{ta-IN-2NMHFXQM-C3zg6hbi.js → ta-IN-2NMHFXQM-CJC9nzL-.js} +1 -1
- package/dist/viewer-lib/{th-TH-HPSO5L25-BmHsCzgs.js → th-TH-HPSO5L25-B-kmworQ.js} +1 -1
- package/dist/viewer-lib/{timeline-definition-24CTP7MA-rG-yukQc.js → timeline-definition-24CTP7MA-C95kBahc.js} +2 -2
- package/dist/viewer-lib/{tr-TR-DEFEU3FU-DllTtani.js → tr-TR-DEFEU3FU-CdqWUy9i.js} +1 -1
- package/dist/viewer-lib/types/src/shared/cloud.d.ts +1 -0
- package/dist/viewer-lib/types/src/shared/ids.d.ts +2 -0
- package/dist/viewer-lib/types/src/shared/relay.d.ts +2 -1
- package/dist/viewer-lib/types/src/viewer/components/Canvas.d.ts +17 -9
- package/dist/viewer-lib/types/src/viewer/components/DebugHud.d.ts +12 -4
- package/dist/viewer-lib/types/src/viewer/components/EmbeddedCanvas.d.ts +6 -0
- package/dist/viewer-lib/types/src/viewer/components/ExpandedBoard.d.ts +2 -1
- package/dist/viewer-lib/types/src/viewer/components/PhoneBoard.d.ts +2 -1
- package/dist/viewer-lib/types/src/viewer/hooks/useBoardLifecycle.d.ts +28 -0
- package/dist/viewer-lib/types/src/viewer/hooks/useBoardOrigin.d.ts +8 -0
- package/dist/viewer-lib/types/src/viewer/hooks/useCanvasData.d.ts +2 -0
- package/dist/viewer-lib/types/src/viewer/hooks/useCulledBoards.d.ts +6 -0
- package/dist/viewer-lib/types/src/viewer/hooks/usePanZoom.d.ts +4 -1
- package/dist/viewer-lib/types/src/viewer/layouts/ArtboardView.d.ts +0 -1
- package/dist/viewer-lib/types/src/viewer/layouts/PhoneArtboard.d.ts +4 -3
- package/dist/viewer-lib/types/src/viewer/lib/board-lifecycle.d.ts +46 -0
- package/dist/viewer-lib/types/src/viewer/lib/board-origin.d.ts +21 -0
- package/dist/viewer-lib/types/src/viewer/lib/cull.d.ts +14 -0
- package/dist/viewer-lib/types/src/viewer/lib/embed-bridge.d.ts +27 -0
- package/dist/viewer-lib/types/src/viewer/lib/payload.d.ts +2 -0
- package/dist/viewer-lib/types/src/viewer/library/index.d.ts +1 -0
- package/dist/viewer-lib/{uk-UA-QMV73CPH-B1a-q2yd.js → uk-UA-QMV73CPH-Dazy1n5o.js} +1 -1
- package/dist/viewer-lib/{vennDiagram-4TSXK5OY-7QBTovZw.js → vennDiagram-4TSXK5OY-CzNkraZy.js} +1 -1
- package/dist/viewer-lib/{vi-VN-M7AON7JQ-DylR-eVq.js → vi-VN-M7AON7JQ-CKoZnfYq.js} +1 -1
- package/dist/viewer-lib/{viewport-CFJHn_Y6-_gSOkJqp.js → viewport-CFJHn_Y6-CtWxDw9u.js} +1 -1
- package/dist/viewer-lib/{wardleyDiagram-VM6X3IG4-DIKZjFnA.js → wardleyDiagram-VM6X3IG4-DvgOwLbB.js} +1 -1
- package/dist/viewer-lib/{xychartDiagram-S5SC5T6Z-Cv6MN-Tt.js → xychartDiagram-S5SC5T6Z-BXQwSzbk.js} +4 -4
- package/dist/viewer-lib/{zh-CN-LNUGB5OW-h3GAAXPL.js → zh-CN-LNUGB5OW-B1OE1E_k.js} +1 -1
- package/dist/viewer-lib/{zh-HK-E62DVLB3-DPw2ZhhP.js → zh-HK-E62DVLB3-B64W6D7s.js} +1 -1
- package/dist/viewer-lib/{zh-TW-RAJ6MFWO-CuWKYmJx.js → zh-TW-RAJ6MFWO-B0oGqlJb.js} +1 -1
- package/package.json +7 -2
- package/dist/viewer/ArtboardLayout-B7IicFtH.js +0 -14
- package/dist/viewer/ArtifactList-BcjH_Hrz.js +0 -1
- package/dist/viewer/AutoPublishPrompt-BnQ3fMrt.js +0 -1
- package/dist/viewer/Canvas-DFdPc8UR.js +0 -1
- package/dist/viewer/DocumentLayout-DUaBtHl-.js +0 -2
- package/dist/viewer/DocumentPage-B4JLDKIF.js +0 -4
- package/dist/viewer/PopoverPopup-Cw7nmdOO.js +0 -1
- package/dist/viewer/PreviewLayout-CXm3yJ0I.js +0 -2
- package/dist/viewer/Select-BP90ucr2.js +0 -1
- package/dist/viewer/SelectScrollUpArrow-DuiCMOws.js +0 -1
- package/dist/viewer/TooltipPopup-BELV4lQR.js +0 -1
- package/dist/viewer/atoms-CNn3DtI1.js +0 -9
- package/dist/viewer/channel-DY_L701y.js +0 -1
- package/dist/viewer/classDiagram-ZZMXUADV-CAZIZXmE.js +0 -1
- package/dist/viewer/classDiagram-v2-VYDZK3BY-CAZIZXmE.js +0 -1
- package/dist/viewer/common-CjbR69u7.js +0 -29
- package/dist/viewer/flowDiagram-HODETNUW-qzz6hufD.js +0 -1
- package/dist/viewer/imperative-PAe0wpHu.js +0 -1
- package/dist/viewer/motion-DM3HeQQ5.js +0 -1
- package/dist/viewer/percentages-BXMCSKIN-D2HBSZkI.js +0 -1
- package/dist/viewer/stateDiagram-v2-MP3YSRHH-APQ2cXaA.js +0 -1
- package/dist/viewer/subset-shared.chunk-azE5XCCc.js +0 -1
- package/dist/viewer/swimlanesDiagram-VR7AAH4N-DMJtm7N9.js +0 -8
- package/dist/viewer/type-icons-BZHOZTop.js +0 -1
- package/dist/viewer/useArtifactFeed-yUSrUl7T.js +0 -1
- package/dist/viewer/useArtifactSocket-L4eDpLQm.js +0 -1
- package/dist/viewer/useCloudStatus-DafDIfDW.js +0 -1
- package/dist/viewer/useControlledState-CFVCVerF.js +0 -1
- package/dist/viewer/useTypeFavicon-DJKmLlMH.js +0 -1
- package/dist/viewer/view-DvU7DFKX.js +0 -1
- package/dist/viewer-lib/flowDiagram-HODETNUW-D_Eiu2Sl.js +0 -15
- package/dist/viewer-lib/percentages-BXMCSKIN-DvjOJ0_M.js +0 -1
- package/dist/viewer-lib/subset-shared.chunk-DA49jqIg.js +0 -2
- package/dist/viewer-lib/types/src/viewer/hooks/useBoardTiers.d.ts +0 -27
- package/dist/viewer-lib/types/src/viewer/hooks/useHoverDwell.d.ts +0 -20
- package/dist/viewer-lib/types/src/viewer/hooks/useKeptBoards.d.ts +0 -2
- package/dist/viewer-lib/types/src/viewer/lib/board-tiers.d.ts +0 -40
- package/dist/viewer-lib/types/src/viewer/lib/hover-dwell.d.ts +0 -18
- package/dist/viewer-lib/types/src/viewer/lib/kept-boards.d.ts +0 -7
- package/dist/viewer-lib/types/src/viewer/lib/live-limit.d.ts +0 -33
- package/dist/viewer-lib/types/src/viewer/lib/snapshot-store.d.ts +0 -41
- package/dist/viewer-lib/types/src/viewer/lib/tier-controller.d.ts +0 -28
package/dist/server.cjs
CHANGED
|
@@ -8798,7 +8798,7 @@ var import_node_os2 = __toESM(require("node:os"), 1);
|
|
|
8798
8798
|
var import_node_path25 = __toESM(require("node:path"), 1);
|
|
8799
8799
|
|
|
8800
8800
|
// package.json
|
|
8801
|
-
var version = "1.
|
|
8801
|
+
var version = "1.48.0";
|
|
8802
8802
|
|
|
8803
8803
|
// src/server/app.ts
|
|
8804
8804
|
var import_node_fs26 = __toESM(require("node:fs"), 1);
|
|
@@ -8825,6 +8825,24 @@ var ADDRESS_SOURCE = "(?:[\\w-]{21}|[a-f0-9]{32})";
|
|
|
8825
8825
|
var ARTIFACT_LOCATOR_SOURCE = `(?:${SLUG_SOURCE}|${ADDRESS_SOURCE})`;
|
|
8826
8826
|
var ID_PATTERN = new RegExp(`^${SLUG_SOURCE}$`);
|
|
8827
8827
|
var ADDRESS_PATTERN = new RegExp(`^${ADDRESS_SOURCE}$`);
|
|
8828
|
+
var MINT_ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
|
8829
|
+
var MINT_LENGTH = 21;
|
|
8830
|
+
var MINTED_PATTERN = new RegExp(`^[a-z0-9]{${MINT_LENGTH}}$`, "i");
|
|
8831
|
+
var MINT_BYTE_LIMIT = 248;
|
|
8832
|
+
function mintArtifactId() {
|
|
8833
|
+
let id2 = "";
|
|
8834
|
+
const bytes = new Uint8Array(MINT_LENGTH * 2);
|
|
8835
|
+
while (id2.length < MINT_LENGTH) {
|
|
8836
|
+
crypto.getRandomValues(bytes);
|
|
8837
|
+
for (const byte of bytes) {
|
|
8838
|
+
if (byte >= MINT_BYTE_LIMIT) continue;
|
|
8839
|
+
id2 += MINT_ALPHABET[byte % MINT_ALPHABET.length];
|
|
8840
|
+
if (id2.length === MINT_LENGTH) break;
|
|
8841
|
+
}
|
|
8842
|
+
}
|
|
8843
|
+
return id2;
|
|
8844
|
+
}
|
|
8845
|
+
var isMintedArtifactId = (id2) => MINTED_PATTERN.test(id2);
|
|
8828
8846
|
var isArtifactId = (id2) => ID_PATTERN.test(id2);
|
|
8829
8847
|
var isArtifactAddress = (id2) => ADDRESS_PATTERN.test(id2);
|
|
8830
8848
|
var isArtifactLocator = (id2) => ID_PATTERN.test(id2) || ADDRESS_PATTERN.test(id2);
|
|
@@ -9120,88 +9138,36 @@ function typeFaviconHref(type) {
|
|
|
9120
9138
|
return `data:image/svg+xml,${encodeURIComponent(svg)}`;
|
|
9121
9139
|
}
|
|
9122
9140
|
|
|
9141
|
+
// src/server/access.ts
|
|
9142
|
+
var LOOPBACK = /* @__PURE__ */ new Set(["localhost", "::1", "[::1]"]);
|
|
9143
|
+
var isLoopbackHost = (host) => LOOPBACK.has(host) || /^127\.\d+\.\d+\.\d+$/.test(host);
|
|
9144
|
+
var bracket = (host) => host.includes(":") && !host.startsWith("[") ? `[${host}]` : host;
|
|
9145
|
+
function accessPolicy({
|
|
9146
|
+
host,
|
|
9147
|
+
urlHost,
|
|
9148
|
+
ports,
|
|
9149
|
+
cloudOrigin
|
|
9150
|
+
}) {
|
|
9151
|
+
const names = [
|
|
9152
|
+
...new Set(
|
|
9153
|
+
["localhost", "127.0.0.1", bracket(host), bracket(urlHost)].map((name) => name.toLowerCase())
|
|
9154
|
+
)
|
|
9155
|
+
];
|
|
9156
|
+
const hosts = new Set(ports.flatMap((port) => names.map((name) => `${name}:${port}`)));
|
|
9157
|
+
const viewerPort = ports[0];
|
|
9158
|
+
const origins = new Set(names.map((name) => `http://${name}:${viewerPort}`));
|
|
9159
|
+
return { loopback: isLoopbackHost(host), hosts, origins, cloudOrigin };
|
|
9160
|
+
}
|
|
9161
|
+
var hostAllowed = (policy, host) => !policy.loopback || host !== void 0 && policy.hosts.has(host.toLowerCase());
|
|
9162
|
+
var originAllowed = (policy, origin, { cloud = false } = {}) => origin === void 0 || policy.origins.has(origin) || cloud && policy.cloudOrigin !== void 0 && origin === policy.cloudOrigin;
|
|
9163
|
+
var navigationAllowed = (secFetchSite) => secFetchSite === void 0 || secFetchSite === "none" || secFetchSite === "same-origin";
|
|
9164
|
+
|
|
9123
9165
|
// src/server/artifact-address.ts
|
|
9124
9166
|
var import_node_fs2 = __toESM(require("node:fs"), 1);
|
|
9125
9167
|
var import_node_path2 = __toESM(require("node:path"), 1);
|
|
9126
9168
|
|
|
9127
|
-
// node_modules/.pnpm/nanoid@5.1.16/node_modules/nanoid/index.js
|
|
9128
|
-
var import_node_crypto = require("node:crypto");
|
|
9129
|
-
|
|
9130
|
-
// node_modules/.pnpm/nanoid@5.1.16/node_modules/nanoid/url-alphabet/index.js
|
|
9131
|
-
var urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
|
|
9132
|
-
|
|
9133
|
-
// node_modules/.pnpm/nanoid@5.1.16/node_modules/nanoid/index.js
|
|
9134
|
-
var POOL_SIZE_MULTIPLIER = 128;
|
|
9135
|
-
var pool;
|
|
9136
|
-
var poolOffset;
|
|
9137
|
-
function fillPool(bytes) {
|
|
9138
|
-
if (bytes < 0) throw new RangeError("Wrong ID size");
|
|
9139
|
-
try {
|
|
9140
|
-
if (!pool || pool.length < bytes) {
|
|
9141
|
-
pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER);
|
|
9142
|
-
import_node_crypto.webcrypto.getRandomValues(pool);
|
|
9143
|
-
poolOffset = 0;
|
|
9144
|
-
} else if (poolOffset + bytes > pool.length) {
|
|
9145
|
-
import_node_crypto.webcrypto.getRandomValues(pool);
|
|
9146
|
-
poolOffset = 0;
|
|
9147
|
-
}
|
|
9148
|
-
} catch (e5) {
|
|
9149
|
-
pool = void 0;
|
|
9150
|
-
throw e5;
|
|
9151
|
-
}
|
|
9152
|
-
poolOffset += bytes;
|
|
9153
|
-
}
|
|
9154
|
-
function random(bytes) {
|
|
9155
|
-
fillPool(bytes |= 0);
|
|
9156
|
-
return pool.subarray(poolOffset - bytes, poolOffset);
|
|
9157
|
-
}
|
|
9158
|
-
function customRandom(alphabet, defaultSize, getRandom) {
|
|
9159
|
-
let safeByteCutoff = 256 - 256 % alphabet.length;
|
|
9160
|
-
if (safeByteCutoff === 256) {
|
|
9161
|
-
let mask = alphabet.length - 1;
|
|
9162
|
-
return (size = defaultSize) => {
|
|
9163
|
-
if (!size) return "";
|
|
9164
|
-
let id2 = "";
|
|
9165
|
-
while (true) {
|
|
9166
|
-
let bytes = getRandom(size);
|
|
9167
|
-
let i6 = size;
|
|
9168
|
-
while (i6--) {
|
|
9169
|
-
id2 += alphabet[bytes[i6] & mask];
|
|
9170
|
-
if (id2.length >= size) return id2;
|
|
9171
|
-
}
|
|
9172
|
-
}
|
|
9173
|
-
};
|
|
9174
|
-
}
|
|
9175
|
-
let step = Math.ceil(1.6 * 256 * defaultSize / safeByteCutoff);
|
|
9176
|
-
return (size = defaultSize) => {
|
|
9177
|
-
if (!size) return "";
|
|
9178
|
-
let id2 = "";
|
|
9179
|
-
while (true) {
|
|
9180
|
-
let bytes = getRandom(step);
|
|
9181
|
-
let i6 = step;
|
|
9182
|
-
while (i6--) {
|
|
9183
|
-
if (bytes[i6] < safeByteCutoff) {
|
|
9184
|
-
id2 += alphabet[bytes[i6] % alphabet.length];
|
|
9185
|
-
if (id2.length >= size) return id2;
|
|
9186
|
-
}
|
|
9187
|
-
}
|
|
9188
|
-
}
|
|
9189
|
-
};
|
|
9190
|
-
}
|
|
9191
|
-
function customAlphabet(alphabet, size = 21) {
|
|
9192
|
-
return customRandom(alphabet, size, random);
|
|
9193
|
-
}
|
|
9194
|
-
function nanoid(size = 21) {
|
|
9195
|
-
fillPool(size |= 0);
|
|
9196
|
-
let id2 = "";
|
|
9197
|
-
for (let i6 = poolOffset - size; i6 < poolOffset; i6++) {
|
|
9198
|
-
id2 += urlAlphabet[pool[i6] & 63];
|
|
9199
|
-
}
|
|
9200
|
-
return id2;
|
|
9201
|
-
}
|
|
9202
|
-
|
|
9203
9169
|
// src/server/artifacts.ts
|
|
9204
|
-
var
|
|
9170
|
+
var import_node_crypto = __toESM(require("node:crypto"), 1);
|
|
9205
9171
|
var import_node_fs = __toESM(require("node:fs"), 1);
|
|
9206
9172
|
var import_node_path = __toESM(require("node:path"), 1);
|
|
9207
9173
|
function subdirectories(dir) {
|
|
@@ -9273,15 +9239,11 @@ function artifactSignature(dir, type) {
|
|
|
9273
9239
|
}
|
|
9274
9240
|
};
|
|
9275
9241
|
walk(dir);
|
|
9276
|
-
const hash =
|
|
9242
|
+
const hash = import_node_crypto.default.createHash("sha1").update(names.sort().join("\0")).digest("hex").slice(0, 12);
|
|
9277
9243
|
return `${names.length}:${size}:${latest}:${hash}`;
|
|
9278
9244
|
}
|
|
9279
9245
|
|
|
9280
9246
|
// src/server/artifact-address.ts
|
|
9281
|
-
var newArtifactId = customAlphabet(
|
|
9282
|
-
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
|
|
9283
|
-
21
|
|
9284
|
-
);
|
|
9285
9247
|
function artifactId(dir) {
|
|
9286
9248
|
const file = import_node_path2.default.join(dir, ".artifact-id");
|
|
9287
9249
|
let id2;
|
|
@@ -9289,7 +9251,7 @@ function artifactId(dir) {
|
|
|
9289
9251
|
id2 = import_node_fs2.default.readFileSync(file, "utf8").trim();
|
|
9290
9252
|
} catch (err) {
|
|
9291
9253
|
if (err.code !== "ENOENT") throw err;
|
|
9292
|
-
id2 =
|
|
9254
|
+
id2 = mintArtifactId();
|
|
9293
9255
|
try {
|
|
9294
9256
|
import_node_fs2.default.writeFileSync(file, `${id2}
|
|
9295
9257
|
`, { flag: "wx" });
|
|
@@ -9322,7 +9284,7 @@ function resolveArtifactAddress(root, type, address) {
|
|
|
9322
9284
|
var import_node_fs5 = __toESM(require("node:fs"), 1);
|
|
9323
9285
|
|
|
9324
9286
|
// src/server/http.ts
|
|
9325
|
-
var
|
|
9287
|
+
var import_node_crypto2 = __toESM(require("node:crypto"), 1);
|
|
9326
9288
|
var import_node_fs3 = __toESM(require("node:fs"), 1);
|
|
9327
9289
|
var import_node_path3 = __toESM(require("node:path"), 1);
|
|
9328
9290
|
var MIME = {
|
|
@@ -9348,11 +9310,11 @@ var MIME = {
|
|
|
9348
9310
|
".webm": "video/webm"
|
|
9349
9311
|
};
|
|
9350
9312
|
var mimeOf = (file) => MIME[import_node_path3.default.extname(file).toLowerCase()] ?? "application/octet-stream";
|
|
9351
|
-
var randomToken = () =>
|
|
9313
|
+
var randomToken = () => import_node_crypto2.default.randomBytes(24).toString("base64url");
|
|
9352
9314
|
function safeEqual(a5, b6) {
|
|
9353
9315
|
const ab = Buffer.from(a5);
|
|
9354
9316
|
const bb = Buffer.from(b6);
|
|
9355
|
-
return ab.length === bb.length &&
|
|
9317
|
+
return ab.length === bb.length && import_node_crypto2.default.timingSafeEqual(ab, bb);
|
|
9356
9318
|
}
|
|
9357
9319
|
function parseCookies(header) {
|
|
9358
9320
|
const cookies = {};
|
|
@@ -10559,7 +10521,7 @@ function readArtifactFile(dir, type, relative, uiRuntimeUrl, maxBytes = Infinity
|
|
|
10559
10521
|
}
|
|
10560
10522
|
|
|
10561
10523
|
// src/server/auto-publish.ts
|
|
10562
|
-
var
|
|
10524
|
+
var import_node_crypto3 = __toESM(require("node:crypto"), 1);
|
|
10563
10525
|
var import_node_fs7 = __toESM(require("node:fs"), 1);
|
|
10564
10526
|
|
|
10565
10527
|
// src/server/state.ts
|
|
@@ -10979,7 +10941,7 @@ function createAutoPublisher(options) {
|
|
|
10979
10941
|
});
|
|
10980
10942
|
const raise = (kind, message, upgradeUrl) => {
|
|
10981
10943
|
if (notice?.kind !== kind)
|
|
10982
|
-
notice = { id:
|
|
10944
|
+
notice = { id: import_node_crypto3.default.randomUUID(), kind, message, ...upgradeUrl ? { upgradeUrl } : {} };
|
|
10983
10945
|
};
|
|
10984
10946
|
let idleTimer = null;
|
|
10985
10947
|
let maxTimer = null;
|
|
@@ -11082,7 +11044,7 @@ function createAutoPublisher(options) {
|
|
|
11082
11044
|
}
|
|
11083
11045
|
|
|
11084
11046
|
// src/server/avatars.ts
|
|
11085
|
-
var
|
|
11047
|
+
var import_node_crypto4 = require("node:crypto");
|
|
11086
11048
|
var AVATAR_ROUTE = /^\/api\/avatar\/([a-z]+)\/([^/]+)$/;
|
|
11087
11049
|
var MAX_BYTES = 512 * 1024;
|
|
11088
11050
|
var TIMEOUT_MS = 5e3;
|
|
@@ -11097,7 +11059,7 @@ var SOURCES = {
|
|
|
11097
11059
|
}
|
|
11098
11060
|
};
|
|
11099
11061
|
var githubAvatar = (login) => `/api/avatar/github/${login}`;
|
|
11100
|
-
var gravatarAvatar = (email) => `/api/avatar/gravatar/${(0,
|
|
11062
|
+
var gravatarAvatar = (email) => `/api/avatar/gravatar/${(0, import_node_crypto4.createHash)("sha256").update(email.trim().toLowerCase()).digest("hex")}`;
|
|
11101
11063
|
function createAvatars(fetchImpl = fetch) {
|
|
11102
11064
|
const cache = /* @__PURE__ */ new Map();
|
|
11103
11065
|
const fetchAvatar = async (url) => {
|
|
@@ -11608,6 +11570,44 @@ function createCommentCursors(stateDir, type = "document") {
|
|
|
11608
11570
|
|
|
11609
11571
|
// src/server/document-comments.ts
|
|
11610
11572
|
var import_node_fs9 = __toESM(require("node:fs"), 1);
|
|
11573
|
+
|
|
11574
|
+
// node_modules/.pnpm/nanoid@5.1.16/node_modules/nanoid/index.js
|
|
11575
|
+
var import_node_crypto5 = require("node:crypto");
|
|
11576
|
+
|
|
11577
|
+
// node_modules/.pnpm/nanoid@5.1.16/node_modules/nanoid/url-alphabet/index.js
|
|
11578
|
+
var urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
|
|
11579
|
+
|
|
11580
|
+
// node_modules/.pnpm/nanoid@5.1.16/node_modules/nanoid/index.js
|
|
11581
|
+
var POOL_SIZE_MULTIPLIER = 128;
|
|
11582
|
+
var pool;
|
|
11583
|
+
var poolOffset;
|
|
11584
|
+
function fillPool(bytes) {
|
|
11585
|
+
if (bytes < 0) throw new RangeError("Wrong ID size");
|
|
11586
|
+
try {
|
|
11587
|
+
if (!pool || pool.length < bytes) {
|
|
11588
|
+
pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER);
|
|
11589
|
+
import_node_crypto5.webcrypto.getRandomValues(pool);
|
|
11590
|
+
poolOffset = 0;
|
|
11591
|
+
} else if (poolOffset + bytes > pool.length) {
|
|
11592
|
+
import_node_crypto5.webcrypto.getRandomValues(pool);
|
|
11593
|
+
poolOffset = 0;
|
|
11594
|
+
}
|
|
11595
|
+
} catch (e5) {
|
|
11596
|
+
pool = void 0;
|
|
11597
|
+
throw e5;
|
|
11598
|
+
}
|
|
11599
|
+
poolOffset += bytes;
|
|
11600
|
+
}
|
|
11601
|
+
function nanoid(size = 21) {
|
|
11602
|
+
fillPool(size |= 0);
|
|
11603
|
+
let id2 = "";
|
|
11604
|
+
for (let i6 = poolOffset - size; i6 < poolOffset; i6++) {
|
|
11605
|
+
id2 += urlAlphabet[pool[i6] & 63];
|
|
11606
|
+
}
|
|
11607
|
+
return id2;
|
|
11608
|
+
}
|
|
11609
|
+
|
|
11610
|
+
// src/server/document-comments.ts
|
|
11611
11611
|
var MAX_TEXT = 2e4;
|
|
11612
11612
|
var isText = (value, max = MAX_TEXT) => typeof value === "string" && value.length <= max;
|
|
11613
11613
|
var isId = (value) => isText(value, 100) && value.length > 0;
|
|
@@ -11982,6 +11982,29 @@ function createBoardCommentRegistry(options) {
|
|
|
11982
11982
|
};
|
|
11983
11983
|
}
|
|
11984
11984
|
|
|
11985
|
+
// src/server/board-port.ts
|
|
11986
|
+
var BOARD_PORT_FILE = ".last-board-port";
|
|
11987
|
+
var BOARD_ROUTE = /^\/c\/artboard\/([^/]+)\/(.+)$/;
|
|
11988
|
+
var RUNTIME_ROUTE = /^\/c\/runtime\/(.+)$/;
|
|
11989
|
+
var loopbackHosts = (urlHost) => [
|
|
11990
|
+
.../* @__PURE__ */ new Set(["localhost", "127.0.0.1", urlHost.includes(":") ? `[${urlHost}]` : urlHost])
|
|
11991
|
+
];
|
|
11992
|
+
var originsFor = (urlHost, port) => loopbackHosts(urlHost).map((host) => `http://${host}:${port}`);
|
|
11993
|
+
function boardCsp(urlHost, viewerPort, cloudOrigin) {
|
|
11994
|
+
const ancestors = [...originsFor(urlHost, viewerPort), ...cloudOrigin ? [cloudOrigin] : []];
|
|
11995
|
+
return `worker-src 'none'; frame-ancestors ${ancestors.join(" ")}`;
|
|
11996
|
+
}
|
|
11997
|
+
function routeBoardRequest(req, pathname) {
|
|
11998
|
+
if (req.method !== "GET" && req.method !== "HEAD") return { kind: "none" };
|
|
11999
|
+
if (pathname === "/robots.txt") return { kind: "robots" };
|
|
12000
|
+
const runtime = RUNTIME_ROUTE.exec(pathname);
|
|
12001
|
+
if (runtime) return { kind: "runtime", rest: `runtime/${runtime[1]}` };
|
|
12002
|
+
const board = BOARD_ROUTE.exec(pathname);
|
|
12003
|
+
if (board && isArtifactAddress(board[1]))
|
|
12004
|
+
return { kind: "board", address: board[1], rest: board[2] };
|
|
12005
|
+
return { kind: "none" };
|
|
12006
|
+
}
|
|
12007
|
+
|
|
11985
12008
|
// src/server/cloud.ts
|
|
11986
12009
|
var import_node_crypto7 = __toESM(require("node:crypto"), 1);
|
|
11987
12010
|
|
|
@@ -12043,8 +12066,12 @@ var en_default = {
|
|
|
12043
12066
|
fromPageDetail: "Go back to Ryugi; the share panel refreshes on its own.",
|
|
12044
12067
|
fromAgent: "Asked the agent to publish?",
|
|
12045
12068
|
fromAgentDetail: "Have it run the publish command again.",
|
|
12046
|
-
|
|
12047
|
-
|
|
12069
|
+
autoPublishOn: "Auto-publish is on",
|
|
12070
|
+
autoPublishOff: "Auto-publish is off",
|
|
12071
|
+
autoPublishDetail: "After each agent turn, changed artifacts sync privately to Ryugi Cloud, so you can open them on another device. Only you can see them.",
|
|
12072
|
+
autoPublishTurnOn: "Turn on auto-publish",
|
|
12073
|
+
autoPublishTurnOff: "Turn off auto-publish",
|
|
12074
|
+
autoPublishWhere: "Change it any time in Settings, from your avatar at the top right of the artifact list.",
|
|
12048
12075
|
notConnected: "Not connected",
|
|
12049
12076
|
retry: "Sign in again",
|
|
12050
12077
|
retryDetail: "Go back to Ryugi and click Sign in in the share panel again.",
|
|
@@ -12075,8 +12102,12 @@ var zh_default = {
|
|
|
12075
12102
|
fromPageDetail: "\u56DE\u5230 Ryugi\uFF0C\u5206\u4EAB\u9762\u677F\u4F1A\u81EA\u52A8\u5237\u65B0\u3002",
|
|
12076
12103
|
fromAgent: "\u8BA9 agent \u53D1\u5E03\u7684\uFF1F",
|
|
12077
12104
|
fromAgentDetail: "\u8BA9\u5B83\u518D\u8FD0\u884C\u4E00\u6B21\u53D1\u5E03\u547D\u4EE4\u3002",
|
|
12078
|
-
|
|
12079
|
-
|
|
12105
|
+
autoPublishOn: "\u81EA\u52A8\u53D1\u5E03\u5DF2\u6253\u5F00",
|
|
12106
|
+
autoPublishOff: "\u81EA\u52A8\u53D1\u5E03\u5DF2\u5173\u95ED",
|
|
12107
|
+
autoPublishDetail: "agent \u6BCF\u8F6E\u7ED3\u675F\u540E\uFF0C\u6539\u8FC7\u7684 artifact \u4F1A\u4EE5\u79C1\u5BC6\u65B9\u5F0F\u540C\u6B65\u5230 Ryugi Cloud\uFF0C\u6362\u53F0\u8BBE\u5907\u4E5F\u80FD\u6253\u5F00\u3002\u53EA\u6709\u4F60\u80FD\u770B\u5230\u3002",
|
|
12108
|
+
autoPublishTurnOn: "\u6253\u5F00\u81EA\u52A8\u53D1\u5E03",
|
|
12109
|
+
autoPublishTurnOff: "\u5173\u95ED\u81EA\u52A8\u53D1\u5E03",
|
|
12110
|
+
autoPublishWhere: "\u4EE5\u540E\u5728 Artifacts \u5217\u8868\u53F3\u4E0A\u89D2\u5934\u50CF \u203A \u8BBE\u7F6E \u91CC\u968F\u65F6\u4FEE\u6539\u3002",
|
|
12080
12111
|
notConnected: "\u672A\u8FDE\u63A5",
|
|
12081
12112
|
retry: "\u91CD\u65B0\u767B\u5F55",
|
|
12082
12113
|
retryDetail: "\u56DE\u5230 Ryugi\uFF0C\u5728\u5206\u4EAB\u9762\u677F\u91CC\u518D\u70B9\u4E00\u6B21\u300C\u767B\u5F55\u300D\u3002",
|
|
@@ -12099,7 +12130,7 @@ var zh_default = {
|
|
|
12099
12130
|
var serverText = (locale) => translator({ en: en_default, zh: zh_default }, locale);
|
|
12100
12131
|
|
|
12101
12132
|
// src/server/callback-page.ts
|
|
12102
|
-
var CALLBACK_PAGE_CSP = "default-src 'none'; style-src 'unsafe-inline'; img-src data:; script-src 'none'; base-uri 'none'; form-action '
|
|
12133
|
+
var CALLBACK_PAGE_CSP = "default-src 'none'; style-src 'unsafe-inline'; img-src data:; script-src 'none'; base-uri 'none'; form-action 'self'; frame-ancestors 'none'";
|
|
12103
12134
|
var escapeHtml = (value) => value.replaceAll(
|
|
12104
12135
|
/[&<>"']/g,
|
|
12105
12136
|
(ch2) => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" })[ch2]
|
|
@@ -12170,10 +12201,25 @@ h1 em { margin-left: 8px; font-style: normal; color: var(--name); }
|
|
|
12170
12201
|
.rows li { padding: 16px 0; border-bottom: 1px solid var(--rule); font-size: 14px; }
|
|
12171
12202
|
.rows b { display: block; margin-bottom: 3px; font-weight: 600; }
|
|
12172
12203
|
.rows span { color: var(--soft); font-size: 13px; }
|
|
12204
|
+
.auto { margin-top: 28px; padding: 16px 18px; border: 1px solid var(--rule); border-radius: 12px; }
|
|
12205
|
+
.auto form { display: flex; align-items: center; gap: 16px; margin: 0; }
|
|
12206
|
+
.auto .text { flex: 1; }
|
|
12207
|
+
.auto b { display: block; margin-bottom: 4px; font-size: 15px; font-weight: 600; }
|
|
12208
|
+
.auto .text span { color: var(--soft); font-size: 13px; line-height: 1.7; }
|
|
12209
|
+
.switch { flex-shrink: 0; width: 44px; height: 24px; padding: 2px; border: 0; border-radius: 12px; background: var(--rule); cursor: pointer; display: flex; }
|
|
12210
|
+
.switch[aria-checked="true"] { justify-content: flex-end; background: var(--ink); }
|
|
12211
|
+
.switch i { width: 20px; height: 20px; border-radius: 50%; background: var(--bg); }
|
|
12212
|
+
.switch:focus-visible { outline: 2px solid var(--name); outline-offset: 2px; }
|
|
12213
|
+
.auto .where { display: block; margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--rule); color: var(--soft); font-size: 12px; }
|
|
12173
12214
|
footer { display: flex; justify-content: space-between; gap: 16px; margin-top: 20px; font-size: 12px; color: var(--faint); }
|
|
12174
12215
|
footer code { font: 12px var(--mono); }
|
|
12175
12216
|
`;
|
|
12176
12217
|
var row = (title, detail) => `<li><b>${title}</b><span>${detail}</span></li>`;
|
|
12218
|
+
var autoPublishCard = (t7, on5, ticket) => `<section class="auto"><form method="post" action="/api/cloud/callback/auto-publish">
|
|
12219
|
+
<input type="hidden" name="ticket" value="${escapeHtml(ticket)}">
|
|
12220
|
+
<span class="text"><b>${on5 ? t7("callback.autoPublishOn") : t7("callback.autoPublishOff")}</b><span>${t7("callback.autoPublishDetail")}</span></span>
|
|
12221
|
+
<button class="switch" type="submit" name="value" value="${on5 ? "off" : "on"}" role="switch" aria-checked="${on5}" aria-label="${on5 ? t7("callback.autoPublishTurnOff") : t7("callback.autoPublishTurnOn")}"><i></i></button>
|
|
12222
|
+
</form><span class="where">${t7("callback.autoPublishWhere")}</span></section>`;
|
|
12177
12223
|
function callbackPage(result, locale = "en") {
|
|
12178
12224
|
const t7 = serverText(locale);
|
|
12179
12225
|
const host = escapeHtml(new URL(result.origin).host);
|
|
@@ -12181,7 +12227,8 @@ function callbackPage(result, locale = "en") {
|
|
|
12181
12227
|
const body = result.ok ? `<p class="status">${CIRCLE_CHECK}${t7("callback.connected")}</p>
|
|
12182
12228
|
<h1>${t7("callback.signedIn")}<em>${escapeHtml(result.login)}</em></h1>
|
|
12183
12229
|
<p class="lead">${t7("callback.lead")}</p>
|
|
12184
|
-
|
|
12230
|
+
${autoPublishCard(t7, result.autoPublish, result.ticket)}
|
|
12231
|
+
<ul class="rows">${row(t7("callback.fromPage"), t7("callback.fromPageDetail"))}${row(t7("callback.fromAgent"), t7("callback.fromAgentDetail"))}</ul>` : `<p class="status">${CIRCLE_ALERT}${t7("callback.notConnected")}</p>
|
|
12185
12232
|
<h1>${t7("callback.titleFailed")}</h1>
|
|
12186
12233
|
<p class="lead">${escapeHtml(result.detail)}</p>
|
|
12187
12234
|
<ul class="rows">${row(t7("callback.retry"), t7("callback.retryDetail"))}</ul>`;
|
|
@@ -12424,14 +12471,14 @@ function fillRandom(buffer) {
|
|
|
12424
12471
|
from = to3;
|
|
12425
12472
|
}
|
|
12426
12473
|
}
|
|
12427
|
-
function
|
|
12474
|
+
function random(bytes) {
|
|
12428
12475
|
bytes |= 0;
|
|
12429
12476
|
if (bytes < 0) throw new RangeError("Wrong ID size");
|
|
12430
12477
|
let buffer = Buffer.allocUnsafe(bytes);
|
|
12431
12478
|
fillRandom(buffer);
|
|
12432
12479
|
return buffer;
|
|
12433
12480
|
}
|
|
12434
|
-
function
|
|
12481
|
+
function customRandom(alphabet, defaultSize, getRandom) {
|
|
12435
12482
|
let safeByteCutoff = 256 - 256 % alphabet.length;
|
|
12436
12483
|
if (safeByteCutoff === 256) {
|
|
12437
12484
|
let mask = alphabet.length - 1;
|
|
@@ -12465,13 +12512,13 @@ function customRandom2(alphabet, defaultSize, getRandom) {
|
|
|
12465
12512
|
};
|
|
12466
12513
|
}
|
|
12467
12514
|
var POOL_MAX = GET_RANDOM_LIMIT / 2;
|
|
12468
|
-
function
|
|
12515
|
+
function customAlphabet(alphabet, defaultSize = 21) {
|
|
12469
12516
|
if (typeof alphabet !== "string" || !alphabet || alphabet.length > 256) {
|
|
12470
|
-
return
|
|
12517
|
+
return customRandom(alphabet, defaultSize, random);
|
|
12471
12518
|
}
|
|
12472
12519
|
for (let i6 = 0; i6 < alphabet.length; i6++) {
|
|
12473
12520
|
if (alphabet.charCodeAt(i6) > 255) {
|
|
12474
|
-
return
|
|
12521
|
+
return customRandom(alphabet, defaultSize, random);
|
|
12475
12522
|
}
|
|
12476
12523
|
}
|
|
12477
12524
|
let charCodes = Uint8Array.from(alphabet, (str) => {
|
|
@@ -12518,7 +12565,7 @@ function customAlphabet2(alphabet, defaultSize = 21) {
|
|
|
12518
12565
|
return pool2.substring(poolOffset2 - size, poolOffset2);
|
|
12519
12566
|
};
|
|
12520
12567
|
}
|
|
12521
|
-
var nanoid2 =
|
|
12568
|
+
var nanoid2 = customAlphabet(urlAlphabet2);
|
|
12522
12569
|
|
|
12523
12570
|
// node_modules/.pnpm/@haklex+rich-litexml@0.61.1_typescript@5.9.3/node_modules/@haklex/rich-litexml/dist/src-CwO17cE7.js
|
|
12524
12571
|
var impl = null;
|
|
@@ -12664,11 +12711,11 @@ function registerBuiltinReaders(registry2) {
|
|
|
12664
12711
|
}));
|
|
12665
12712
|
}
|
|
12666
12713
|
var idAlphabet = "abcdefghijklmnopqrstuvwxyz0123456789";
|
|
12667
|
-
var makePollIdSuffix =
|
|
12668
|
-
var makeOptionIdSuffix =
|
|
12669
|
-
var makeChatParticipantId =
|
|
12670
|
-
var makeChatMessageId =
|
|
12671
|
-
var makeStepId =
|
|
12714
|
+
var makePollIdSuffix = customAlphabet(idAlphabet, 10);
|
|
12715
|
+
var makeOptionIdSuffix = customAlphabet(idAlphabet, 6);
|
|
12716
|
+
var makeChatParticipantId = customAlphabet(idAlphabet, 6);
|
|
12717
|
+
var makeChatMessageId = customAlphabet(idAlphabet, 8);
|
|
12718
|
+
var makeStepId = customAlphabet(idAlphabet, 8);
|
|
12672
12719
|
function extractBlockId(el2) {
|
|
12673
12720
|
const id2 = el2.getAttribute("id");
|
|
12674
12721
|
return id2 ? { $: { blockId: id2 } } : {};
|
|
@@ -24905,7 +24952,7 @@ function sharedComments(file) {
|
|
|
24905
24952
|
function publishPayload(ref, dir, title, payload, comments = emptyComments()) {
|
|
24906
24953
|
if (ref.type === "artboard") {
|
|
24907
24954
|
const { canvas, layout, versions } = payload;
|
|
24908
|
-
return { canvas, layout, versions
|
|
24955
|
+
return { canvas, layout, versions };
|
|
24909
24956
|
}
|
|
24910
24957
|
if (ref.type === "document")
|
|
24911
24958
|
return {
|
|
@@ -24951,6 +24998,16 @@ function writeGlobalAutoPublish(file, value) {
|
|
|
24951
24998
|
import_node_fs16.default.mkdirSync(import_node_path13.default.dirname(file), { recursive: true, mode: 448 });
|
|
24952
24999
|
writeJsonAtomic(file, { ...readSettings(file), autoPublish: value });
|
|
24953
25000
|
}
|
|
25001
|
+
function postponeGlobalAutoPublish(file) {
|
|
25002
|
+
const settings = readSettings(file);
|
|
25003
|
+
if (settings.autoPublishPostponed === true) {
|
|
25004
|
+
writeGlobalAutoPublish(file, false);
|
|
25005
|
+
return "off";
|
|
25006
|
+
}
|
|
25007
|
+
import_node_fs16.default.mkdirSync(import_node_path13.default.dirname(file), { recursive: true, mode: 448 });
|
|
25008
|
+
writeJsonAtomic(file, { ...settings, autoPublishPostponed: true });
|
|
25009
|
+
return "postponed";
|
|
25010
|
+
}
|
|
24954
25011
|
function defaultGlobalAutoPublish(file) {
|
|
24955
25012
|
if (readGlobalAutoPublish(file) === void 0) writeGlobalAutoPublish(file, true);
|
|
24956
25013
|
}
|
|
@@ -24963,6 +25020,7 @@ function autoPublishEnabled({
|
|
|
24963
25020
|
|
|
24964
25021
|
// src/server/cloud.ts
|
|
24965
25022
|
var LOGIN_STATE_TTL_MS = 10 * 60 * 1e3;
|
|
25023
|
+
var CALLBACK_TICKET_TTL_MS = 30 * 60 * 1e3;
|
|
24966
25024
|
var UPLOAD_CONCURRENCY = 6;
|
|
24967
25025
|
var MAX_JSON_BODY = 4096;
|
|
24968
25026
|
var CLOUD_ID = /^[\w-]{1,64}$/;
|
|
@@ -24994,7 +25052,7 @@ var CreateRefused = class extends CloudRefused {
|
|
|
24994
25052
|
}
|
|
24995
25053
|
detail;
|
|
24996
25054
|
};
|
|
24997
|
-
async function
|
|
25055
|
+
async function readBodyText(req) {
|
|
24998
25056
|
const chunks = [];
|
|
24999
25057
|
let size = 0;
|
|
25000
25058
|
for await (const chunk of req) {
|
|
@@ -25002,8 +25060,11 @@ async function readJsonBody(req) {
|
|
|
25002
25060
|
if (size > MAX_JSON_BODY) throw new CloudRefused(413, "request body too large");
|
|
25003
25061
|
chunks.push(chunk);
|
|
25004
25062
|
}
|
|
25063
|
+
return Buffer.concat(chunks).toString("utf8");
|
|
25064
|
+
}
|
|
25065
|
+
async function readJsonBody(req) {
|
|
25005
25066
|
try {
|
|
25006
|
-
return JSON.parse(
|
|
25067
|
+
return JSON.parse(await readBodyText(req) || "null");
|
|
25007
25068
|
} catch {
|
|
25008
25069
|
return null;
|
|
25009
25070
|
}
|
|
@@ -25049,7 +25110,27 @@ function createCloudRoutes(options) {
|
|
|
25049
25110
|
project: readConfig(configFile).config.autoPublish ?? null,
|
|
25050
25111
|
enabled: !!readCredentials(credentialsFile2, origin) && autoPublishEnabled({ globalFile: settingsFile, projectFile: configFile })
|
|
25051
25112
|
});
|
|
25113
|
+
let postponed = false;
|
|
25052
25114
|
const pendingStates = /* @__PURE__ */ new Map();
|
|
25115
|
+
const callbackTickets = /* @__PURE__ */ new Map();
|
|
25116
|
+
const issueTicket = (login) => {
|
|
25117
|
+
const now = Date.now();
|
|
25118
|
+
for (const [ticket2, issued] of callbackTickets)
|
|
25119
|
+
if (issued.expires < now) callbackTickets.delete(ticket2);
|
|
25120
|
+
const ticket = randomToken();
|
|
25121
|
+
callbackTickets.set(ticket, { expires: now + CALLBACK_TICKET_TTL_MS, login });
|
|
25122
|
+
return ticket;
|
|
25123
|
+
};
|
|
25124
|
+
const sendCallbackPage = (res, status, result, locale) => send(res, status, callbackPage({ ...result, origin }, locale), {
|
|
25125
|
+
"Content-Type": "text/html; charset=utf-8",
|
|
25126
|
+
"Content-Security-Policy": CALLBACK_PAGE_CSP
|
|
25127
|
+
});
|
|
25128
|
+
const signedInPage = (res, ticket, login, locale) => sendCallbackPage(
|
|
25129
|
+
res,
|
|
25130
|
+
200,
|
|
25131
|
+
{ ok: true, login, ticket, autoPublish: readGlobalAutoPublish(settingsFile) ?? false },
|
|
25132
|
+
locale
|
|
25133
|
+
);
|
|
25053
25134
|
const loginUrl = () => {
|
|
25054
25135
|
const now = Date.now();
|
|
25055
25136
|
for (const [state2, pending] of pendingStates)
|
|
@@ -25112,7 +25193,14 @@ function createCloudRoutes(options) {
|
|
|
25112
25193
|
([, entry]) => entry.cloud?.id === cloudId
|
|
25113
25194
|
)?.[0] ?? `cloud:${cloudId}`;
|
|
25114
25195
|
const createRecord2 = async (ref, visibility) => {
|
|
25115
|
-
const
|
|
25196
|
+
const body = { type: ref.type, visibility, project };
|
|
25197
|
+
const id2 = options.address?.(ref);
|
|
25198
|
+
let res = await cloudFetch(
|
|
25199
|
+
"POST",
|
|
25200
|
+
"/api/artifacts",
|
|
25201
|
+
id2 && isMintedArtifactId(id2) ? { ...body, id: id2 } : body
|
|
25202
|
+
);
|
|
25203
|
+
if (res.status === 409) res = await cloudFetch("POST", "/api/artifacts", body);
|
|
25116
25204
|
if (res.status === 403) throw new CreateRefused(await errorMessage(res));
|
|
25117
25205
|
const created = await (await expectOk(res)).json();
|
|
25118
25206
|
updateArtifactConfig(configFile, `${ref.type}/${ref.id}`, {
|
|
@@ -25381,7 +25469,7 @@ function createCloudRoutes(options) {
|
|
|
25381
25469
|
origin,
|
|
25382
25470
|
hostId: hostIdFor(credentialsFile2),
|
|
25383
25471
|
artifacts: config.artifacts,
|
|
25384
|
-
autoPublish: autoPublishState(),
|
|
25472
|
+
autoPublish: { ...autoPublishState(), postponed },
|
|
25385
25473
|
warning: warning ?? null
|
|
25386
25474
|
});
|
|
25387
25475
|
return;
|
|
@@ -25460,6 +25548,11 @@ function createCloudRoutes(options) {
|
|
|
25460
25548
|
sendJson(res, 200, await setVisibility(ref, visibility));
|
|
25461
25549
|
return;
|
|
25462
25550
|
}
|
|
25551
|
+
if (action === "auto-publish" && method === "POST" && first === "later" && !second) {
|
|
25552
|
+
postponed = postponeGlobalAutoPublish(settingsFile) === "postponed";
|
|
25553
|
+
sendJson(res, 200, { ...autoPublishState(), postponed });
|
|
25554
|
+
return;
|
|
25555
|
+
}
|
|
25463
25556
|
if (action === "auto-publish" && method === "POST" && !first) {
|
|
25464
25557
|
const body = await readJsonBody(req);
|
|
25465
25558
|
const value = body?.value;
|
|
@@ -25480,10 +25573,7 @@ function createCloudRoutes(options) {
|
|
|
25480
25573
|
return {
|
|
25481
25574
|
async handleCallback(url, res, locale = "en") {
|
|
25482
25575
|
const t7 = serverText(locale);
|
|
25483
|
-
const page = (status, result) =>
|
|
25484
|
-
"Content-Type": "text/html; charset=utf-8",
|
|
25485
|
-
"Content-Security-Policy": CALLBACK_PAGE_CSP
|
|
25486
|
-
});
|
|
25576
|
+
const page = (status, result) => sendCallbackPage(res, status, result, locale);
|
|
25487
25577
|
const state = url.searchParams.get("state") ?? "";
|
|
25488
25578
|
const pending = pendingStates.get(state);
|
|
25489
25579
|
pendingStates.delete(state);
|
|
@@ -25514,7 +25604,27 @@ function createCloudRoutes(options) {
|
|
|
25514
25604
|
}
|
|
25515
25605
|
writeCredentials(credentialsFile2, { origin, token: issued.token, login: issued.login });
|
|
25516
25606
|
defaultGlobalAutoPublish(settingsFile);
|
|
25517
|
-
|
|
25607
|
+
signedInPage(res, issueTicket(issued.login), issued.login, locale);
|
|
25608
|
+
},
|
|
25609
|
+
async handleCallbackAutoPublish(req, res, locale = "en") {
|
|
25610
|
+
if (req.method !== "POST") {
|
|
25611
|
+
send(res, 405, "Method not allowed");
|
|
25612
|
+
return;
|
|
25613
|
+
}
|
|
25614
|
+
const form = new URLSearchParams(await readBodyText(req));
|
|
25615
|
+
const ticket = form.get("ticket") ?? "";
|
|
25616
|
+
const issued = callbackTickets.get(ticket);
|
|
25617
|
+
const value = form.get("value");
|
|
25618
|
+
if (!issued || issued.expires < Date.now()) {
|
|
25619
|
+
send(res, 403, "Forbidden");
|
|
25620
|
+
return;
|
|
25621
|
+
}
|
|
25622
|
+
if (value !== "on" && value !== "off") {
|
|
25623
|
+
send(res, 400, "value must be on or off");
|
|
25624
|
+
return;
|
|
25625
|
+
}
|
|
25626
|
+
writeGlobalAutoPublish(settingsFile, value === "on");
|
|
25627
|
+
signedInPage(res, ticket, issued.login, locale);
|
|
25518
25628
|
},
|
|
25519
25629
|
match: (pathname) => ROUTE.exec(pathname),
|
|
25520
25630
|
autoPublish,
|
|
@@ -95188,11 +95298,11 @@ function $assignBlockIds(editor, runtime, candidates) {
|
|
|
95188
95298
|
}
|
|
95189
95299
|
}
|
|
95190
95300
|
}
|
|
95191
|
-
let
|
|
95301
|
+
let random2 = needFresh;
|
|
95192
95302
|
if (isLoad && needFresh.length > 0) {
|
|
95193
95303
|
const fresh = new Set(needFresh.map((node) => node.getKey()));
|
|
95194
95304
|
const placed = $placeBlocks(runtime, (node) => fresh.has(node.getKey()));
|
|
95195
|
-
|
|
95305
|
+
random2 = [];
|
|
95196
95306
|
for (const node of needFresh) {
|
|
95197
95307
|
const key2 = node.getKey();
|
|
95198
95308
|
const id2 = placed.get(key2);
|
|
@@ -95200,11 +95310,11 @@ function $assignBlockIds(editor, runtime, candidates) {
|
|
|
95200
95310
|
used.add(id2);
|
|
95201
95311
|
$setState2(node, blockIdState, id2);
|
|
95202
95312
|
} else {
|
|
95203
|
-
|
|
95313
|
+
random2.push(node);
|
|
95204
95314
|
}
|
|
95205
95315
|
}
|
|
95206
95316
|
}
|
|
95207
|
-
for (const node of
|
|
95317
|
+
for (const node of random2.sort(compareKeys)) {
|
|
95208
95318
|
const id2 = $makeFreshId(runtime, used);
|
|
95209
95319
|
$setState2(node, blockIdState, id2);
|
|
95210
95320
|
if (!prevNodeMap.has(node.getKey())) {
|
|
@@ -100090,7 +100200,7 @@ function viewerPage(template, page) {
|
|
|
100090
100200
|
};
|
|
100091
100201
|
return template.replace(
|
|
100092
100202
|
/<html\b([^>]*)>/i,
|
|
100093
|
-
(_tag, attributes) => `<html${attributes.replace(/\slang="[^"]*"/i, "")} lang="${HTML_LANG[locale]}"${page.artifactId ? ` data-ryugi-artifact-id="${escapeHtml2(page.artifactId)}"` : ""}>`
|
|
100203
|
+
(_tag, attributes) => `<html${attributes.replace(/\slang="[^"]*"/i, "")} lang="${HTML_LANG[locale]}"${page.artifactId ? ` data-ryugi-artifact-id="${escapeHtml2(page.artifactId)}"` : ""}${page.embedParent ? ` data-ryugi-embed-parent="${escapeHtml2(page.embedParent)}"` : ""}>`
|
|
100094
100204
|
).replace(/<title\b[^>]*>[\s\S]*?<\/title>/i, () => `<title>${escapeHtml2(page.title)}</title>`).replace(
|
|
100095
100205
|
/(<link\b[^>]+\brel="icon"[^>]*\bhref=")[^"]*(")/i,
|
|
100096
100206
|
(tag, prefix, suffix) => page.icon ? `${prefix}${escapeHtml2(page.icon)}${suffix}` : tag
|
|
@@ -100192,14 +100302,14 @@ function watchTree(root, onChange, debounceMs = 120, backupPollMs = 1e3) {
|
|
|
100192
100302
|
}
|
|
100193
100303
|
|
|
100194
100304
|
// src/server/app.ts
|
|
100195
|
-
var
|
|
100305
|
+
var viewerCsp = (boardOrigins) => [
|
|
100196
100306
|
"default-src 'self'",
|
|
100197
100307
|
"script-src 'self' 'wasm-unsafe-eval'",
|
|
100198
100308
|
"style-src 'self' 'unsafe-inline'",
|
|
100199
100309
|
"img-src 'self' data: blob:",
|
|
100200
100310
|
"font-src 'self' data:",
|
|
100201
|
-
|
|
100202
|
-
|
|
100311
|
+
`connect-src 'self' ${boardOrigins.join(" ")}`,
|
|
100312
|
+
`frame-src 'self' ${boardOrigins.join(" ")}`,
|
|
100203
100313
|
"base-uri 'self'",
|
|
100204
100314
|
"form-action 'none'",
|
|
100205
100315
|
"frame-ancestors 'none'"
|
|
@@ -100217,6 +100327,7 @@ var PREVIEW_ROUTE = new RegExp(
|
|
|
100217
100327
|
`^/preview/(artboard|document|html)/${ARTIFACT_LOCATOR_SOURCE}/?$`
|
|
100218
100328
|
);
|
|
100219
100329
|
var API_PREVIEW_ROUTE = /^\/api\/preview\/([^/]+)\/([^/]+)$/;
|
|
100330
|
+
var EMBED_ROUTE = /^\/embed\/artboard\/([\w-]{1,64})\/?$/;
|
|
100220
100331
|
var API_THUMBNAIL_ROUTE = /^\/api\/thumbnail\/([^/]+)\/([^/]+)\.svg$/;
|
|
100221
100332
|
var API_DOCUMENT_ROUTE = /^\/api\/document\/([^/]+)\/(state|update|comments)$/;
|
|
100222
100333
|
var MAX_COMMENT_OP = 64 * 1024;
|
|
@@ -100265,6 +100376,15 @@ async function startArtifactsServer(options) {
|
|
|
100265
100376
|
import_node_fs26.default.writeFileSync(tokenFile, `${token}
|
|
100266
100377
|
`, { mode: 384 });
|
|
100267
100378
|
const contentToken = randomToken();
|
|
100379
|
+
const loopback = isLoopbackHost(options.host);
|
|
100380
|
+
const keyOk = (key2) => loopback || key2 !== null && safeEqual(key2, token);
|
|
100381
|
+
const agentOk = (req, key2) => loopback ? req.headers.origin === void 0 : key2 !== null && safeEqual(key2, token);
|
|
100382
|
+
let policy = accessPolicy({
|
|
100383
|
+
host: options.host,
|
|
100384
|
+
urlHost: options.urlHost,
|
|
100385
|
+
ports: [],
|
|
100386
|
+
cloudOrigin: options.cloud?.origin
|
|
100387
|
+
});
|
|
100268
100388
|
const runtimeWarnings = /* @__PURE__ */ new Map();
|
|
100269
100389
|
const ranVersions = /* @__PURE__ */ new Map();
|
|
100270
100390
|
const dynamicBlocks = createDynamicBlocks({ maxErrors: MAX_RUNTIME_WARNINGS });
|
|
@@ -100285,6 +100405,8 @@ async function startArtifactsServer(options) {
|
|
|
100285
100405
|
activityListeners.forEach((listener) => listener());
|
|
100286
100406
|
};
|
|
100287
100407
|
let port = 0;
|
|
100408
|
+
let boardPort = 0;
|
|
100409
|
+
const boardOrigins = () => boardPort ? originsFor(options.urlHost, boardPort) : [];
|
|
100288
100410
|
let cookieName = "";
|
|
100289
100411
|
let relay = null;
|
|
100290
100412
|
const direct = createDirectRelay({
|
|
@@ -100385,6 +100507,7 @@ async function startArtifactsServer(options) {
|
|
|
100385
100507
|
...options.cloud,
|
|
100386
100508
|
configFile: options.configFile,
|
|
100387
100509
|
project: import_node_path23.default.basename(import_node_path23.default.resolve(root, "../..")),
|
|
100510
|
+
address: (ref) => artifactPath(root, ref.type, ref.id).split("/").pop(),
|
|
100388
100511
|
port: () => port,
|
|
100389
100512
|
inspect,
|
|
100390
100513
|
onPublication: (key2, publication) => {
|
|
@@ -100612,8 +100735,8 @@ async function startArtifactsServer(options) {
|
|
|
100612
100735
|
sendJson(res, 400, { error: err.message });
|
|
100613
100736
|
}
|
|
100614
100737
|
};
|
|
100615
|
-
const isAuthorized = (req, keyFromQuery) => keyFromQuery !== null && safeEqual(keyFromQuery, token) || safeEqual(parseCookies(req.headers.cookie)[cookieName] ?? "", token);
|
|
100616
|
-
const serveContent = (res, rest, range) => {
|
|
100738
|
+
const isAuthorized = (req, keyFromQuery) => loopback || keyFromQuery !== null && safeEqual(keyFromQuery, token) || safeEqual(parseCookies(req.headers.cookie)[cookieName] ?? "", token);
|
|
100739
|
+
const serveContent = (res, rest, range, mode = "main") => {
|
|
100617
100740
|
if (rest.startsWith("runtime/")) {
|
|
100618
100741
|
if (!runtimeDir) {
|
|
100619
100742
|
send(res, 404, "Not found");
|
|
@@ -100655,8 +100778,8 @@ async function startArtifactsServer(options) {
|
|
|
100655
100778
|
}
|
|
100656
100779
|
const page = ref.type === "html" ? relative === "index.html" : relative.endsWith(".html");
|
|
100657
100780
|
const headers = {
|
|
100658
|
-
"Content-Security-Policy": CONTENT_CSP[page && ref.type === "document" ? "html" : ref.type],
|
|
100659
|
-
"Access-Control-Allow-Origin": "*"
|
|
100781
|
+
"Content-Security-Policy": mode === "board" ? boardCsp(options.urlHost, port, options.cloud?.origin) : CONTENT_CSP[page && ref.type === "document" ? "html" : ref.type],
|
|
100782
|
+
...mode === "board" ? {} : { "Access-Control-Allow-Origin": "*" }
|
|
100660
100783
|
};
|
|
100661
100784
|
if (!page) {
|
|
100662
100785
|
sendFile(res, target, headers, range);
|
|
@@ -100665,7 +100788,7 @@ async function startArtifactsServer(options) {
|
|
|
100665
100788
|
import_node_fs26.default.readFile(target, "utf8", (err, source) => {
|
|
100666
100789
|
if (err) send(res, 404, "Not found");
|
|
100667
100790
|
else {
|
|
100668
|
-
const uiRuntimeUrl = runtimeDir ? `${contentPrefix}runtime/ryugi-ui.js` : void 0;
|
|
100791
|
+
const uiRuntimeUrl = runtimeDir ? `${mode === "board" ? "/c/" : contentPrefix}runtime/ryugi-ui.js` : void 0;
|
|
100669
100792
|
send(
|
|
100670
100793
|
res,
|
|
100671
100794
|
200,
|
|
@@ -100691,7 +100814,11 @@ async function startArtifactsServer(options) {
|
|
|
100691
100814
|
sendJson(res, 404, { warnings: [`artifact ${type}/${id2} not found`] });
|
|
100692
100815
|
return;
|
|
100693
100816
|
}
|
|
100694
|
-
|
|
100817
|
+
const ref = artifactKeyOf(`${type}/${id2}`);
|
|
100818
|
+
sendJson(res, 200, {
|
|
100819
|
+
...artifactMeta(ref, dir),
|
|
100820
|
+
...ref.type === "artboard" && boardPort ? { boardPort, boardPath: `/c${artifactPath(root, "artboard", ref.id)}/` } : {}
|
|
100821
|
+
});
|
|
100695
100822
|
};
|
|
100696
100823
|
const serveList = (res) => {
|
|
100697
100824
|
const { artifacts, warnings } = listArtifacts(root);
|
|
@@ -100766,6 +100893,10 @@ async function startArtifactsServer(options) {
|
|
|
100766
100893
|
}
|
|
100767
100894
|
const handleRequest = (req, res) => {
|
|
100768
100895
|
res.setHeader("X-Robots-Tag", "noindex, nofollow");
|
|
100896
|
+
if (!hostAllowed(policy, req.headers.host)) {
|
|
100897
|
+
send(res, 403, "Forbidden host");
|
|
100898
|
+
return;
|
|
100899
|
+
}
|
|
100769
100900
|
const url2 = new URL(req.url ?? "/", "http://artifacts.local");
|
|
100770
100901
|
if (url2.pathname === "/api/status") {
|
|
100771
100902
|
if (!isAuthorized(req, url2.searchParams.get("key")))
|
|
@@ -100800,6 +100931,20 @@ async function startArtifactsServer(options) {
|
|
|
100800
100931
|
});
|
|
100801
100932
|
return;
|
|
100802
100933
|
}
|
|
100934
|
+
if (cloud && pathname === "/api/cloud/callback/auto-publish") {
|
|
100935
|
+
void cloud.handleCallbackAutoPublish(
|
|
100936
|
+
req,
|
|
100937
|
+
res,
|
|
100938
|
+
resolveLocale(parseAcceptLanguage(req.headers["accept-language"]))
|
|
100939
|
+
).catch((err) => {
|
|
100940
|
+
if (!res.headersSent) send(res, 500, `Artifacts error: ${err.message}`);
|
|
100941
|
+
});
|
|
100942
|
+
return;
|
|
100943
|
+
}
|
|
100944
|
+
if (loopback && !originAllowed(policy, req.headers.origin)) {
|
|
100945
|
+
send(res, 403, "Forbidden origin");
|
|
100946
|
+
return;
|
|
100947
|
+
}
|
|
100803
100948
|
const key2 = url2.searchParams.get("key");
|
|
100804
100949
|
if (!isAuthorized(req, key2)) {
|
|
100805
100950
|
send(res, 403, "Forbidden: open the full artifact link including ?key=");
|
|
@@ -100881,7 +101026,7 @@ async function startArtifactsServer(options) {
|
|
|
100881
101026
|
return;
|
|
100882
101027
|
}
|
|
100883
101028
|
if (pathname === "/api/cloud/flush") {
|
|
100884
|
-
if (req.method !== "POST" ||
|
|
101029
|
+
if (req.method !== "POST" || !agentOk(req, key2)) {
|
|
100885
101030
|
send(res, 403, "Forbidden: agent calls need ?key=");
|
|
100886
101031
|
return;
|
|
100887
101032
|
}
|
|
@@ -100896,7 +101041,7 @@ async function startArtifactsServer(options) {
|
|
|
100896
101041
|
}
|
|
100897
101042
|
const cloudMatch = cloud?.match(pathname);
|
|
100898
101043
|
if (cloud && cloudMatch) {
|
|
100899
|
-
if (req.method !== "GET" && !(key2
|
|
101044
|
+
if (req.method !== "GET" && !keyOk(key2) && !sameOrigin(req)) {
|
|
100900
101045
|
send(res, 403, "Forbidden");
|
|
100901
101046
|
return;
|
|
100902
101047
|
}
|
|
@@ -100905,7 +101050,7 @@ async function startArtifactsServer(options) {
|
|
|
100905
101050
|
}
|
|
100906
101051
|
const agentCommentsMatch = API_AGENT_COMMENTS_ROUTE.exec(pathname);
|
|
100907
101052
|
if (agentCommentsMatch) {
|
|
100908
|
-
if (req.method !== "POST" ||
|
|
101053
|
+
if (req.method !== "POST" || !agentOk(req, key2)) {
|
|
100909
101054
|
send(res, 403, "Forbidden: agent calls need ?key=");
|
|
100910
101055
|
return;
|
|
100911
101056
|
}
|
|
@@ -100916,7 +101061,7 @@ async function startArtifactsServer(options) {
|
|
|
100916
101061
|
}
|
|
100917
101062
|
const agentBoardMatch = API_AGENT_BOARD_COMMENTS_ROUTE.exec(pathname);
|
|
100918
101063
|
if (agentBoardMatch) {
|
|
100919
|
-
if (req.method !== "POST" ||
|
|
101064
|
+
if (req.method !== "POST" || !agentOk(req, key2)) {
|
|
100920
101065
|
send(res, 403, "Forbidden: agent calls need ?key=");
|
|
100921
101066
|
return;
|
|
100922
101067
|
}
|
|
@@ -100927,7 +101072,7 @@ async function startArtifactsServer(options) {
|
|
|
100927
101072
|
}
|
|
100928
101073
|
const agentCheckMatch = API_AGENT_CHECK_ROUTE.exec(pathname);
|
|
100929
101074
|
if (agentCheckMatch) {
|
|
100930
|
-
if (req.method !== "POST" ||
|
|
101075
|
+
if (req.method !== "POST" || !agentOk(req, key2)) {
|
|
100931
101076
|
send(res, 403, "Forbidden: agent calls need ?key=");
|
|
100932
101077
|
return;
|
|
100933
101078
|
}
|
|
@@ -100955,8 +101100,19 @@ async function startArtifactsServer(options) {
|
|
|
100955
101100
|
serveArtifactApi(res, apiMatch[1], apiMatch[2]);
|
|
100956
101101
|
return;
|
|
100957
101102
|
}
|
|
100958
|
-
|
|
100959
|
-
|
|
101103
|
+
const embedMatch = EMBED_ROUTE.exec(pathname);
|
|
101104
|
+
const embed = !!embedMatch;
|
|
101105
|
+
const embedded = embedMatch && embedTarget(embedMatch[1]);
|
|
101106
|
+
if (pathname.startsWith("/embed/") && (!embedded || !options.cloud)) {
|
|
101107
|
+
send(res, 404, "Not found");
|
|
101108
|
+
return;
|
|
101109
|
+
}
|
|
101110
|
+
if (SHELL_ROUTE.test(pathname) || PREVIEW_ROUTE.test(pathname) || embed || pathname === "/index.html") {
|
|
101111
|
+
if (loopback && (pathname === "/" || pathname === "/index.html") && !navigationAllowed(req.headers["sec-fetch-site"])) {
|
|
101112
|
+
send(res, 403, "Forbidden");
|
|
101113
|
+
return;
|
|
101114
|
+
}
|
|
101115
|
+
const requested = embedded || artifactKeyOf(
|
|
100960
101116
|
pathname.replace(/^\/(?:preview\/)?/, "").replace(/\/$/, ""),
|
|
100961
101117
|
isArtifactLocator
|
|
100962
101118
|
);
|
|
@@ -100975,9 +101131,12 @@ async function startArtifactsServer(options) {
|
|
|
100975
101131
|
const preview = PREVIEW_ROUTE.test(pathname);
|
|
100976
101132
|
const canonicalPath = ref ? dir ? artifactPath(root, ref.type, ref.id) : `/${ref.type}/${ref.id}` : "/";
|
|
100977
101133
|
const canonical = `http://${urlHostForHttp(options.urlHost)}:${port}${preview ? "/preview" : ""}${canonicalPath}`;
|
|
100978
|
-
const csp =
|
|
101134
|
+
const csp = embed ? viewerCsp(boardOrigins()).replace(
|
|
101135
|
+
"frame-ancestors 'none'",
|
|
101136
|
+
`frame-ancestors ${options.cloud.origin}`
|
|
101137
|
+
) : preview ? viewerCsp(boardOrigins()).replace("frame-ancestors 'none'", "frame-ancestors 'self'") : viewerCsp(boardOrigins());
|
|
100979
101138
|
const headers = { "Content-Type": "text/html; charset=utf-8" };
|
|
100980
|
-
if (key2 !== null)
|
|
101139
|
+
if (key2 !== null && !loopback)
|
|
100981
101140
|
headers["Set-Cookie"] = `${cookieName}=${token}; HttpOnly; SameSite=Strict; Path=/`;
|
|
100982
101141
|
const entry = preview && import_node_fs26.default.existsSync(import_node_path23.default.join(viewerDir, "preview.html")) ? "preview.html" : "index.html";
|
|
100983
101142
|
void import_node_fs26.default.promises.readFile(import_node_path23.default.join(viewerDir, entry), "utf8").then((template) => {
|
|
@@ -100987,7 +101146,8 @@ async function startArtifactsServer(options) {
|
|
|
100987
101146
|
locale,
|
|
100988
101147
|
url: canonical,
|
|
100989
101148
|
icon: ref ? typeFaviconHref(ref.type) : void 0,
|
|
100990
|
-
artifactId: resolved?.id
|
|
101149
|
+
artifactId: resolved?.id,
|
|
101150
|
+
embedParent: embed ? options.cloud.origin : void 0
|
|
100991
101151
|
});
|
|
100992
101152
|
send(res, 200, html, {
|
|
100993
101153
|
...headers,
|
|
@@ -101000,7 +101160,10 @@ async function startArtifactsServer(options) {
|
|
|
101000
101160
|
}
|
|
101001
101161
|
const target = resolveInside(viewerDir, pathname.slice(1));
|
|
101002
101162
|
if (!target) send(res, 404, "Not found");
|
|
101003
|
-
else
|
|
101163
|
+
else
|
|
101164
|
+
sendFile(res, target, {
|
|
101165
|
+
"Content-Security-Policy": viewerCsp(boardOrigins())
|
|
101166
|
+
});
|
|
101004
101167
|
};
|
|
101005
101168
|
const server = import_node_http.default.createServer((req, res) => {
|
|
101006
101169
|
try {
|
|
@@ -101010,12 +101173,16 @@ async function startArtifactsServer(options) {
|
|
|
101010
101173
|
}
|
|
101011
101174
|
});
|
|
101012
101175
|
server.on("upgrade", (req, socket) => {
|
|
101176
|
+
if (!hostAllowed(policy, req.headers.host)) {
|
|
101177
|
+
rejectUpgrade(socket, 403, "Forbidden");
|
|
101178
|
+
return;
|
|
101179
|
+
}
|
|
101013
101180
|
const url2 = new URL(req.url ?? "/", "http://artifacts.local");
|
|
101014
101181
|
const clientKey = req.headers["sec-websocket-key"];
|
|
101015
101182
|
const directMatch = DIRECT_RELAY_ROUTE.exec(url2.pathname);
|
|
101016
101183
|
if (directMatch && typeof clientKey === "string") {
|
|
101017
101184
|
const fromCloud = options.cloud !== void 0 && req.headers.origin === options.cloud.origin;
|
|
101018
|
-
if (!
|
|
101185
|
+
if (!keyOk(url2.searchParams.get("key")) || !(fromCloud || sameOrigin(req))) {
|
|
101019
101186
|
rejectUpgrade(socket, 403, "Forbidden");
|
|
101020
101187
|
return;
|
|
101021
101188
|
}
|
|
@@ -101060,9 +101227,56 @@ async function startArtifactsServer(options) {
|
|
|
101060
101227
|
cookieName = `ryugi_artifacts_${port}`;
|
|
101061
101228
|
import_node_fs26.default.writeFileSync(portFile, `${port}
|
|
101062
101229
|
`, { mode: 384 });
|
|
101230
|
+
const boardServer = import_node_http.default.createServer((req, res) => {
|
|
101231
|
+
if (!hostAllowed(policy, req.headers.host)) {
|
|
101232
|
+
send(res, 403, "Forbidden host");
|
|
101233
|
+
return;
|
|
101234
|
+
}
|
|
101235
|
+
let pathname;
|
|
101236
|
+
try {
|
|
101237
|
+
pathname = decodeURIComponent(new URL(req.url ?? "/", "http://board.local").pathname);
|
|
101238
|
+
} catch {
|
|
101239
|
+
send(res, 400, "Bad request");
|
|
101240
|
+
return;
|
|
101241
|
+
}
|
|
101242
|
+
try {
|
|
101243
|
+
const route = routeBoardRequest(req, pathname);
|
|
101244
|
+
if (route.kind === "robots") send(res, 200, "User-agent: *\nDisallow: /\n");
|
|
101245
|
+
else if (route.kind === "runtime") serveContent(res, route.rest, req.headers.range, "board");
|
|
101246
|
+
else if (route.kind === "board") {
|
|
101247
|
+
const resolved = resolveArtifactAddress(root, "artboard", route.address);
|
|
101248
|
+
if (!resolved || resolved.id === route.address) send(res, 404, "Not found");
|
|
101249
|
+
else serveContent(res, `artboard/${resolved.id}/${route.rest}`, req.headers.range, "board");
|
|
101250
|
+
} else send(res, 404, "Not found");
|
|
101251
|
+
} catch (err) {
|
|
101252
|
+
if (!res.headersSent) send(res, 500, err.message);
|
|
101253
|
+
else res.destroy();
|
|
101254
|
+
}
|
|
101255
|
+
});
|
|
101256
|
+
if (loopback) {
|
|
101257
|
+
const boardPortFile = import_node_path23.default.join(stateDir, BOARD_PORT_FILE);
|
|
101258
|
+
const previousBoardPort = Number(readPersisted(boardPortFile));
|
|
101259
|
+
try {
|
|
101260
|
+
boardPort = await listen(
|
|
101261
|
+
boardServer,
|
|
101262
|
+
options.host,
|
|
101263
|
+
Number.isInteger(previousBoardPort) && previousBoardPort > 0 && previousBoardPort !== port ? previousBoardPort : 0
|
|
101264
|
+
);
|
|
101265
|
+
} catch {
|
|
101266
|
+
boardPort = await listen(boardServer, options.host, 0);
|
|
101267
|
+
}
|
|
101268
|
+
import_node_fs26.default.writeFileSync(boardPortFile, `${boardPort}
|
|
101269
|
+
`, { mode: 384 });
|
|
101270
|
+
}
|
|
101271
|
+
policy = accessPolicy({
|
|
101272
|
+
host: options.host,
|
|
101273
|
+
urlHost: options.urlHost,
|
|
101274
|
+
ports: boardPort ? [port, boardPort] : [port],
|
|
101275
|
+
cloudOrigin: options.cloud?.origin
|
|
101276
|
+
});
|
|
101063
101277
|
const origin = `http://${urlHostForHttp(options.urlHost)}:${port}`;
|
|
101064
|
-
const url = `${origin}/?key=${token}`;
|
|
101065
|
-
const linkFor = (type, id2) => `${origin}${artifactPath(root, type, id2)}?key=${token}`;
|
|
101278
|
+
const url = loopback ? `${origin}/` : `${origin}/?key=${token}`;
|
|
101279
|
+
const linkFor = (type, id2) => `${origin}${artifactPath(root, type, id2)}${loopback ? "" : `?key=${token}`}`;
|
|
101066
101280
|
const signatures = /* @__PURE__ */ new Map();
|
|
101067
101281
|
const writeState = (ref, dir) => {
|
|
101068
101282
|
const payload = readArtifact(dir, ref, runtimeOf(ref, dir));
|
|
@@ -101084,8 +101298,20 @@ async function startArtifactsServer(options) {
|
|
|
101084
101298
|
initialChanges.push({ ref: entry, payload, files: [] });
|
|
101085
101299
|
if (entry.type === "document") void documents.open(entry.id);
|
|
101086
101300
|
}
|
|
101087
|
-
writeJsonAtomic(import_node_path23.default.join(stateDir, "server-info"), {
|
|
101301
|
+
writeJsonAtomic(import_node_path23.default.join(stateDir, "server-info"), {
|
|
101302
|
+
type: "server-started",
|
|
101303
|
+
url,
|
|
101304
|
+
port,
|
|
101305
|
+
boardPort,
|
|
101306
|
+
root
|
|
101307
|
+
});
|
|
101088
101308
|
const relayViewers = /* @__PURE__ */ new Map();
|
|
101309
|
+
const embedTarget = (id2) => {
|
|
101310
|
+
if (isArtifactLocator(id2) && resolveArtifactAddress(root, "artboard", id2))
|
|
101311
|
+
return { type: "artboard", id: id2 };
|
|
101312
|
+
const served = artifactKeyOf(servedArtifacts().get(id2) ?? "");
|
|
101313
|
+
return served?.type === "artboard" ? served : null;
|
|
101314
|
+
};
|
|
101089
101315
|
const servedArtifacts = () => {
|
|
101090
101316
|
const served = /* @__PURE__ */ new Map();
|
|
101091
101317
|
if (!options.configFile) return served;
|
|
@@ -101167,7 +101393,11 @@ async function startArtifactsServer(options) {
|
|
|
101167
101393
|
...options.relay,
|
|
101168
101394
|
token: () => readCredentials(options.cloud.credentialsFile, options.cloud.origin)?.token ?? null,
|
|
101169
101395
|
served: servedArtifacts,
|
|
101170
|
-
local: () => ({
|
|
101396
|
+
local: () => ({
|
|
101397
|
+
hostId: hostIdFor(options.cloud.credentialsFile),
|
|
101398
|
+
port,
|
|
101399
|
+
...loopback ? { embed: true } : { key: token }
|
|
101400
|
+
}),
|
|
101171
101401
|
handle: handleRelay,
|
|
101172
101402
|
onActivity: touch,
|
|
101173
101403
|
onWatch: (keys2) => {
|
|
@@ -101262,6 +101492,7 @@ async function startArtifactsServer(options) {
|
|
|
101262
101492
|
);
|
|
101263
101493
|
return {
|
|
101264
101494
|
port,
|
|
101495
|
+
boardPort,
|
|
101265
101496
|
token,
|
|
101266
101497
|
contentToken,
|
|
101267
101498
|
url,
|
|
@@ -101290,6 +101521,8 @@ async function startArtifactsServer(options) {
|
|
|
101290
101521
|
direct.close();
|
|
101291
101522
|
selections.clearAll();
|
|
101292
101523
|
for (const socket of clients) socket.destroy();
|
|
101524
|
+
boardServer.close();
|
|
101525
|
+
boardServer.closeAllConnections();
|
|
101293
101526
|
server.close(() => resolve());
|
|
101294
101527
|
server.closeAllConnections();
|
|
101295
101528
|
});
|