@cyberismo/backend 1.1.1 → 1.2.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.
Files changed (305) hide show
  1. package/README.md +21 -0
  2. package/dist/app.js +22 -11
  3. package/dist/app.js.map +1 -1
  4. package/dist/auth/index.d.ts +1 -1
  5. package/dist/auth/index.js +1 -1
  6. package/dist/auth/index.js.map +1 -1
  7. package/dist/auth/keycloak.d.ts +2 -3
  8. package/dist/auth/keycloak.js +6 -0
  9. package/dist/auth/keycloak.js.map +1 -1
  10. package/dist/auth/mock.d.ts +12 -8
  11. package/dist/auth/mock.js +119 -31
  12. package/dist/auth/mock.js.map +1 -1
  13. package/dist/auth/types.d.ts +7 -1
  14. package/dist/domain/cards/index.js +11 -84
  15. package/dist/domain/cards/index.js.map +1 -1
  16. package/dist/domain/cards/lib.js +2 -11
  17. package/dist/domain/cards/lib.js.map +1 -1
  18. package/dist/domain/cards/schema.js +9 -3
  19. package/dist/domain/cards/schema.js.map +1 -1
  20. package/dist/domain/cards/service.d.ts +2 -5
  21. package/dist/domain/cards/service.js +8 -15
  22. package/dist/domain/cards/service.js.map +1 -1
  23. package/dist/domain/events/index.d.ts +15 -0
  24. package/dist/domain/events/index.js +94 -0
  25. package/dist/domain/events/index.js.map +1 -0
  26. package/dist/domain/events/lifetime.d.ts +14 -0
  27. package/dist/domain/events/lifetime.js +25 -0
  28. package/dist/domain/events/lifetime.js.map +1 -0
  29. package/dist/domain/events/project-events.d.ts +67 -0
  30. package/dist/domain/events/project-events.js +200 -0
  31. package/dist/domain/events/project-events.js.map +1 -0
  32. package/dist/domain/events/schema.d.ts +22 -0
  33. package/dist/domain/events/schema.js +20 -0
  34. package/dist/domain/events/schema.js.map +1 -0
  35. package/dist/domain/project/index.js +17 -5
  36. package/dist/domain/project/index.js.map +1 -1
  37. package/dist/domain/project/schema.d.ts +8 -0
  38. package/dist/domain/project/schema.js +34 -6
  39. package/dist/domain/project/schema.js.map +1 -1
  40. package/dist/domain/project/service.d.ts +9 -5
  41. package/dist/domain/project/service.js +22 -16
  42. package/dist/domain/project/service.js.map +1 -1
  43. package/dist/domain/projects/index.js +5 -1
  44. package/dist/domain/projects/index.js.map +1 -1
  45. package/dist/domain/resources/index.js +74 -2
  46. package/dist/domain/resources/index.js.map +1 -1
  47. package/dist/domain/resources/schema.d.ts +8 -2
  48. package/dist/domain/resources/schema.js +6 -1
  49. package/dist/domain/resources/schema.js.map +1 -1
  50. package/dist/domain/resources/service.d.ts +13 -1
  51. package/dist/domain/resources/service.js +45 -2
  52. package/dist/domain/resources/service.js.map +1 -1
  53. package/dist/domain/skills/index.d.ts +15 -0
  54. package/dist/domain/skills/index.js +52 -0
  55. package/dist/domain/skills/index.js.map +1 -0
  56. package/dist/domain/skills/schema.d.ts +16 -0
  57. package/dist/domain/skills/schema.js +18 -0
  58. package/dist/domain/skills/schema.js.map +1 -0
  59. package/dist/domain/skills/service.d.ts +14 -0
  60. package/dist/domain/skills/service.js +16 -0
  61. package/dist/domain/skills/service.js.map +1 -0
  62. package/dist/export.d.ts +3 -2
  63. package/dist/export.js +53 -38
  64. package/dist/export.js.map +1 -1
  65. package/dist/index.d.ts +1 -0
  66. package/dist/index.js +3 -0
  67. package/dist/index.js.map +1 -1
  68. package/dist/main.js +23 -10
  69. package/dist/main.js.map +1 -1
  70. package/dist/middleware/auth.d.ts +5 -0
  71. package/dist/middleware/auth.js +20 -4
  72. package/dist/middleware/auth.js.map +1 -1
  73. package/dist/middleware/commandManager.d.ts +2 -0
  74. package/dist/middleware/commandManager.js +1 -0
  75. package/dist/middleware/commandManager.js.map +1 -1
  76. package/dist/overlay.d.ts +45 -0
  77. package/dist/overlay.js +157 -0
  78. package/dist/overlay.js.map +1 -0
  79. package/dist/project-errors.d.ts +18 -0
  80. package/dist/project-errors.js +25 -0
  81. package/dist/project-errors.js.map +1 -0
  82. package/dist/project-registry.d.ts +9 -1
  83. package/dist/project-registry.js +37 -9
  84. package/dist/project-registry.js.map +1 -1
  85. package/dist/public/THIRD-PARTY.txt +528 -435
  86. package/dist/public/assets/__vite-browser-external-PaJ7c2l8.js +1 -0
  87. package/dist/public/assets/abnfDiagram-VCTEODGH-DB2dfOGe.js +1 -0
  88. package/dist/public/assets/architecture-7GRP2DOG-2V0X8hxt.js +1 -0
  89. package/dist/public/assets/architectureDiagram-5GKGNRK7-CRhUR2Ul.js +36 -0
  90. package/dist/public/assets/blockDiagram-I7D4REHJ-DJKsYF1v.js +129 -0
  91. package/dist/public/assets/c4Diagram-7LVT6UL2-BTwMzoAF.js +38 -0
  92. package/dist/public/assets/channel-C0JtPpMA.js +1 -0
  93. package/dist/public/assets/chunk-4HAMMTFA-DjjgrBsB.js +62 -0
  94. package/dist/public/assets/chunk-75Z2AOVW-CKqXRGJV.js +2 -0
  95. package/dist/public/assets/chunk-DU6HZSFF-iJGdiRt7.js +127 -0
  96. package/dist/public/assets/chunk-F27PBJKO-tDfs6zeO.js +1 -0
  97. package/dist/public/assets/chunk-FOHPRMQF-DzxwRta7.js +161 -0
  98. package/dist/public/assets/chunk-GMAD6QVW-DxHVEaGj.js +72 -0
  99. package/dist/public/assets/chunk-GVQU2GXP-AMxD4_Ta.js +1 -0
  100. package/dist/public/assets/{chunk-EX3LRPZG-Db0XYyxy.js → chunk-IMKFNOWR-0rz8QrYC.js} +2 -2
  101. package/dist/public/assets/chunk-L3NEJ4N5-BK3KAKMe.js +1 -0
  102. package/dist/public/assets/chunk-OSK3NFVY-B8MdrI_M.js +10 -0
  103. package/dist/public/assets/chunk-P2QGCYS3-D3J5AcHg.js +1 -0
  104. package/dist/public/assets/{chunk-VR4S4FIN-tUhbELKr.js → chunk-POPQ4Y6H-CsYg_XkK.js} +1 -1
  105. package/dist/public/assets/{chunk-HOUHSVGY-L35GPy9G.js → chunk-PWAF6VOD-D9cdEIZp.js} +1 -1
  106. package/dist/public/assets/chunk-SHT3W25Y-1jjokCf3.js +168 -0
  107. package/dist/public/assets/{chunk-MOJQB5TN-D1shKbMs.js → chunk-SVP7TREG-CIQMl7hl.js} +1 -1
  108. package/dist/public/assets/{chunk-V7JOEXUC-71b0ABpv.js → chunk-TICWLB2K-Ccsy2PYz.js} +3 -3
  109. package/dist/public/assets/chunk-XXDRQBXY-B7bWyHjt.js +1 -0
  110. package/dist/public/assets/classDiagram-ZZMXUADV-mWyXNAXi.js +1 -0
  111. package/dist/public/assets/classDiagram-v2-VYDZK3BY-mWyXNAXi.js +1 -0
  112. package/dist/public/assets/cose-bilkent-JH36ORCC-DPzc3Pv4.js +1 -0
  113. package/dist/public/assets/cynefin-OW5HDTMX-BIVDCYOU.js +1 -0
  114. package/dist/public/assets/cynefinDiagram-5FMLGOSQ-_V_nrIhD.js +62 -0
  115. package/dist/public/assets/cytoscape.esm-NgwPT4ez.js +321 -0
  116. package/dist/public/assets/dagre-C-rnJpZF.js +1 -0
  117. package/dist/public/assets/dagre-GXQ25YYZ-CJc0wc6f.js +4 -0
  118. package/dist/public/assets/diagram-S7CK7UJ4-25IjIKyo.js +30 -0
  119. package/dist/public/assets/diagram-UQ7AKVKN-C5VvsV7x.js +41 -0
  120. package/dist/public/assets/{diagram-FQU43EPY-DS-ryuRg.js → diagram-VSXAHHWV-Dw3rKVL_.js} +3 -3
  121. package/dist/public/assets/diagram-VX7I27RA-De_UQv8C.js +24 -0
  122. package/dist/public/assets/diagram-Z3DM3KII-Bd-65QQW.js +24 -0
  123. package/dist/public/assets/dist-BDCdLWk4.js +1 -0
  124. package/dist/public/assets/ebnfDiagram-PWID7BFC-CrxdET5U.js +1 -0
  125. package/dist/public/assets/erDiagram-RLTQ6QDP-BKo0Uyna.js +99 -0
  126. package/dist/public/assets/eventmodeling-NTZA5JFV-DKkAdJZd.js +1 -0
  127. package/dist/public/assets/flowDiagram-HODETNUW-CEE2wjdt.js +1 -0
  128. package/dist/public/assets/ganttDiagram-EL5Y4UJY-BHFn8vk0.js +292 -0
  129. package/dist/public/assets/gitGraph-4MIJSDKK-Bpvnb45u.js +1 -0
  130. package/dist/public/assets/{gitGraphDiagram-IHSO6WYX-CksvJvsQ.js → gitGraphDiagram-WWUBYQGX-Bw0EoxBY.js} +9 -9
  131. package/dist/public/assets/index-D3HS7YxF.js +2228 -0
  132. package/dist/public/assets/index-D6WqGtsG.js +27876 -0
  133. package/dist/public/assets/{index-COSSLZqt.css → index-Sv3WxZ_8.css} +1 -1
  134. package/dist/public/assets/info-A6RAGUB7-BvvG_zrk.js +1 -0
  135. package/dist/public/assets/infoDiagram-27XIBGKW-CtpdJmtL.js +2 -0
  136. package/dist/public/assets/{ishikawaDiagram-FXEZZL3T-CiLpASIW.js → ishikawaDiagram-5VMMS53U-KvT4DU1u.js} +2 -2
  137. package/dist/public/assets/journeyDiagram-3NMN7TZE-PhGRkXkq.js +139 -0
  138. package/dist/public/assets/{kanban-definition-HUTT4EX6-DYP_x6zD.js → kanban-definition-UXKFOSKX-Oyx5QgRq.js} +4 -4
  139. package/dist/public/assets/{katex-DolUETbr.js → katex-ZlcWpGUi.js} +3 -3
  140. package/dist/public/assets/{line-C8Sfsgt8.js → line-Dr41HTk1.js} +1 -1
  141. package/dist/public/assets/linear-DDBi9FwZ.js +1 -0
  142. package/dist/public/assets/mermaid-parser.core-DsIAxDBa.js +7 -0
  143. package/dist/public/assets/{mindmap-definition-LN4V7U3C-3IAd4gp3.js → mindmap-definition-YA3MSWOX-r8hvd6gP.js} +1 -1
  144. package/dist/public/assets/packet-AYTQ26CC-B0EpJ2Sc.js +1 -0
  145. package/dist/public/assets/path-B_0haWDX.js +1 -0
  146. package/dist/public/assets/pegDiagram-XKGWAZYB-DaNkQTQF.js +1 -0
  147. package/dist/public/assets/pie-WAS4IAKB-Dt2zttL9.js +1 -0
  148. package/dist/public/assets/pieDiagram-E7YTZNPT-x0XWEGbd.js +39 -0
  149. package/dist/public/assets/{quadrantDiagram-ABIIQ3AL-B3czMbdS.js → quadrantDiagram-AXDQQJYC-B9dlNtZl.js} +3 -3
  150. package/dist/public/assets/radar-RG4KPBEZ-DjbR4-5l.js +1 -0
  151. package/dist/public/assets/railroad-74A4TZTK-Bk3B5r_R.js +1 -0
  152. package/dist/public/assets/railroad-abnf-HS5TGJTU-DxaWfACD.js +1 -0
  153. package/dist/public/assets/railroad-ebnf-LZEXJU2U-DscxXZO0.js +1 -0
  154. package/dist/public/assets/railroad-peg-WCYAUIDC-BCWzRFzw.js +1 -0
  155. package/dist/public/assets/railroadDiagram-O6MQD6OU-DhwsoX6A.js +1 -0
  156. package/dist/public/assets/{requirementDiagram-TGXJPOKE-CmvJWy_S.js → requirementDiagram-BXWQKSXE-BiqZ6axf.js} +2 -2
  157. package/dist/public/assets/rolldown-runtime-B0Z9INg1.js +1 -0
  158. package/dist/public/assets/{rough.esm-By172zw-.js → rough.esm-Dy-Kn_BL.js} +1 -1
  159. package/dist/public/assets/{sankeyDiagram-HTMAVEWB-tAeOzMTn.js → sankeyDiagram-P5KCCOFB-C4rb2pZ9.js} +1 -1
  160. package/dist/public/assets/{sequenceDiagram-DBY2YBRQ-r0pwijM4.js → sequenceDiagram-WJ2MYXX4-DRKTnGD7.js} +9 -9
  161. package/dist/public/assets/sizeCapture-INFHLROL-3uHXrFqA.js +1 -0
  162. package/dist/public/assets/src-an_qrnIj.js +1 -0
  163. package/dist/public/assets/stateDiagram-D77RDMKH-xxdybg5Z.js +1 -0
  164. package/dist/public/assets/stateDiagram-v2-MP3YSRHH-CXzmJy_a.js +1 -0
  165. package/dist/public/assets/swimlanes-42K2YHIH-DyGI1gI6.js +1 -0
  166. package/dist/public/assets/swimlanesDiagram-VR7AAH4N-7hqb6VoW.js +8 -0
  167. package/dist/public/assets/timeline-definition-24CTP7MA-C2pIp77Q.js +120 -0
  168. package/dist/public/assets/treeView-Q6P3EWNA-CxRtaaB8.js +1 -0
  169. package/dist/public/assets/treemap-WGGIJYW6-G1IHiwTa.js +1 -0
  170. package/dist/public/assets/{vennDiagram-L72KCM5P-ti2qNcvo.js → vennDiagram-4TSXK5OY-CwimQRR9.js} +2 -2
  171. package/dist/public/assets/wardley-WFR3VGLG-DkQ3TjZX.js +1 -0
  172. package/dist/public/assets/{wardleyDiagram-EHGQE667-C8lblm8x.js → wardleyDiagram-VM6X3IG4-BOXpwLCv.js} +15 -15
  173. package/dist/public/assets/{xychartDiagram-FW5EYKEG-US-_k5eu.js → xychartDiagram-S5SC5T6Z-ChOPYsHc.js} +3 -3
  174. package/dist/public/index.html +19 -26
  175. package/dist/public/sbom.cdx.json +1 -0
  176. package/dist/utils.d.ts +4 -0
  177. package/dist/utils.js +6 -0
  178. package/dist/utils.js.map +1 -1
  179. package/package.json +12 -13
  180. package/src/app.ts +22 -11
  181. package/src/auth/index.ts +1 -1
  182. package/src/auth/keycloak.ts +8 -3
  183. package/src/auth/mock.ts +141 -35
  184. package/src/auth/types.ts +8 -1
  185. package/src/domain/cards/index.ts +12 -102
  186. package/src/domain/cards/lib.ts +2 -14
  187. package/src/domain/cards/schema.ts +11 -3
  188. package/src/domain/cards/service.ts +9 -24
  189. package/src/domain/events/index.ts +112 -0
  190. package/src/domain/events/lifetime.ts +27 -0
  191. package/src/domain/events/project-events.ts +254 -0
  192. package/src/domain/events/schema.ts +21 -0
  193. package/src/domain/project/index.ts +31 -3
  194. package/src/domain/project/schema.ts +39 -6
  195. package/src/domain/project/service.ts +42 -17
  196. package/src/domain/projects/index.ts +5 -1
  197. package/src/domain/resources/index.ts +85 -2
  198. package/src/domain/resources/schema.ts +12 -2
  199. package/src/domain/resources/service.ts +55 -3
  200. package/src/domain/skills/index.ts +61 -0
  201. package/src/domain/skills/schema.ts +19 -0
  202. package/src/domain/skills/service.ts +18 -0
  203. package/src/export.ts +60 -42
  204. package/src/index.ts +3 -0
  205. package/src/main.ts +30 -11
  206. package/src/middleware/auth.ts +23 -4
  207. package/src/middleware/commandManager.ts +3 -0
  208. package/src/overlay.ts +175 -0
  209. package/src/project-errors.ts +33 -0
  210. package/src/project-registry.ts +41 -10
  211. package/src/utils.ts +10 -0
  212. package/dist/domain/cards/presence.d.ts +0 -50
  213. package/dist/domain/cards/presence.js +0 -93
  214. package/dist/domain/cards/presence.js.map +0 -1
  215. package/dist/public/assets/abnfDiagram-VRR7QNED-Djr4KJ5E.js +0 -1
  216. package/dist/public/assets/arc-DrR4k_H-.js +0 -1
  217. package/dist/public/assets/architecture-TIHT7OUA-XL6N-4o9.js +0 -1
  218. package/dist/public/assets/architectureDiagram-ZJ3FMSHR-DsMU2Uwa.js +0 -36
  219. package/dist/public/assets/blockDiagram-677ZJIJ3-DRBmQUQJ.js +0 -132
  220. package/dist/public/assets/c4Diagram-LMCZKHZV-E0rM02LD.js +0 -10
  221. package/dist/public/assets/channel-D5fnImJy.js +0 -1
  222. package/dist/public/assets/chunk-32BRIVSS-BnDY0aSV.js +0 -1
  223. package/dist/public/assets/chunk-52WLFC77-N5YugKaZ.js +0 -10
  224. package/dist/public/assets/chunk-5FCAYU7R-I3_t_Ic_.js +0 -1
  225. package/dist/public/assets/chunk-5HE753X5-Dxz40rzH.js +0 -1
  226. package/dist/public/assets/chunk-5JV3BV7I-CNwCKRLH.js +0 -1
  227. package/dist/public/assets/chunk-5TONJI2A-ezWQ_Z2j.js +0 -2
  228. package/dist/public/assets/chunk-7BUUIJ7U-Bb538aSH.js +0 -1
  229. package/dist/public/assets/chunk-BIQX33UG-DS132-R_.js +0 -1
  230. package/dist/public/assets/chunk-C7G6YPKG-BN-cNjoj.js +0 -1
  231. package/dist/public/assets/chunk-CQNSW5MT-D8Mn1I73.js +0 -1
  232. package/dist/public/assets/chunk-CYSBUYHQ-Dc64Dwdo.js +0 -1
  233. package/dist/public/assets/chunk-EMLP6XTP-aIK0V8GX.js +0 -1
  234. package/dist/public/assets/chunk-FWX5IMBZ-BF_P2-Do.js +0 -2
  235. package/dist/public/assets/chunk-ICXQ74PX-Bb8zaHde.js +0 -2
  236. package/dist/public/assets/chunk-JG7HCLWE-BtAXK3iQ.js +0 -2
  237. package/dist/public/assets/chunk-KEIR6QF5-DEvma7oi.js +0 -161
  238. package/dist/public/assets/chunk-MOZMSUNE-5FIqIBsY.js +0 -1
  239. package/dist/public/assets/chunk-OGEWGWER-BVIFy9xz.js +0 -1
  240. package/dist/public/assets/chunk-OSBZ3O6U-Cfd7kf1R.js +0 -1
  241. package/dist/public/assets/chunk-PUDLZKDR-Db3FSNR9.js +0 -156
  242. package/dist/public/assets/chunk-Q4XR5HBZ-BuKFRUzR.js +0 -70
  243. package/dist/public/assets/chunk-QBLGF6JB-DUGZXFh-.js +0 -1
  244. package/dist/public/assets/chunk-R7FJI6CG-D7mUd-qN.js +0 -1
  245. package/dist/public/assets/chunk-RYQCIY6F-C_3rESBd.js +0 -1
  246. package/dist/public/assets/chunk-U6XO7XAA-C3UhlwA1.js +0 -2
  247. package/dist/public/assets/chunk-VAUOI2AC-C-GBw18h.js +0 -1
  248. package/dist/public/assets/chunk-WYO6CB5R-BQoO62-B.js +0 -127
  249. package/dist/public/assets/chunk-XXDRQBXY-Co8n4ZHT.js +0 -1
  250. package/dist/public/assets/chunk-YOTPTUD7-DhCRKU1A.js +0 -1
  251. package/dist/public/assets/chunk-ZGVPDNZ5-hpz2Ryq5.js +0 -62
  252. package/dist/public/assets/chunk-ZIRB5QZD-BpeS1aZ7.js +0 -32
  253. package/dist/public/assets/classDiagram-OUVF2IWQ-CXdVorPK.js +0 -1
  254. package/dist/public/assets/classDiagram-v2-EOCWNBFH-CXdVorPK.js +0 -1
  255. package/dist/public/assets/colors-Cg5Vh3br.js +0 -1
  256. package/dist/public/assets/cose-bilkent-JH36ORCC-4GoRbloS.js +0 -1
  257. package/dist/public/assets/cynefin-VYW2F7L2-BPH-25fI.js +0 -1
  258. package/dist/public/assets/cynefinDiagram-TSTJHNR4-PEf16euv.js +0 -62
  259. package/dist/public/assets/cytoscape.esm-C3UvhD5t.js +0 -321
  260. package/dist/public/assets/dagre-Buvkdvvj.js +0 -1
  261. package/dist/public/assets/dagre-VKFMJZFB-DPsCMBF1.js +0 -4
  262. package/dist/public/assets/diagram-G47NLZAW-CzUoYkFf.js +0 -24
  263. package/dist/public/assets/diagram-NH7WQ7WH-MhGnE2fh.js +0 -24
  264. package/dist/public/assets/diagram-OA4YK3LP-CsQ9aFR_.js +0 -30
  265. package/dist/public/assets/diagram-WEI45ONY-Er3q49ew.js +0 -41
  266. package/dist/public/assets/dist-BzwexiH1.js +0 -1
  267. package/dist/public/assets/ebnfDiagram-CCIWWBDH-AnJAsk14.js +0 -1
  268. package/dist/public/assets/erDiagram-Q63AITRT-DulA16my.js +0 -85
  269. package/dist/public/assets/eventmodeling-45OFAUF4-CoIhTpHU.js +0 -1
  270. package/dist/public/assets/flowDiagram-23GEKE2U-BGMXUq18.js +0 -1
  271. package/dist/public/assets/ganttDiagram-NO4QXBWP-DAvCPT7_.js +0 -292
  272. package/dist/public/assets/gitGraph-TEB2WS4Q-BcPsZts5.js +0 -1
  273. package/dist/public/assets/index-H1CkT-JT.js +0 -447
  274. package/dist/public/assets/info-DKCQHKI2-7VGzrAVB.js +0 -1
  275. package/dist/public/assets/infoDiagram-FWYZ7A6U-D_by7lSL.js +0 -2
  276. package/dist/public/assets/journeyDiagram-5HDEW3XC-DpvFmk7c.js +0 -139
  277. package/dist/public/assets/linear-BWTvbP1l.js +0 -1
  278. package/dist/public/assets/map-BaFkSB1l.js +0 -1
  279. package/dist/public/assets/mermaid-parser.core--8614tkK.js +0 -4
  280. package/dist/public/assets/ordinal-BdBDtYTt.js +0 -1
  281. package/dist/public/assets/packet-7NZHBO7P-KYt33H0C.js +0 -1
  282. package/dist/public/assets/path-HTXttWil.js +0 -1
  283. package/dist/public/assets/pegDiagram-2B236MQR-BQNFxYz2.js +0 -1
  284. package/dist/public/assets/pie-RZYD4A2V-xKz9s9I4.js +0 -1
  285. package/dist/public/assets/pieDiagram-ENE6RG2P-Cy13tg8_.js +0 -39
  286. package/dist/public/assets/radar-I7S5WNFK-B4QTX-fX.js +0 -1
  287. package/dist/public/assets/railroad-3IZDKUUU-Co_9rPVC.js +0 -1
  288. package/dist/public/assets/railroad-abnf-AHOZXSZD-Bhy_c3ol.js +0 -1
  289. package/dist/public/assets/railroad-ebnf-EBAXGLYW-B9ENjG34.js +0 -1
  290. package/dist/public/assets/railroad-peg-LSFZ7HO6-CyJxDBsB.js +0 -1
  291. package/dist/public/assets/railroadDiagram-RFXS5EU6-M2j5SJF2.js +0 -1
  292. package/dist/public/assets/range-EplFIxc7.js +0 -1
  293. package/dist/public/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +0 -1
  294. package/dist/public/assets/src-DOh7_en_.js +0 -1
  295. package/dist/public/assets/stateDiagram-2N3HPSRC-a9IdkSQG.js +0 -1
  296. package/dist/public/assets/stateDiagram-v2-6OUMAXLB-s2blPtZ-.js +0 -1
  297. package/dist/public/assets/swimlanes-5IMT3BWC-5w0Cdxk6.js +0 -2
  298. package/dist/public/assets/swimlanesDiagram-G3AALYLV-BWa-KRed.js +0 -8
  299. package/dist/public/assets/time-BM2d9MsQ.js +0 -1
  300. package/dist/public/assets/timeline-definition-FHXFAJF6-CvXlv_4Y.js +0 -120
  301. package/dist/public/assets/treeView-QDETBFTQ-B9cxjfpB.js +0 -1
  302. package/dist/public/assets/treemap-6X3UGDF4-BplEq4hB.js +0 -1
  303. package/dist/public/assets/treemap-BfjIY-m6.js +0 -1
  304. package/dist/public/assets/wardley-OPB4EBWU-BX2ghg5e.js +0 -1
  305. package/src/domain/cards/presence.ts +0 -124
@@ -0,0 +1,67 @@
1
+ /**
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2026
4
+ This program is free software: you can redistribute it and/or modify it under
5
+ the terms of the GNU Affero General Public License version 3 as published by
6
+ the Free Software Foundation.
7
+ This program is distributed in the hope that it will be useful, but WITHOUT
8
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
9
+ FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
10
+ details. You should have received a copy of the GNU Affero General Public
11
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
12
+ */
13
+ import type { SSEMessage } from 'hono/streaming';
14
+ export interface PresenceEntry {
15
+ userId: string;
16
+ userName: string;
17
+ mode: 'viewing' | 'editing';
18
+ }
19
+ export interface Capabilities {
20
+ canSeeIdentity: boolean;
21
+ canDeclareEditing: boolean;
22
+ canSeePresence: boolean;
23
+ }
24
+ /** The socket one connection's client is written to. A retired connection
25
+ * must not be written to at all; `deliver` and `closeQuietly` enforce that,
26
+ * since the route has already ended the stream by then. */
27
+ export interface Delivery {
28
+ send(message: SSEMessage): void;
29
+ close(): void;
30
+ terminate(message: SSEMessage): void;
31
+ }
32
+ interface Connection {
33
+ user: {
34
+ id: string;
35
+ name: string;
36
+ };
37
+ capabilities: Capabilities;
38
+ delivery: Delivery;
39
+ cardKey: string | null;
40
+ mode: PresenceEntry['mode'];
41
+ sequence: number;
42
+ expiresAt: number;
43
+ retired: boolean;
44
+ /** Last presence list serialized to this connection, for per-recipient dedup. */
45
+ lastSent: string | null;
46
+ }
47
+ /** The open subscriptions of one project and the presence leases they hold. */
48
+ export declare class ProjectEvents {
49
+ private connections;
50
+ private expiryTimer;
51
+ constructor();
52
+ connect(user: Connection['user'], capabilities: Capabilities, delivery: Delivery): string;
53
+ update(connectionId: string, userId: string, sequence: number, cardKey: string | null, mode: PresenceEntry['mode']): boolean;
54
+ private applyMove;
55
+ disconnect(connectionId: string): void;
56
+ retire(connectionId: string): void;
57
+ cardsUpdated(cardKeys: string[], user: Connection['user']): void;
58
+ dispose(): void;
59
+ private users;
60
+ private presenceUpdated;
61
+ private onCard;
62
+ private encode;
63
+ private deliver;
64
+ private expire;
65
+ private closeQuietly;
66
+ }
67
+ export {};
@@ -0,0 +1,200 @@
1
+ /**
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2026
4
+ This program is free software: you can redistribute it and/or modify it under
5
+ the terms of the GNU Affero General Public License version 3 as published by
6
+ the Free Software Foundation.
7
+ This program is distributed in the hope that it will be useful, but WITHOUT
8
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
9
+ FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
10
+ details. You should have received a copy of the GNU Affero General Public
11
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
12
+ */
13
+ import { randomUUID } from 'node:crypto';
14
+ const LEASE_MS = 90_000;
15
+ const EXPIRY_INTERVAL_MS = 30_000;
16
+ const RETIRED_LEASE_MS = 15_000;
17
+ /** The open subscriptions of one project and the presence leases they hold. */
18
+ export class ProjectEvents {
19
+ connections = new Map();
20
+ expiryTimer;
21
+ constructor() {
22
+ this.expiryTimer = setInterval(() => this.expire(), EXPIRY_INTERVAL_MS);
23
+ this.expiryTimer.unref();
24
+ }
25
+ connect(user, capabilities, delivery) {
26
+ const connectionId = randomUUID();
27
+ this.connections.set(connectionId, {
28
+ user,
29
+ capabilities,
30
+ delivery,
31
+ cardKey: null,
32
+ mode: 'viewing',
33
+ sequence: -1,
34
+ expiresAt: 0,
35
+ retired: false,
36
+ lastSent: null,
37
+ });
38
+ // EventSource cannot read response headers, so the stream is the only
39
+ // way back with a connection handle.
40
+ this.deliver(connectionId, {
41
+ event: 'ready',
42
+ data: JSON.stringify({ connectionId }),
43
+ });
44
+ return connectionId;
45
+ }
46
+ update(connectionId, userId, sequence, cardKey, mode) {
47
+ const connection = this.connections.get(connectionId);
48
+ if (!connection || connection.retired || connection.user.id !== userId) {
49
+ return false;
50
+ }
51
+ // Monotonic per connection, so a delayed request cannot undo a newer one.
52
+ if (sequence <= connection.sequence)
53
+ return true;
54
+ // Coerced rather than rejected: a fake editing warning deters others from editing.
55
+ if (!connection.capabilities.canDeclareEditing)
56
+ mode = 'viewing';
57
+ if (connection.cardKey === cardKey && connection.mode === mode) {
58
+ connection.sequence = sequence;
59
+ connection.expiresAt = Date.now() + LEASE_MS;
60
+ return true;
61
+ }
62
+ this.applyMove(connection, sequence, cardKey, mode, Date.now());
63
+ return true;
64
+ }
65
+ applyMove(connection, sequence, cardKey, mode, now) {
66
+ const previous = connection.cardKey;
67
+ if (previous !== cardKey)
68
+ connection.lastSent = null;
69
+ Object.assign(connection, {
70
+ sequence,
71
+ cardKey,
72
+ mode,
73
+ expiresAt: now + LEASE_MS,
74
+ });
75
+ if (previous)
76
+ this.presenceUpdated(previous);
77
+ if (cardKey && cardKey !== previous)
78
+ this.presenceUpdated(cardKey);
79
+ }
80
+ disconnect(connectionId) {
81
+ const connection = this.connections.get(connectionId);
82
+ if (!connection)
83
+ return;
84
+ this.connections.delete(connectionId);
85
+ this.closeQuietly(connection);
86
+ if (connection.cardKey)
87
+ this.presenceUpdated(connection.cardKey);
88
+ }
89
+ // `users()` dedups by user id, so a retiring connection's entry can outlive
90
+ // its socket without observers seeing a change.
91
+ retire(connectionId) {
92
+ const connection = this.connections.get(connectionId);
93
+ if (!connection)
94
+ return;
95
+ connection.retired = true;
96
+ // The entry only has to bridge the client's reconnect. Left on its full
97
+ // lease it would go on reporting the card and mode held at retirement,
98
+ // and `editing` wins in users(), so it would mask the live entry the
99
+ // replacement declares.
100
+ connection.expiresAt = Math.min(connection.expiresAt, Date.now() + RETIRED_LEASE_MS);
101
+ }
102
+ cardsUpdated(cardKeys, user) {
103
+ for (const cardKey of new Set(cardKeys)) {
104
+ const withIdentity = this.encode('card.updated', {
105
+ cardKey,
106
+ userId: user.id,
107
+ userName: user.name,
108
+ });
109
+ const withoutIdentity = this.encode('card.updated', { cardKey });
110
+ for (const [connectionId, connection] of this.onCard(cardKey)) {
111
+ this.deliver(connectionId, connection.capabilities.canSeeIdentity
112
+ ? withIdentity
113
+ : withoutIdentity);
114
+ }
115
+ }
116
+ }
117
+ dispose() {
118
+ clearInterval(this.expiryTimer);
119
+ const connections = [...this.connections.values()];
120
+ this.connections.clear();
121
+ for (const connection of connections) {
122
+ this.closeQuietly(connection);
123
+ }
124
+ }
125
+ users(cardKey) {
126
+ const users = new Map();
127
+ for (const { user, cardKey: key, mode } of this.connections.values()) {
128
+ if (key !== cardKey)
129
+ continue;
130
+ if (!users.has(user.id) || mode === 'editing') {
131
+ users.set(user.id, { userId: user.id, userName: user.name, mode });
132
+ }
133
+ }
134
+ // Sorted so identical occupancy always serializes the same way, which
135
+ // the per-recipient dedup in presenceUpdated() depends on.
136
+ return [...users.values()].sort((a, b) => a.userId.localeCompare(b.userId));
137
+ }
138
+ presenceUpdated(cardKey) {
139
+ const users = this.users(cardKey);
140
+ const serialized = JSON.stringify(users);
141
+ const message = this.encode('presence.updated', { cardKey, users });
142
+ for (const [connectionId, connection] of this.onCard(cardKey)) {
143
+ // Presence exists to keep editors from colliding, so a reader has no use
144
+ // for it and is not told who else is here. Readers still declare their
145
+ // own presence, which is why users() keeps them: editors see readers.
146
+ if (!connection.capabilities.canSeePresence)
147
+ continue;
148
+ if (connection.lastSent === serialized)
149
+ continue;
150
+ this.deliver(connectionId, message);
151
+ connection.lastSent = serialized;
152
+ }
153
+ }
154
+ // Subscription governs delivery.
155
+ onCard(cardKey) {
156
+ return [...this.connections].filter(([, c]) => c.cardKey === cardKey);
157
+ }
158
+ encode(event, data) {
159
+ return { event, data: JSON.stringify(data) };
160
+ }
161
+ deliver(connectionId, message) {
162
+ const connection = this.connections.get(connectionId);
163
+ // onCard() still yields a retired connection: it keeps its cardKey so the
164
+ // occupant list does not change while its replacement connects.
165
+ if (!connection || connection.retired)
166
+ return;
167
+ try {
168
+ connection.delivery.send(message);
169
+ }
170
+ catch {
171
+ this.disconnect(connectionId);
172
+ }
173
+ }
174
+ expire() {
175
+ for (const [connectionId, connection] of this.connections) {
176
+ if (connection.expiresAt > Date.now())
177
+ continue;
178
+ if (!connection.retired && !connection.cardKey)
179
+ continue;
180
+ const cardKey = connection.cardKey;
181
+ if (connection.retired)
182
+ this.connections.delete(connectionId);
183
+ else
184
+ connection.cardKey = null;
185
+ if (cardKey)
186
+ this.presenceUpdated(cardKey);
187
+ }
188
+ }
189
+ closeQuietly(connection) {
190
+ if (connection.retired)
191
+ return;
192
+ try {
193
+ connection.delivery.close();
194
+ }
195
+ catch {
196
+ /* already closed */
197
+ }
198
+ }
199
+ }
200
+ //# sourceMappingURL=project-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-events.js","sourceRoot":"","sources":["../../../src/domain/events/project-events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2026
4
+ This program is free software: you can redistribute it and/or modify it under
5
+ the terms of the GNU Affero General Public License version 3 as published by
6
+ the Free Software Foundation.
7
+ This program is distributed in the hope that it will be useful, but WITHOUT
8
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
9
+ FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
10
+ details. You should have received a copy of the GNU Affero General Public
11
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
12
+ */
13
+ import { z } from 'zod';
14
+ export declare const presenceSchema: z.ZodObject<{
15
+ connectionId: z.ZodUUID;
16
+ sequence: z.ZodNumber;
17
+ cardKey: z.ZodNullable<z.ZodString>;
18
+ mode: z.ZodEnum<{
19
+ viewing: "viewing";
20
+ editing: "editing";
21
+ }>;
22
+ }, z.core.$strip>;
@@ -0,0 +1,20 @@
1
+ /**
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2026
4
+ This program is free software: you can redistribute it and/or modify it under
5
+ the terms of the GNU Affero General Public License version 3 as published by
6
+ the Free Software Foundation.
7
+ This program is distributed in the hope that it will be useful, but WITHOUT
8
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
9
+ FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
10
+ details. You should have received a copy of the GNU Affero General Public
11
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
12
+ */
13
+ import { z } from 'zod';
14
+ export const presenceSchema = z.object({
15
+ connectionId: z.uuid(),
16
+ sequence: z.number().int().nonnegative(),
17
+ cardKey: z.string().min(1).nullable(),
18
+ mode: z.enum(['viewing', 'editing']),
19
+ });
20
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/domain/events/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAEF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,YAAY,EAAE,CAAC,CAAC,IAAI,EAAE;IACtB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACxC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACrC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;CACrC,CAAC,CAAC"}
@@ -11,8 +11,9 @@
11
11
  License along with this program. If not, see <https://www.gnu.org/licenses/>.
12
12
  */
13
13
  import { Hono } from 'hono';
14
+ import { disableSSG } from 'hono/ssg';
14
15
  import { zValidator } from '../../middleware/zvalidator.js';
15
- import { addHubSchema, cleanSchema, importModuleSchema, moduleParamSchema, removeHubSchema, updateProjectSchema, } from './schema.js';
16
+ import { addHubSchema, cleanSchema, importModuleSchema, moduleParamSchema, moduleVersionsQuerySchema, removeHubSchema, updateModuleSchema, updateProjectSchema, } from './schema.js';
16
17
  import * as projectService from './service.js';
17
18
  import { UserRole } from '../../types.js';
18
19
  import { requireRole } from '../../middleware/auth.js';
@@ -33,12 +34,23 @@ router.post('/modules/update', requireRole(UserRole.Admin), async (c) => {
33
34
  await projectService.updateAllModules(commands);
34
35
  return c.json({ message: 'All modules updated' });
35
36
  });
36
- router.post('/modules/:module/update', requireRole(UserRole.Admin), zValidator('param', moduleParamSchema), async (c) => {
37
+ router.post('/modules/:module/update', requireRole(UserRole.Admin), zValidator('param', moduleParamSchema), zValidator('json', updateModuleSchema), async (c) => {
37
38
  const commands = c.get('commands');
38
39
  const { module } = c.req.valid('param');
39
- await projectService.updateModule(commands, module);
40
+ const { range } = c.req.valid('json');
41
+ await projectService.updateModule(commands, module, range);
40
42
  return c.json({ message: 'Module updated' });
41
43
  });
44
+ // These reach the module sources over the network, which an export must not do.
45
+ router.get('/modules/versions', disableSSG(), requireRole(UserRole.Admin), zValidator('query', moduleVersionsQuerySchema), async (c) => {
46
+ const commands = c.get('commands');
47
+ const target = c.req.valid('query');
48
+ return c.json(await projectService.listModuleVersions(commands, target));
49
+ });
50
+ router.get('/modules/update-plan', disableSSG(), requireRole(UserRole.Admin), async (c) => {
51
+ const commands = c.get('commands');
52
+ return c.json(await projectService.getUpdatePlan(commands));
53
+ });
42
54
  router.get('/modules/importable', requireRole(UserRole.Reader), async (c) => {
43
55
  const commands = c.get('commands');
44
56
  const modules = await projectService.getImportableModules(commands);
@@ -46,8 +58,8 @@ router.get('/modules/importable', requireRole(UserRole.Reader), async (c) => {
46
58
  });
47
59
  router.post('/modules', requireRole(UserRole.Admin), zValidator('json', importModuleSchema), async (c) => {
48
60
  const commands = c.get('commands');
49
- const { source } = c.req.valid('json');
50
- await projectService.importModule(commands, source);
61
+ const { source, range } = c.req.valid('json');
62
+ await projectService.importModule(commands, source, range);
51
63
  return c.json({ message: 'Module imported successfully' });
52
64
  });
53
65
  router.delete('/modules/:module', requireRole(UserRole.Admin), zValidator('param', moduleParamSchema), async (c) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/project/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/project/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAEF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EACL,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,cAAc,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;AAE1B,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACxD,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAEnC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC1D,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,CACV,GAAG,EACH,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC3B,UAAU,CAAC,MAAM,EAAE,mBAAmB,CAAC,EACvC,KAAK,EAAE,CAAC,EAAE,EAAE;IACV,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAEpC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtE,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACtE,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAChD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC3B,UAAU,CAAC,OAAO,EAAE,iBAAiB,CAAC,EACtC,UAAU,CAAC,MAAM,EAAE,kBAAkB,CAAC,EACtC,KAAK,EAAE,CAAC,EAAE,EAAE;IACV,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,cAAc,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAC/C,CAAC,CACF,CAAC;AAEF,gFAAgF;AAChF,MAAM,CAAC,GAAG,CACR,mBAAmB,EACnB,UAAU,EAAE,EACZ,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC3B,UAAU,CAAC,OAAO,EAAE,yBAAyB,CAAC,EAC9C,KAAK,EAAE,CAAC,EAAE,EAAE;IACV,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAC3E,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,GAAG,CACR,sBAAsB,EACtB,UAAU,EAAE,EACZ,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC3B,KAAK,EAAE,CAAC,EAAE,EAAE;IACV,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC9D,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC1E,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACpE,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CACT,UAAU,EACV,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC3B,UAAU,CAAC,MAAM,EAAE,kBAAkB,CAAC,EACtC,KAAK,EAAE,CAAC,EAAE,EAAE;IACV,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,cAAc,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC,CAAC;AAC7D,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,CACX,kBAAkB,EAClB,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC3B,UAAU,CAAC,OAAO,EAAE,iBAAiB,CAAC,EACtC,KAAK,EAAE,CAAC,EAAE,EAAE;IACV,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,cAAc,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAC/C,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC5D,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpD,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CACT,OAAO,EACP,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC3B,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,EAChC,KAAK,EAAE,CAAC,EAAE,EAAE;IACV,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACpE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;AACvD,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,CACX,OAAO,EACP,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC3B,UAAU,CAAC,OAAO,EAAE,eAAe,CAAC,EACpC,KAAK,EAAE,CAAC,EAAE,EAAE;IACV,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,cAAc,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACnD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;AAC5C,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAClE,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC7D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;AAC1D,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,+EAA+E;AAC/E,qDAAqD;AACrD,MAAM,CAAC,IAAI,CACT,QAAQ,EACR,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC3B,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,EAC/B,KAAK,EAAE,CAAC,EAAE,EAAE;IACV,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACnE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC,CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -32,4 +32,12 @@ export declare const cleanSchema: z.ZodObject<{
32
32
  }, z.core.$strip>;
33
33
  export declare const importModuleSchema: z.ZodObject<{
34
34
  source: z.ZodString;
35
+ range: z.ZodOptional<z.ZodString>;
36
+ }, z.core.$strip>;
37
+ export declare const updateModuleSchema: z.ZodObject<{
38
+ range: z.ZodOptional<z.ZodString>;
39
+ }, z.core.$strip>;
40
+ export declare const moduleVersionsQuerySchema: z.ZodObject<{
41
+ module: z.ZodOptional<z.ZodString>;
42
+ source: z.ZodOptional<z.ZodString>;
35
43
  }, z.core.$strip>;
@@ -44,12 +44,40 @@ export const removeHubSchema = z.object({
44
44
  export const cleanSchema = z.object({
45
45
  dryRun: z.boolean(),
46
46
  });
47
+ // Credentials in a source would be stored in cardsConfig.json and echoed in
48
+ // query strings, logs and errors.
49
+ const gitSourceSchema = z
50
+ .string()
51
+ .min(1)
52
+ .refine((s) => s.startsWith('https://') || s.startsWith('git@'), {
53
+ message: 'Source must be a git URL (https:// or git@)',
54
+ })
55
+ .refine((s) => {
56
+ if (!s.startsWith('https://'))
57
+ return true;
58
+ try {
59
+ const { username, password } = new URL(s);
60
+ return username === '' && password === '';
61
+ }
62
+ catch {
63
+ return false;
64
+ }
65
+ }, { message: 'Source must be a valid URL without credentials' });
66
+ // A blank range is a valid semver range meaning '*', which would unpin.
67
+ const rangeSchema = z.string().trim().min(1);
47
68
  export const importModuleSchema = z.object({
48
- source: z
49
- .string()
50
- .min(1)
51
- .refine((s) => s.startsWith('https://') || s.startsWith('git@'), {
52
- message: 'Source must be a git URL (https:// or git@)',
53
- }),
69
+ source: gitSourceSchema,
70
+ range: rangeSchema.optional(),
71
+ });
72
+ export const updateModuleSchema = z.object({
73
+ range: rangeSchema.optional(),
74
+ });
75
+ export const moduleVersionsQuerySchema = z
76
+ .object({
77
+ module: z.string().min(1).optional(),
78
+ source: gitSourceSchema.optional(),
79
+ })
80
+ .refine((q) => (q.module === undefined) !== (q.source === undefined), {
81
+ message: 'Provide exactly one of module or source',
54
82
  });
55
83
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/domain/project/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAEF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QAC/D,OAAO,EAAE,iDAAiD;KAC3D,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC;QACd,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,gDAAgD;KACxD,CAAC;CACH,CAAC,CAAC;AAEH,+EAA+E;AAC/E,gFAAgF;AAChF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC5B,CAAC,CAAC;AAEH,8EAA8E;AAC9E,2EAA2E;AAC3E,wDAAwD;AACxD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;CACpB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QAC/D,OAAO,EAAE,6CAA6C;KACvD,CAAC;CACL,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/domain/project/schema.ts"],"names":[],"mappings":"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"}
@@ -10,10 +10,9 @@
10
10
  details. You should have received a copy of the GNU Affero General Public
11
11
  License along with this program. If not, see <https://www.gnu.org/licenses/>.
12
12
  */
13
- import { type CleanResult, type CommandManager, type HubFetchFailure, type ModuleSettingFromHub } from '@cyberismo/data-handler';
13
+ import { type CleanResult, type CommandManager, type HubFetchFailure, type ModuleSettingFromHub, type ProjectModuleInfo, type UpdatePlan } from '@cyberismo/data-handler';
14
14
  export type { CleanResult } from '@cyberismo/data-handler';
15
- export interface ProjectModule {
16
- name: string;
15
+ export interface ProjectModule extends ProjectModuleInfo {
17
16
  cardKeyPrefix: string;
18
17
  }
19
18
  export interface ProjectInfo {
@@ -45,11 +44,16 @@ export interface HubInfo {
45
44
  }
46
45
  export declare function getProject(commands: CommandManager): Promise<ProjectInfo>;
47
46
  export declare function updateProject(commands: CommandManager, updates: ProjectUpdatePayload): Promise<ProjectInfo>;
48
- export declare function updateModule(commands: CommandManager, module: string): Promise<void>;
47
+ export declare function updateModule(commands: CommandManager, module: string, range?: string): Promise<void>;
49
48
  export declare function updateAllModules(commands: CommandManager): Promise<void>;
49
+ export declare function getUpdatePlan(commands: CommandManager): Promise<UpdatePlan>;
50
+ export declare function listModuleVersions(commands: CommandManager, target: {
51
+ module?: string;
52
+ source?: string;
53
+ }): Promise<string[]>;
50
54
  export declare function deleteModule(commands: CommandManager, module: string): Promise<void>;
51
55
  export declare function getImportableModules(commands: CommandManager): Promise<ModuleSettingFromHub[]>;
52
- export declare function importModule(commands: CommandManager, source: string): Promise<void>;
56
+ export declare function importModule(commands: CommandManager, source: string, range?: string): Promise<void>;
53
57
  export declare function getHubs(commands: CommandManager): Promise<HubInfo[]>;
54
58
  export declare function addHub(commands: CommandManager, location: string): Promise<HubFetchFailure[]>;
55
59
  export declare function removeHub(commands: CommandManager, location: string): Promise<void>;
@@ -10,26 +10,24 @@
10
10
  details. You should have received a copy of the GNU Affero General Public
11
11
  License along with this program. If not, see <https://www.gnu.org/licenses/>.
12
12
  */
13
- async function toModuleInfo(commands, moduleName) {
13
+ async function toModuleInfo(commands, row) {
14
14
  try {
15
- const data = await commands.showCmd.showModule(moduleName);
15
+ const data = await commands.modulesCmd.show(row.name);
16
16
  return {
17
- name: data.name || moduleName,
18
- cardKeyPrefix: data.cardKeyPrefix || moduleName,
17
+ ...row,
18
+ name: data.name || row.name,
19
+ cardKeyPrefix: data.cardKeyPrefix || row.name,
19
20
  };
20
21
  }
21
22
  catch {
22
- return {
23
- name: moduleName,
24
- cardKeyPrefix: moduleName,
25
- };
23
+ return { ...row, cardKeyPrefix: row.name };
26
24
  }
27
25
  }
28
26
  export async function getProject(commands) {
29
27
  return commands.consistent(async () => {
30
28
  const project = await commands.showCmd.showProject();
31
- const modules = await commands.showCmd.showModules();
32
- const moduleDetails = await Promise.all(modules.map((mod) => toModuleInfo(commands, mod.name)));
29
+ const modules = await commands.modulesCmd.inventory();
30
+ const moduleDetails = await Promise.all(modules.map((row) => toModuleInfo(commands, row)));
33
31
  const gitRemoteUrl = (await commands.showCmd.showGitRemoteUrl()) ?? null;
34
32
  return {
35
33
  name: project.name,
@@ -62,11 +60,19 @@ export async function updateProject(commands, updates) {
62
60
  }
63
61
  return getProject(commands);
64
62
  }
65
- export async function updateModule(commands, module) {
66
- await commands.importCmd.updateModule(module);
63
+ export async function updateModule(commands, module, range) {
64
+ await commands.modulesCmd.update(range ? { module, range } : { module });
67
65
  }
68
66
  export async function updateAllModules(commands) {
69
- await commands.importCmd.updateAllModules();
67
+ await commands.modulesCmd.update({});
68
+ }
69
+ export async function getUpdatePlan(commands) {
70
+ return commands.modulesCmd.planUpdate({});
71
+ }
72
+ export async function listModuleVersions(commands, target) {
73
+ return commands.modulesCmd.listVersions(target.source !== undefined
74
+ ? { source: target.source }
75
+ : { module: target.module });
70
76
  }
71
77
  export async function deleteModule(commands, module) {
72
78
  await commands.removeCmd.remove('module', module);
@@ -86,13 +92,13 @@ export async function getImportableModules(commands) {
86
92
  await populateHubCache(commands);
87
93
  return commands.showCmd.showImportableModules(false, true);
88
94
  }
89
- export async function importModule(commands, source) {
90
- await commands.importCmd.importModule(source);
95
+ export async function importModule(commands, source, range) {
96
+ await commands.modulesCmd.install(source, range ? { version: range } : undefined);
91
97
  }
92
98
  export async function getHubs(commands) {
93
99
  await populateHubCache(commands);
94
100
  const hubs = await commands.showCmd.showHubDetails();
95
- const importedModules = new Set((await commands.showCmd.showModules()).map((mod) => mod.name));
101
+ const importedModules = new Set((await commands.modulesCmd.list()).map((mod) => mod.name));
96
102
  return hubs.map((hub) => ({
97
103
  location: hub.location,
98
104
  displayName: hub.displayName,
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/domain/project/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/domain/project/service.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@
13
13
  import { Hono } from 'hono';
14
14
  import { zValidator } from '../../middleware/zvalidator.js';
15
15
  import { requireRole, getCurrentUser } from '../../middleware/auth.js';
16
+ import { isProjectReadOnly } from '../../overlay.js';
16
17
  import { UserRole } from '../../types.js';
17
18
  import { createProjectSchema, cloneProjectSchema } from './schema.js';
18
19
  import * as projectsService from './service.js';
@@ -32,7 +33,10 @@ export function createProjectsRouter(registry, multiProjectRoot) {
32
33
  */
33
34
  router.get('/', requireRole(UserRole.Reader), (c) => {
34
35
  return c.json({
35
- projects: registry.list(),
36
+ projects: registry.list().map((project) => ({
37
+ ...project,
38
+ readOnly: isProjectReadOnly(project.prefix),
39
+ })),
36
40
  canCreateProjects: !!multiProjectRoot,
37
41
  });
38
42
  });