termdock 1.4.340 → 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.
Files changed (353) hide show
  1. package/THIRD_PARTY_NOTICES.md +79 -0
  2. package/dist/client/assets/App-DuWNc_Sd.js +187 -0
  3. package/dist/client/assets/App-DuWNc_Sd.js.br +0 -0
  4. package/dist/client/assets/App-DuWNc_Sd.js.gz +0 -0
  5. package/dist/client/assets/{ArchitecturePanel-DOnzfg14.js → ArchitecturePanel-Bjhd5uMf.js} +2 -2
  6. package/dist/client/assets/ArchitecturePanel-Bjhd5uMf.js.br +0 -0
  7. package/dist/client/assets/ArchitecturePanel-Bjhd5uMf.js.gz +0 -0
  8. package/dist/client/assets/{ChangeWalkthroughPanel-CKiLPco1.js → ChangeWalkthroughPanel-DKDNcKro.js} +1 -1
  9. package/dist/client/assets/ChangeWalkthroughPanel-DKDNcKro.js.br +0 -0
  10. package/dist/client/assets/ChangeWalkthroughPanel-DKDNcKro.js.gz +0 -0
  11. package/dist/client/assets/{CollaborationMainWorkspace-W0kWrjda.js → CollaborationMainWorkspace-C11Rr6yD.js} +1 -1
  12. package/dist/client/assets/CollaborationMainWorkspace-C11Rr6yD.js.br +0 -0
  13. package/dist/client/assets/CollaborationMainWorkspace-C11Rr6yD.js.gz +0 -0
  14. package/dist/client/assets/CollaborationTaskContent-DNRyAkOX.js +2 -0
  15. package/dist/client/assets/{ComputerControlView-DifZfjFA.js → ComputerControlView-B5C6ETMh.js} +3 -3
  16. package/dist/client/assets/ComputerControlView-B5C6ETMh.js.br +0 -0
  17. package/dist/client/assets/ComputerControlView-B5C6ETMh.js.gz +0 -0
  18. package/dist/client/assets/{DagPlayground-BVW13X03.js → DagPlayground-BrrzhUzm.js} +1 -1
  19. package/dist/client/assets/DagPlayground-BrrzhUzm.js.br +0 -0
  20. package/dist/client/assets/DagPlayground-BrrzhUzm.js.gz +0 -0
  21. package/dist/client/assets/{DiffLab-BsxCrMdP.js → DiffLab-DdFwfYKr.js} +1 -1
  22. package/dist/client/assets/DiffLab-DdFwfYKr.js.br +0 -0
  23. package/dist/client/assets/DiffLab-DdFwfYKr.js.gz +0 -0
  24. package/dist/client/assets/{DiffReview-Dj0Bcos9.js → DiffReview-GloQdQAq.js} +1 -1
  25. package/dist/client/assets/DiffReview-GloQdQAq.js.br +0 -0
  26. package/dist/client/assets/DiffReview-GloQdQAq.js.gz +0 -0
  27. package/dist/client/assets/{DiffReviewLab-DMtmYFQh.js → DiffReviewLab-C5_nDmPj.js} +1 -1
  28. package/dist/client/assets/DiffReviewLab-C5_nDmPj.js.br +0 -0
  29. package/dist/client/assets/DiffReviewLab-C5_nDmPj.js.gz +0 -0
  30. package/dist/client/assets/{DiffViewer-BYvyJXBJ.js → DiffViewer-lsURzN_a.js} +1 -1
  31. package/dist/client/assets/DiffViewer-lsURzN_a.js.br +0 -0
  32. package/dist/client/assets/{DiffViewer-BYvyJXBJ.js.gz → DiffViewer-lsURzN_a.js.gz} +0 -0
  33. package/dist/client/assets/{ModelPreview-CY-QMJgX.js → ModelPreview-Dha8K529.js} +1 -1
  34. package/dist/client/assets/ModelPreview-Dha8K529.js.br +0 -0
  35. package/dist/client/assets/ModelPreview-Dha8K529.js.gz +0 -0
  36. package/dist/client/assets/{RightSidebar-C7KzAty-.js → RightSidebar-DFWCFBCy.js} +3 -3
  37. package/dist/client/assets/RightSidebar-DFWCFBCy.js.br +0 -0
  38. package/dist/client/assets/RightSidebar-DFWCFBCy.js.gz +0 -0
  39. package/dist/client/assets/{abnfDiagram-VCTEODGH-Cht5lriL.js → abnfDiagram-VCTEODGH-3R9vxuaa.js} +1 -1
  40. package/dist/client/assets/abnfDiagram-VCTEODGH-3R9vxuaa.js.br +0 -0
  41. package/dist/client/assets/abnfDiagram-VCTEODGH-3R9vxuaa.js.gz +0 -0
  42. package/dist/client/assets/app-By1Q_guu.js +35 -0
  43. package/dist/client/assets/app-By1Q_guu.js.br +0 -0
  44. package/dist/client/assets/app-By1Q_guu.js.gz +0 -0
  45. package/dist/client/assets/{arc-CSvVpXnr.js → arc-BRSYFA6a.js} +1 -1
  46. package/dist/client/assets/arc-BRSYFA6a.js.br +0 -0
  47. package/dist/client/assets/arc-BRSYFA6a.js.gz +0 -0
  48. package/dist/client/assets/{architectureDiagram-5GKGNRK7-5YBoORnk.js → architectureDiagram-5GKGNRK7-DU21Xuxy.js} +1 -1
  49. package/dist/client/assets/architectureDiagram-5GKGNRK7-DU21Xuxy.js.br +0 -0
  50. package/dist/client/assets/architectureDiagram-5GKGNRK7-DU21Xuxy.js.gz +0 -0
  51. package/dist/client/assets/{blockDiagram-I7D4REHJ-hFhUSGqA.js → blockDiagram-I7D4REHJ-B8aQKSok.js} +1 -1
  52. package/dist/client/assets/blockDiagram-I7D4REHJ-B8aQKSok.js.br +0 -0
  53. package/dist/client/assets/blockDiagram-I7D4REHJ-B8aQKSok.js.gz +0 -0
  54. package/dist/client/assets/{c4Diagram-7LVT6UL2-DfOA3VSb.js → c4Diagram-7LVT6UL2-CSoL6w1j.js} +1 -1
  55. package/dist/client/assets/c4Diagram-7LVT6UL2-CSoL6w1j.js.br +0 -0
  56. package/dist/client/assets/c4Diagram-7LVT6UL2-CSoL6w1j.js.gz +0 -0
  57. package/dist/client/assets/channel-CQrgntwz.js +1 -0
  58. package/dist/client/assets/{chunk-2Q5K7J3B-lkBykkUq.js → chunk-2Q5K7J3B-BdEnYHBX.js} +1 -1
  59. package/dist/client/assets/{chunk-5VM5RSS4-BHDVPBQZ.js → chunk-5VM5RSS4-p7idUc56.js} +1 -1
  60. package/dist/client/assets/{chunk-F27PBJKO-CCYgT6ZC.js → chunk-F27PBJKO-C-jRH04G.js} +1 -1
  61. package/dist/client/assets/chunk-F27PBJKO-C-jRH04G.js.br +0 -0
  62. package/dist/client/assets/chunk-F27PBJKO-C-jRH04G.js.gz +0 -0
  63. package/dist/client/assets/{chunk-IMKFNOWR-CeMs9S8e.js → chunk-IMKFNOWR-D_GfyMqI.js} +1 -1
  64. package/dist/client/assets/chunk-IMKFNOWR-D_GfyMqI.js.br +0 -0
  65. package/dist/client/assets/chunk-IMKFNOWR-D_GfyMqI.js.gz +0 -0
  66. package/dist/client/assets/{chunk-JWPE2WC7-6ESaBb9I.js → chunk-JWPE2WC7-C_tTJeyp.js} +1 -1
  67. package/dist/client/assets/{chunk-POPQ4Y6H-B2OEhFe8.js → chunk-POPQ4Y6H-B7jDpCMg.js} +1 -1
  68. package/dist/client/assets/{chunk-SVP7TREG-BWwRXr8s.js → chunk-SVP7TREG-D2bP2OpS.js} +1 -1
  69. package/dist/client/assets/chunk-SVP7TREG-D2bP2OpS.js.br +0 -0
  70. package/dist/client/assets/chunk-SVP7TREG-D2bP2OpS.js.gz +0 -0
  71. package/dist/client/assets/{chunk-TICWLB2K-CYEvRrFr.js → chunk-TICWLB2K-BCmzEINw.js} +1 -1
  72. package/dist/client/assets/chunk-TICWLB2K-BCmzEINw.js.br +0 -0
  73. package/dist/client/assets/chunk-TICWLB2K-BCmzEINw.js.gz +0 -0
  74. package/dist/client/assets/{chunk-XXDRQBXY-rGREZrNE.js → chunk-XXDRQBXY-CU7zj0sD.js} +1 -1
  75. package/dist/client/assets/classDiagram-ZZMXUADV-S0RVBlYQ.js +1 -0
  76. package/dist/client/assets/classDiagram-v2-VYDZK3BY-S0RVBlYQ.js +1 -0
  77. package/dist/client/assets/{cose-bilkent-JH36ORCC-C9mzpLHW.js → cose-bilkent-JH36ORCC-Cc6zJb8W.js} +1 -1
  78. package/dist/client/assets/cose-bilkent-JH36ORCC-Cc6zJb8W.js.br +0 -0
  79. package/dist/client/assets/{cose-bilkent-JH36ORCC-C9mzpLHW.js.gz → cose-bilkent-JH36ORCC-Cc6zJb8W.js.gz} +0 -0
  80. package/dist/client/assets/{cynefin-OW5HDTMX-C7o6GjqO.js → cynefin-OW5HDTMX-Dx8-oZ-5.js} +1 -1
  81. package/dist/client/assets/cynefin-OW5HDTMX-Dx8-oZ-5.js.br +0 -0
  82. package/dist/client/assets/cynefin-OW5HDTMX-Dx8-oZ-5.js.gz +0 -0
  83. package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-ObxBWzAE.js → cynefinDiagram-5FMLGOSQ-D8w9AR9E.js} +1 -1
  84. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-D8w9AR9E.js.br +0 -0
  85. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-D8w9AR9E.js.gz +0 -0
  86. package/dist/client/assets/{dagre-GXQ25YYZ-B3_gKJCX.js → dagre-GXQ25YYZ-DWu5zqlw.js} +1 -1
  87. package/dist/client/assets/dagre-GXQ25YYZ-DWu5zqlw.js.br +0 -0
  88. package/dist/client/assets/dagre-GXQ25YYZ-DWu5zqlw.js.gz +0 -0
  89. package/dist/client/assets/{diagram-S7CK7UJ4-DQ5pi54s.js → diagram-S7CK7UJ4-C8P4HVUJ.js} +1 -1
  90. package/dist/client/assets/diagram-S7CK7UJ4-C8P4HVUJ.js.br +0 -0
  91. package/dist/client/assets/diagram-S7CK7UJ4-C8P4HVUJ.js.gz +0 -0
  92. package/dist/client/assets/{diagram-UQ7AKVKN-DzYfS3aw.js → diagram-UQ7AKVKN-B_7uz1pF.js} +1 -1
  93. package/dist/client/assets/diagram-UQ7AKVKN-B_7uz1pF.js.br +0 -0
  94. package/dist/client/assets/diagram-UQ7AKVKN-B_7uz1pF.js.gz +0 -0
  95. package/dist/client/assets/{diagram-VSXAHHWV-BLJF03jD.js → diagram-VSXAHHWV-CtUxXdZO.js} +1 -1
  96. package/dist/client/assets/diagram-VSXAHHWV-CtUxXdZO.js.br +0 -0
  97. package/dist/client/assets/diagram-VSXAHHWV-CtUxXdZO.js.gz +0 -0
  98. package/dist/client/assets/{diagram-VX7I27RA-OKxFaFIx.js → diagram-VX7I27RA-qu13Uscy.js} +1 -1
  99. package/dist/client/assets/diagram-VX7I27RA-qu13Uscy.js.br +0 -0
  100. package/dist/client/assets/diagram-VX7I27RA-qu13Uscy.js.gz +0 -0
  101. package/dist/client/assets/{diagram-Z3DM3KII-BAvFAW_4.js → diagram-Z3DM3KII-CBK_SCwI.js} +1 -1
  102. package/dist/client/assets/diagram-Z3DM3KII-CBK_SCwI.js.br +0 -0
  103. package/dist/client/assets/diagram-Z3DM3KII-CBK_SCwI.js.gz +0 -0
  104. package/dist/client/assets/{ebnfDiagram-PWID7BFC-Chf4ZQWO.js → ebnfDiagram-PWID7BFC-WO-4_pvg.js} +1 -1
  105. package/dist/client/assets/ebnfDiagram-PWID7BFC-WO-4_pvg.js.br +0 -0
  106. package/dist/client/assets/ebnfDiagram-PWID7BFC-WO-4_pvg.js.gz +0 -0
  107. package/dist/client/assets/{erDiagram-RLTQ6QDP-DGDEOgE2.js → erDiagram-RLTQ6QDP-CJBTe-Vf.js} +1 -1
  108. package/dist/client/assets/{erDiagram-RLTQ6QDP-DGDEOgE2.js.br → erDiagram-RLTQ6QDP-CJBTe-Vf.js.br} +0 -0
  109. package/dist/client/assets/erDiagram-RLTQ6QDP-CJBTe-Vf.js.gz +0 -0
  110. package/dist/client/assets/{flowDiagram-HODETNUW-D2NlrkZp.js → flowDiagram-HODETNUW-BMB8WufZ.js} +1 -1
  111. package/dist/client/assets/flowDiagram-HODETNUW-BMB8WufZ.js.br +0 -0
  112. package/dist/client/assets/flowDiagram-HODETNUW-BMB8WufZ.js.gz +0 -0
  113. package/dist/client/assets/{ganttDiagram-EL5Y4UJY-DNNpZzdf.js → ganttDiagram-EL5Y4UJY-UU86YYND.js} +1 -1
  114. package/dist/client/assets/ganttDiagram-EL5Y4UJY-UU86YYND.js.br +0 -0
  115. package/dist/client/assets/ganttDiagram-EL5Y4UJY-UU86YYND.js.gz +0 -0
  116. package/dist/client/assets/{gestureArbiter-DIc7AWJZ.js → gestureArbiter-B1YQAqce.js} +1 -1
  117. package/dist/client/assets/gestureArbiter-B1YQAqce.js.br +0 -0
  118. package/dist/client/assets/gestureArbiter-B1YQAqce.js.gz +0 -0
  119. package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-BA3ZRcN2.js → gitGraphDiagram-WWUBYQGX-C_bQTzYa.js} +1 -1
  120. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-C_bQTzYa.js.br +0 -0
  121. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-C_bQTzYa.js.gz +0 -0
  122. package/dist/client/assets/{index-5jNvYAEk.css → index-A-ZC9mbr.css} +1 -1
  123. package/dist/client/assets/index-A-ZC9mbr.css.br +0 -0
  124. package/dist/client/assets/{index-5jNvYAEk.css.gz → index-A-ZC9mbr.css.gz} +0 -0
  125. package/dist/client/assets/{infoDiagram-27XIBGKW-DFgZV46i.js → infoDiagram-27XIBGKW-D-UPLFB4.js} +1 -1
  126. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-DKGJ62SC.js → ishikawaDiagram-5VMMS53U-BoXlttHi.js} +1 -1
  127. package/dist/client/assets/ishikawaDiagram-5VMMS53U-BoXlttHi.js.br +0 -0
  128. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-DKGJ62SC.js.gz → ishikawaDiagram-5VMMS53U-BoXlttHi.js.gz} +0 -0
  129. package/dist/client/assets/{journeyDiagram-3NMN7TZE-DoVtQTwx.js → journeyDiagram-3NMN7TZE-CFFrNcIl.js} +1 -1
  130. package/dist/client/assets/journeyDiagram-3NMN7TZE-CFFrNcIl.js.br +0 -0
  131. package/dist/client/assets/journeyDiagram-3NMN7TZE-CFFrNcIl.js.gz +0 -0
  132. package/dist/client/assets/{kanban-definition-UXKFOSKX-B7Xkb4Sk.js → kanban-definition-UXKFOSKX-CVGuqvHc.js} +1 -1
  133. package/dist/client/assets/kanban-definition-UXKFOSKX-CVGuqvHc.js.br +0 -0
  134. package/dist/client/assets/kanban-definition-UXKFOSKX-CVGuqvHc.js.gz +0 -0
  135. package/dist/client/assets/{layout-YlAAXlXp.js → layout-3D_JBmoW.js} +1 -1
  136. package/dist/client/assets/{layout-YlAAXlXp.js.br → layout-3D_JBmoW.js.br} +0 -0
  137. package/dist/client/assets/layout-3D_JBmoW.js.gz +0 -0
  138. package/dist/client/assets/{linear-B22eEc9B.js → linear-DSCyDRIV.js} +1 -1
  139. package/dist/client/assets/linear-DSCyDRIV.js.br +0 -0
  140. package/dist/client/assets/linear-DSCyDRIV.js.gz +0 -0
  141. package/dist/client/assets/{mermaid.core-DQGhdjgm.js → mermaid.core-DmLvRjSp.js} +5 -5
  142. package/dist/client/assets/mermaid.core-DmLvRjSp.js.br +0 -0
  143. package/dist/client/assets/mermaid.core-DmLvRjSp.js.gz +0 -0
  144. package/dist/client/assets/{mindmap-definition-YA3MSWOX-xiAL5T9v.js → mindmap-definition-YA3MSWOX-D-Doz5kr.js} +1 -1
  145. package/dist/client/assets/mindmap-definition-YA3MSWOX-D-Doz5kr.js.br +0 -0
  146. package/dist/client/assets/mindmap-definition-YA3MSWOX-D-Doz5kr.js.gz +0 -0
  147. package/dist/client/assets/{passwordBootstrap-Dv45nUJZ.js → passwordBootstrap-DzqP6851.js} +1 -1
  148. package/dist/client/assets/passwordBootstrap-DzqP6851.js.br +0 -0
  149. package/dist/client/assets/passwordBootstrap-DzqP6851.js.gz +0 -0
  150. package/dist/client/assets/{pegDiagram-XKGWAZYB-e0u2JTve.js → pegDiagram-XKGWAZYB-jqnn8PjR.js} +1 -1
  151. package/dist/client/assets/pegDiagram-XKGWAZYB-jqnn8PjR.js.br +0 -0
  152. package/dist/client/assets/pegDiagram-XKGWAZYB-jqnn8PjR.js.gz +0 -0
  153. package/dist/client/assets/{pieDiagram-E7YTZNPT-BYZxkrEd.js → pieDiagram-E7YTZNPT-D4MedGxH.js} +1 -1
  154. package/dist/client/assets/pieDiagram-E7YTZNPT-D4MedGxH.js.br +0 -0
  155. package/dist/client/assets/pieDiagram-E7YTZNPT-D4MedGxH.js.gz +0 -0
  156. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-9naqsOLi.js → quadrantDiagram-AXDQQJYC-C4lTdb_9.js} +1 -1
  157. package/dist/client/assets/quadrantDiagram-AXDQQJYC-C4lTdb_9.js.br +0 -0
  158. package/dist/client/assets/quadrantDiagram-AXDQQJYC-C4lTdb_9.js.gz +0 -0
  159. package/dist/client/assets/{railroadDiagram-O6MQD6OU-ChyIjVhQ.js → railroadDiagram-O6MQD6OU-KLdIDLQO.js} +1 -1
  160. package/dist/client/assets/railroadDiagram-O6MQD6OU-KLdIDLQO.js.br +0 -0
  161. package/dist/client/assets/railroadDiagram-O6MQD6OU-KLdIDLQO.js.gz +0 -0
  162. package/dist/client/assets/{rdpSession-DyoNoAkw.js → rdpSession-QckpThDq.js} +1 -1
  163. package/dist/client/assets/rdpSession-QckpThDq.js.br +0 -0
  164. package/dist/client/assets/rdpSession-QckpThDq.js.gz +0 -0
  165. package/dist/client/assets/{referenceLongPress-2b_Hcclw.js → referenceLongPress-ErqUYlIw.js} +1 -1
  166. package/dist/client/assets/referenceLongPress-ErqUYlIw.js.br +0 -0
  167. package/dist/client/assets/referenceLongPress-ErqUYlIw.js.gz +0 -0
  168. package/dist/client/assets/{requirementDiagram-BXWQKSXE-C2jNqDGe.js → requirementDiagram-BXWQKSXE-BEeCbvLt.js} +1 -1
  169. package/dist/client/assets/requirementDiagram-BXWQKSXE-BEeCbvLt.js.br +0 -0
  170. package/dist/client/assets/requirementDiagram-BXWQKSXE-BEeCbvLt.js.gz +0 -0
  171. package/dist/client/assets/{sankeyDiagram-P5KCCOFB-CIjDk_eL.js → sankeyDiagram-P5KCCOFB-DD7In9QJ.js} +1 -1
  172. package/dist/client/assets/sankeyDiagram-P5KCCOFB-DD7In9QJ.js.br +0 -0
  173. package/dist/client/assets/sankeyDiagram-P5KCCOFB-DD7In9QJ.js.gz +0 -0
  174. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-AMbNQiXe.js → sequenceDiagram-WJ2MYXX4-BCeJR1Wm.js} +1 -1
  175. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BCeJR1Wm.js.br +0 -0
  176. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BCeJR1Wm.js.gz +0 -0
  177. package/dist/client/assets/{sizeCapture-INFHLROL-D-7n9GEm.js → sizeCapture-INFHLROL-DO250O3y.js} +1 -1
  178. package/dist/client/assets/sizeCapture-INFHLROL-DO250O3y.js.br +0 -0
  179. package/dist/client/assets/sizeCapture-INFHLROL-DO250O3y.js.gz +0 -0
  180. package/dist/client/assets/{sparkles-DoNpp--z.js → sparkles-DiUUcfQp.js} +1 -1
  181. package/dist/client/assets/{stateDiagram-D77RDMKH-DTaOOvXW.js → stateDiagram-D77RDMKH-j-Rx3MIu.js} +1 -1
  182. package/dist/client/assets/stateDiagram-D77RDMKH-j-Rx3MIu.js.br +0 -0
  183. package/dist/client/assets/stateDiagram-D77RDMKH-j-Rx3MIu.js.gz +0 -0
  184. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-80TmHBA3.js +1 -0
  185. package/dist/client/assets/{swimlanes-42K2YHIH-BT2D90WA.js → swimlanes-42K2YHIH-D8BxfTs0.js} +1 -1
  186. package/dist/client/assets/swimlanes-42K2YHIH-D8BxfTs0.js.br +0 -0
  187. package/dist/client/assets/swimlanes-42K2YHIH-D8BxfTs0.js.gz +0 -0
  188. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-CDwZ9Ews.js +8 -0
  189. package/dist/client/assets/{timeline-definition-24CTP7MA-DRydnuao.js → timeline-definition-24CTP7MA-Q26Gi8XT.js} +1 -1
  190. package/dist/client/assets/timeline-definition-24CTP7MA-Q26Gi8XT.js.br +0 -0
  191. package/dist/client/assets/timeline-definition-24CTP7MA-Q26Gi8XT.js.gz +0 -0
  192. package/dist/client/assets/{triangle-alert-BD39DBcr.js → triangle-alert-B3htKRDS.js} +1 -1
  193. package/dist/client/assets/{vennDiagram-4TSXK5OY-Ch05IEWU.js → vennDiagram-4TSXK5OY-QCEPdOun.js} +1 -1
  194. package/dist/client/assets/vennDiagram-4TSXK5OY-QCEPdOun.js.br +0 -0
  195. package/dist/client/assets/vennDiagram-4TSXK5OY-QCEPdOun.js.gz +0 -0
  196. package/dist/client/assets/{videoCompression-DjHxYj3z.js → videoCompression-DomMr6dv.js} +1 -1
  197. package/dist/client/assets/videoCompression-DomMr6dv.js.br +0 -0
  198. package/dist/client/assets/videoCompression-DomMr6dv.js.gz +0 -0
  199. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-BxiHgxXo.js → wardleyDiagram-VM6X3IG4-B6J6Og35.js} +1 -1
  200. package/dist/client/assets/wardleyDiagram-VM6X3IG4-B6J6Og35.js.br +0 -0
  201. package/dist/client/assets/wardleyDiagram-VM6X3IG4-B6J6Og35.js.gz +0 -0
  202. package/dist/client/assets/{xychartDiagram-S5SC5T6Z-Dq24lBnv.js → xychartDiagram-S5SC5T6Z-pdImapP4.js} +1 -1
  203. package/dist/client/assets/xychartDiagram-S5SC5T6Z-pdImapP4.js.br +0 -0
  204. package/dist/client/assets/xychartDiagram-S5SC5T6Z-pdImapP4.js.gz +0 -0
  205. package/dist/client/index.html +2 -2
  206. package/dist/client/index.html.br +0 -0
  207. package/dist/client/index.html.gz +0 -0
  208. package/dist/client/sw-encrypted-background.js +1 -1
  209. package/dist/client/sw-encrypted-background.js.br +0 -0
  210. package/dist/client/sw-encrypted-background.js.gz +0 -0
  211. package/dist/client/sw.js +1 -1
  212. package/dist/client/sw.js.br +0 -0
  213. package/dist/client/sw.js.gz +0 -0
  214. package/dist/server/entry.js +29 -20
  215. package/dist/server/federation/binaryPacket.js +28 -0
  216. package/dist/server/federation/packets.js +53 -7
  217. package/dist/server/federation/recordCompression.js +59 -0
  218. package/dist/server/federation/runtime.js +35 -37
  219. package/dist/server/federation/streamDuplex.js +62 -0
  220. package/dist/server/federation/transferWindow.js +50 -0
  221. package/dist/server/federation/webTransportCertificate.js +52 -0
  222. package/dist/server/federation/webTransportProtocol.js +25 -0
  223. package/dist/server/federation/webTransportServer.js +142 -0
  224. package/package.json +7 -1
  225. package/runtime-manifest.json +4 -4
  226. package/dist/client/assets/App-C3eqZGuT.js +0 -187
  227. package/dist/client/assets/App-C3eqZGuT.js.br +0 -0
  228. package/dist/client/assets/App-C3eqZGuT.js.gz +0 -0
  229. package/dist/client/assets/ArchitecturePanel-DOnzfg14.js.br +0 -0
  230. package/dist/client/assets/ArchitecturePanel-DOnzfg14.js.gz +0 -0
  231. package/dist/client/assets/ChangeWalkthroughPanel-CKiLPco1.js.br +0 -0
  232. package/dist/client/assets/ChangeWalkthroughPanel-CKiLPco1.js.gz +0 -0
  233. package/dist/client/assets/CollaborationMainWorkspace-W0kWrjda.js.br +0 -0
  234. package/dist/client/assets/CollaborationMainWorkspace-W0kWrjda.js.gz +0 -0
  235. package/dist/client/assets/CollaborationTaskContent-B6oRRXcr.js +0 -2
  236. package/dist/client/assets/ComputerControlView-DifZfjFA.js.br +0 -0
  237. package/dist/client/assets/ComputerControlView-DifZfjFA.js.gz +0 -0
  238. package/dist/client/assets/DagPlayground-BVW13X03.js.br +0 -0
  239. package/dist/client/assets/DagPlayground-BVW13X03.js.gz +0 -0
  240. package/dist/client/assets/DiffLab-BsxCrMdP.js.br +0 -0
  241. package/dist/client/assets/DiffLab-BsxCrMdP.js.gz +0 -0
  242. package/dist/client/assets/DiffReview-Dj0Bcos9.js.br +0 -0
  243. package/dist/client/assets/DiffReview-Dj0Bcos9.js.gz +0 -0
  244. package/dist/client/assets/DiffReviewLab-DMtmYFQh.js.br +0 -0
  245. package/dist/client/assets/DiffReviewLab-DMtmYFQh.js.gz +0 -0
  246. package/dist/client/assets/DiffViewer-BYvyJXBJ.js.br +0 -0
  247. package/dist/client/assets/ModelPreview-CY-QMJgX.js.br +0 -0
  248. package/dist/client/assets/ModelPreview-CY-QMJgX.js.gz +0 -0
  249. package/dist/client/assets/RightSidebar-C7KzAty-.js.br +0 -0
  250. package/dist/client/assets/RightSidebar-C7KzAty-.js.gz +0 -0
  251. package/dist/client/assets/abnfDiagram-VCTEODGH-Cht5lriL.js.br +0 -0
  252. package/dist/client/assets/abnfDiagram-VCTEODGH-Cht5lriL.js.gz +0 -0
  253. package/dist/client/assets/app--Wjt7upM.js +0 -35
  254. package/dist/client/assets/app--Wjt7upM.js.br +0 -0
  255. package/dist/client/assets/app--Wjt7upM.js.gz +0 -0
  256. package/dist/client/assets/arc-CSvVpXnr.js.br +0 -0
  257. package/dist/client/assets/arc-CSvVpXnr.js.gz +0 -0
  258. package/dist/client/assets/architectureDiagram-5GKGNRK7-5YBoORnk.js.br +0 -0
  259. package/dist/client/assets/architectureDiagram-5GKGNRK7-5YBoORnk.js.gz +0 -0
  260. package/dist/client/assets/blockDiagram-I7D4REHJ-hFhUSGqA.js.br +0 -0
  261. package/dist/client/assets/blockDiagram-I7D4REHJ-hFhUSGqA.js.gz +0 -0
  262. package/dist/client/assets/c4Diagram-7LVT6UL2-DfOA3VSb.js.br +0 -0
  263. package/dist/client/assets/c4Diagram-7LVT6UL2-DfOA3VSb.js.gz +0 -0
  264. package/dist/client/assets/channel-CkWproBF.js +0 -1
  265. package/dist/client/assets/chunk-F27PBJKO-CCYgT6ZC.js.br +0 -0
  266. package/dist/client/assets/chunk-F27PBJKO-CCYgT6ZC.js.gz +0 -0
  267. package/dist/client/assets/chunk-IMKFNOWR-CeMs9S8e.js.br +0 -0
  268. package/dist/client/assets/chunk-IMKFNOWR-CeMs9S8e.js.gz +0 -0
  269. package/dist/client/assets/chunk-SVP7TREG-BWwRXr8s.js.br +0 -0
  270. package/dist/client/assets/chunk-SVP7TREG-BWwRXr8s.js.gz +0 -0
  271. package/dist/client/assets/chunk-TICWLB2K-CYEvRrFr.js.br +0 -0
  272. package/dist/client/assets/chunk-TICWLB2K-CYEvRrFr.js.gz +0 -0
  273. package/dist/client/assets/classDiagram-ZZMXUADV-Dx693CRI.js +0 -1
  274. package/dist/client/assets/classDiagram-v2-VYDZK3BY-Dx693CRI.js +0 -1
  275. package/dist/client/assets/cose-bilkent-JH36ORCC-C9mzpLHW.js.br +0 -0
  276. package/dist/client/assets/cynefin-OW5HDTMX-C7o6GjqO.js.br +0 -0
  277. package/dist/client/assets/cynefin-OW5HDTMX-C7o6GjqO.js.gz +0 -0
  278. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-ObxBWzAE.js.br +0 -0
  279. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-ObxBWzAE.js.gz +0 -0
  280. package/dist/client/assets/dagre-GXQ25YYZ-B3_gKJCX.js.br +0 -0
  281. package/dist/client/assets/dagre-GXQ25YYZ-B3_gKJCX.js.gz +0 -0
  282. package/dist/client/assets/diagram-S7CK7UJ4-DQ5pi54s.js.br +0 -0
  283. package/dist/client/assets/diagram-S7CK7UJ4-DQ5pi54s.js.gz +0 -0
  284. package/dist/client/assets/diagram-UQ7AKVKN-DzYfS3aw.js.br +0 -0
  285. package/dist/client/assets/diagram-UQ7AKVKN-DzYfS3aw.js.gz +0 -0
  286. package/dist/client/assets/diagram-VSXAHHWV-BLJF03jD.js.br +0 -0
  287. package/dist/client/assets/diagram-VSXAHHWV-BLJF03jD.js.gz +0 -0
  288. package/dist/client/assets/diagram-VX7I27RA-OKxFaFIx.js.br +0 -0
  289. package/dist/client/assets/diagram-VX7I27RA-OKxFaFIx.js.gz +0 -0
  290. package/dist/client/assets/diagram-Z3DM3KII-BAvFAW_4.js.br +0 -0
  291. package/dist/client/assets/diagram-Z3DM3KII-BAvFAW_4.js.gz +0 -0
  292. package/dist/client/assets/ebnfDiagram-PWID7BFC-Chf4ZQWO.js.br +0 -0
  293. package/dist/client/assets/ebnfDiagram-PWID7BFC-Chf4ZQWO.js.gz +0 -0
  294. package/dist/client/assets/erDiagram-RLTQ6QDP-DGDEOgE2.js.gz +0 -0
  295. package/dist/client/assets/flowDiagram-HODETNUW-D2NlrkZp.js.br +0 -0
  296. package/dist/client/assets/flowDiagram-HODETNUW-D2NlrkZp.js.gz +0 -0
  297. package/dist/client/assets/ganttDiagram-EL5Y4UJY-DNNpZzdf.js.br +0 -0
  298. package/dist/client/assets/ganttDiagram-EL5Y4UJY-DNNpZzdf.js.gz +0 -0
  299. package/dist/client/assets/gestureArbiter-DIc7AWJZ.js.br +0 -0
  300. package/dist/client/assets/gestureArbiter-DIc7AWJZ.js.gz +0 -0
  301. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-BA3ZRcN2.js.br +0 -0
  302. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-BA3ZRcN2.js.gz +0 -0
  303. package/dist/client/assets/index-5jNvYAEk.css.br +0 -0
  304. package/dist/client/assets/ishikawaDiagram-5VMMS53U-DKGJ62SC.js.br +0 -0
  305. package/dist/client/assets/journeyDiagram-3NMN7TZE-DoVtQTwx.js.br +0 -0
  306. package/dist/client/assets/journeyDiagram-3NMN7TZE-DoVtQTwx.js.gz +0 -0
  307. package/dist/client/assets/kanban-definition-UXKFOSKX-B7Xkb4Sk.js.br +0 -0
  308. package/dist/client/assets/kanban-definition-UXKFOSKX-B7Xkb4Sk.js.gz +0 -0
  309. package/dist/client/assets/layout-YlAAXlXp.js.gz +0 -0
  310. package/dist/client/assets/linear-B22eEc9B.js.br +0 -0
  311. package/dist/client/assets/linear-B22eEc9B.js.gz +0 -0
  312. package/dist/client/assets/mermaid.core-DQGhdjgm.js.br +0 -0
  313. package/dist/client/assets/mermaid.core-DQGhdjgm.js.gz +0 -0
  314. package/dist/client/assets/mindmap-definition-YA3MSWOX-xiAL5T9v.js.br +0 -0
  315. package/dist/client/assets/mindmap-definition-YA3MSWOX-xiAL5T9v.js.gz +0 -0
  316. package/dist/client/assets/passwordBootstrap-Dv45nUJZ.js.br +0 -0
  317. package/dist/client/assets/passwordBootstrap-Dv45nUJZ.js.gz +0 -0
  318. package/dist/client/assets/pegDiagram-XKGWAZYB-e0u2JTve.js.br +0 -0
  319. package/dist/client/assets/pegDiagram-XKGWAZYB-e0u2JTve.js.gz +0 -0
  320. package/dist/client/assets/pieDiagram-E7YTZNPT-BYZxkrEd.js.br +0 -0
  321. package/dist/client/assets/pieDiagram-E7YTZNPT-BYZxkrEd.js.gz +0 -0
  322. package/dist/client/assets/quadrantDiagram-AXDQQJYC-9naqsOLi.js.br +0 -0
  323. package/dist/client/assets/quadrantDiagram-AXDQQJYC-9naqsOLi.js.gz +0 -0
  324. package/dist/client/assets/railroadDiagram-O6MQD6OU-ChyIjVhQ.js.br +0 -0
  325. package/dist/client/assets/railroadDiagram-O6MQD6OU-ChyIjVhQ.js.gz +0 -0
  326. package/dist/client/assets/rdpSession-DyoNoAkw.js.br +0 -0
  327. package/dist/client/assets/rdpSession-DyoNoAkw.js.gz +0 -0
  328. package/dist/client/assets/referenceLongPress-2b_Hcclw.js.br +0 -0
  329. package/dist/client/assets/referenceLongPress-2b_Hcclw.js.gz +0 -0
  330. package/dist/client/assets/requirementDiagram-BXWQKSXE-C2jNqDGe.js.br +0 -0
  331. package/dist/client/assets/requirementDiagram-BXWQKSXE-C2jNqDGe.js.gz +0 -0
  332. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CIjDk_eL.js.br +0 -0
  333. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CIjDk_eL.js.gz +0 -0
  334. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-AMbNQiXe.js.br +0 -0
  335. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-AMbNQiXe.js.gz +0 -0
  336. package/dist/client/assets/sizeCapture-INFHLROL-D-7n9GEm.js.br +0 -0
  337. package/dist/client/assets/sizeCapture-INFHLROL-D-7n9GEm.js.gz +0 -0
  338. package/dist/client/assets/stateDiagram-D77RDMKH-DTaOOvXW.js.br +0 -0
  339. package/dist/client/assets/stateDiagram-D77RDMKH-DTaOOvXW.js.gz +0 -0
  340. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CFWj_x81.js +0 -1
  341. package/dist/client/assets/swimlanes-42K2YHIH-BT2D90WA.js.br +0 -0
  342. package/dist/client/assets/swimlanes-42K2YHIH-BT2D90WA.js.gz +0 -0
  343. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-BbodcUoH.js +0 -8
  344. package/dist/client/assets/timeline-definition-24CTP7MA-DRydnuao.js.br +0 -0
  345. package/dist/client/assets/timeline-definition-24CTP7MA-DRydnuao.js.gz +0 -0
  346. package/dist/client/assets/vennDiagram-4TSXK5OY-Ch05IEWU.js.br +0 -0
  347. package/dist/client/assets/vennDiagram-4TSXK5OY-Ch05IEWU.js.gz +0 -0
  348. package/dist/client/assets/videoCompression-DjHxYj3z.js.br +0 -0
  349. package/dist/client/assets/videoCompression-DjHxYj3z.js.gz +0 -0
  350. package/dist/client/assets/wardleyDiagram-VM6X3IG4-BxiHgxXo.js.br +0 -0
  351. package/dist/client/assets/wardleyDiagram-VM6X3IG4-BxiHgxXo.js.gz +0 -0
  352. package/dist/client/assets/xychartDiagram-S5SC5T6Z-Dq24lBnv.js.br +0 -0
  353. package/dist/client/assets/xychartDiagram-S5SC5T6Z-Dq24lBnv.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.340",
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
  }
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "packageName": "termdock",
4
- "version": "1.4.340",
4
+ "version": "1.4.342",
5
5
  "runtimeProtocolVersion": 1,
6
6
  "minimumDesktopVersion": "1.4.46",
7
7
  "nodeMajor": 22,
8
- "dependencyHash": "sha256-oaGYi/P5ob8sd6VnNBOwshKozjhdV+hYiCmLAsn5x00=",
9
- "serverBundleHash": "sha256-LIbvwRq5T1njqAx8n6UKXDMyONxJ3AClU14bfAXyyp4=",
10
- "clientBundleHash": "sha256-YYCQf7gPLt84sOKrocwfUaUEv6PgkB2spzYsZn4g+Wk=",
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
  }