@cyberismo/backend 1.2.0 → 1.3.1

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 (472) hide show
  1. package/dist/app.d.ts +5 -15
  2. package/dist/app.js +31 -44
  3. package/dist/app.js.map +1 -1
  4. package/dist/auth/index.d.ts +0 -12
  5. package/dist/auth/index.js +2 -12
  6. package/dist/auth/index.js.map +1 -1
  7. package/dist/auth/keycloak.d.ts +0 -12
  8. package/dist/auth/keycloak.js +2 -12
  9. package/dist/auth/keycloak.js.map +1 -1
  10. package/dist/auth/mock.d.ts +0 -12
  11. package/dist/auth/mock.js +2 -12
  12. package/dist/auth/mock.js.map +1 -1
  13. package/dist/auth/types.d.ts +0 -12
  14. package/dist/auth/types.js +2 -12
  15. package/dist/auth/types.js.map +1 -1
  16. package/dist/common/errors.d.ts +12 -0
  17. package/dist/common/errors.js +31 -0
  18. package/dist/common/errors.js.map +1 -0
  19. package/dist/common/validationSchemas.d.ts +0 -12
  20. package/dist/common/validationSchemas.js +2 -12
  21. package/dist/common/validationSchemas.js.map +1 -1
  22. package/dist/domain/auth/index.d.ts +0 -12
  23. package/dist/domain/auth/index.js +2 -12
  24. package/dist/domain/auth/index.js.map +1 -1
  25. package/dist/domain/calculations/index.d.ts +0 -12
  26. package/dist/domain/calculations/index.js +4 -14
  27. package/dist/domain/calculations/index.js.map +1 -1
  28. package/dist/domain/calculations/schema.d.ts +0 -12
  29. package/dist/domain/calculations/schema.js +2 -12
  30. package/dist/domain/calculations/schema.js.map +1 -1
  31. package/dist/domain/calculations/service.d.ts +2 -14
  32. package/dist/domain/calculations/service.js +7 -17
  33. package/dist/domain/calculations/service.js.map +1 -1
  34. package/dist/domain/cardTypes/index.d.ts +0 -12
  35. package/dist/domain/cardTypes/index.js +10 -20
  36. package/dist/domain/cardTypes/index.js.map +1 -1
  37. package/dist/domain/cardTypes/schema.d.ts +0 -12
  38. package/dist/domain/cardTypes/schema.js +2 -12
  39. package/dist/domain/cardTypes/schema.js.map +1 -1
  40. package/dist/domain/cardTypes/service.d.ts +4 -16
  41. package/dist/domain/cardTypes/service.js +17 -25
  42. package/dist/domain/cardTypes/service.js.map +1 -1
  43. package/dist/domain/cards/index.d.ts +0 -12
  44. package/dist/domain/cards/index.js +120 -102
  45. package/dist/domain/cards/index.js.map +1 -1
  46. package/dist/domain/cards/lib.d.ts +6 -23
  47. package/dist/domain/cards/lib.js +7 -126
  48. package/dist/domain/cards/lib.js.map +1 -1
  49. package/dist/domain/cards/mermaid.d.ts +8 -0
  50. package/dist/domain/cards/mermaid.js +23 -0
  51. package/dist/domain/cards/mermaid.js.map +1 -0
  52. package/dist/domain/cards/schema.d.ts +6 -12
  53. package/dist/domain/cards/schema.js +6 -12
  54. package/dist/domain/cards/schema.js.map +1 -1
  55. package/dist/domain/cards/service.d.ts +28 -32
  56. package/dist/domain/cards/service.js +119 -83
  57. package/dist/domain/cards/service.js.map +1 -1
  58. package/dist/domain/connectors/index.d.ts +0 -12
  59. package/dist/domain/connectors/index.js +4 -14
  60. package/dist/domain/connectors/index.js.map +1 -1
  61. package/dist/domain/connectors/service.d.ts +2 -14
  62. package/dist/domain/connectors/service.js +4 -14
  63. package/dist/domain/connectors/service.js.map +1 -1
  64. package/dist/domain/events/events-by-project.d.ts +19 -0
  65. package/dist/domain/events/events-by-project.js +57 -0
  66. package/dist/domain/events/events-by-project.js.map +1 -0
  67. package/dist/domain/events/index.d.ts +0 -12
  68. package/dist/domain/events/index.js +3 -13
  69. package/dist/domain/events/index.js.map +1 -1
  70. package/dist/domain/events/lifetime.d.ts +0 -12
  71. package/dist/domain/events/lifetime.js +2 -12
  72. package/dist/domain/events/lifetime.js.map +1 -1
  73. package/dist/domain/events/project-events.d.ts +10 -14
  74. package/dist/domain/events/project-events.js +22 -18
  75. package/dist/domain/events/project-events.js.map +1 -1
  76. package/dist/domain/events/schema.d.ts +0 -12
  77. package/dist/domain/events/schema.js +2 -12
  78. package/dist/domain/events/schema.js.map +1 -1
  79. package/dist/domain/fieldTypes/index.d.ts +0 -12
  80. package/dist/domain/fieldTypes/index.js +6 -16
  81. package/dist/domain/fieldTypes/index.js.map +1 -1
  82. package/dist/domain/fieldTypes/schema.d.ts +0 -12
  83. package/dist/domain/fieldTypes/schema.js +2 -12
  84. package/dist/domain/fieldTypes/schema.js.map +1 -1
  85. package/dist/domain/fieldTypes/service.d.ts +4 -16
  86. package/dist/domain/fieldTypes/service.js +7 -17
  87. package/dist/domain/fieldTypes/service.js.map +1 -1
  88. package/dist/domain/graphModels/index.d.ts +0 -12
  89. package/dist/domain/graphModels/index.js +4 -14
  90. package/dist/domain/graphModels/index.js.map +1 -1
  91. package/dist/domain/graphModels/schema.d.ts +0 -12
  92. package/dist/domain/graphModels/schema.js +2 -12
  93. package/dist/domain/graphModels/schema.js.map +1 -1
  94. package/dist/domain/graphModels/service.d.ts +2 -14
  95. package/dist/domain/graphModels/service.js +4 -14
  96. package/dist/domain/graphModels/service.js.map +1 -1
  97. package/dist/domain/graphViews/index.d.ts +0 -12
  98. package/dist/domain/graphViews/index.js +4 -14
  99. package/dist/domain/graphViews/index.js.map +1 -1
  100. package/dist/domain/graphViews/schema.js +2 -0
  101. package/dist/domain/graphViews/schema.js.map +1 -1
  102. package/dist/domain/graphViews/service.d.ts +2 -14
  103. package/dist/domain/graphViews/service.js +4 -14
  104. package/dist/domain/graphViews/service.js.map +1 -1
  105. package/dist/domain/labels/index.d.ts +0 -12
  106. package/dist/domain/labels/index.js +4 -14
  107. package/dist/domain/labels/index.js.map +1 -1
  108. package/dist/domain/labels/service.d.ts +3 -15
  109. package/dist/domain/labels/service.js +5 -15
  110. package/dist/domain/labels/service.js.map +1 -1
  111. package/dist/domain/linkTypes/index.d.ts +0 -12
  112. package/dist/domain/linkTypes/index.js +6 -16
  113. package/dist/domain/linkTypes/index.js.map +1 -1
  114. package/dist/domain/linkTypes/schema.d.ts +0 -12
  115. package/dist/domain/linkTypes/schema.js +2 -12
  116. package/dist/domain/linkTypes/schema.js.map +1 -1
  117. package/dist/domain/linkTypes/service.d.ts +3 -15
  118. package/dist/domain/linkTypes/service.js +7 -17
  119. package/dist/domain/linkTypes/service.js.map +1 -1
  120. package/dist/domain/logicPrograms/index.d.ts +0 -12
  121. package/dist/domain/logicPrograms/index.js +4 -14
  122. package/dist/domain/logicPrograms/index.js.map +1 -1
  123. package/dist/domain/logicPrograms/service.d.ts +2 -14
  124. package/dist/domain/logicPrograms/service.js +5 -3
  125. package/dist/domain/logicPrograms/service.js.map +1 -1
  126. package/dist/domain/mcp/index.d.ts +3 -15
  127. package/dist/domain/mcp/index.js +27 -21
  128. package/dist/domain/mcp/index.js.map +1 -1
  129. package/dist/domain/project/index.d.ts +0 -12
  130. package/dist/domain/project/index.js +30 -40
  131. package/dist/domain/project/index.js.map +1 -1
  132. package/dist/domain/project/schema.d.ts +0 -12
  133. package/dist/domain/project/schema.js +2 -12
  134. package/dist/domain/project/schema.js.map +1 -1
  135. package/dist/domain/project/service.d.ts +16 -28
  136. package/dist/domain/project/service.js +48 -58
  137. package/dist/domain/project/service.js.map +1 -1
  138. package/dist/domain/projects/index.d.ts +2 -14
  139. package/dist/domain/projects/index.js +19 -36
  140. package/dist/domain/projects/index.js.map +1 -1
  141. package/dist/domain/projects/schema.d.ts +1 -12
  142. package/dist/domain/projects/schema.js +3 -12
  143. package/dist/domain/projects/schema.js.map +1 -1
  144. package/dist/domain/projects/service.d.ts +9 -35
  145. package/dist/domain/projects/service.js +12 -48
  146. package/dist/domain/projects/service.js.map +1 -1
  147. package/dist/domain/reports/index.d.ts +0 -12
  148. package/dist/domain/reports/index.js +4 -14
  149. package/dist/domain/reports/index.js.map +1 -1
  150. package/dist/domain/reports/schema.d.ts +0 -12
  151. package/dist/domain/reports/schema.js +2 -12
  152. package/dist/domain/reports/schema.js.map +1 -1
  153. package/dist/domain/reports/service.d.ts +2 -14
  154. package/dist/domain/reports/service.js +4 -14
  155. package/dist/domain/reports/service.js.map +1 -1
  156. package/dist/domain/resources/index.d.ts +0 -12
  157. package/dist/domain/resources/index.js +19 -26
  158. package/dist/domain/resources/index.js.map +1 -1
  159. package/dist/domain/resources/schema.js +2 -0
  160. package/dist/domain/resources/schema.js.map +1 -1
  161. package/dist/domain/resources/service.d.ts +11 -23
  162. package/dist/domain/resources/service.js +48 -59
  163. package/dist/domain/resources/service.js.map +1 -1
  164. package/dist/domain/skills/index.d.ts +0 -12
  165. package/dist/domain/skills/index.js +4 -14
  166. package/dist/domain/skills/index.js.map +1 -1
  167. package/dist/domain/skills/schema.d.ts +0 -12
  168. package/dist/domain/skills/schema.js +2 -12
  169. package/dist/domain/skills/schema.js.map +1 -1
  170. package/dist/domain/skills/service.d.ts +2 -14
  171. package/dist/domain/skills/service.js +4 -14
  172. package/dist/domain/skills/service.js.map +1 -1
  173. package/dist/domain/templates/index.d.ts +0 -12
  174. package/dist/domain/templates/index.js +8 -18
  175. package/dist/domain/templates/index.js.map +1 -1
  176. package/dist/domain/templates/schema.d.ts +0 -12
  177. package/dist/domain/templates/schema.js +2 -12
  178. package/dist/domain/templates/schema.js.map +1 -1
  179. package/dist/domain/templates/service.d.ts +4 -16
  180. package/dist/domain/templates/service.js +8 -18
  181. package/dist/domain/templates/service.js.map +1 -1
  182. package/dist/domain/tree/index.d.ts +0 -12
  183. package/dist/domain/tree/index.js +4 -14
  184. package/dist/domain/tree/index.js.map +1 -1
  185. package/dist/domain/tree/service.d.ts +3 -15
  186. package/dist/domain/tree/service.js +8 -15
  187. package/dist/domain/tree/service.js.map +1 -1
  188. package/dist/domain/workflows/index.d.ts +0 -12
  189. package/dist/domain/workflows/index.js +4 -14
  190. package/dist/domain/workflows/index.js.map +1 -1
  191. package/dist/domain/workflows/schema.d.ts +0 -12
  192. package/dist/domain/workflows/schema.js +2 -12
  193. package/dist/domain/workflows/schema.js.map +1 -1
  194. package/dist/domain/workflows/service.d.ts +2 -14
  195. package/dist/domain/workflows/service.js +4 -14
  196. package/dist/domain/workflows/service.js.map +1 -1
  197. package/dist/export.d.ts +6 -20
  198. package/dist/export.js +19 -29
  199. package/dist/export.js.map +1 -1
  200. package/dist/frontend.d.ts +22 -0
  201. package/dist/frontend.js +51 -0
  202. package/dist/frontend.js.map +1 -0
  203. package/dist/index.d.ts +3 -5
  204. package/dist/index.js +22 -48
  205. package/dist/index.js.map +1 -1
  206. package/dist/main.js +19 -30
  207. package/dist/main.js.map +1 -1
  208. package/dist/middleware/auth.d.ts +0 -12
  209. package/dist/middleware/auth.js +2 -12
  210. package/dist/middleware/auth.js.map +1 -1
  211. package/dist/middleware/commandManager.d.ts +15 -20
  212. package/dist/middleware/commandManager.js +27 -36
  213. package/dist/middleware/commandManager.js.map +1 -1
  214. package/dist/middleware/tree.js +2 -0
  215. package/dist/middleware/tree.js.map +1 -1
  216. package/dist/middleware/zvalidator.js +2 -0
  217. package/dist/middleware/zvalidator.js.map +1 -1
  218. package/dist/overlay.d.ts +4 -16
  219. package/dist/overlay.js +22 -17
  220. package/dist/overlay.js.map +1 -1
  221. package/dist/public/THIRD-PARTY.txt +1397 -286
  222. package/dist/public/assets/__vite-browser-external-DGgK3jMU.js +1 -0
  223. package/dist/public/assets/abnfDiagram-WEYOIA3C-B3qq7PKv.js +1 -0
  224. package/dist/public/assets/architecture-WOLXFQ4H-Bzau2LI0.js +1 -0
  225. package/dist/public/assets/architectureDiagram-ZHVYKT53-Bg0cUwdb.js +36 -0
  226. package/dist/public/assets/blockDiagram-RJAE7QA3-0RJB-ra-.js +140 -0
  227. package/dist/public/assets/c4Diagram-XDPPPE54-BzoQcLvf.js +38 -0
  228. package/dist/public/assets/channel-6BNdw4Ax.js +1 -0
  229. package/dist/public/assets/{chunk-SVP7TREG-CIQMl7hl.js → chunk-2E7WHVMD-6aqPk-Hk.js} +4 -4
  230. package/dist/public/assets/chunk-4EMNKR2T-vovNSAaE.js +1 -0
  231. package/dist/public/assets/{chunk-F27PBJKO-tDfs6zeO.js → chunk-55XCU76K-DXkKnt2y.js} +1 -1
  232. package/dist/public/assets/chunk-7S6XSTFO-B9bfO0l3.js +2 -0
  233. package/dist/public/assets/chunk-AQDTSKZB-ilLy_cYP.js +72 -0
  234. package/dist/public/assets/chunk-DSNLSHJZ-DAudglXu.js +129 -0
  235. package/dist/public/assets/chunk-DUW6YSOI-Dgx8z5s3.js +1 -0
  236. package/dist/public/assets/chunk-HAGFOTED-CSKFgs6b.js +62 -0
  237. package/dist/public/assets/chunk-HNE4Q36P-Cu5gPBVk.js +1 -0
  238. package/dist/public/assets/chunk-J5ZVWO5B-oDCd-gWO.js +1 -0
  239. package/dist/public/assets/chunk-NGNAAXSQ-DI_UYJZ4.js +136 -0
  240. package/dist/public/assets/chunk-NQOKRVIF-Bpcvhq1n.js +213 -0
  241. package/dist/public/assets/chunk-UHW7PFBP-BDjvOaTH.js +1 -0
  242. package/dist/public/assets/chunk-VQ5W62QI-DHTcO93W.js +1 -0
  243. package/dist/public/assets/chunk-WQQL4CDK-H6nAhuck.js +10 -0
  244. package/dist/public/assets/{chunk-XXDRQBXY-B7bWyHjt.js → chunk-XXDRQBXY-BUghdEVl.js} +1 -1
  245. package/dist/public/assets/chunk-YZO67HFG-D13E0_Yh.js +1 -0
  246. package/dist/public/assets/chunk-ZAUX2LTX-Dp5y-2wt.js +1 -0
  247. package/dist/public/assets/chunk-ZCHMQSOR-RJjlln1D.js +2 -0
  248. package/dist/public/assets/classDiagram-v2-4MYWR3UA-CAqiFCSv.js +217 -0
  249. package/dist/public/assets/cose-bilkent-JH36ORCC-C_VOHzoP.js +1 -0
  250. package/dist/public/assets/cynefin-EF2NZ3EQ-Dyk4ZPjK.js +1 -0
  251. package/dist/public/assets/{cynefinDiagram-5FMLGOSQ-_V_nrIhD.js → cynefinDiagram-WF24UDRP-b_Ia8gQX.js} +1 -1
  252. package/dist/public/assets/cytoscape.esm-GRKmfDkD.js +321 -0
  253. package/dist/public/assets/dagre-NK4GIZVX-CH1K1yF8.js +4 -0
  254. package/dist/public/assets/{diagram-VX7I27RA-De_UQv8C.js → diagram-CBK3MWTC-OaKd5avy.js} +13 -13
  255. package/dist/public/assets/diagram-I5XIIV2D-Cmu5z1ad.js +24 -0
  256. package/dist/public/assets/{diagram-S7CK7UJ4-25IjIKyo.js → diagram-ODIL2UCW-Cz1kkDDX.js} +7 -7
  257. package/dist/public/assets/diagram-PFBEJUXE-faMkmqUW.js +3 -0
  258. package/dist/public/assets/{diagram-UQ7AKVKN-C5VvsV7x.js → diagram-RJA3I4VV-nycvfte-.js} +2 -2
  259. package/dist/public/assets/diagram-TYUNFSNR-CjEv5QCm.js +200 -0
  260. package/dist/public/assets/{dist-BDCdLWk4.js → dist-DGs_yUrP.js} +1 -1
  261. package/dist/public/assets/ebnfDiagram-V4P3TTPT-DN-IIxCy.js +1 -0
  262. package/dist/public/assets/elk-QONTBCTQ-Bsam88GP.js +27 -0
  263. package/dist/public/assets/erDiagram-KYQIGQAA-DEU_qqNK.js +99 -0
  264. package/dist/public/assets/eventmodeling-K75KTNOO-Bl6NCM9E.js +1 -0
  265. package/dist/public/assets/flowDiagram-IUGLLWBU-Cl4qZ-36.js +1 -0
  266. package/dist/public/assets/ganttDiagram-R7GPNTJY-BmMd4aGi.js +292 -0
  267. package/dist/public/assets/gitGraph-VSP46ZUC-Q0H2PWek.js +1 -0
  268. package/dist/public/assets/gitGraphDiagram-PDYL7XHY-BlCTBYTj.js +106 -0
  269. package/dist/public/assets/index-CuBJ0hof.css +1 -0
  270. package/dist/public/assets/index-D701BZPh.js +2219 -0
  271. package/dist/public/assets/info-OHQRW6UA-D0TMPJxW.js +1 -0
  272. package/dist/public/assets/infoDiagram-MVDRKAX5-CljbtJXu.js +2 -0
  273. package/dist/public/assets/{ishikawaDiagram-5VMMS53U-KvT4DU1u.js → ishikawaDiagram-HPEHV2GE-_Y3Fr0hu.js} +6 -6
  274. package/dist/public/assets/{journeyDiagram-3NMN7TZE-PhGRkXkq.js → journeyDiagram-BOSHW7O7-Bo55jJ4m.js} +39 -39
  275. package/dist/public/assets/kanban-definition-FNSA4HC5-Cd-10MtF.js +89 -0
  276. package/dist/public/assets/katex-MEuSR36T.js +257 -0
  277. package/dist/public/assets/line-BDmh4sWC.js +1 -0
  278. package/dist/public/assets/linear-Dt7xjMrI.js +1 -0
  279. package/dist/public/assets/mermaid-parser.core-BJ1yyzvV.js +7 -0
  280. package/dist/public/assets/mindmap-definition-6OY57UG3-CRgumPuN.js +98 -0
  281. package/dist/public/assets/packet-JDAUHWVQ-DsTMT3Kw.js +1 -0
  282. package/dist/public/assets/pegDiagram-ECIUJNBX-BEGI5k3m.js +1 -0
  283. package/dist/public/assets/pie-XZMESJXO-COyqzA3N.js +1 -0
  284. package/dist/public/assets/pieDiagram-GNMPY74T-CrLJhZJJ.js +39 -0
  285. package/dist/public/assets/{quadrantDiagram-AXDQQJYC-B9dlNtZl.js → quadrantDiagram-D57K4MC3-Fl7HMHxK.js} +6 -6
  286. package/dist/public/assets/radar-ABXABTNO-DeXHKowk.js +1 -0
  287. package/dist/public/assets/railroad-I3PHUGI6-CUjKUdPz.js +1 -0
  288. package/dist/public/assets/railroad-abnf-LNEFI6M7-B1aEgHE6.js +1 -0
  289. package/dist/public/assets/railroad-ebnf-DWYD2UWJ-DmmI3Voz.js +1 -0
  290. package/dist/public/assets/railroad-peg-JR7BVNR7-BHzi9m7r.js +1 -0
  291. package/dist/public/assets/railroadDiagram-Y72NRBL7-D1oeE5fy.js +1 -0
  292. package/dist/public/assets/requirementDiagram-EQYSW5RA-BJDKK1aS.js +84 -0
  293. package/dist/public/assets/rolldown-runtime-BCiCTKAo.js +1 -0
  294. package/dist/public/assets/{sankeyDiagram-P5KCCOFB-C4rb2pZ9.js → sankeyDiagram-SY24JHO5-C4g0OwZ9.js} +7 -7
  295. package/dist/public/assets/sequenceDiagram-BLEHNHQU-CEvy4P-b.js +169 -0
  296. package/dist/public/assets/src-MPsEqXxq.js +1 -0
  297. package/dist/public/assets/stateDiagram-v2-A6IESKWZ-BFhvw4Gl.js +291 -0
  298. package/dist/public/assets/swimlanes-B3ENRKFQ-BIl_Q-FM.js +1 -0
  299. package/dist/public/assets/swimlanesDiagram-AYQRV4AK-rvDbKEHQ.js +8 -0
  300. package/dist/public/assets/timeline-definition-JXYKGLGB-qAoWTH4N.js +120 -0
  301. package/dist/public/assets/treeView-D4JQ5SDB-vq16JKkJ.js +1 -0
  302. package/dist/public/assets/treemap-SAJKECNS-C0IZTaDk.js +1 -0
  303. package/dist/public/assets/usecaseDiagram-WPOLBNNX-Dq8iz49r.js +328 -0
  304. package/dist/public/assets/vennDiagram-Q3Y3IDCW-Br4JmRjM.js +34 -0
  305. package/dist/public/assets/wardley-7MLQ67FV-CEPlAQ79.js +1 -0
  306. package/dist/public/assets/{wardleyDiagram-VM6X3IG4-BOXpwLCv.js → wardleyDiagram-IVAIDKWA-DURB7Ue6.js} +4 -4
  307. package/dist/public/assets/xychartDiagram-4URNHDU4-BiZywfhy.js +7 -0
  308. package/dist/public/index.html +27 -21
  309. package/dist/public/sbom.cdx.json +1 -1
  310. package/dist/types.d.ts +0 -12
  311. package/dist/types.js +2 -12
  312. package/dist/types.js.map +1 -1
  313. package/dist/utils.d.ts +12 -5
  314. package/dist/utils.js +18 -43
  315. package/dist/utils.js.map +1 -1
  316. package/package.json +13 -12
  317. package/src/app.ts +37 -52
  318. package/src/auth/index.ts +2 -12
  319. package/src/auth/keycloak.ts +2 -12
  320. package/src/auth/mock.ts +2 -12
  321. package/src/auth/types.ts +2 -12
  322. package/src/common/errors.ts +45 -0
  323. package/src/common/validationSchemas.ts +3 -12
  324. package/src/domain/auth/index.ts +2 -12
  325. package/src/domain/calculations/index.ts +4 -14
  326. package/src/domain/calculations/schema.ts +2 -12
  327. package/src/domain/calculations/service.ts +8 -21
  328. package/src/domain/cardTypes/index.ts +10 -20
  329. package/src/domain/cardTypes/schema.ts +3 -12
  330. package/src/domain/cardTypes/service.ts +22 -29
  331. package/src/domain/cards/index.ts +158 -128
  332. package/src/domain/cards/lib.ts +9 -161
  333. package/src/domain/cards/mermaid.ts +25 -0
  334. package/src/domain/cards/schema.ts +8 -12
  335. package/src/domain/cards/service.ts +165 -118
  336. package/src/domain/connectors/index.ts +5 -14
  337. package/src/domain/connectors/service.ts +5 -20
  338. package/src/domain/events/events-by-project.ts +59 -0
  339. package/src/domain/events/index.ts +3 -13
  340. package/src/domain/events/lifetime.ts +2 -12
  341. package/src/domain/events/project-events.ts +30 -18
  342. package/src/domain/events/schema.ts +2 -12
  343. package/src/domain/fieldTypes/index.ts +6 -16
  344. package/src/domain/fieldTypes/schema.ts +3 -12
  345. package/src/domain/fieldTypes/service.ts +9 -21
  346. package/src/domain/graphModels/index.ts +4 -14
  347. package/src/domain/graphModels/schema.ts +3 -12
  348. package/src/domain/graphModels/service.ts +5 -18
  349. package/src/domain/graphViews/index.ts +4 -14
  350. package/src/domain/graphViews/schema.ts +3 -0
  351. package/src/domain/graphViews/service.ts +5 -18
  352. package/src/domain/labels/index.ts +4 -14
  353. package/src/domain/labels/service.ts +6 -16
  354. package/src/domain/linkTypes/index.ts +6 -16
  355. package/src/domain/linkTypes/schema.ts +2 -12
  356. package/src/domain/linkTypes/service.ts +8 -21
  357. package/src/domain/logicPrograms/index.ts +5 -17
  358. package/src/domain/logicPrograms/service.ts +7 -16
  359. package/src/domain/mcp/index.ts +33 -24
  360. package/src/domain/project/index.ts +34 -40
  361. package/src/domain/project/schema.ts +2 -12
  362. package/src/domain/project/service.ts +56 -71
  363. package/src/domain/projects/index.ts +34 -50
  364. package/src/domain/projects/schema.ts +3 -12
  365. package/src/domain/projects/service.ts +18 -88
  366. package/src/domain/reports/index.ts +4 -14
  367. package/src/domain/reports/schema.ts +2 -12
  368. package/src/domain/reports/service.ts +5 -18
  369. package/src/domain/resources/index.ts +19 -30
  370. package/src/domain/resources/schema.ts +3 -0
  371. package/src/domain/resources/service.ts +55 -90
  372. package/src/domain/skills/index.ts +4 -14
  373. package/src/domain/skills/schema.ts +2 -12
  374. package/src/domain/skills/service.ts +5 -15
  375. package/src/domain/templates/index.ts +8 -18
  376. package/src/domain/templates/schema.ts +2 -12
  377. package/src/domain/templates/service.ts +9 -22
  378. package/src/domain/tree/index.ts +4 -14
  379. package/src/domain/tree/service.ts +10 -21
  380. package/src/domain/workflows/index.ts +4 -14
  381. package/src/domain/workflows/schema.ts +2 -12
  382. package/src/domain/workflows/service.ts +5 -18
  383. package/src/export.ts +24 -33
  384. package/src/frontend.ts +58 -0
  385. package/src/index.ts +32 -53
  386. package/src/main.ts +25 -35
  387. package/src/middleware/auth.ts +2 -12
  388. package/src/middleware/commandManager.ts +35 -50
  389. package/src/middleware/tree.ts +3 -0
  390. package/src/middleware/zvalidator.ts +3 -0
  391. package/src/overlay.ts +29 -19
  392. package/src/types.ts +2 -12
  393. package/src/utils.ts +26 -46
  394. package/dist/project-errors.d.ts +0 -18
  395. package/dist/project-errors.js +0 -25
  396. package/dist/project-errors.js.map +0 -1
  397. package/dist/project-registry.d.ts +0 -65
  398. package/dist/project-registry.js +0 -121
  399. package/dist/project-registry.js.map +0 -1
  400. package/dist/public/assets/__vite-browser-external-PaJ7c2l8.js +0 -1
  401. package/dist/public/assets/abnfDiagram-VCTEODGH-DB2dfOGe.js +0 -1
  402. package/dist/public/assets/architecture-7GRP2DOG-2V0X8hxt.js +0 -1
  403. package/dist/public/assets/architectureDiagram-5GKGNRK7-CRhUR2Ul.js +0 -36
  404. package/dist/public/assets/blockDiagram-I7D4REHJ-DJKsYF1v.js +0 -129
  405. package/dist/public/assets/c4Diagram-7LVT6UL2-BTwMzoAF.js +0 -38
  406. package/dist/public/assets/channel-C0JtPpMA.js +0 -1
  407. package/dist/public/assets/chunk-4HAMMTFA-DjjgrBsB.js +0 -62
  408. package/dist/public/assets/chunk-75Z2AOVW-CKqXRGJV.js +0 -2
  409. package/dist/public/assets/chunk-DU6HZSFF-iJGdiRt7.js +0 -127
  410. package/dist/public/assets/chunk-FOHPRMQF-DzxwRta7.js +0 -161
  411. package/dist/public/assets/chunk-GMAD6QVW-DxHVEaGj.js +0 -72
  412. package/dist/public/assets/chunk-GVQU2GXP-AMxD4_Ta.js +0 -1
  413. package/dist/public/assets/chunk-IMKFNOWR-0rz8QrYC.js +0 -231
  414. package/dist/public/assets/chunk-L3NEJ4N5-BK3KAKMe.js +0 -1
  415. package/dist/public/assets/chunk-OSK3NFVY-B8MdrI_M.js +0 -10
  416. package/dist/public/assets/chunk-P2QGCYS3-D3J5AcHg.js +0 -1
  417. package/dist/public/assets/chunk-POPQ4Y6H-CsYg_XkK.js +0 -1
  418. package/dist/public/assets/chunk-PWAF6VOD-D9cdEIZp.js +0 -1
  419. package/dist/public/assets/chunk-SHT3W25Y-1jjokCf3.js +0 -168
  420. package/dist/public/assets/chunk-TICWLB2K-Ccsy2PYz.js +0 -206
  421. package/dist/public/assets/classDiagram-ZZMXUADV-mWyXNAXi.js +0 -1
  422. package/dist/public/assets/classDiagram-v2-VYDZK3BY-mWyXNAXi.js +0 -1
  423. package/dist/public/assets/cose-bilkent-JH36ORCC-DPzc3Pv4.js +0 -1
  424. package/dist/public/assets/cynefin-OW5HDTMX-BIVDCYOU.js +0 -1
  425. package/dist/public/assets/cytoscape.esm-NgwPT4ez.js +0 -321
  426. package/dist/public/assets/dagre-C-rnJpZF.js +0 -1
  427. package/dist/public/assets/dagre-GXQ25YYZ-CJc0wc6f.js +0 -4
  428. package/dist/public/assets/diagram-VSXAHHWV-Dw3rKVL_.js +0 -3
  429. package/dist/public/assets/diagram-Z3DM3KII-Bd-65QQW.js +0 -24
  430. package/dist/public/assets/ebnfDiagram-PWID7BFC-CrxdET5U.js +0 -1
  431. package/dist/public/assets/erDiagram-RLTQ6QDP-BKo0Uyna.js +0 -99
  432. package/dist/public/assets/eventmodeling-NTZA5JFV-DKkAdJZd.js +0 -1
  433. package/dist/public/assets/flowDiagram-HODETNUW-CEE2wjdt.js +0 -1
  434. package/dist/public/assets/ganttDiagram-EL5Y4UJY-BHFn8vk0.js +0 -292
  435. package/dist/public/assets/gitGraph-4MIJSDKK-Bpvnb45u.js +0 -1
  436. package/dist/public/assets/gitGraphDiagram-WWUBYQGX-Bw0EoxBY.js +0 -106
  437. package/dist/public/assets/index-D3HS7YxF.js +0 -2228
  438. package/dist/public/assets/index-Sv3WxZ_8.css +0 -1
  439. package/dist/public/assets/info-A6RAGUB7-BvvG_zrk.js +0 -1
  440. package/dist/public/assets/infoDiagram-27XIBGKW-CtpdJmtL.js +0 -2
  441. package/dist/public/assets/kanban-definition-UXKFOSKX-Oyx5QgRq.js +0 -89
  442. package/dist/public/assets/katex-ZlcWpGUi.js +0 -257
  443. package/dist/public/assets/line-Dr41HTk1.js +0 -1
  444. package/dist/public/assets/linear-DDBi9FwZ.js +0 -1
  445. package/dist/public/assets/mermaid-parser.core-DsIAxDBa.js +0 -7
  446. package/dist/public/assets/mindmap-definition-YA3MSWOX-r8hvd6gP.js +0 -96
  447. package/dist/public/assets/packet-AYTQ26CC-B0EpJ2Sc.js +0 -1
  448. package/dist/public/assets/pegDiagram-XKGWAZYB-DaNkQTQF.js +0 -1
  449. package/dist/public/assets/pie-WAS4IAKB-Dt2zttL9.js +0 -1
  450. package/dist/public/assets/pieDiagram-E7YTZNPT-x0XWEGbd.js +0 -39
  451. package/dist/public/assets/radar-RG4KPBEZ-DjbR4-5l.js +0 -1
  452. package/dist/public/assets/railroad-74A4TZTK-Bk3B5r_R.js +0 -1
  453. package/dist/public/assets/railroad-abnf-HS5TGJTU-DxaWfACD.js +0 -1
  454. package/dist/public/assets/railroad-ebnf-LZEXJU2U-DscxXZO0.js +0 -1
  455. package/dist/public/assets/railroad-peg-WCYAUIDC-BCWzRFzw.js +0 -1
  456. package/dist/public/assets/railroadDiagram-O6MQD6OU-DhwsoX6A.js +0 -1
  457. package/dist/public/assets/requirementDiagram-BXWQKSXE-BiqZ6axf.js +0 -84
  458. package/dist/public/assets/rolldown-runtime-B0Z9INg1.js +0 -1
  459. package/dist/public/assets/sequenceDiagram-WJ2MYXX4-DRKTnGD7.js +0 -162
  460. package/dist/public/assets/src-an_qrnIj.js +0 -1
  461. package/dist/public/assets/stateDiagram-D77RDMKH-xxdybg5Z.js +0 -1
  462. package/dist/public/assets/stateDiagram-v2-MP3YSRHH-CXzmJy_a.js +0 -1
  463. package/dist/public/assets/swimlanes-42K2YHIH-DyGI1gI6.js +0 -1
  464. package/dist/public/assets/swimlanesDiagram-VR7AAH4N-7hqb6VoW.js +0 -8
  465. package/dist/public/assets/timeline-definition-24CTP7MA-C2pIp77Q.js +0 -120
  466. package/dist/public/assets/treeView-Q6P3EWNA-CxRtaaB8.js +0 -1
  467. package/dist/public/assets/treemap-WGGIJYW6-G1IHiwTa.js +0 -1
  468. package/dist/public/assets/vennDiagram-4TSXK5OY-CwimQRR9.js +0 -34
  469. package/dist/public/assets/wardley-WFR3VGLG-DkQ3TjZX.js +0 -1
  470. package/dist/public/assets/xychartDiagram-S5SC5T6Z-ChOPYsHc.js +0 -7
  471. package/src/project-errors.ts +0 -33
  472. package/src/project-registry.ts +0 -161
@@ -1,19 +1,7 @@
1
- /**
2
- Cyberismo
3
- Copyright © Cyberismo Ltd and contributors 2025
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
- */
1
+ // SPDX-FileCopyrightText: Cyberismo Ltd and contributors
2
+ // SPDX-License-Identifier: AGPL-3.0-only
13
3
 
14
4
  import { type Context, Hono } from 'hono';
15
- import type { ContentfulStatusCode } from 'hono/utils/http-status';
16
- import { getCardDetails } from './lib.js';
17
5
  import * as cardService from './service.js';
18
6
  import { isSSGContext, ssgParams } from 'hono/ssg';
19
7
  import type { AppContext } from '../../types.js';
@@ -21,19 +9,17 @@ import { UserRole } from '../../types.js';
21
9
  import { requireRole } from '../../middleware/auth.js';
22
10
  import { zValidator } from '../../middleware/zvalidator.js';
23
11
  import {
12
+ cardKeyParamSchema,
24
13
  createLinkSchema,
25
14
  removeLinkSchema,
26
15
  updateLinkSchema,
27
16
  exportCardPdfSchema,
17
+ cardBatchSchema,
28
18
  type ExportCardPdfRequestBody,
29
19
  } from './schema.js';
30
20
 
31
21
  const router = new Hono();
32
22
 
33
- function notifyCardsUpdated(c: Context, keys: string[]) {
34
- c.get('events').cardsUpdated(keys, c.get('user'));
35
- }
36
-
37
23
  /**
38
24
  * @swagger
39
25
  * /api/cards:
@@ -49,10 +35,10 @@ function notifyCardsUpdated(c: Context, keys: string[]) {
49
35
  * description: project_path not set.
50
36
  */
51
37
  router.get('/', requireRole(UserRole.Reader), async (c) => {
52
- const commands = c.get('commands');
38
+ const ws = c.get('ws');
53
39
 
54
40
  try {
55
- const response = await cardService.getProjectInfo(commands);
41
+ const response = await cardService.getProjectInfo(ws);
56
42
  return c.json(response);
57
43
  } catch (error) {
58
44
  return c.text(
@@ -104,10 +90,10 @@ router.post(
104
90
  requireRole(UserRole.Reader),
105
91
  zValidator('json', exportCardPdfSchema),
106
92
  async (c) => {
107
- const commands = c.get('commands');
93
+ const ws = c.get('ws');
108
94
  const body = (await c.req.json()) as ExportCardPdfRequestBody;
109
95
  try {
110
- const result = await cardService.exportCard(commands, {
96
+ const result = await cardService.exportCard(ws, {
111
97
  cardKey: body.cardKey,
112
98
  title: body.title,
113
99
  name: body.name,
@@ -133,64 +119,140 @@ router.post(
133
119
  },
134
120
  );
135
121
 
122
+ /**
123
+ * @swagger
124
+ * /api/cards/batch:
125
+ * post:
126
+ * summary: Returns the card query results of many cards in one solve.
127
+ * description: Keys the project does not hold are left out of the response. Not served on the static site.
128
+ * requestBody:
129
+ * content:
130
+ * application/json:
131
+ * schema:
132
+ * type: object
133
+ * properties:
134
+ * keys:
135
+ * type: array
136
+ * items:
137
+ * type: string
138
+ * minItems: 1
139
+ * maxItems: 100
140
+ * responses:
141
+ * 200:
142
+ * description: Object of card key to QueryResult<'card'>.
143
+ * 400:
144
+ * description: Missing keys or more than 100 keys.
145
+ */
146
+ router.post(
147
+ '/batch',
148
+ requireRole(UserRole.Reader),
149
+ zValidator('json', cardBatchSchema),
150
+ async (c) => {
151
+ const { keys } = c.req.valid('json');
152
+ return c.json(await cardService.getCardBatch(c.get('ws'), keys));
153
+ },
154
+ );
155
+
156
+ const cardKeyParams = ssgParams(async (c: AppContext) => {
157
+ const ws = c.get('ws');
158
+ const opts = c.get('tree');
159
+ const cards = await cardService.findAllCards(ws, opts);
160
+ return cards.map((card) => ({ key: card.key }));
161
+ });
162
+
136
163
  /**
137
164
  * @swagger
138
165
  * /api/cards/{key}:
139
166
  * get:
140
- * summary: Returns the full content of a specific card including calculations.
141
- * description: The key parameter is the unique identifier ("cardKey") of the card. The response includes the content as asciidoc(editable) and parsed html, which also has macros already injected
167
+ * summary: Returns the card query result of a specific card.
168
+ * description: The key parameter is the unique identifier ("cardKey") of the card. The response holds the calculated card data only; use /content for the rendered content and /source for the stored card.
142
169
  * parameters:
143
170
  * - name: key
144
171
  * in: path
145
172
  * required: true
146
173
  * description: Card key (string)
147
- * - name: raw
148
- * in: query
149
- * required: false
150
- * schema:
151
- * type: boolean
152
- * description: When true, returns the raw card data without triggering calculations
153
174
  * responses:
154
175
  * 200:
155
- * description: Object containing card details. See lib/api/types.ts/CardResponse for the structure.
176
+ * description: The card query result. See QueryResult<'card'> in @cyberismo/model.
156
177
  * 400:
157
- * description: No search key or card not found with given key
178
+ * description: No search key
179
+ * 404:
180
+ * description: Card not found with given key
158
181
  * 500:
159
182
  * description: project_path not set.
160
183
  */
161
184
  router.get(
162
185
  '/:key',
163
186
  requireRole(UserRole.Reader),
164
- ssgParams(async (c: AppContext) => {
165
- const commands = c.get('commands');
166
- const opts = c.get('tree');
167
- const cards = await cardService.findAllCards(commands, opts);
168
- return cards.map((card) => ({ key: card.key }));
169
- }),
187
+ cardKeyParams,
188
+ zValidator('param', cardKeyParamSchema),
170
189
  async (c) => {
171
- const key = c.req.param('key');
172
- if (!key) {
173
- return c.text('No search key', 400);
174
- }
190
+ const { key } = c.req.valid('param');
191
+ return c.json(
192
+ await cardService.getCardData(c.get('ws'), key, isSSGContext(c)),
193
+ );
194
+ },
195
+ );
175
196
 
176
- const raw = c.req.query('raw');
197
+ /**
198
+ * @swagger
199
+ * /api/cards/{key}/content:
200
+ * get:
201
+ * summary: Returns the content of a specific card as AsciiDoc with its macros evaluated.
202
+ * parameters:
203
+ * - name: key
204
+ * in: path
205
+ * required: true
206
+ * description: Card key (string)
207
+ * responses:
208
+ * 200:
209
+ * description: Object with adocContent.
210
+ * 400:
211
+ * description: No search key
212
+ * 404:
213
+ * description: Card not found with given key
214
+ */
215
+ router.get(
216
+ '/:key/content',
217
+ requireRole(UserRole.Reader),
218
+ cardKeyParams,
219
+ zValidator('param', cardKeyParamSchema),
220
+ async (c) => {
221
+ const { key } = c.req.valid('param');
222
+ return c.json(
223
+ await cardService.getCardContent(c.get('ws'), key, isSSGContext(c)),
224
+ );
225
+ },
226
+ );
177
227
 
178
- const result = await getCardDetails(
179
- c.get('commands'),
180
- key,
181
- isSSGContext(c),
182
- raw?.toLowerCase() === 'true' ? true : false,
228
+ /**
229
+ * @swagger
230
+ * /api/cards/{key}/source:
231
+ * get:
232
+ * summary: Returns a specific card as stored, with its unevaluated content, metadata and attachments.
233
+ * parameters:
234
+ * - name: key
235
+ * in: path
236
+ * required: true
237
+ * description: Card key (string)
238
+ * responses:
239
+ * 200:
240
+ * description: The stored card. See Card in @cyberismo/model.
241
+ * 400:
242
+ * description: No search key
243
+ * 404:
244
+ * description: Card not found with given key
245
+ */
246
+ router.get(
247
+ '/:key/source',
248
+ requireRole(UserRole.Reader),
249
+ cardKeyParams,
250
+ zValidator('param', cardKeyParamSchema),
251
+ async (c) => {
252
+ const { key } = c.req.valid('param');
253
+ return c.json(
254
+ await cardService.getCardSource(c.get('ws'), key, isSSGContext(c)),
183
255
  );
184
- if (result.status === 200) {
185
- return c.json(result.data);
186
- } else {
187
- return c.json(
188
- {
189
- error: result.message || 'Unknown error',
190
- },
191
- result.status as ContentfulStatusCode,
192
- );
193
- }
194
256
  },
195
257
  );
196
258
 
@@ -213,16 +275,10 @@ router.get(
213
275
  * in: body
214
276
  * type: object
215
277
  * required: false
216
- * description: New metadata for the card. Must be an object with key-value pairs.
217
- * - name: raw
218
- * in: query
219
- * required: false
220
- * schema:
221
- * type: boolean
222
- * description: When true, returns the raw card data without triggering calculations
278
+ * description: New metadata for the card. Must be an object with key-value pairs. Setting a custom field to null or an empty string clears it.
223
279
  * responses:
224
280
  * 200:
225
- * description: Object containing card details, same as GET. See definitions.ts/CardDetails for the structure.
281
+ * description: The updated card query result, same as GET.
226
282
  * 207:
227
283
  * description: Partial success. some updates failed, some succeeded. Returns card object with successful updates.
228
284
  * 400:
@@ -230,44 +286,27 @@ router.get(
230
286
  * 500:
231
287
  * description: project_path not set.
232
288
  */
233
- router.patch('/:key', requireRole(UserRole.Editor), async (c) => {
234
- const commands = c.get('commands');
235
- const key = c.req.param('key');
236
- if (!key) {
237
- return c.text('No search key', 400);
238
- }
239
-
240
- const raw = c.req.query('raw');
289
+ router.patch(
290
+ '/:key',
291
+ requireRole(UserRole.Editor),
292
+ zValidator('param', cardKeyParamSchema),
293
+ async (c) => {
294
+ const ws = c.get('ws');
295
+ const { key } = c.req.valid('param');
241
296
 
242
- const body = await c.req.json();
297
+ const body = await c.req.json();
243
298
 
244
- try {
245
- if (await cardService.updateCard(commands, key, body)) {
246
- notifyCardsUpdated(c, [key]);
247
- }
248
- const result = await getCardDetails(
249
- c.get('commands'),
250
- key,
251
- isSSGContext(c),
252
- raw?.toLowerCase() === 'true' ? true : false,
253
- );
254
- if (result.status === 200) {
255
- return c.json(result.data);
256
- } else {
257
- return c.json(
258
- {
259
- error: result.message || 'Unknown error',
260
- },
261
- result.status as ContentfulStatusCode,
299
+ try {
300
+ await cardService.updateCard(ws, key, body);
301
+ return c.json(await cardService.getCardData(ws, key, isSSGContext(c)));
302
+ } catch (error) {
303
+ return c.text(
304
+ error instanceof Error ? error.message : 'Unknown error',
305
+ 400,
262
306
  );
263
307
  }
264
- } catch (error) {
265
- return c.text(
266
- error instanceof Error ? error.message : 'Unknown error',
267
- 400,
268
- );
269
- }
270
- });
308
+ },
309
+ );
271
310
 
272
311
  /**
273
312
  * @swagger
@@ -290,14 +329,14 @@ router.patch('/:key', requireRole(UserRole.Editor), async (c) => {
290
329
  * description: project_path not set.
291
330
  */
292
331
  router.delete('/:key', requireRole(UserRole.Editor), async (c) => {
293
- const commands = c.get('commands');
332
+ const ws = c.get('ws');
294
333
  const key = c.req.param('key');
295
334
  if (!key) {
296
335
  return c.text('No search key', 400);
297
336
  }
298
337
 
299
338
  try {
300
- await cardService.deleteCard(commands, key);
339
+ await cardService.deleteCard(ws, key);
301
340
  return new Response(null, { status: 204 });
302
341
  } catch (error) {
303
342
  return c.json(
@@ -345,7 +384,7 @@ router.post('/:key', requireRole(UserRole.Editor), async (c) => {
345
384
 
346
385
  try {
347
386
  const result = await cardService.createCard(
348
- c.get('commands'),
387
+ c.get('ws'),
349
388
  body.template,
350
389
  key,
351
390
  );
@@ -389,7 +428,7 @@ router.post('/:key', requireRole(UserRole.Editor), async (c) => {
389
428
  * description: Server error
390
429
  */
391
430
  router.post('/:key/attachments', requireRole(UserRole.Editor), async (c) => {
392
- const commands = c.get('commands');
431
+ const ws = c.get('ws');
393
432
  const key = c.req.param('key');
394
433
 
395
434
  try {
@@ -400,11 +439,10 @@ router.post('/:key/attachments', requireRole(UserRole.Editor), async (c) => {
400
439
  }
401
440
 
402
441
  const result = await cardService.uploadAttachments(
403
- commands,
442
+ ws,
404
443
  key,
405
444
  files as File[],
406
445
  );
407
- notifyCardsUpdated(c, [key]);
408
446
  return c.json(result);
409
447
  } catch (error) {
410
448
  return c.json(
@@ -447,16 +485,11 @@ router.delete(
447
485
  '/:key/attachments/:filename',
448
486
  requireRole(UserRole.Editor),
449
487
  async (c) => {
450
- const commands = c.get('commands');
488
+ const ws = c.get('ws');
451
489
  const { key, filename } = c.req.param();
452
490
 
453
491
  try {
454
- const result = await cardService.removeAttachment(
455
- commands,
456
- key,
457
- filename,
458
- );
459
- notifyCardsUpdated(c, [key]);
492
+ const result = await cardService.removeAttachment(ws, key, filename);
460
493
  return c.json(result);
461
494
  } catch (error) {
462
495
  return c.json(
@@ -500,7 +533,7 @@ router.delete(
500
533
  * description: Server error
501
534
  */
502
535
  router.post('/:key/parse', requireRole(UserRole.Reader), async (c) => {
503
- const commands = c.get('commands');
536
+ const ws = c.get('ws');
504
537
  const key = c.req.param('key');
505
538
  const { content } = await c.req.json();
506
539
 
@@ -509,7 +542,7 @@ router.post('/:key/parse', requireRole(UserRole.Reader), async (c) => {
509
542
  }
510
543
 
511
544
  try {
512
- const result = await cardService.parseContent(commands, key, content);
545
+ const result = await cardService.parseContent(ws, key, content);
513
546
  return c.json(result);
514
547
  } catch (error) {
515
548
  return c.json(
@@ -558,20 +591,19 @@ router.post(
558
591
  requireRole(UserRole.Editor),
559
592
  zValidator('json', createLinkSchema),
560
593
  async (c) => {
561
- const commands = c.get('commands');
594
+ const ws = c.get('ws');
562
595
  const key = c.req.param('key');
563
596
  const { toCard, linkType, description, direction } = c.req.valid('json');
564
597
 
565
598
  try {
566
599
  const result = await cardService.createLink(
567
- commands,
600
+ ws,
568
601
  key,
569
602
  toCard,
570
603
  linkType,
571
604
  direction,
572
605
  description,
573
606
  );
574
- notifyCardsUpdated(c, [key, toCard]);
575
607
  return c.json(result);
576
608
  } catch (error) {
577
609
  return c.json(
@@ -621,20 +653,19 @@ router.delete(
621
653
  requireRole(UserRole.Editor),
622
654
  zValidator('json', removeLinkSchema),
623
655
  async (c) => {
624
- const commands = c.get('commands');
656
+ const ws = c.get('ws');
625
657
  const key = c.req.param('key');
626
658
  const { toCard, linkType, description, direction } = c.req.valid('json');
627
659
 
628
660
  try {
629
661
  const result = await cardService.removeLink(
630
- commands,
662
+ ws,
631
663
  key,
632
664
  toCard,
633
665
  linkType,
634
666
  direction,
635
667
  description,
636
668
  );
637
- notifyCardsUpdated(c, [key, toCard]);
638
669
  return c.json(result);
639
670
  } catch (error) {
640
671
  return c.json(
@@ -694,7 +725,7 @@ router.put(
694
725
  requireRole(UserRole.Editor),
695
726
  zValidator('json', updateLinkSchema),
696
727
  async (c) => {
697
- const commands = c.get('commands');
728
+ const ws = c.get('ws');
698
729
  const key = c.req.param('key');
699
730
 
700
731
  const {
@@ -710,7 +741,7 @@ router.put(
710
741
 
711
742
  try {
712
743
  const result = await cardService.updateLink(
713
- commands,
744
+ ws,
714
745
  key,
715
746
  toCard,
716
747
  linkType,
@@ -721,7 +752,6 @@ router.put(
721
752
  description,
722
753
  previousDescription,
723
754
  );
724
- notifyCardsUpdated(c, [key, toCard, previousToCard]);
725
755
  return c.json(result);
726
756
  } catch (error) {
727
757
  return c.json(
@@ -763,11 +793,11 @@ router.get(
763
793
  '/:key/a/:attachment',
764
794
  requireRole(UserRole.Reader),
765
795
  ssgParams(async (c: Context) => {
766
- const commands = c.get('commands');
767
- return await cardService.findRelevantAttachments(commands, c.get('tree'));
796
+ const ws = c.get('ws');
797
+ return await cardService.findRelevantAttachments(ws, c.get('tree'));
768
798
  }),
769
799
  async (c) => {
770
- const commands = c.get('commands');
800
+ const ws = c.get('ws');
771
801
  const { key, attachment } = c.req.param();
772
802
  const filename = decodeURI(attachment);
773
803
 
@@ -777,7 +807,7 @@ router.get(
777
807
 
778
808
  try {
779
809
  const attachmentResponse = await cardService.getAttachment(
780
- commands,
810
+ ws,
781
811
  key,
782
812
  filename,
783
813
  );
@@ -1,176 +1,24 @@
1
- /**
2
- Cyberismo
3
- Copyright © Cyberismo Ltd and contributors 2025
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
- */
1
+ // SPDX-FileCopyrightText: Cyberismo Ltd and contributors
2
+ // SPDX-License-Identifier: AGPL-3.0-only
13
3
 
14
- import type { Card } from '@cyberismo/data-handler/interfaces/project-interfaces';
15
- import { type CommandManager, evaluateMacros } from '@cyberismo/data-handler';
16
- import { preprocessMermaidBlocksForHtml } from '@cyberismo/data-handler/utils/mermaid-renderer';
17
- import { rewriteAsciidocCardXrefs } from '@cyberismo/data-handler/utils/asciidoc-xref';
18
- import { getCardQueryResult } from '../../export.js';
4
+ import type { QueryResult } from '@cyberismo/model';
5
+ import type { Workspace } from '@cyberismo/data-handler';
19
6
  import type { TreeOptions } from '../../types.js';
20
- import type { QueryResult } from '@cyberismo/data-handler/types/queries';
21
-
22
- interface result {
23
- status: number;
24
- message?: string;
25
- data?: object;
26
- }
27
-
28
- export async function getCardDetails(
29
- commands: CommandManager,
30
- key: string,
31
- staticMode: boolean,
32
- raw: boolean,
33
- ): Promise<result> {
34
- return commands.consistent(async () => {
35
- let cardDetailsResponse: Card;
36
- try {
37
- cardDetailsResponse = await commands.showCmd.showCardDetails(key);
38
- } catch {
39
- return { status: 400, message: `Card ${key} not found from project` };
40
- }
41
-
42
- if (!cardDetailsResponse) {
43
- return { status: 400, message: `Card ${key} not found from project` };
44
- }
45
-
46
- let asciidocContent = '';
47
- try {
48
- asciidocContent = await evaluateMacros(
49
- cardDetailsResponse.content || '',
50
- {
51
- context: staticMode ? 'exportedSite' : 'localApp',
52
- mode: staticMode ? 'staticSite' : 'inject',
53
- project: commands.project,
54
- cardKey: key,
55
- },
56
- );
57
- } catch (error) {
58
- asciidocContent = `Macro error: ${error instanceof Error ? error.message : 'Unknown error'}\n\n${asciidocContent}`;
59
- }
60
-
61
- // Convert [mermaid] AsciiDoc blocks to passthrough HTML before asciidoctor processes them
62
- asciidocContent = preprocessMermaidBlocksForHtml(asciidocContent);
63
7
 
64
- // Rewrite native AsciiDoc xrefs that target other cards into
65
- // /projects/<prefix>/cards/<key> links.
66
- asciidocContent = rewriteAsciidocCardXrefs(
67
- asciidocContent,
68
- commands.project,
69
- staticMode ? 'staticSite' : 'inject',
70
- );
8
+ /** Routes exported per card: data, content and source. */
9
+ export const CARD_ROUTES_PER_KEY = 3;
71
10
 
72
- if (raw) {
73
- if (!cardDetailsResponse.metadata) {
74
- throw new Error('Card has no metadata');
75
- }
76
- const cardType = await commands.showCmd.showResource(
77
- cardDetailsResponse.metadata.cardType,
78
- 'cardTypes',
79
- );
80
-
81
- const fields = [];
82
- let i = 0;
83
- for (const customField of cardType.customFields) {
84
- const fieldType = await commands.showCmd.showResource(
85
- customField.name,
86
- 'fieldTypes',
87
- );
88
- fields.push({
89
- key: customField.name,
90
- visibility: 'always',
91
- index: i++,
92
- fieldDisplayName: fieldType.displayName,
93
- fieldDescription: fieldType.description,
94
- dataType: fieldType.dataType,
95
- isCalculated: customField.isCalculated,
96
- isOverridable: !!(
97
- customField.isCalculated && customField.enableOverride
98
- ),
99
- overrideValue:
100
- customField.isCalculated && customField.enableOverride
101
- ? cardDetailsResponse.metadata[customField.name]
102
- : undefined,
103
- value: cardDetailsResponse.metadata[customField.name],
104
- enumValues: fieldType.enumValues ?? [],
105
- });
106
- }
107
- return {
108
- status: 200,
109
- data: {
110
- key: cardDetailsResponse.key,
111
- rank: cardDetailsResponse.metadata?.rank,
112
- title: cardDetailsResponse.metadata?.title || '',
113
- cardType: cardDetailsResponse.metadata?.cardType || '',
114
- cardTypeDisplayName: cardDetailsResponse.metadata.cardType,
115
- workflowState: '',
116
- lastUpdated: cardDetailsResponse.metadata.lastUpdated,
117
- createdAt: cardDetailsResponse.metadata.createdAt,
118
- fields,
119
- labels: cardDetailsResponse.metadata?.labels || [],
120
- links: [],
121
- notifications: [],
122
- policyChecks: {
123
- successes: [],
124
- failures: [],
125
- },
126
- deniedOperations: {
127
- transition: [],
128
- move: [],
129
- delete: [],
130
- editField: [],
131
- editContent: [],
132
- },
133
- rawContent: cardDetailsResponse.content || '',
134
- adocContent: asciidocContent,
135
- attachments: cardDetailsResponse.attachments,
136
- path: cardDetailsResponse.path,
137
- },
138
- };
139
- }
140
-
141
- const card = staticMode
142
- ? await getCardQueryResult(commands, key)
143
- : await commands.calculateCmd.runQuery('card', 'localApp', {
144
- cardKey: key,
145
- });
146
-
147
- if (card.length !== 1) {
148
- throw new Error('Query failed. Check card-query syntax');
149
- }
150
-
151
- return {
152
- status: 200,
153
- data: {
154
- ...card[0],
155
- rawContent: cardDetailsResponse.content || '',
156
- adocContent: asciidocContent,
157
- attachments: cardDetailsResponse.attachments,
158
- path: cardDetailsResponse.path,
159
- },
160
- };
161
- });
162
- }
163
11
  /**
164
12
  * Returns all cards from a tree query, flattened.
165
- * @param commands the command manager used for the query
13
+ * @param ws the command manager used for the query
166
14
  * @param options optional tree query options
167
15
  * @returns a promise that resolves to an array of all cards
168
16
  */
169
17
  export async function allCards(
170
- commands: CommandManager,
18
+ ws: Workspace,
171
19
  options?: TreeOptions,
172
20
  ): Promise<QueryResult<'tree'>[]> {
173
- const fetchedCards = await commands.calculateCmd.runQuery(
21
+ const fetchedCards = await ws.queries.runQuery(
174
22
  'tree',
175
23
  'exportedSite',
176
24
  options || {},