termdock 1.4.341 → 1.4.342
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/THIRD_PARTY_NOTICES.md +79 -0
- package/dist/client/assets/App-DuWNc_Sd.js +187 -0
- package/dist/client/assets/App-DuWNc_Sd.js.br +0 -0
- package/dist/client/assets/App-DuWNc_Sd.js.gz +0 -0
- package/dist/client/assets/{ArchitecturePanel-Dz0hgSdw.js → ArchitecturePanel-Bjhd5uMf.js} +2 -2
- package/dist/client/assets/ArchitecturePanel-Bjhd5uMf.js.br +0 -0
- package/dist/client/assets/ArchitecturePanel-Bjhd5uMf.js.gz +0 -0
- package/dist/client/assets/{ChangeWalkthroughPanel-3PpmA31G.js → ChangeWalkthroughPanel-DKDNcKro.js} +1 -1
- package/dist/client/assets/ChangeWalkthroughPanel-DKDNcKro.js.br +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-DKDNcKro.js.gz +0 -0
- package/dist/client/assets/{CollaborationMainWorkspace-QA7cyrcg.js → CollaborationMainWorkspace-C11Rr6yD.js} +1 -1
- package/dist/client/assets/CollaborationMainWorkspace-C11Rr6yD.js.br +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-C11Rr6yD.js.gz +0 -0
- package/dist/client/assets/CollaborationTaskContent-DNRyAkOX.js +2 -0
- package/dist/client/assets/{ComputerControlView-DfKdSvrs.js → ComputerControlView-B5C6ETMh.js} +3 -3
- package/dist/client/assets/ComputerControlView-B5C6ETMh.js.br +0 -0
- package/dist/client/assets/ComputerControlView-B5C6ETMh.js.gz +0 -0
- package/dist/client/assets/{DagPlayground-IFr1ujrl.js → DagPlayground-BrrzhUzm.js} +1 -1
- package/dist/client/assets/DagPlayground-BrrzhUzm.js.br +0 -0
- package/dist/client/assets/DagPlayground-BrrzhUzm.js.gz +0 -0
- package/dist/client/assets/{DiffLab-BSQmv0td.js → DiffLab-DdFwfYKr.js} +1 -1
- package/dist/client/assets/DiffLab-DdFwfYKr.js.br +0 -0
- package/dist/client/assets/DiffLab-DdFwfYKr.js.gz +0 -0
- package/dist/client/assets/{DiffReview-CfHl0jeF.js → DiffReview-GloQdQAq.js} +1 -1
- package/dist/client/assets/DiffReview-GloQdQAq.js.br +0 -0
- package/dist/client/assets/DiffReview-GloQdQAq.js.gz +0 -0
- package/dist/client/assets/{DiffReviewLab-B_zSSqde.js → DiffReviewLab-C5_nDmPj.js} +1 -1
- package/dist/client/assets/DiffReviewLab-C5_nDmPj.js.br +0 -0
- package/dist/client/assets/DiffReviewLab-C5_nDmPj.js.gz +0 -0
- package/dist/client/assets/{DiffViewer-DORR0BUb.js → DiffViewer-lsURzN_a.js} +1 -1
- package/dist/client/assets/DiffViewer-lsURzN_a.js.br +0 -0
- package/dist/client/assets/DiffViewer-lsURzN_a.js.gz +0 -0
- package/dist/client/assets/{ModelPreview-QdScJljR.js → ModelPreview-Dha8K529.js} +1 -1
- package/dist/client/assets/ModelPreview-Dha8K529.js.br +0 -0
- package/dist/client/assets/ModelPreview-Dha8K529.js.gz +0 -0
- package/dist/client/assets/{RightSidebar-nUsJCrB9.js → RightSidebar-DFWCFBCy.js} +3 -3
- package/dist/client/assets/RightSidebar-DFWCFBCy.js.br +0 -0
- package/dist/client/assets/RightSidebar-DFWCFBCy.js.gz +0 -0
- package/dist/client/assets/{abnfDiagram-VCTEODGH-B51uxXBg.js → abnfDiagram-VCTEODGH-3R9vxuaa.js} +1 -1
- package/dist/client/assets/abnfDiagram-VCTEODGH-3R9vxuaa.js.br +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-3R9vxuaa.js.gz +0 -0
- package/dist/client/assets/app-By1Q_guu.js +35 -0
- package/dist/client/assets/app-By1Q_guu.js.br +0 -0
- package/dist/client/assets/app-By1Q_guu.js.gz +0 -0
- package/dist/client/assets/{arc-Bkn10vSK.js → arc-BRSYFA6a.js} +1 -1
- package/dist/client/assets/arc-BRSYFA6a.js.br +0 -0
- package/dist/client/assets/arc-BRSYFA6a.js.gz +0 -0
- package/dist/client/assets/{architectureDiagram-5GKGNRK7-CK-cIr48.js → architectureDiagram-5GKGNRK7-DU21Xuxy.js} +1 -1
- package/dist/client/assets/architectureDiagram-5GKGNRK7-DU21Xuxy.js.br +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-DU21Xuxy.js.gz +0 -0
- package/dist/client/assets/{blockDiagram-I7D4REHJ-DzbWXcDy.js → blockDiagram-I7D4REHJ-B8aQKSok.js} +1 -1
- package/dist/client/assets/blockDiagram-I7D4REHJ-B8aQKSok.js.br +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-B8aQKSok.js.gz +0 -0
- package/dist/client/assets/{c4Diagram-7LVT6UL2-rbi8aUz6.js → c4Diagram-7LVT6UL2-CSoL6w1j.js} +1 -1
- package/dist/client/assets/c4Diagram-7LVT6UL2-CSoL6w1j.js.br +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-CSoL6w1j.js.gz +0 -0
- package/dist/client/assets/channel-CQrgntwz.js +1 -0
- package/dist/client/assets/{chunk-2Q5K7J3B-CopzhZr-.js → chunk-2Q5K7J3B-BdEnYHBX.js} +1 -1
- package/dist/client/assets/{chunk-5VM5RSS4-ClLaQzHk.js → chunk-5VM5RSS4-p7idUc56.js} +1 -1
- package/dist/client/assets/{chunk-F27PBJKO-BSC7rK0l.js → chunk-F27PBJKO-C-jRH04G.js} +1 -1
- package/dist/client/assets/chunk-F27PBJKO-C-jRH04G.js.br +0 -0
- package/dist/client/assets/chunk-F27PBJKO-C-jRH04G.js.gz +0 -0
- package/dist/client/assets/{chunk-IMKFNOWR-B2VXoEhN.js → chunk-IMKFNOWR-D_GfyMqI.js} +1 -1
- package/dist/client/assets/chunk-IMKFNOWR-D_GfyMqI.js.br +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-D_GfyMqI.js.gz +0 -0
- package/dist/client/assets/{chunk-JWPE2WC7-BqOinZdA.js → chunk-JWPE2WC7-C_tTJeyp.js} +1 -1
- package/dist/client/assets/{chunk-POPQ4Y6H-CNE45B-7.js → chunk-POPQ4Y6H-B7jDpCMg.js} +1 -1
- package/dist/client/assets/{chunk-SVP7TREG-f0h2wclt.js → chunk-SVP7TREG-D2bP2OpS.js} +1 -1
- package/dist/client/assets/chunk-SVP7TREG-D2bP2OpS.js.br +0 -0
- package/dist/client/assets/chunk-SVP7TREG-D2bP2OpS.js.gz +0 -0
- package/dist/client/assets/{chunk-TICWLB2K-BLYE27kR.js → chunk-TICWLB2K-BCmzEINw.js} +1 -1
- package/dist/client/assets/chunk-TICWLB2K-BCmzEINw.js.br +0 -0
- package/dist/client/assets/chunk-TICWLB2K-BCmzEINw.js.gz +0 -0
- package/dist/client/assets/{chunk-XXDRQBXY-CVDDfXPc.js → chunk-XXDRQBXY-CU7zj0sD.js} +1 -1
- package/dist/client/assets/classDiagram-ZZMXUADV-S0RVBlYQ.js +1 -0
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-S0RVBlYQ.js +1 -0
- package/dist/client/assets/{cose-bilkent-JH36ORCC-64n9-rjs.js → cose-bilkent-JH36ORCC-Cc6zJb8W.js} +1 -1
- package/dist/client/assets/cose-bilkent-JH36ORCC-Cc6zJb8W.js.br +0 -0
- package/dist/client/assets/cose-bilkent-JH36ORCC-Cc6zJb8W.js.gz +0 -0
- package/dist/client/assets/{cynefin-OW5HDTMX-BQu4qBBj.js → cynefin-OW5HDTMX-Dx8-oZ-5.js} +1 -1
- package/dist/client/assets/cynefin-OW5HDTMX-Dx8-oZ-5.js.br +0 -0
- package/dist/client/assets/{cynefin-OW5HDTMX-BQu4qBBj.js.gz → cynefin-OW5HDTMX-Dx8-oZ-5.js.gz} +0 -0
- package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-BnwaLoUi.js → cynefinDiagram-5FMLGOSQ-D8w9AR9E.js} +1 -1
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-D8w9AR9E.js.br +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-D8w9AR9E.js.gz +0 -0
- package/dist/client/assets/{dagre-GXQ25YYZ-CqFJh0CI.js → dagre-GXQ25YYZ-DWu5zqlw.js} +1 -1
- package/dist/client/assets/dagre-GXQ25YYZ-DWu5zqlw.js.br +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-DWu5zqlw.js.gz +0 -0
- package/dist/client/assets/{diagram-S7CK7UJ4-CbPoBysM.js → diagram-S7CK7UJ4-C8P4HVUJ.js} +1 -1
- package/dist/client/assets/diagram-S7CK7UJ4-C8P4HVUJ.js.br +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-C8P4HVUJ.js.gz +0 -0
- package/dist/client/assets/{diagram-UQ7AKVKN-BhBN4F33.js → diagram-UQ7AKVKN-B_7uz1pF.js} +1 -1
- package/dist/client/assets/diagram-UQ7AKVKN-B_7uz1pF.js.br +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-B_7uz1pF.js.gz +0 -0
- package/dist/client/assets/{diagram-VSXAHHWV-eYeeGcK9.js → diagram-VSXAHHWV-CtUxXdZO.js} +1 -1
- package/dist/client/assets/diagram-VSXAHHWV-CtUxXdZO.js.br +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-CtUxXdZO.js.gz +0 -0
- package/dist/client/assets/{diagram-VX7I27RA-BJzhPV4h.js → diagram-VX7I27RA-qu13Uscy.js} +1 -1
- package/dist/client/assets/diagram-VX7I27RA-qu13Uscy.js.br +0 -0
- package/dist/client/assets/diagram-VX7I27RA-qu13Uscy.js.gz +0 -0
- package/dist/client/assets/{diagram-Z3DM3KII-CnjpNAJH.js → diagram-Z3DM3KII-CBK_SCwI.js} +1 -1
- package/dist/client/assets/diagram-Z3DM3KII-CBK_SCwI.js.br +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-CBK_SCwI.js.gz +0 -0
- package/dist/client/assets/{ebnfDiagram-PWID7BFC-BSJQBTtu.js → ebnfDiagram-PWID7BFC-WO-4_pvg.js} +1 -1
- package/dist/client/assets/ebnfDiagram-PWID7BFC-WO-4_pvg.js.br +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-WO-4_pvg.js.gz +0 -0
- package/dist/client/assets/{erDiagram-RLTQ6QDP-DJ-J9MxE.js → erDiagram-RLTQ6QDP-CJBTe-Vf.js} +1 -1
- package/dist/client/assets/erDiagram-RLTQ6QDP-CJBTe-Vf.js.br +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-CJBTe-Vf.js.gz +0 -0
- package/dist/client/assets/{flowDiagram-HODETNUW-BoQNTthC.js → flowDiagram-HODETNUW-BMB8WufZ.js} +1 -1
- package/dist/client/assets/flowDiagram-HODETNUW-BMB8WufZ.js.br +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-BMB8WufZ.js.gz +0 -0
- package/dist/client/assets/{ganttDiagram-EL5Y4UJY-CFE98nzY.js → ganttDiagram-EL5Y4UJY-UU86YYND.js} +1 -1
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-UU86YYND.js.br +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-UU86YYND.js.gz +0 -0
- package/dist/client/assets/{gestureArbiter-C_3fpCXt.js → gestureArbiter-B1YQAqce.js} +1 -1
- package/dist/client/assets/gestureArbiter-B1YQAqce.js.br +0 -0
- package/dist/client/assets/gestureArbiter-B1YQAqce.js.gz +0 -0
- package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-DxJzGDIE.js → gitGraphDiagram-WWUBYQGX-C_bQTzYa.js} +1 -1
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-C_bQTzYa.js.br +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-C_bQTzYa.js.gz +0 -0
- package/dist/client/assets/{infoDiagram-27XIBGKW-BZk87iJj.js → infoDiagram-27XIBGKW-D-UPLFB4.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-5VMMS53U-DVsj1R9s.js → ishikawaDiagram-5VMMS53U-BoXlttHi.js} +1 -1
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-BoXlttHi.js.br +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-BoXlttHi.js.gz +0 -0
- package/dist/client/assets/{journeyDiagram-3NMN7TZE-BAB2AWNl.js → journeyDiagram-3NMN7TZE-CFFrNcIl.js} +1 -1
- package/dist/client/assets/journeyDiagram-3NMN7TZE-CFFrNcIl.js.br +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-CFFrNcIl.js.gz +0 -0
- package/dist/client/assets/{kanban-definition-UXKFOSKX-HPNzrFVI.js → kanban-definition-UXKFOSKX-CVGuqvHc.js} +1 -1
- package/dist/client/assets/kanban-definition-UXKFOSKX-CVGuqvHc.js.br +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-CVGuqvHc.js.gz +0 -0
- package/dist/client/assets/{layout-bA7IPCWx.js → layout-3D_JBmoW.js} +1 -1
- package/dist/client/assets/layout-3D_JBmoW.js.br +0 -0
- package/dist/client/assets/layout-3D_JBmoW.js.gz +0 -0
- package/dist/client/assets/{linear-Cd102271.js → linear-DSCyDRIV.js} +1 -1
- package/dist/client/assets/linear-DSCyDRIV.js.br +0 -0
- package/dist/client/assets/linear-DSCyDRIV.js.gz +0 -0
- package/dist/client/assets/{mermaid.core-C4wd6qUT.js → mermaid.core-DmLvRjSp.js} +5 -5
- package/dist/client/assets/mermaid.core-DmLvRjSp.js.br +0 -0
- package/dist/client/assets/mermaid.core-DmLvRjSp.js.gz +0 -0
- package/dist/client/assets/{mindmap-definition-YA3MSWOX-DMxZDI3z.js → mindmap-definition-YA3MSWOX-D-Doz5kr.js} +1 -1
- package/dist/client/assets/mindmap-definition-YA3MSWOX-D-Doz5kr.js.br +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-D-Doz5kr.js.gz +0 -0
- package/dist/client/assets/{passwordBootstrap-aU8HdPsL.js → passwordBootstrap-DzqP6851.js} +1 -1
- package/dist/client/assets/passwordBootstrap-DzqP6851.js.br +0 -0
- package/dist/client/assets/passwordBootstrap-DzqP6851.js.gz +0 -0
- package/dist/client/assets/{pegDiagram-XKGWAZYB-BliPfrj_.js → pegDiagram-XKGWAZYB-jqnn8PjR.js} +1 -1
- package/dist/client/assets/pegDiagram-XKGWAZYB-jqnn8PjR.js.br +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-jqnn8PjR.js.gz +0 -0
- package/dist/client/assets/{pieDiagram-E7YTZNPT-esWyI6AY.js → pieDiagram-E7YTZNPT-D4MedGxH.js} +1 -1
- package/dist/client/assets/pieDiagram-E7YTZNPT-D4MedGxH.js.br +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-D4MedGxH.js.gz +0 -0
- package/dist/client/assets/{quadrantDiagram-AXDQQJYC-CBoaEIHy.js → quadrantDiagram-AXDQQJYC-C4lTdb_9.js} +1 -1
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-C4lTdb_9.js.br +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-C4lTdb_9.js.gz +0 -0
- package/dist/client/assets/{railroadDiagram-O6MQD6OU-FB5bPmYm.js → railroadDiagram-O6MQD6OU-KLdIDLQO.js} +1 -1
- package/dist/client/assets/railroadDiagram-O6MQD6OU-KLdIDLQO.js.br +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-KLdIDLQO.js.gz +0 -0
- package/dist/client/assets/{rdpSession-DnBdxkm1.js → rdpSession-QckpThDq.js} +1 -1
- package/dist/client/assets/rdpSession-QckpThDq.js.br +0 -0
- package/dist/client/assets/rdpSession-QckpThDq.js.gz +0 -0
- package/dist/client/assets/{referenceLongPress-DDmic9E5.js → referenceLongPress-ErqUYlIw.js} +1 -1
- package/dist/client/assets/referenceLongPress-ErqUYlIw.js.br +0 -0
- package/dist/client/assets/referenceLongPress-ErqUYlIw.js.gz +0 -0
- package/dist/client/assets/{requirementDiagram-BXWQKSXE-CpokwhJY.js → requirementDiagram-BXWQKSXE-BEeCbvLt.js} +1 -1
- package/dist/client/assets/requirementDiagram-BXWQKSXE-BEeCbvLt.js.br +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-BEeCbvLt.js.gz +0 -0
- package/dist/client/assets/{sankeyDiagram-P5KCCOFB-DXQDOMAh.js → sankeyDiagram-P5KCCOFB-DD7In9QJ.js} +1 -1
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-DD7In9QJ.js.br +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-DD7In9QJ.js.gz +0 -0
- package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-Dn3ZooAM.js → sequenceDiagram-WJ2MYXX4-BCeJR1Wm.js} +1 -1
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BCeJR1Wm.js.br +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BCeJR1Wm.js.gz +0 -0
- package/dist/client/assets/{sizeCapture-INFHLROL-PItE9Y1o.js → sizeCapture-INFHLROL-DO250O3y.js} +1 -1
- package/dist/client/assets/sizeCapture-INFHLROL-DO250O3y.js.br +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-DO250O3y.js.gz +0 -0
- package/dist/client/assets/{sparkles-BwY5qEOv.js → sparkles-DiUUcfQp.js} +1 -1
- package/dist/client/assets/{stateDiagram-D77RDMKH-BBZ01SXU.js → stateDiagram-D77RDMKH-j-Rx3MIu.js} +1 -1
- package/dist/client/assets/stateDiagram-D77RDMKH-j-Rx3MIu.js.br +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-j-Rx3MIu.js.gz +0 -0
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-80TmHBA3.js +1 -0
- package/dist/client/assets/{swimlanes-42K2YHIH-BY8IlbkR.js → swimlanes-42K2YHIH-D8BxfTs0.js} +1 -1
- package/dist/client/assets/swimlanes-42K2YHIH-D8BxfTs0.js.br +0 -0
- package/dist/client/assets/{swimlanes-42K2YHIH-BY8IlbkR.js.gz → swimlanes-42K2YHIH-D8BxfTs0.js.gz} +0 -0
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-CDwZ9Ews.js +8 -0
- package/dist/client/assets/{timeline-definition-24CTP7MA-DyY9g2Hx.js → timeline-definition-24CTP7MA-Q26Gi8XT.js} +1 -1
- package/dist/client/assets/timeline-definition-24CTP7MA-Q26Gi8XT.js.br +0 -0
- package/dist/client/assets/timeline-definition-24CTP7MA-Q26Gi8XT.js.gz +0 -0
- package/dist/client/assets/{triangle-alert-qb3d0Svx.js → triangle-alert-B3htKRDS.js} +1 -1
- package/dist/client/assets/{vennDiagram-4TSXK5OY-Dy0PQ4-U.js → vennDiagram-4TSXK5OY-QCEPdOun.js} +1 -1
- package/dist/client/assets/vennDiagram-4TSXK5OY-QCEPdOun.js.br +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-QCEPdOun.js.gz +0 -0
- package/dist/client/assets/{videoCompression-BDNHhfKS.js → videoCompression-DomMr6dv.js} +1 -1
- package/dist/client/assets/videoCompression-DomMr6dv.js.br +0 -0
- package/dist/client/assets/videoCompression-DomMr6dv.js.gz +0 -0
- package/dist/client/assets/{wardleyDiagram-VM6X3IG4-DtBEPD3N.js → wardleyDiagram-VM6X3IG4-B6J6Og35.js} +1 -1
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-B6J6Og35.js.br +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-B6J6Og35.js.gz +0 -0
- package/dist/client/assets/{xychartDiagram-S5SC5T6Z-B2K1XjDQ.js → xychartDiagram-S5SC5T6Z-pdImapP4.js} +1 -1
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-pdImapP4.js.br +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-pdImapP4.js.gz +0 -0
- package/dist/client/index.html +1 -1
- package/dist/client/index.html.br +0 -0
- package/dist/client/index.html.gz +0 -0
- package/dist/client/sw-encrypted-background.js +1 -1
- package/dist/client/sw-encrypted-background.js.br +0 -0
- package/dist/client/sw-encrypted-background.js.gz +0 -0
- package/dist/client/sw.js +1 -1
- package/dist/client/sw.js.br +0 -0
- package/dist/client/sw.js.gz +0 -0
- package/dist/server/entry.js +29 -20
- package/dist/server/federation/binaryPacket.js +28 -0
- package/dist/server/federation/packets.js +53 -7
- package/dist/server/federation/recordCompression.js +59 -0
- package/dist/server/federation/runtime.js +35 -37
- package/dist/server/federation/streamDuplex.js +62 -0
- package/dist/server/federation/transferWindow.js +50 -0
- package/dist/server/federation/webTransportCertificate.js +52 -0
- package/dist/server/federation/webTransportProtocol.js +25 -0
- package/dist/server/federation/webTransportServer.js +142 -0
- package/package.json +7 -1
- package/runtime-manifest.json +4 -4
- package/dist/client/assets/App-Bs90VDwF.js +0 -187
- package/dist/client/assets/App-Bs90VDwF.js.br +0 -0
- package/dist/client/assets/App-Bs90VDwF.js.gz +0 -0
- package/dist/client/assets/ArchitecturePanel-Dz0hgSdw.js.br +0 -0
- package/dist/client/assets/ArchitecturePanel-Dz0hgSdw.js.gz +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-3PpmA31G.js.br +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-3PpmA31G.js.gz +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-QA7cyrcg.js.br +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-QA7cyrcg.js.gz +0 -0
- package/dist/client/assets/CollaborationTaskContent-Bjkxb7UF.js +0 -2
- package/dist/client/assets/ComputerControlView-DfKdSvrs.js.br +0 -0
- package/dist/client/assets/ComputerControlView-DfKdSvrs.js.gz +0 -0
- package/dist/client/assets/DagPlayground-IFr1ujrl.js.br +0 -0
- package/dist/client/assets/DagPlayground-IFr1ujrl.js.gz +0 -0
- package/dist/client/assets/DiffLab-BSQmv0td.js.br +0 -0
- package/dist/client/assets/DiffLab-BSQmv0td.js.gz +0 -0
- package/dist/client/assets/DiffReview-CfHl0jeF.js.br +0 -0
- package/dist/client/assets/DiffReview-CfHl0jeF.js.gz +0 -0
- package/dist/client/assets/DiffReviewLab-B_zSSqde.js.br +0 -0
- package/dist/client/assets/DiffReviewLab-B_zSSqde.js.gz +0 -0
- package/dist/client/assets/DiffViewer-DORR0BUb.js.br +0 -0
- package/dist/client/assets/DiffViewer-DORR0BUb.js.gz +0 -0
- package/dist/client/assets/ModelPreview-QdScJljR.js.br +0 -0
- package/dist/client/assets/ModelPreview-QdScJljR.js.gz +0 -0
- package/dist/client/assets/RightSidebar-nUsJCrB9.js.br +0 -0
- package/dist/client/assets/RightSidebar-nUsJCrB9.js.gz +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-B51uxXBg.js.br +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-B51uxXBg.js.gz +0 -0
- package/dist/client/assets/app-DIurxlSe.js +0 -35
- package/dist/client/assets/app-DIurxlSe.js.br +0 -0
- package/dist/client/assets/app-DIurxlSe.js.gz +0 -0
- package/dist/client/assets/arc-Bkn10vSK.js.br +0 -0
- package/dist/client/assets/arc-Bkn10vSK.js.gz +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-CK-cIr48.js.br +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-CK-cIr48.js.gz +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-DzbWXcDy.js.br +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-DzbWXcDy.js.gz +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-rbi8aUz6.js.br +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-rbi8aUz6.js.gz +0 -0
- package/dist/client/assets/channel-DWD77N0J.js +0 -1
- package/dist/client/assets/chunk-F27PBJKO-BSC7rK0l.js.br +0 -0
- package/dist/client/assets/chunk-F27PBJKO-BSC7rK0l.js.gz +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-B2VXoEhN.js.br +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-B2VXoEhN.js.gz +0 -0
- package/dist/client/assets/chunk-SVP7TREG-f0h2wclt.js.br +0 -0
- package/dist/client/assets/chunk-SVP7TREG-f0h2wclt.js.gz +0 -0
- package/dist/client/assets/chunk-TICWLB2K-BLYE27kR.js.br +0 -0
- package/dist/client/assets/chunk-TICWLB2K-BLYE27kR.js.gz +0 -0
- package/dist/client/assets/classDiagram-ZZMXUADV-BPUOP6TD.js +0 -1
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-BPUOP6TD.js +0 -1
- package/dist/client/assets/cose-bilkent-JH36ORCC-64n9-rjs.js.br +0 -0
- package/dist/client/assets/cose-bilkent-JH36ORCC-64n9-rjs.js.gz +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-BQu4qBBj.js.br +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-BnwaLoUi.js.br +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-BnwaLoUi.js.gz +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-CqFJh0CI.js.br +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-CqFJh0CI.js.gz +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-CbPoBysM.js.br +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-CbPoBysM.js.gz +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-BhBN4F33.js.br +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-BhBN4F33.js.gz +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-eYeeGcK9.js.br +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-eYeeGcK9.js.gz +0 -0
- package/dist/client/assets/diagram-VX7I27RA-BJzhPV4h.js.br +0 -0
- package/dist/client/assets/diagram-VX7I27RA-BJzhPV4h.js.gz +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-CnjpNAJH.js.br +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-CnjpNAJH.js.gz +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-BSJQBTtu.js.br +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-BSJQBTtu.js.gz +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-DJ-J9MxE.js.br +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-DJ-J9MxE.js.gz +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-BoQNTthC.js.br +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-BoQNTthC.js.gz +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-CFE98nzY.js.br +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-CFE98nzY.js.gz +0 -0
- package/dist/client/assets/gestureArbiter-C_3fpCXt.js.br +0 -0
- package/dist/client/assets/gestureArbiter-C_3fpCXt.js.gz +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-DxJzGDIE.js.br +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-DxJzGDIE.js.gz +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-DVsj1R9s.js.br +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-DVsj1R9s.js.gz +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-BAB2AWNl.js.br +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-BAB2AWNl.js.gz +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-HPNzrFVI.js.br +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-HPNzrFVI.js.gz +0 -0
- package/dist/client/assets/layout-bA7IPCWx.js.br +0 -0
- package/dist/client/assets/layout-bA7IPCWx.js.gz +0 -0
- package/dist/client/assets/linear-Cd102271.js.br +0 -0
- package/dist/client/assets/linear-Cd102271.js.gz +0 -0
- package/dist/client/assets/mermaid.core-C4wd6qUT.js.br +0 -0
- package/dist/client/assets/mermaid.core-C4wd6qUT.js.gz +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-DMxZDI3z.js.br +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-DMxZDI3z.js.gz +0 -0
- package/dist/client/assets/passwordBootstrap-aU8HdPsL.js.br +0 -0
- package/dist/client/assets/passwordBootstrap-aU8HdPsL.js.gz +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-BliPfrj_.js.br +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-BliPfrj_.js.gz +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-esWyI6AY.js.br +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-esWyI6AY.js.gz +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-CBoaEIHy.js.br +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-CBoaEIHy.js.gz +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-FB5bPmYm.js.br +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-FB5bPmYm.js.gz +0 -0
- package/dist/client/assets/rdpSession-DnBdxkm1.js.br +0 -0
- package/dist/client/assets/rdpSession-DnBdxkm1.js.gz +0 -0
- package/dist/client/assets/referenceLongPress-DDmic9E5.js.br +0 -0
- package/dist/client/assets/referenceLongPress-DDmic9E5.js.gz +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-CpokwhJY.js.br +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-CpokwhJY.js.gz +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-DXQDOMAh.js.br +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-DXQDOMAh.js.gz +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-Dn3ZooAM.js.br +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-Dn3ZooAM.js.gz +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-PItE9Y1o.js.br +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-PItE9Y1o.js.gz +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-BBZ01SXU.js.br +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-BBZ01SXU.js.gz +0 -0
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-BHm-8VYK.js +0 -1
- package/dist/client/assets/swimlanes-42K2YHIH-BY8IlbkR.js.br +0 -0
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-BuCvfzGX.js +0 -8
- package/dist/client/assets/timeline-definition-24CTP7MA-DyY9g2Hx.js.br +0 -0
- package/dist/client/assets/timeline-definition-24CTP7MA-DyY9g2Hx.js.gz +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-Dy0PQ4-U.js.br +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-Dy0PQ4-U.js.gz +0 -0
- package/dist/client/assets/videoCompression-BDNHhfKS.js.br +0 -0
- package/dist/client/assets/videoCompression-BDNHhfKS.js.gz +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-DtBEPD3N.js.br +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-DtBEPD3N.js.gz +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-B2K1XjDQ.js.br +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-B2K1XjDQ.js.gz +0 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { X509Certificate, createPrivateKey, createPublicKey, randomBytes, webcrypto } from 'node:crypto';
|
|
2
|
+
import { readFile, writeFile, rename, chmod, mkdir, unlink } from 'node:fs/promises';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
function inspect(value, now) {
|
|
5
|
+
const cert = new X509Certificate(value.cert);
|
|
6
|
+
const key = createPrivateKey(value.key);
|
|
7
|
+
if (key.asymmetricKeyType !== 'ec' || key.asymmetricKeyDetails?.namedCurve !== 'prime256v1'
|
|
8
|
+
|| !createPublicKey(key).export({ type: 'spki', format: 'der' }).equals(cert.publicKey.export({ type: 'spki', format: 'der' })))
|
|
9
|
+
throw new Error('Invalid QUIC certificate key');
|
|
10
|
+
const expiresAt = Date.parse(cert.validTo), startsAt = Date.parse(cert.validFrom);
|
|
11
|
+
if (!Number.isFinite(expiresAt) || startsAt > now || expiresAt - startsAt > 14 * 86400_000 || expiresAt < now + 2 * 86400_000)
|
|
12
|
+
throw new Error('QUIC certificate needs renewal');
|
|
13
|
+
return { ...value, hash: cert.fingerprint256.replaceAll(':', '').toLowerCase(), expiresAt };
|
|
14
|
+
}
|
|
15
|
+
/** Browsers require short-lived ECDSA certificates for hash-pinned QUIC.
|
|
16
|
+
* Their public hash is delivered through the already authenticated Noise link;
|
|
17
|
+
* the normal HTTPS certificate/CA is unchanged. */
|
|
18
|
+
export async function transportCertificate(directory, now = Date.now()) {
|
|
19
|
+
await mkdir(directory, { recursive: true, mode: 0o700 });
|
|
20
|
+
const file = join(directory, 'quic-certificate.json');
|
|
21
|
+
try {
|
|
22
|
+
const stored = JSON.parse(await readFile(file, 'utf8'));
|
|
23
|
+
const result = inspect(stored, now);
|
|
24
|
+
await chmod(file, 0o600);
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
catch { /* Missing, invalid or expiring certificates are replaced atomically. */ }
|
|
28
|
+
await import('reflect-metadata');
|
|
29
|
+
const x509 = await import('@peculiar/x509');
|
|
30
|
+
const keys = await webcrypto.subtle.generateKey({ name: 'ECDSA', namedCurve: 'P-256' }, true, ['sign', 'verify']);
|
|
31
|
+
const cert = await x509.X509CertificateGenerator.createSelfSigned({
|
|
32
|
+
serialNumber: randomBytes(16).toString('hex'), name: 'CN=Termdock QUIC',
|
|
33
|
+
notBefore: new Date(now - 60_000), notAfter: new Date(now + 13 * 86400_000),
|
|
34
|
+
signingAlgorithm: { name: 'ECDSA', hash: 'SHA-256' }, keys: keys,
|
|
35
|
+
extensions: [new x509.BasicConstraintsExtension(false), new x509.SubjectAlternativeNameExtension([
|
|
36
|
+
{ type: 'dns', value: 'localhost' }, { type: 'ip', value: '127.0.0.1' }, { type: 'ip', value: '::1' },
|
|
37
|
+
])],
|
|
38
|
+
}, webcrypto);
|
|
39
|
+
const exported = Buffer.from(await webcrypto.subtle.exportKey('pkcs8', keys.privateKey));
|
|
40
|
+
const key = `-----BEGIN PRIVATE KEY-----\n${exported.toString('base64').match(/.{1,64}/g).join('\n')}\n-----END PRIVATE KEY-----\n`;
|
|
41
|
+
const value = { cert: cert.toString('pem'), key };
|
|
42
|
+
const temp = `${file}.${randomBytes(8).toString('hex')}.tmp`;
|
|
43
|
+
try {
|
|
44
|
+
await writeFile(temp, JSON.stringify(value), { mode: 0o600, flag: 'wx' });
|
|
45
|
+
await rename(temp, file);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
await unlink(temp).catch(() => { });
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
return inspect(value, now);
|
|
52
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export const WEBTRANSPORT_PATH = '/api/federation/transport';
|
|
2
|
+
export const WEBTRANSPORT_CONNECT_TIMEOUT_MS = 4000;
|
|
3
|
+
export const WEBTRANSPORT_STREAM_TIMEOUT_MS = 4000;
|
|
4
|
+
export const WEBTRANSPORT_MAX_STREAMS = 128;
|
|
5
|
+
export function readWebTransportDescriptor(value, now = Date.now()) {
|
|
6
|
+
if (!value || typeof value !== 'object')
|
|
7
|
+
return;
|
|
8
|
+
const d = value;
|
|
9
|
+
if (d.version !== 1 || d.path !== WEBTRANSPORT_PATH || !Number.isSafeInteger(d.port) || d.port < 1 || d.port > 65535
|
|
10
|
+
|| typeof d.certificateHash !== 'string' || !/^[a-f0-9]{64}$/.test(d.certificateHash)
|
|
11
|
+
|| !Number.isSafeInteger(d.expiresAt) || d.expiresAt <= now || d.expiresAt > now + 14 * 86400_000)
|
|
12
|
+
return;
|
|
13
|
+
return { version: 1, path: WEBTRANSPORT_PATH, port: d.port, certificateHash: d.certificateHash, expiresAt: d.expiresAt };
|
|
14
|
+
}
|
|
15
|
+
/** Cancel the operation, including late arrivals, rather than leaving a timed
|
|
16
|
+
* out stream/handshake attached to a live session. */
|
|
17
|
+
export async function abortable(promise, signal, cancel) {
|
|
18
|
+
return new Promise((resolve, reject) => {
|
|
19
|
+
const abort = () => { cancel(); reject(signal.reason ?? new Error('Transport aborted')); };
|
|
20
|
+
signal.addEventListener('abort', abort, { once: true });
|
|
21
|
+
void promise.then(value => { signal.removeEventListener('abort', abort); resolve(value); }, error => { signal.removeEventListener('abort', abort); reject(error); });
|
|
22
|
+
if (signal.aborted)
|
|
23
|
+
abort();
|
|
24
|
+
});
|
|
25
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
import { streamDuplex } from './streamDuplex.js';
|
|
3
|
+
import { transportCertificate } from './webTransportCertificate.js';
|
|
4
|
+
import { WEBTRANSPORT_PATH, WEBTRANSPORT_MAX_STREAMS } from './webTransportProtocol.js';
|
|
5
|
+
export async function startWebTransportServer(options) {
|
|
6
|
+
// Optional native support must not become a static build/runtime dependency
|
|
7
|
+
// on platforms without a QUICHE binary. The upstream exports map also lacks
|
|
8
|
+
// a top-level TypeScript condition; keep our small adapter contract explicit.
|
|
9
|
+
const moduleName = '@fails-components/webtransport';
|
|
10
|
+
const implementation = await import(moduleName);
|
|
11
|
+
await implementation.quicheLoaded;
|
|
12
|
+
let certificate = await transportCertificate(options.directory);
|
|
13
|
+
const raw = new implementation.Http3Server({ host: options.host, port: options.port,
|
|
14
|
+
cert: certificate.cert, privKey: certificate.key, secret: randomBytes(32).toString('hex'),
|
|
15
|
+
initialStreamFlowControlWindow: 256 * 1024, initialSessionFlowControlWindow: 4 * 1024 * 1024,
|
|
16
|
+
streamShouldAutoTuneReceiveWindow: true, streamFlowControlWindowSizeLimit: 2 * 1024 * 1024,
|
|
17
|
+
sessionShouldAutoTuneReceiveWindow: true, sessionFlowControlWindowSizeLimit: 8 * 1024 * 1024,
|
|
18
|
+
initialBidirectionalReceiveStreams: WEBTRANSPORT_MAX_STREAMS,
|
|
19
|
+
});
|
|
20
|
+
const sessions = new Set();
|
|
21
|
+
const streams = new Set();
|
|
22
|
+
let stopped = false;
|
|
23
|
+
let nativeStopped = false;
|
|
24
|
+
let rotation;
|
|
25
|
+
const stopNative = () => {
|
|
26
|
+
if (nativeStopped)
|
|
27
|
+
return;
|
|
28
|
+
try {
|
|
29
|
+
raw.stopServer();
|
|
30
|
+
nativeStopped = true;
|
|
31
|
+
}
|
|
32
|
+
catch { /* Still initializing. */ }
|
|
33
|
+
};
|
|
34
|
+
const close = () => {
|
|
35
|
+
if (stopped)
|
|
36
|
+
return;
|
|
37
|
+
stopped = true;
|
|
38
|
+
clearInterval(rotation);
|
|
39
|
+
for (const stream of streams)
|
|
40
|
+
stream.close?.(new Error('QUIC server stopped'));
|
|
41
|
+
for (const session of sessions)
|
|
42
|
+
session.close({ closeCode: 0, reason: 'Service restarting' });
|
|
43
|
+
// Let RESET_STREAM / CONNECTION_CLOSE reach UDP before destroying the
|
|
44
|
+
// native socket. Closing it in the same turn strands peers until idle timeout.
|
|
45
|
+
const drain = () => { setTimeout(stopNative, 100).unref(); };
|
|
46
|
+
drain();
|
|
47
|
+
void raw.ready.then(drain, () => { });
|
|
48
|
+
};
|
|
49
|
+
raw.setRequestCallback(async ({ header }) => ({
|
|
50
|
+
path: WEBTRANSPORT_PATH,
|
|
51
|
+
status: !stopped && sessions.size < 64 && header[':path'] === WEBTRANSPORT_PATH
|
|
52
|
+
&& options.hostAllowed(header[':authority']) && options.originAllowed(header.origin, header[':authority']) ? 200 : 403,
|
|
53
|
+
}));
|
|
54
|
+
const incoming = raw.sessionStream(WEBTRANSPORT_PATH).getReader();
|
|
55
|
+
async function serve(session) {
|
|
56
|
+
if (stopped || sessions.size >= 64) {
|
|
57
|
+
session.close({ closeCode: 1, reason: 'Connection limit' });
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
sessions.add(session);
|
|
61
|
+
const own = new Set();
|
|
62
|
+
const cleanup = () => {
|
|
63
|
+
sessions.delete(session);
|
|
64
|
+
for (const duplex of own)
|
|
65
|
+
duplex.close?.(new Error('QUIC session closed'));
|
|
66
|
+
};
|
|
67
|
+
void session.closed.then(cleanup, cleanup);
|
|
68
|
+
await session.ready;
|
|
69
|
+
const reader = session.incomingBidirectionalStreams.getReader();
|
|
70
|
+
try {
|
|
71
|
+
while (!stopped) {
|
|
72
|
+
const { done, value } = await reader.read();
|
|
73
|
+
if (done)
|
|
74
|
+
return;
|
|
75
|
+
const duplex = streamDuplex(value);
|
|
76
|
+
if (own.size >= WEBTRANSPORT_MAX_STREAMS || streams.size >= 256) {
|
|
77
|
+
duplex.close?.(new Error('Stream limit'));
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
own.add(duplex);
|
|
81
|
+
streams.add(duplex);
|
|
82
|
+
const context = { allowOpenAccess: options.openAccessAllowed(session.header?.origin, session.header?.[':authority']), singleOperation: true };
|
|
83
|
+
void options.accept(duplex, context).catch(() => duplex.close?.(new Error('Secure stream failed')))
|
|
84
|
+
.finally(() => { own.delete(duplex); streams.delete(duplex); });
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
reader.releaseLock();
|
|
89
|
+
cleanup();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
void (async () => {
|
|
93
|
+
try {
|
|
94
|
+
while (!stopped) {
|
|
95
|
+
const { done, value } = await incoming.read();
|
|
96
|
+
if (done)
|
|
97
|
+
return;
|
|
98
|
+
void serve(value).catch(() => value.close({ closeCode: 1, reason: 'Invalid stream' }));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch { /* Native shutdown ends this reader. */ }
|
|
102
|
+
finally {
|
|
103
|
+
incoming.releaseLock();
|
|
104
|
+
}
|
|
105
|
+
})();
|
|
106
|
+
void raw.closed.then(close, close);
|
|
107
|
+
raw.startServer();
|
|
108
|
+
let timer;
|
|
109
|
+
try {
|
|
110
|
+
await Promise.race([raw.ready, new Promise((_resolve, reject) => { timer = setTimeout(() => reject(new Error('QUIC listener startup timed out')), 5000); })]);
|
|
111
|
+
const port = raw.address()?.port;
|
|
112
|
+
if (!port)
|
|
113
|
+
throw new Error('QUIC listener has no port');
|
|
114
|
+
rotation = setInterval(() => {
|
|
115
|
+
if (certificate.expiresAt > Date.now() + 3 * 86400_000)
|
|
116
|
+
return;
|
|
117
|
+
void transportCertificate(options.directory).then(next => {
|
|
118
|
+
if (stopped || next.hash === certificate.hash)
|
|
119
|
+
return;
|
|
120
|
+
raw.updateCert(next.cert, next.key, false);
|
|
121
|
+
certificate = next;
|
|
122
|
+
}).catch(() => { });
|
|
123
|
+
}, 60 * 60_000);
|
|
124
|
+
rotation.unref();
|
|
125
|
+
return {
|
|
126
|
+
close,
|
|
127
|
+
descriptor() {
|
|
128
|
+
return stopped || certificate.expiresAt <= Date.now() ? undefined : {
|
|
129
|
+
version: 1, port, path: WEBTRANSPORT_PATH, certificateHash: certificate.hash, expiresAt: certificate.expiresAt,
|
|
130
|
+
};
|
|
131
|
+
},
|
|
132
|
+
stats: () => ({ sessions: sessions.size, streams: streams.size }),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
close();
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
139
|
+
finally {
|
|
140
|
+
clearTimeout(timer);
|
|
141
|
+
}
|
|
142
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "termdock",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.342",
|
|
4
4
|
"description": "A complete web-based terminal application with modern UI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": ".desktop-dist/main.js",
|
|
@@ -65,6 +65,7 @@
|
|
|
65
65
|
"@libp2p/utils": "7.0.7",
|
|
66
66
|
"@noble/hashes": "2.4.0",
|
|
67
67
|
"@novnc/novnc": "^1.7.0",
|
|
68
|
+
"@peculiar/x509": "2.2.0",
|
|
68
69
|
"@serenity-kit/opaque": "1.1.0",
|
|
69
70
|
"@types/cookie-parser": "^1.4.10",
|
|
70
71
|
"@types/csurf": "^1.11.5",
|
|
@@ -100,6 +101,7 @@
|
|
|
100
101
|
"react": "^18.2.0",
|
|
101
102
|
"react-diff-view": "^3.3.3",
|
|
102
103
|
"react-dom": "^18.2.0",
|
|
104
|
+
"reflect-metadata": "0.2.2",
|
|
103
105
|
"refractor": "^2.10.1",
|
|
104
106
|
"swiper": "^12.1.3",
|
|
105
107
|
"tailwind-merge": "^2.2.0",
|
|
@@ -167,5 +169,9 @@
|
|
|
167
169
|
},
|
|
168
170
|
"overrides": {
|
|
169
171
|
"prismjs": "^1.30.0"
|
|
172
|
+
},
|
|
173
|
+
"optionalDependencies": {
|
|
174
|
+
"@fails-components/webtransport": "1.6.11",
|
|
175
|
+
"@fails-components/webtransport-transport-http3-quiche": "1.6.11"
|
|
170
176
|
}
|
|
171
177
|
}
|
package/runtime-manifest.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"packageName": "termdock",
|
|
4
|
-
"version": "1.4.
|
|
4
|
+
"version": "1.4.342",
|
|
5
5
|
"runtimeProtocolVersion": 1,
|
|
6
6
|
"minimumDesktopVersion": "1.4.46",
|
|
7
7
|
"nodeMajor": 22,
|
|
8
|
-
"dependencyHash": "sha256-
|
|
9
|
-
"serverBundleHash": "sha256-
|
|
10
|
-
"clientBundleHash": "sha256-
|
|
8
|
+
"dependencyHash": "sha256-4fjVNH4wSrTRkRTd373WiwHrjn1w8wGVCOPGWBDE+p4=",
|
|
9
|
+
"serverBundleHash": "sha256-u2oE9LHPmLuBPDnhWHwPC7AgpKHVlrOntYy2PGv3SE0=",
|
|
10
|
+
"clientBundleHash": "sha256-ESkzBb4GaJ0ikUX3PasxphJNnbX6BdYPA1BuougA0IQ=",
|
|
11
11
|
"entrypoint": "dist/server/cli.js",
|
|
12
12
|
"clientEntrypoint": "dist/client/index.html"
|
|
13
13
|
}
|