@cyberismo/backend 0.0.27 → 1.1.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 (268) hide show
  1. package/dist/app.d.ts +1 -1
  2. package/dist/app.js +10 -4
  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.js +3 -0
  8. package/dist/auth/keycloak.js.map +1 -1
  9. package/dist/auth/mock.d.ts +8 -1
  10. package/dist/auth/mock.js +51 -2
  11. package/dist/auth/mock.js.map +1 -1
  12. package/dist/common/validationSchemas.d.ts +3 -1
  13. package/dist/common/validationSchemas.js +1 -0
  14. package/dist/common/validationSchemas.js.map +1 -1
  15. package/dist/domain/calculations/index.js +1 -1
  16. package/dist/domain/calculations/index.js.map +1 -1
  17. package/dist/domain/cardTypes/service.d.ts +1 -1
  18. package/dist/domain/cardTypes/service.js +26 -4
  19. package/dist/domain/cardTypes/service.js.map +1 -1
  20. package/dist/domain/cards/lib.js +7 -5
  21. package/dist/domain/cards/lib.js.map +1 -1
  22. package/dist/domain/cards/service.js +3 -6
  23. package/dist/domain/cards/service.js.map +1 -1
  24. package/dist/domain/project/index.js +32 -1
  25. package/dist/domain/project/index.js.map +1 -1
  26. package/dist/domain/project/schema.d.ts +11 -0
  27. package/dist/domain/project/schema.js +20 -0
  28. package/dist/domain/project/schema.js.map +1 -1
  29. package/dist/domain/project/service.d.ts +23 -1
  30. package/dist/domain/project/service.js +52 -1
  31. package/dist/domain/project/service.js.map +1 -1
  32. package/dist/domain/projects/index.d.ts +1 -1
  33. package/dist/domain/projects/index.js +66 -3
  34. package/dist/domain/projects/index.js.map +1 -1
  35. package/dist/domain/projects/schema.d.ts +22 -0
  36. package/dist/domain/projects/schema.js +40 -0
  37. package/dist/domain/projects/schema.js.map +1 -0
  38. package/dist/domain/projects/service.d.ts +37 -0
  39. package/dist/domain/projects/service.js +53 -0
  40. package/dist/domain/projects/service.js.map +1 -0
  41. package/dist/domain/resources/index.js +1 -1
  42. package/dist/domain/resources/index.js.map +1 -1
  43. package/dist/domain/resources/schema.d.ts +4 -1
  44. package/dist/domain/resources/schema.js +4 -2
  45. package/dist/domain/resources/schema.js.map +1 -1
  46. package/dist/domain/resources/service.d.ts +1 -1
  47. package/dist/domain/resources/service.js +7 -2
  48. package/dist/domain/resources/service.js.map +1 -1
  49. package/dist/index.d.ts +1 -1
  50. package/dist/index.js +5 -4
  51. package/dist/index.js.map +1 -1
  52. package/dist/main.js +0 -4
  53. package/dist/main.js.map +1 -1
  54. package/dist/middleware/auth.d.ts +5 -3
  55. package/dist/middleware/auth.js +7 -4
  56. package/dist/middleware/auth.js.map +1 -1
  57. package/dist/middleware/zvalidator.d.ts +1 -1
  58. package/dist/project-registry.d.ts +2 -1
  59. package/dist/project-registry.js +4 -2
  60. package/dist/project-registry.js.map +1 -1
  61. package/dist/public/THIRD-PARTY.txt +932 -1022
  62. package/dist/public/assets/abnfDiagram-VRR7QNED-Djr4KJ5E.js +1 -0
  63. package/dist/public/assets/arc-DrR4k_H-.js +1 -0
  64. package/dist/public/assets/architecture-TIHT7OUA-XL6N-4o9.js +1 -0
  65. package/dist/public/assets/architectureDiagram-ZJ3FMSHR-DsMU2Uwa.js +36 -0
  66. package/dist/public/assets/blockDiagram-677ZJIJ3-DRBmQUQJ.js +132 -0
  67. package/dist/public/assets/c4Diagram-LMCZKHZV-E0rM02LD.js +10 -0
  68. package/dist/public/assets/channel-D5fnImJy.js +1 -0
  69. package/dist/public/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  70. package/dist/public/assets/chunk-32BRIVSS-BnDY0aSV.js +1 -0
  71. package/dist/public/assets/chunk-52WLFC77-N5YugKaZ.js +10 -0
  72. package/dist/public/assets/chunk-5FCAYU7R-I3_t_Ic_.js +1 -0
  73. package/dist/public/assets/chunk-5HE753X5-Dxz40rzH.js +1 -0
  74. package/dist/public/assets/chunk-5JV3BV7I-CNwCKRLH.js +1 -0
  75. package/dist/public/assets/chunk-5TONJI2A-ezWQ_Z2j.js +2 -0
  76. package/dist/public/assets/{chunk-FMBD7UC4-Cgl-u-NC.js → chunk-5VM5RSS4-ZNzvKenW.js} +1 -1
  77. package/dist/public/assets/chunk-7BUUIJ7U-Bb538aSH.js +1 -0
  78. package/dist/public/assets/chunk-BIQX33UG-DS132-R_.js +1 -0
  79. package/dist/public/assets/chunk-C7G6YPKG-BN-cNjoj.js +1 -0
  80. package/dist/public/assets/chunk-CQNSW5MT-D8Mn1I73.js +1 -0
  81. package/dist/public/assets/chunk-CYSBUYHQ-Dc64Dwdo.js +1 -0
  82. package/dist/public/assets/chunk-EMLP6XTP-aIK0V8GX.js +1 -0
  83. package/dist/public/assets/chunk-EX3LRPZG-Db0XYyxy.js +231 -0
  84. package/dist/public/assets/chunk-FWX5IMBZ-BF_P2-Do.js +2 -0
  85. package/dist/public/assets/chunk-HOUHSVGY-L35GPy9G.js +1 -0
  86. package/dist/public/assets/chunk-ICXQ74PX-Bb8zaHde.js +2 -0
  87. package/dist/public/assets/chunk-JG7HCLWE-BtAXK3iQ.js +2 -0
  88. package/dist/public/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  89. package/dist/public/assets/chunk-KEIR6QF5-DEvma7oi.js +161 -0
  90. package/dist/public/assets/chunk-MOJQB5TN-D1shKbMs.js +88 -0
  91. package/dist/public/assets/chunk-MOZMSUNE-5FIqIBsY.js +1 -0
  92. package/dist/public/assets/chunk-OGEWGWER-BVIFy9xz.js +1 -0
  93. package/dist/public/assets/chunk-OSBZ3O6U-Cfd7kf1R.js +1 -0
  94. package/dist/public/assets/chunk-PUDLZKDR-Db3FSNR9.js +156 -0
  95. package/dist/public/assets/chunk-Q4XR5HBZ-BuKFRUzR.js +70 -0
  96. package/dist/public/assets/chunk-QBLGF6JB-DUGZXFh-.js +1 -0
  97. package/dist/public/assets/chunk-R7FJI6CG-D7mUd-qN.js +1 -0
  98. package/dist/public/assets/chunk-RYQCIY6F-C_3rESBd.js +1 -0
  99. package/dist/public/assets/chunk-U6XO7XAA-C3UhlwA1.js +2 -0
  100. package/dist/public/assets/chunk-V7JOEXUC-71b0ABpv.js +206 -0
  101. package/dist/public/assets/chunk-VAUOI2AC-C-GBw18h.js +1 -0
  102. package/dist/public/assets/chunk-VR4S4FIN-tUhbELKr.js +1 -0
  103. package/dist/public/assets/chunk-WYO6CB5R-BQoO62-B.js +127 -0
  104. package/dist/public/assets/chunk-XXDRQBXY-Co8n4ZHT.js +1 -0
  105. package/dist/public/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  106. package/dist/public/assets/chunk-YOTPTUD7-DhCRKU1A.js +1 -0
  107. package/dist/public/assets/chunk-ZGVPDNZ5-hpz2Ryq5.js +62 -0
  108. package/dist/public/assets/chunk-ZIRB5QZD-BpeS1aZ7.js +32 -0
  109. package/dist/public/assets/classDiagram-OUVF2IWQ-CXdVorPK.js +1 -0
  110. package/dist/public/assets/classDiagram-v2-EOCWNBFH-CXdVorPK.js +1 -0
  111. package/dist/public/assets/colors-Cg5Vh3br.js +1 -0
  112. package/dist/public/assets/cose-bilkent-JH36ORCC-4GoRbloS.js +1 -0
  113. package/dist/public/assets/cynefin-VYW2F7L2-BPH-25fI.js +1 -0
  114. package/dist/public/assets/cynefinDiagram-TSTJHNR4-PEf16euv.js +62 -0
  115. package/dist/public/assets/cytoscape.esm-C3UvhD5t.js +321 -0
  116. package/dist/public/assets/dagre-Buvkdvvj.js +1 -0
  117. package/dist/public/assets/dagre-VKFMJZFB-DPsCMBF1.js +4 -0
  118. package/dist/public/assets/defaultLocale-CNPGWpMu.js +1 -0
  119. package/dist/public/assets/diagram-FQU43EPY-DS-ryuRg.js +3 -0
  120. package/dist/public/assets/diagram-G47NLZAW-CzUoYkFf.js +24 -0
  121. package/dist/public/assets/diagram-NH7WQ7WH-MhGnE2fh.js +24 -0
  122. package/dist/public/assets/diagram-OA4YK3LP-CsQ9aFR_.js +30 -0
  123. package/dist/public/assets/diagram-WEI45ONY-Er3q49ew.js +41 -0
  124. package/dist/public/assets/dist-BzwexiH1.js +1 -0
  125. package/dist/public/assets/ebnfDiagram-CCIWWBDH-AnJAsk14.js +1 -0
  126. package/dist/public/assets/erDiagram-Q63AITRT-DulA16my.js +85 -0
  127. package/dist/public/assets/eventmodeling-45OFAUF4-CoIhTpHU.js +1 -0
  128. package/dist/public/assets/flowDiagram-23GEKE2U-BGMXUq18.js +1 -0
  129. package/dist/public/assets/ganttDiagram-NO4QXBWP-DAvCPT7_.js +292 -0
  130. package/dist/public/assets/gitGraph-TEB2WS4Q-BcPsZts5.js +1 -0
  131. package/dist/public/assets/gitGraphDiagram-IHSO6WYX-CksvJvsQ.js +106 -0
  132. package/dist/public/assets/{graphlib-B8gBHxth.js → graphlib-DS17s2tU.js} +1 -1
  133. package/dist/public/assets/index-H1CkT-JT.js +447 -0
  134. package/dist/public/assets/info-DKCQHKI2-7VGzrAVB.js +1 -0
  135. package/dist/public/assets/infoDiagram-FWYZ7A6U-D_by7lSL.js +2 -0
  136. package/dist/public/assets/init-ZlXS9mIS.js +1 -0
  137. package/dist/public/assets/{ishikawaDiagram-YF4QCWOH-D5HGS4h9.js → ishikawaDiagram-FXEZZL3T-CiLpASIW.js} +6 -6
  138. package/dist/public/assets/journeyDiagram-5HDEW3XC-DpvFmk7c.js +139 -0
  139. package/dist/public/assets/kanban-definition-HUTT4EX6-DYP_x6zD.js +89 -0
  140. package/dist/public/assets/{katex-Vhh-h91d.js → katex-DolUETbr.js} +3 -3
  141. package/dist/public/assets/{line-DNZMOnJ3.js → line-C8Sfsgt8.js} +1 -1
  142. package/dist/public/assets/linear-BWTvbP1l.js +1 -0
  143. package/dist/public/assets/map-BaFkSB1l.js +1 -0
  144. package/dist/public/assets/mermaid-parser.core--8614tkK.js +4 -0
  145. package/dist/public/assets/mindmap-definition-LN4V7U3C-3IAd4gp3.js +96 -0
  146. package/dist/public/assets/ordinal-BdBDtYTt.js +1 -0
  147. package/dist/public/assets/packet-7NZHBO7P-KYt33H0C.js +1 -0
  148. package/dist/public/assets/pegDiagram-2B236MQR-BQNFxYz2.js +1 -0
  149. package/dist/public/assets/pie-RZYD4A2V-xKz9s9I4.js +1 -0
  150. package/dist/public/assets/pieDiagram-ENE6RG2P-Cy13tg8_.js +39 -0
  151. package/dist/public/assets/quadrantDiagram-ABIIQ3AL-B3czMbdS.js +7 -0
  152. package/dist/public/assets/radar-I7S5WNFK-B4QTX-fX.js +1 -0
  153. package/dist/public/assets/railroad-3IZDKUUU-Co_9rPVC.js +1 -0
  154. package/dist/public/assets/railroad-abnf-AHOZXSZD-Bhy_c3ol.js +1 -0
  155. package/dist/public/assets/railroad-ebnf-EBAXGLYW-B9ENjG34.js +1 -0
  156. package/dist/public/assets/railroad-peg-LSFZ7HO6-CyJxDBsB.js +1 -0
  157. package/dist/public/assets/railroadDiagram-RFXS5EU6-M2j5SJF2.js +1 -0
  158. package/dist/public/assets/range-EplFIxc7.js +1 -0
  159. package/dist/public/assets/requirementDiagram-TGXJPOKE-CmvJWy_S.js +84 -0
  160. package/dist/public/assets/{rough.esm-CSKSodPl.js → rough.esm-By172zw-.js} +1 -1
  161. package/dist/public/assets/sankeyDiagram-HTMAVEWB-tAeOzMTn.js +40 -0
  162. package/dist/public/assets/sequenceDiagram-DBY2YBRQ-r0pwijM4.js +162 -0
  163. package/dist/public/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +1 -0
  164. package/dist/public/assets/src-DOh7_en_.js +1 -0
  165. package/dist/public/assets/stateDiagram-2N3HPSRC-a9IdkSQG.js +1 -0
  166. package/dist/public/assets/stateDiagram-v2-6OUMAXLB-s2blPtZ-.js +1 -0
  167. package/dist/public/assets/swimlanes-5IMT3BWC-5w0Cdxk6.js +2 -0
  168. package/dist/public/assets/swimlanesDiagram-G3AALYLV-BWa-KRed.js +8 -0
  169. package/dist/public/assets/time-BM2d9MsQ.js +1 -0
  170. package/dist/public/assets/timeline-definition-FHXFAJF6-CvXlv_4Y.js +120 -0
  171. package/dist/public/assets/treeView-QDETBFTQ-B9cxjfpB.js +1 -0
  172. package/dist/public/assets/treemap-6X3UGDF4-BplEq4hB.js +1 -0
  173. package/dist/public/assets/treemap-BfjIY-m6.js +1 -0
  174. package/dist/public/assets/vennDiagram-L72KCM5P-ti2qNcvo.js +34 -0
  175. package/dist/public/assets/wardley-OPB4EBWU-BX2ghg5e.js +1 -0
  176. package/dist/public/assets/wardleyDiagram-EHGQE667-C8lblm8x.js +78 -0
  177. package/dist/public/assets/xychartDiagram-FW5EYKEG-US-_k5eu.js +7 -0
  178. package/dist/public/index.html +31 -12
  179. package/dist/types.d.ts +4 -1
  180. package/dist/types.js +3 -0
  181. package/dist/types.js.map +1 -1
  182. package/package.json +11 -10
  183. package/src/app.ts +11 -4
  184. package/src/auth/index.ts +1 -1
  185. package/src/auth/keycloak.ts +3 -0
  186. package/src/auth/mock.ts +54 -2
  187. package/src/common/validationSchemas.ts +1 -0
  188. package/src/domain/calculations/index.ts +1 -1
  189. package/src/domain/cardTypes/service.ts +26 -21
  190. package/src/domain/cards/lib.ts +11 -4
  191. package/src/domain/cards/service.ts +4 -5
  192. package/src/domain/project/index.ts +54 -0
  193. package/src/domain/project/schema.ts +23 -0
  194. package/src/domain/project/service.ts +89 -1
  195. package/src/domain/projects/index.ts +115 -3
  196. package/src/domain/projects/schema.ts +42 -0
  197. package/src/domain/projects/service.ts +98 -0
  198. package/src/domain/resources/index.ts +1 -1
  199. package/src/domain/resources/schema.ts +4 -2
  200. package/src/domain/resources/service.ts +5 -4
  201. package/src/index.ts +11 -6
  202. package/src/main.ts +0 -6
  203. package/src/middleware/auth.ts +10 -4
  204. package/src/project-registry.ts +7 -2
  205. package/src/types.ts +3 -0
  206. package/dist/public/assets/architecture-7EHR7CIX-CHU1xuYF.js +0 -1
  207. package/dist/public/assets/architectureDiagram-3BPJPVTR--CSL9yP4.js +0 -36
  208. package/dist/public/assets/blockDiagram-GPEHLZMM-KVU5YZg5.js +0 -132
  209. package/dist/public/assets/c4Diagram-AAUBKEIU-CKZoRo4y.js +0 -10
  210. package/dist/public/assets/channel-DylEVeTd.js +0 -1
  211. package/dist/public/assets/chunk-2J33WTMH-3csjo24p.js +0 -1
  212. package/dist/public/assets/chunk-3OPIFGDE-BKzRNP07.js +0 -62
  213. package/dist/public/assets/chunk-4BX2VUAB-ClBqZOcE.js +0 -1
  214. package/dist/public/assets/chunk-55IACEB6-Bgi2dUOh.js +0 -1
  215. package/dist/public/assets/chunk-5ZQYHXKU-CECM_AkK.js +0 -2
  216. package/dist/public/assets/chunk-727SXJPM-DwCEXlGv.js +0 -206
  217. package/dist/public/assets/chunk-AQP2D5EJ-4K2xdOIK.js +0 -231
  218. package/dist/public/assets/chunk-BSJP7CBP-ByoKnyMP.js +0 -1
  219. package/dist/public/assets/chunk-CSCIHK7Q-DPeQmPB5.js +0 -124
  220. package/dist/public/assets/chunk-L5ZTLDWV-pkYUefHU.js +0 -1
  221. package/dist/public/assets/chunk-ND2GUHAM-BbBhIALU.js +0 -1
  222. package/dist/public/assets/chunk-NNHCCRGN-DlpIbxXb.js +0 -159
  223. package/dist/public/assets/chunk-NZK2D7GU-Bsg3s0FQ.js +0 -1
  224. package/dist/public/assets/chunk-O5CBEL6O-CLKEM0Ng.js +0 -70
  225. package/dist/public/assets/chunk-QZHKN3VN-DYbrfjC5.js +0 -1
  226. package/dist/public/assets/classDiagram-4FO5ZUOK-BJy5zoel.js +0 -1
  227. package/dist/public/assets/classDiagram-v2-Q7XG4LA2-BJy5zoel.js +0 -1
  228. package/dist/public/assets/cose-bilkent-S5V4N54A-BW2eHW0s.js +0 -1
  229. package/dist/public/assets/cytoscape.esm-FqbQrHcz.js +0 -321
  230. package/dist/public/assets/dagre-BM42HDAG-BthzRaVA.js +0 -4
  231. package/dist/public/assets/dagre-Bx709z4p.js +0 -1
  232. package/dist/public/assets/diagram-2AECGRRQ-CQJQx4k6.js +0 -43
  233. package/dist/public/assets/diagram-5GNKFQAL-DZn5aW7S.js +0 -10
  234. package/dist/public/assets/diagram-KO2AKTUF-C-khQZwA.js +0 -3
  235. package/dist/public/assets/diagram-LMA3HP47-DgWJfUcV.js +0 -24
  236. package/dist/public/assets/diagram-OG6HWLK6-44JZNjGl.js +0 -24
  237. package/dist/public/assets/dist-Dek0Yhn0.js +0 -1
  238. package/dist/public/assets/erDiagram-TEJ5UH35-BVkYJRJ3.js +0 -85
  239. package/dist/public/assets/eventmodeling-FCH6USID-C_5XBe82.js +0 -1
  240. package/dist/public/assets/flowDiagram-I6XJVG4X-DanY8_jA.js +0 -162
  241. package/dist/public/assets/ganttDiagram-6RSMTGT7-DD1Pw4Yz.js +0 -292
  242. package/dist/public/assets/gitGraph-WXDBUCRP-D4dBNuhe.js +0 -1
  243. package/dist/public/assets/gitGraphDiagram-PVQCEYII-BPrVPTyG.js +0 -106
  244. package/dist/public/assets/index-CKFcPbR1.js +0 -729
  245. package/dist/public/assets/info-J43DQDTF-D7lvZ6o6.js +0 -1
  246. package/dist/public/assets/infoDiagram-5YYISTIA-t6t0skjQ.js +0 -2
  247. package/dist/public/assets/journeyDiagram-JHISSGLW-DZle34fL.js +0 -139
  248. package/dist/public/assets/kanban-definition-UN3LZRKU-DvUHZ0z2.js +0 -89
  249. package/dist/public/assets/mermaid-parser.core-DFZGVidJ.js +0 -4
  250. package/dist/public/assets/mindmap-definition-RKZ34NQL-Lmrs6IX6.js +0 -96
  251. package/dist/public/assets/packet-YPE3B663-AbbU2Ze4.js +0 -1
  252. package/dist/public/assets/pie-LRSECV5Y-DN4QBmSF.js +0 -1
  253. package/dist/public/assets/pieDiagram-4H26LBE5-BwD91PEd.js +0 -30
  254. package/dist/public/assets/quadrantDiagram-W4KKPZXB-DXCkBrKi.js +0 -7
  255. package/dist/public/assets/radar-GUYGQ44K-ej308gGR.js +0 -1
  256. package/dist/public/assets/requirementDiagram-4Y6WPE33-jDFKiwdn.js +0 -84
  257. package/dist/public/assets/sankeyDiagram-5OEKKPKP-D9xT2nUr.js +0 -40
  258. package/dist/public/assets/sequenceDiagram-3UESZ5HK-Bmko-3_U.js +0 -162
  259. package/dist/public/assets/src-CqxF9LGw.js +0 -1
  260. package/dist/public/assets/stateDiagram-AJRCARHV-DjPm6sNG.js +0 -1
  261. package/dist/public/assets/stateDiagram-v2-BHNVJYJU-B-cimf9q.js +0 -1
  262. package/dist/public/assets/timeline-definition-PNZ67QCA-nKPLYYzI.js +0 -120
  263. package/dist/public/assets/treeView-BLDUP644--ooV0k8a.js +0 -1
  264. package/dist/public/assets/treemap-LRROVOQU-BKq-VDOX.js +0 -1
  265. package/dist/public/assets/vennDiagram-CIIHVFJN-DHORAsW0.js +0 -34
  266. package/dist/public/assets/wardley-L42UT6IY-VU5ormp0.js +0 -1
  267. package/dist/public/assets/wardleyDiagram-YWT4CUSO-DwqR74vk.js +0 -78
  268. package/dist/public/assets/xychartDiagram-2RQKCTM6-CUU1IRcn.js +0 -7
@@ -17,6 +17,8 @@ export const moduleParamSchema = z.object({
17
17
  export const updateProjectSchema = z.object({
18
18
  name: z.string().optional(),
19
19
  cardKeyPrefix: z.string().optional(),
20
+ description: z.string().optional(),
21
+ category: z.string().optional(),
20
22
  gitRemoteUrl: z
21
23
  .string()
22
24
  .refine((s) => s.startsWith('https://') || s.startsWith('git@'), {
@@ -24,6 +26,24 @@ export const updateProjectSchema = z.object({
24
26
  })
25
27
  .optional(),
26
28
  });
29
+ export const addHubSchema = z.object({
30
+ location: z.url({
31
+ protocol: /^https?$/,
32
+ error: 'Hub location must be a valid HTTP or HTTPS URL',
33
+ }),
34
+ });
35
+ // Removal accepts any stored location: configurations written before locations
36
+ // were validated may hold entries this schema would otherwise refuse, and those
37
+ // have to stay removable.
38
+ export const removeHubSchema = z.object({
39
+ location: z.string().min(1),
40
+ });
41
+ // 'dryRun' is required so that a request whose body did not arrive fails with
42
+ // 400 instead of defaulting into the destructive real clean. The command's
43
+ // 'cardType' narrowing is deliberately not exposed yet.
44
+ export const cleanSchema = z.object({
45
+ dryRun: z.boolean(),
46
+ });
27
47
  export const importModuleSchema = z.object({
28
48
  source: z
29
49
  .string()
@@ -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,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,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":"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"}
@@ -10,7 +10,8 @@
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 CommandManager, type ModuleSettingFromHub } from '@cyberismo/data-handler';
13
+ import { type CleanResult, type CommandManager, type HubFetchFailure, type ModuleSettingFromHub } from '@cyberismo/data-handler';
14
+ export type { CleanResult } from '@cyberismo/data-handler';
14
15
  export interface ProjectModule {
15
16
  name: string;
16
17
  cardKeyPrefix: string;
@@ -18,14 +19,30 @@ export interface ProjectModule {
18
19
  export interface ProjectInfo {
19
20
  name: string;
20
21
  cardKeyPrefix: string;
22
+ description: string;
23
+ category: string;
21
24
  modules: ProjectModule[];
22
25
  gitRemoteUrl: string | null;
23
26
  }
24
27
  export interface ProjectUpdatePayload {
25
28
  name?: string;
26
29
  cardKeyPrefix?: string;
30
+ description?: string;
31
+ category?: string;
27
32
  gitRemoteUrl?: string;
28
33
  }
34
+ export interface HubModuleInfo {
35
+ name: string;
36
+ displayName?: string;
37
+ location: string;
38
+ imported: boolean;
39
+ }
40
+ export interface HubInfo {
41
+ location: string;
42
+ displayName?: string;
43
+ description?: string;
44
+ modules: HubModuleInfo[];
45
+ }
29
46
  export declare function getProject(commands: CommandManager): Promise<ProjectInfo>;
30
47
  export declare function updateProject(commands: CommandManager, updates: ProjectUpdatePayload): Promise<ProjectInfo>;
31
48
  export declare function updateModule(commands: CommandManager, module: string): Promise<void>;
@@ -33,3 +50,8 @@ export declare function updateAllModules(commands: CommandManager): Promise<void
33
50
  export declare function deleteModule(commands: CommandManager, module: string): Promise<void>;
34
51
  export declare function getImportableModules(commands: CommandManager): Promise<ModuleSettingFromHub[]>;
35
52
  export declare function importModule(commands: CommandManager, source: string): Promise<void>;
53
+ export declare function getHubs(commands: CommandManager): Promise<HubInfo[]>;
54
+ export declare function addHub(commands: CommandManager, location: string): Promise<HubFetchFailure[]>;
55
+ export declare function removeHub(commands: CommandManager, location: string): Promise<void>;
56
+ export declare function fetchHubs(commands: CommandManager): Promise<HubFetchFailure[]>;
57
+ export declare function cleanProject(commands: CommandManager, dryRun: boolean): Promise<CleanResult>;
@@ -34,13 +34,15 @@ export async function getProject(commands) {
34
34
  return {
35
35
  name: project.name,
36
36
  cardKeyPrefix: project.prefix,
37
+ description: project.description ?? '',
38
+ category: project.category ?? '',
37
39
  modules: moduleDetails,
38
40
  gitRemoteUrl,
39
41
  };
40
42
  });
41
43
  }
42
44
  export async function updateProject(commands, updates) {
43
- const { name, cardKeyPrefix, gitRemoteUrl } = updates;
45
+ const { name, cardKeyPrefix, description, category, gitRemoteUrl } = updates;
44
46
  await commands.atomic(async () => {
45
47
  if (cardKeyPrefix) {
46
48
  await commands.renameCmd.rename(cardKeyPrefix);
@@ -48,6 +50,12 @@ export async function updateProject(commands, updates) {
48
50
  if (name) {
49
51
  await commands.project.configuration.setProjectName(name);
50
52
  }
53
+ if (description !== undefined) {
54
+ await commands.project.configuration.setDescription(description);
55
+ }
56
+ if (category !== undefined) {
57
+ await commands.project.configuration.setCategory(category);
58
+ }
51
59
  }, 'Update project settings');
52
60
  if (gitRemoteUrl !== undefined) {
53
61
  await commands.editCmd.setGitRemoteUrl(gitRemoteUrl);
@@ -63,10 +71,53 @@ export async function updateAllModules(commands) {
63
71
  export async function deleteModule(commands, module) {
64
72
  await commands.removeCmd.remove('module', module);
65
73
  }
74
+ // Hub data is only refreshed on demand, so a project that has never fetched
75
+ // would otherwise show an empty catalogue until the user asks for a refresh.
76
+ async function populateHubCache(commands) {
77
+ try {
78
+ await commands.fetchCmd.ensureModuleListExists();
79
+ }
80
+ catch (error) {
81
+ // An unreachable hub must not fail listing the hubs we already know about.
82
+ console.warn('Failed to populate the hub cache', error);
83
+ }
84
+ }
66
85
  export async function getImportableModules(commands) {
86
+ await populateHubCache(commands);
67
87
  return commands.showCmd.showImportableModules(false, true);
68
88
  }
69
89
  export async function importModule(commands, source) {
70
90
  await commands.importCmd.importModule(source);
71
91
  }
92
+ export async function getHubs(commands) {
93
+ await populateHubCache(commands);
94
+ const hubs = await commands.showCmd.showHubDetails();
95
+ const importedModules = new Set((await commands.showCmd.showModules()).map((mod) => mod.name));
96
+ return hubs.map((hub) => ({
97
+ location: hub.location,
98
+ displayName: hub.displayName,
99
+ description: hub.description,
100
+ modules: hub.modules.map((mod) => ({
101
+ name: mod.name,
102
+ displayName: mod.displayName,
103
+ location: mod.location,
104
+ imported: importedModules.has(mod.name),
105
+ })),
106
+ }));
107
+ }
108
+ export async function addHub(commands, location) {
109
+ await commands.createCmd.addHubLocation(location);
110
+ // The hub is configured even when it cannot be reached right now; its
111
+ // modules appear once a later refresh succeeds.
112
+ return commands.fetchCmd.fetchHubs(true);
113
+ }
114
+ export async function removeHub(commands, location) {
115
+ await commands.removeCmd.remove('hub', location);
116
+ }
117
+ export async function fetchHubs(commands) {
118
+ return commands.fetchCmd.fetchHubs(true);
119
+ }
120
+ export async function cleanProject(commands, dryRun) {
121
+ return commands.cleanCmd.clean(dryRun);
122
+ }
72
123
  //# sourceMappingURL=service.js.map
@@ -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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"}
@@ -12,4 +12,4 @@
12
12
  */
13
13
  import { Hono } from 'hono';
14
14
  import type { ProjectRegistry } from '../../project-registry.js';
15
- export declare function createProjectsRouter(registry: ProjectRegistry): Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
15
+ export declare function createProjectsRouter(registry: ProjectRegistry, multiProjectRoot?: string): Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
@@ -11,9 +11,12 @@
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 { requireRole } from '../../middleware/auth.js';
14
+ import { zValidator } from '../../middleware/zvalidator.js';
15
+ import { requireRole, getCurrentUser } from '../../middleware/auth.js';
15
16
  import { UserRole } from '../../types.js';
16
- export function createProjectsRouter(registry) {
17
+ import { createProjectSchema, cloneProjectSchema } from './schema.js';
18
+ import * as projectsService from './service.js';
19
+ export function createProjectsRouter(registry, multiProjectRoot) {
17
20
  const router = new Hono();
18
21
  /**
19
22
  * @swagger
@@ -28,7 +31,67 @@ export function createProjectsRouter(registry) {
28
31
  * description: Unauthorized
29
32
  */
30
33
  router.get('/', requireRole(UserRole.Reader), (c) => {
31
- return c.json(registry.list());
34
+ return c.json({
35
+ projects: registry.list(),
36
+ canCreateProjects: !!multiProjectRoot,
37
+ });
38
+ });
39
+ /**
40
+ * @swagger
41
+ * /api/projects:
42
+ * post:
43
+ * summary: Create a new project
44
+ * description: Creates a new project on disk, initializes git, adds default hub
45
+ */
46
+ router.post('/', requireRole(UserRole.Editor), zValidator('json', createProjectSchema), async (c) => {
47
+ if (!multiProjectRoot) {
48
+ return c.json({ error: 'Project creation is not available in single-project mode' }, 403);
49
+ }
50
+ const params = c.req.valid('json');
51
+ if (registry.has(params.prefix)) {
52
+ return c.json({ error: `Project with prefix '${params.prefix}' already exists` }, 409);
53
+ }
54
+ try {
55
+ const result = await projectsService.createProject(registry, multiProjectRoot, params, getCurrentUser(c));
56
+ return c.json(result, 201);
57
+ }
58
+ catch (error) {
59
+ return c.json({
60
+ error: error instanceof Error
61
+ ? error.message
62
+ : 'Failed to create project',
63
+ }, 500);
64
+ }
65
+ });
66
+ /**
67
+ * @swagger
68
+ * /api/projects/clone:
69
+ * post:
70
+ * summary: Clone a project from a git repository
71
+ * description: Clones a git repo and registers discovered projects
72
+ */
73
+ router.post('/clone', requireRole(UserRole.Editor), zValidator('json', cloneProjectSchema), async (c) => {
74
+ if (!multiProjectRoot) {
75
+ return c.json({ error: 'Project cloning is not available in single-project mode' }, 403);
76
+ }
77
+ const { url } = c.req.valid('json');
78
+ try {
79
+ const result = await projectsService.cloneProject(registry, multiProjectRoot, url);
80
+ if (result.projects.length === 0) {
81
+ return c.json({
82
+ error: 'All projects in the cloned repository already exist',
83
+ skippedDuplicates: result.skippedDuplicates,
84
+ }, 409);
85
+ }
86
+ return c.json(result, 201);
87
+ }
88
+ catch (error) {
89
+ return c.json({
90
+ error: error instanceof Error
91
+ ? error.message
92
+ : 'Failed to clone repository',
93
+ }, 500);
94
+ }
32
95
  });
33
96
  return router;
34
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/projects/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAEF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,UAAU,oBAAoB,CAAC,QAAyB;IAC5D,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;IAE1B;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QAClD,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/projects/index.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 createProjectSchema: z.ZodObject<{
15
+ name: z.ZodString;
16
+ prefix: z.ZodString;
17
+ category: z.ZodDefault<z.ZodOptional<z.ZodString>>;
18
+ description: z.ZodDefault<z.ZodOptional<z.ZodString>>;
19
+ }, z.core.$strip>;
20
+ export declare const cloneProjectSchema: z.ZodObject<{
21
+ url: z.ZodString;
22
+ }, z.core.$strip>;
@@ -0,0 +1,40 @@
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
+ import { Validate } from '@cyberismo/data-handler';
15
+ export const createProjectSchema = z.object({
16
+ name: z
17
+ .string()
18
+ .min(1, 'Project name is required')
19
+ .refine((s) => Validate.isValidProjectName(s), {
20
+ message: 'Invalid project name',
21
+ }),
22
+ prefix: z
23
+ .string()
24
+ .min(3, 'Prefix must be at least 3 characters')
25
+ .max(10, 'Prefix must be at most 10 characters')
26
+ .refine((s) => Validate.validatePrefix(s), {
27
+ message: 'Prefix must contain only lowercase letters',
28
+ }),
29
+ category: z.string().optional().default(''),
30
+ description: z.string().optional().default(''),
31
+ });
32
+ export const cloneProjectSchema = z.object({
33
+ url: z
34
+ .string()
35
+ .min(1, 'Repository URL is required')
36
+ .refine((s) => s.startsWith('https://') || s.startsWith('git@'), {
37
+ message: 'URL must start with https:// or git@',
38
+ }),
39
+ });
40
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/domain/projects/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAEF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,0BAA0B,CAAC;SAClC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE;QAC7C,OAAO,EAAE,sBAAsB;KAChC,CAAC;IACJ,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,sCAAsC,CAAC;SAC9C,GAAG,CAAC,EAAE,EAAE,sCAAsC,CAAC;SAC/C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;QACzC,OAAO,EAAE,4CAA4C;KACtD,CAAC;IACJ,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CAC/C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,4BAA4B,CAAC;SACpC,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,sCAAsC;KAChD,CAAC;CACL,CAAC,CAAC"}
@@ -0,0 +1,37 @@
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 { ProjectRegistry } from '../../project-registry.js';
14
+ export interface CreateProjectParams {
15
+ name: string;
16
+ prefix: string;
17
+ category?: string;
18
+ description?: string;
19
+ }
20
+ export interface CreateProjectResult {
21
+ prefix: string;
22
+ name: string;
23
+ category?: string;
24
+ description?: string;
25
+ }
26
+ export declare function createProject(registry: ProjectRegistry, rootPath: string, params: CreateProjectParams, user?: {
27
+ name: string;
28
+ email: string;
29
+ } | null): Promise<CreateProjectResult>;
30
+ export interface CloneProjectResult {
31
+ projects: {
32
+ prefix: string;
33
+ name: string;
34
+ }[];
35
+ skippedDuplicates?: string[];
36
+ }
37
+ export declare function cloneProject(registry: ProjectRegistry, rootPath: string, url: string): Promise<CloneProjectResult>;
@@ -0,0 +1,53 @@
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 { join } from 'node:path';
14
+ import { CommandManager, Create, scanForProjects, } from '@cyberismo/data-handler';
15
+ export async function createProject(registry, rootPath, params, user) {
16
+ const { name, prefix, category, description } = params;
17
+ const projectPath = join(rootPath, prefix);
18
+ const commands = await CommandManager.createProjectWithDefaults(projectPath, params, {
19
+ ...registry.options,
20
+ gitUser: user ?? undefined,
21
+ });
22
+ registry.add(prefix, commands);
23
+ return {
24
+ prefix,
25
+ name,
26
+ category: category || undefined,
27
+ description: description || undefined,
28
+ };
29
+ }
30
+ export async function cloneProject(registry, rootPath, url) {
31
+ const clonedPath = await Create.cloneProject(url, rootPath);
32
+ const scanned = await scanForProjects(clonedPath);
33
+ const registered = [];
34
+ const skippedDuplicates = [];
35
+ for (const project of scanned) {
36
+ if (registry.has(project.prefix)) {
37
+ skippedDuplicates.push(project.prefix);
38
+ continue;
39
+ }
40
+ const commands = new CommandManager(project.path, registry.options);
41
+ await commands.initialize();
42
+ registry.add(project.prefix, commands);
43
+ registered.push({
44
+ prefix: project.prefix,
45
+ name: project.name,
46
+ });
47
+ }
48
+ return {
49
+ projects: registered,
50
+ ...(skippedDuplicates.length > 0 && { skippedDuplicates }),
51
+ };
52
+ }
53
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/domain/projects/service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAEF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,cAAc,EACd,MAAM,EACN,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAiBjC,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAyB,EACzB,QAAgB,EAChB,MAA2B,EAC3B,IAA6C;IAE7C,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IACvD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE3C,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,yBAAyB,CAC7D,WAAW,EACX,MAAM,EACN;QACE,GAAG,QAAQ,CAAC,OAAO;QACnB,OAAO,EAAE,IAAI,IAAI,SAAS;KAC3B,CACF,CAAC;IAEF,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAE/B,OAAO;QACL,MAAM;QACN,IAAI;QACJ,QAAQ,EAAE,QAAQ,IAAI,SAAS;QAC/B,WAAW,EAAE,WAAW,IAAI,SAAS;KACtC,CAAC;AACJ,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAyB,EACzB,QAAgB,EAChB,GAAW;IAEX,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;IAElD,MAAM,UAAU,GAAuC,EAAE,CAAC;IAC1D,MAAM,iBAAiB,GAAa,EAAE,CAAC;IAEvC,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACvC,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpE,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC5B,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACvC,UAAU,CAAC,IAAI,CAAC;YACd,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,UAAU;QACpB,GAAG,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC;KAC3D,CAAC;AACJ,CAAC"}
@@ -174,7 +174,7 @@ router.get('/:prefix/workflows/:identifier/graph', requireRole(UserRole.Reader),
174
174
  throw error;
175
175
  }
176
176
  });
177
- router.post('/:prefix/:type/:identifier/operation', requireRole(UserRole.Admin), zValidator('param', resourceParamsSchema), zValidator('json', updateOperationBodySchema), async (c) => {
177
+ router.post('/:prefix/:type/:identifier/operation', requireRole(UserRole.Admin, [UserRole.Connector]), zValidator('param', resourceParamsSchema), zValidator('json', updateOperationBodySchema), async (c) => {
178
178
  const commands = c.get('commands');
179
179
  const resourceParams = c.req.valid('param');
180
180
  const { updateKey, operation } = c.req.valid('json');
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/resources/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/resources/index.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ export declare const resourceFileParamsSchema: z.ZodObject<{
18
18
  graphViews: "graphViews";
19
19
  linkTypes: "linkTypes";
20
20
  reports: "reports";
21
+ skills: "skills";
21
22
  templates: "templates";
22
23
  workflows: "workflows";
23
24
  }>;
@@ -29,12 +30,14 @@ export declare const validateResourceParamsSchema: z.ZodObject<{
29
30
  prefix: z.ZodString;
30
31
  identifier: z.ZodString;
31
32
  type: z.ZodEnum<{
33
+ calculations: "calculations";
32
34
  cardTypes: "cardTypes";
33
35
  fieldTypes: "fieldTypes";
34
36
  graphModels: "graphModels";
35
37
  graphViews: "graphViews";
36
38
  linkTypes: "linkTypes";
37
39
  reports: "reports";
40
+ skills: "skills";
38
41
  templates: "templates";
39
42
  workflows: "workflows";
40
43
  }>;
@@ -52,7 +55,7 @@ export declare const updateOperationBodySchema: z.ZodObject<{
52
55
  target: z.ZodUnknown;
53
56
  }, z.core.$strip>, z.ZodObject<{
54
57
  name: z.ZodLiteral<"change">;
55
- target: z.ZodUnknown;
58
+ target: z.ZodOptional<z.ZodUnknown>;
56
59
  to: z.ZodUnknown;
57
60
  mappingTable: z.ZodOptional<z.ZodObject<{
58
61
  stateMapping: z.ZodRecord<z.ZodString, z.ZodString>;
@@ -11,7 +11,7 @@ export const resourceFileParamsSchema = resourceParamsSchema.extend({
11
11
  file: z.string(),
12
12
  });
13
13
  export const validateResourceParamsSchema = resourceParamsSchema.extend({
14
- type: z.enum(resourceTypes.filter((type) => type !== 'calculations')),
14
+ type: z.enum(resourceTypes),
15
15
  });
16
16
  const updateKey = z.union([
17
17
  z.object({
@@ -34,7 +34,9 @@ export const updateOperationBodySchema = z.object({
34
34
  }),
35
35
  z.object({
36
36
  name: z.literal('change'),
37
- target: z.unknown(),
37
+ // The old value; scalar changes have none, and clients drop the key
38
+ // entirely when it is undefined (JSON.stringify omits undefined).
39
+ target: z.unknown().optional(),
38
40
  to: z.unknown(),
39
41
  mappingTable: z
40
42
  .object({
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/domain/resources/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GACd,MAAM,mCAAmC,CAAC;AAE3C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,UAAU,EAAE,gBAAgB;CAC7B,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,wBAAwB,GAAG,oBAAoB,CAAC,MAAM,CAAC;IAClE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,4BAA4B,GAAG,oBAAoB,CAAC,MAAM,CAAC;IACtE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;CACtE,CAAC,CAAC;AAMH,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;IACxB,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QACzB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;KACnB,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,EAAE;YAC7C,OAAO,EAAE,8BAA8B;SACxC,CAAC;KACH,CAAC;CACH,CAAC,CAAC;AAEH,yDAAyD;AACzD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,SAAS;IACT,SAAS,EAAE,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;QACtC,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;YACtB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;SACpB,CAAC;QACF,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACzB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;YACnB,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE;YACf,YAAY,EAAE,CAAC;iBACZ,MAAM,CAAC;gBACN,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;aAC/C,CAAC;iBACD,QAAQ,EAAE;SACd,CAAC;QACF,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACzB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;YACnB,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SACzC,CAAC;QACF,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;YACvB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;YACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;SACrB,CAAC;KACH,CAAC;CACH,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/domain/resources/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GACd,MAAM,mCAAmC,CAAC;AAE3C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,UAAU,EAAE,gBAAgB;CAC7B,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,wBAAwB,GAAG,oBAAoB,CAAC,MAAM,CAAC;IAClE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,4BAA4B,GAAG,oBAAoB,CAAC,MAAM,CAAC;IACtE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;CAC5B,CAAC,CAAC;AAMH,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;IACxB,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QACzB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;KACnB,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,EAAE;YAC7C,OAAO,EAAE,8BAA8B;SACxC,CAAC;KACH,CAAC;CACH,CAAC,CAAC;AAEH,yDAAyD;AACzD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,SAAS;IACT,SAAS,EAAE,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;QACtC,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;YACtB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;SACpB,CAAC;QACF,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACzB,oEAAoE;YACpE,kEAAkE;YAClE,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;YAC9B,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE;YACf,YAAY,EAAE,CAAC;iBACZ,MAAM,CAAC;gBACN,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;aAC/C,CAAC;iBACD,QAAQ,EAAE;SACd,CAAC;QACF,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACzB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;YACnB,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SACzC,CAAC;QACF,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;YACvB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;YACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;SACrB,CAAC;KACH,CAAC;CACH,CAAC,CAAC"}
@@ -52,6 +52,6 @@ export declare function listWorkflowGraphParams(commands: CommandManager): Promi
52
52
  export declare function getWorkflowGraph(commands: CommandManager, workflowName: string, cardKey?: string): Promise<string>;
53
53
  /**
54
54
  * Perform an updateOperation on a resource key.
55
- * This delegates to data-handler Update.applyResourceOperation.
55
+ * This delegates to the data-handler mutation engine.
56
56
  */
57
57
  export declare function updateResourceWithOperation(commands: CommandManager, resource: ResourceParams, body: UpdateOperationBody): Promise<void>;
@@ -343,10 +343,15 @@ export async function getWorkflowGraph(commands, workflowName, cardKey) {
343
343
  }
344
344
  /**
345
345
  * Perform an updateOperation on a resource key.
346
- * This delegates to data-handler Update.applyResourceOperation.
346
+ * This delegates to the data-handler mutation engine.
347
347
  */
348
348
  export async function updateResourceWithOperation(commands, resource, body) {
349
349
  const { updateKey, operation } = body;
350
- await commands.atomic(() => commands.updateCmd.applyResourceOperation(resourceNameToString(resource), updateKey, operation), `Update ${resource.type} ${resource.identifier}`);
350
+ await commands.atomic(() => commands.updateCmd.apply({
351
+ kind: 'edit',
352
+ target: resource,
353
+ updateKey,
354
+ operation,
355
+ }), `Update ${resource.type} ${resource.identifier}`);
351
356
  }
352
357
  //# sourceMappingURL=service.js.map