@cyberismo/backend 1.1.2 → 1.3.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 (510) hide show
  1. package/README.md +21 -0
  2. package/dist/app.d.ts +5 -15
  3. package/dist/app.js +46 -44
  4. package/dist/app.js.map +1 -1
  5. package/dist/auth/index.d.ts +1 -13
  6. package/dist/auth/index.js +3 -13
  7. package/dist/auth/index.js.map +1 -1
  8. package/dist/auth/keycloak.d.ts +2 -15
  9. package/dist/auth/keycloak.js +8 -12
  10. package/dist/auth/keycloak.js.map +1 -1
  11. package/dist/auth/mock.d.ts +12 -20
  12. package/dist/auth/mock.js +121 -43
  13. package/dist/auth/mock.js.map +1 -1
  14. package/dist/auth/types.d.ts +7 -13
  15. package/dist/auth/types.js +2 -12
  16. package/dist/auth/types.js.map +1 -1
  17. package/dist/common/errors.d.ts +12 -0
  18. package/dist/common/errors.js +31 -0
  19. package/dist/common/errors.js.map +1 -0
  20. package/dist/common/validationSchemas.d.ts +0 -12
  21. package/dist/common/validationSchemas.js +2 -12
  22. package/dist/common/validationSchemas.js.map +1 -1
  23. package/dist/domain/auth/index.d.ts +0 -12
  24. package/dist/domain/auth/index.js +2 -12
  25. package/dist/domain/auth/index.js.map +1 -1
  26. package/dist/domain/calculations/index.d.ts +0 -12
  27. package/dist/domain/calculations/index.js +4 -14
  28. package/dist/domain/calculations/index.js.map +1 -1
  29. package/dist/domain/calculations/schema.d.ts +0 -12
  30. package/dist/domain/calculations/schema.js +2 -12
  31. package/dist/domain/calculations/schema.js.map +1 -1
  32. package/dist/domain/calculations/service.d.ts +2 -14
  33. package/dist/domain/calculations/service.js +7 -17
  34. package/dist/domain/calculations/service.js.map +1 -1
  35. package/dist/domain/cardTypes/index.d.ts +0 -12
  36. package/dist/domain/cardTypes/index.js +10 -20
  37. package/dist/domain/cardTypes/index.js.map +1 -1
  38. package/dist/domain/cardTypes/schema.d.ts +0 -12
  39. package/dist/domain/cardTypes/schema.js +2 -12
  40. package/dist/domain/cardTypes/schema.js.map +1 -1
  41. package/dist/domain/cardTypes/service.d.ts +4 -16
  42. package/dist/domain/cardTypes/service.js +17 -25
  43. package/dist/domain/cardTypes/service.js.map +1 -1
  44. package/dist/domain/cards/index.d.ts +0 -12
  45. package/dist/domain/cards/index.js +120 -175
  46. package/dist/domain/cards/index.js.map +1 -1
  47. package/dist/domain/cards/lib.d.ts +6 -23
  48. package/dist/domain/cards/lib.js +7 -135
  49. package/dist/domain/cards/lib.js.map +1 -1
  50. package/dist/domain/cards/mermaid.d.ts +8 -0
  51. package/dist/domain/cards/mermaid.js +23 -0
  52. package/dist/domain/cards/mermaid.js.map +1 -0
  53. package/dist/domain/cards/schema.d.ts +6 -12
  54. package/dist/domain/cards/schema.js +15 -15
  55. package/dist/domain/cards/schema.js.map +1 -1
  56. package/dist/domain/cards/service.d.ts +29 -36
  57. package/dist/domain/cards/service.js +119 -90
  58. package/dist/domain/cards/service.js.map +1 -1
  59. package/dist/domain/connectors/index.d.ts +0 -12
  60. package/dist/domain/connectors/index.js +4 -14
  61. package/dist/domain/connectors/index.js.map +1 -1
  62. package/dist/domain/connectors/service.d.ts +2 -14
  63. package/dist/domain/connectors/service.js +4 -14
  64. package/dist/domain/connectors/service.js.map +1 -1
  65. package/dist/domain/events/events-by-project.d.ts +19 -0
  66. package/dist/domain/events/events-by-project.js +57 -0
  67. package/dist/domain/events/events-by-project.js.map +1 -0
  68. package/dist/domain/events/index.d.ts +3 -0
  69. package/dist/domain/events/index.js +84 -0
  70. package/dist/domain/events/index.js.map +1 -0
  71. package/dist/domain/events/lifetime.d.ts +2 -0
  72. package/dist/domain/events/lifetime.js +15 -0
  73. package/dist/domain/events/lifetime.js.map +1 -0
  74. package/dist/domain/events/project-events.d.ts +63 -0
  75. package/dist/domain/events/project-events.js +204 -0
  76. package/dist/domain/events/project-events.js.map +1 -0
  77. package/dist/domain/events/schema.d.ts +10 -0
  78. package/dist/domain/events/schema.js +10 -0
  79. package/dist/domain/events/schema.js.map +1 -0
  80. package/dist/domain/fieldTypes/index.d.ts +0 -12
  81. package/dist/domain/fieldTypes/index.js +6 -16
  82. package/dist/domain/fieldTypes/index.js.map +1 -1
  83. package/dist/domain/fieldTypes/schema.d.ts +0 -12
  84. package/dist/domain/fieldTypes/schema.js +2 -12
  85. package/dist/domain/fieldTypes/schema.js.map +1 -1
  86. package/dist/domain/fieldTypes/service.d.ts +4 -16
  87. package/dist/domain/fieldTypes/service.js +7 -17
  88. package/dist/domain/fieldTypes/service.js.map +1 -1
  89. package/dist/domain/graphModels/index.d.ts +0 -12
  90. package/dist/domain/graphModels/index.js +4 -14
  91. package/dist/domain/graphModels/index.js.map +1 -1
  92. package/dist/domain/graphModels/schema.d.ts +0 -12
  93. package/dist/domain/graphModels/schema.js +2 -12
  94. package/dist/domain/graphModels/schema.js.map +1 -1
  95. package/dist/domain/graphModels/service.d.ts +2 -14
  96. package/dist/domain/graphModels/service.js +4 -14
  97. package/dist/domain/graphModels/service.js.map +1 -1
  98. package/dist/domain/graphViews/index.d.ts +0 -12
  99. package/dist/domain/graphViews/index.js +4 -14
  100. package/dist/domain/graphViews/index.js.map +1 -1
  101. package/dist/domain/graphViews/schema.js +2 -0
  102. package/dist/domain/graphViews/schema.js.map +1 -1
  103. package/dist/domain/graphViews/service.d.ts +2 -14
  104. package/dist/domain/graphViews/service.js +4 -14
  105. package/dist/domain/graphViews/service.js.map +1 -1
  106. package/dist/domain/labels/index.d.ts +0 -12
  107. package/dist/domain/labels/index.js +4 -14
  108. package/dist/domain/labels/index.js.map +1 -1
  109. package/dist/domain/labels/service.d.ts +3 -15
  110. package/dist/domain/labels/service.js +5 -15
  111. package/dist/domain/labels/service.js.map +1 -1
  112. package/dist/domain/linkTypes/index.d.ts +0 -12
  113. package/dist/domain/linkTypes/index.js +6 -16
  114. package/dist/domain/linkTypes/index.js.map +1 -1
  115. package/dist/domain/linkTypes/schema.d.ts +0 -12
  116. package/dist/domain/linkTypes/schema.js +2 -12
  117. package/dist/domain/linkTypes/schema.js.map +1 -1
  118. package/dist/domain/linkTypes/service.d.ts +3 -15
  119. package/dist/domain/linkTypes/service.js +7 -17
  120. package/dist/domain/linkTypes/service.js.map +1 -1
  121. package/dist/domain/logicPrograms/index.d.ts +0 -12
  122. package/dist/domain/logicPrograms/index.js +4 -14
  123. package/dist/domain/logicPrograms/index.js.map +1 -1
  124. package/dist/domain/logicPrograms/service.d.ts +2 -14
  125. package/dist/domain/logicPrograms/service.js +5 -3
  126. package/dist/domain/logicPrograms/service.js.map +1 -1
  127. package/dist/domain/mcp/index.d.ts +3 -15
  128. package/dist/domain/mcp/index.js +27 -21
  129. package/dist/domain/mcp/index.js.map +1 -1
  130. package/dist/domain/project/index.d.ts +0 -12
  131. package/dist/domain/project/index.js +41 -39
  132. package/dist/domain/project/index.js.map +1 -1
  133. package/dist/domain/project/schema.d.ts +8 -12
  134. package/dist/domain/project/schema.js +36 -18
  135. package/dist/domain/project/schema.js.map +1 -1
  136. package/dist/domain/project/service.d.ts +20 -28
  137. package/dist/domain/project/service.js +56 -60
  138. package/dist/domain/project/service.js.map +1 -1
  139. package/dist/domain/projects/index.d.ts +2 -14
  140. package/dist/domain/projects/index.js +23 -36
  141. package/dist/domain/projects/index.js.map +1 -1
  142. package/dist/domain/projects/schema.d.ts +1 -12
  143. package/dist/domain/projects/schema.js +3 -12
  144. package/dist/domain/projects/schema.js.map +1 -1
  145. package/dist/domain/projects/service.d.ts +9 -35
  146. package/dist/domain/projects/service.js +12 -48
  147. package/dist/domain/projects/service.js.map +1 -1
  148. package/dist/domain/reports/index.d.ts +0 -12
  149. package/dist/domain/reports/index.js +4 -14
  150. package/dist/domain/reports/index.js.map +1 -1
  151. package/dist/domain/reports/schema.d.ts +0 -12
  152. package/dist/domain/reports/schema.js +2 -12
  153. package/dist/domain/reports/schema.js.map +1 -1
  154. package/dist/domain/reports/service.d.ts +2 -14
  155. package/dist/domain/reports/service.js +4 -14
  156. package/dist/domain/reports/service.js.map +1 -1
  157. package/dist/domain/resources/index.d.ts +0 -12
  158. package/dist/domain/resources/index.js +91 -26
  159. package/dist/domain/resources/index.js.map +1 -1
  160. package/dist/domain/resources/schema.d.ts +8 -2
  161. package/dist/domain/resources/schema.js +8 -1
  162. package/dist/domain/resources/schema.js.map +1 -1
  163. package/dist/domain/resources/service.d.ts +23 -23
  164. package/dist/domain/resources/service.js +83 -51
  165. package/dist/domain/resources/service.js.map +1 -1
  166. package/dist/domain/skills/index.d.ts +3 -0
  167. package/dist/domain/skills/index.js +42 -0
  168. package/dist/domain/skills/index.js.map +1 -0
  169. package/dist/domain/skills/schema.d.ts +4 -0
  170. package/dist/domain/skills/schema.js +8 -0
  171. package/dist/domain/skills/schema.js.map +1 -0
  172. package/dist/domain/skills/service.d.ts +2 -0
  173. package/dist/domain/skills/service.js +6 -0
  174. package/dist/domain/skills/service.js.map +1 -0
  175. package/dist/domain/templates/index.d.ts +0 -12
  176. package/dist/domain/templates/index.js +8 -18
  177. package/dist/domain/templates/index.js.map +1 -1
  178. package/dist/domain/templates/schema.d.ts +0 -12
  179. package/dist/domain/templates/schema.js +2 -12
  180. package/dist/domain/templates/schema.js.map +1 -1
  181. package/dist/domain/templates/service.d.ts +4 -16
  182. package/dist/domain/templates/service.js +8 -18
  183. package/dist/domain/templates/service.js.map +1 -1
  184. package/dist/domain/tree/index.d.ts +0 -12
  185. package/dist/domain/tree/index.js +4 -14
  186. package/dist/domain/tree/index.js.map +1 -1
  187. package/dist/domain/tree/service.d.ts +3 -15
  188. package/dist/domain/tree/service.js +8 -15
  189. package/dist/domain/tree/service.js.map +1 -1
  190. package/dist/domain/workflows/index.d.ts +0 -12
  191. package/dist/domain/workflows/index.js +4 -14
  192. package/dist/domain/workflows/index.js.map +1 -1
  193. package/dist/domain/workflows/schema.d.ts +0 -12
  194. package/dist/domain/workflows/schema.js +2 -12
  195. package/dist/domain/workflows/schema.js.map +1 -1
  196. package/dist/domain/workflows/service.d.ts +2 -14
  197. package/dist/domain/workflows/service.js +4 -14
  198. package/dist/domain/workflows/service.js.map +1 -1
  199. package/dist/export.d.ts +8 -21
  200. package/dist/export.js +71 -66
  201. package/dist/export.js.map +1 -1
  202. package/dist/index.d.ts +3 -4
  203. package/dist/index.js +20 -41
  204. package/dist/index.js.map +1 -1
  205. package/dist/main.js +36 -32
  206. package/dist/main.js.map +1 -1
  207. package/dist/middleware/auth.d.ts +5 -12
  208. package/dist/middleware/auth.js +22 -16
  209. package/dist/middleware/auth.js.map +1 -1
  210. package/dist/middleware/commandManager.d.ts +17 -20
  211. package/dist/middleware/commandManager.js +27 -35
  212. package/dist/middleware/commandManager.js.map +1 -1
  213. package/dist/middleware/tree.js +2 -0
  214. package/dist/middleware/tree.js.map +1 -1
  215. package/dist/middleware/zvalidator.js +2 -0
  216. package/dist/middleware/zvalidator.js.map +1 -1
  217. package/dist/overlay.d.ts +33 -0
  218. package/dist/overlay.js +162 -0
  219. package/dist/overlay.js.map +1 -0
  220. package/dist/public/THIRD-PARTY.txt +1892 -688
  221. package/dist/public/assets/__vite-browser-external-DGgK3jMU.js +1 -0
  222. package/dist/public/assets/abnfDiagram-WEYOIA3C-B3qq7PKv.js +1 -0
  223. package/dist/public/assets/architecture-WOLXFQ4H-Bzau2LI0.js +1 -0
  224. package/dist/public/assets/architectureDiagram-ZHVYKT53-Bg0cUwdb.js +36 -0
  225. package/dist/public/assets/blockDiagram-RJAE7QA3-0RJB-ra-.js +140 -0
  226. package/dist/public/assets/c4Diagram-XDPPPE54-BzoQcLvf.js +38 -0
  227. package/dist/public/assets/channel-6BNdw4Ax.js +1 -0
  228. package/dist/public/assets/{chunk-MOJQB5TN-D1shKbMs.js → chunk-2E7WHVMD-6aqPk-Hk.js} +4 -4
  229. package/dist/public/assets/chunk-4EMNKR2T-vovNSAaE.js +1 -0
  230. package/dist/public/assets/chunk-55XCU76K-DXkKnt2y.js +1 -0
  231. package/dist/public/assets/chunk-7S6XSTFO-B9bfO0l3.js +2 -0
  232. package/dist/public/assets/chunk-AQDTSKZB-ilLy_cYP.js +72 -0
  233. package/dist/public/assets/chunk-DSNLSHJZ-DAudglXu.js +129 -0
  234. package/dist/public/assets/chunk-DUW6YSOI-Dgx8z5s3.js +1 -0
  235. package/dist/public/assets/chunk-HAGFOTED-CSKFgs6b.js +62 -0
  236. package/dist/public/assets/chunk-HNE4Q36P-Cu5gPBVk.js +1 -0
  237. package/dist/public/assets/chunk-J5ZVWO5B-oDCd-gWO.js +1 -0
  238. package/dist/public/assets/chunk-NGNAAXSQ-DI_UYJZ4.js +136 -0
  239. package/dist/public/assets/chunk-NQOKRVIF-Bpcvhq1n.js +213 -0
  240. package/dist/public/assets/chunk-UHW7PFBP-BDjvOaTH.js +1 -0
  241. package/dist/public/assets/chunk-VQ5W62QI-DHTcO93W.js +1 -0
  242. package/dist/public/assets/chunk-WQQL4CDK-H6nAhuck.js +10 -0
  243. package/dist/public/assets/chunk-XXDRQBXY-BUghdEVl.js +1 -0
  244. package/dist/public/assets/chunk-YZO67HFG-D13E0_Yh.js +1 -0
  245. package/dist/public/assets/chunk-ZAUX2LTX-Dp5y-2wt.js +1 -0
  246. package/dist/public/assets/chunk-ZCHMQSOR-RJjlln1D.js +2 -0
  247. package/dist/public/assets/classDiagram-v2-4MYWR3UA-CAqiFCSv.js +217 -0
  248. package/dist/public/assets/cose-bilkent-JH36ORCC-C_VOHzoP.js +1 -0
  249. package/dist/public/assets/cynefin-EF2NZ3EQ-Dyk4ZPjK.js +1 -0
  250. package/dist/public/assets/cynefinDiagram-WF24UDRP-b_Ia8gQX.js +62 -0
  251. package/dist/public/assets/cytoscape.esm-GRKmfDkD.js +321 -0
  252. package/dist/public/assets/dagre-NK4GIZVX-CH1K1yF8.js +4 -0
  253. package/dist/public/assets/diagram-CBK3MWTC-OaKd5avy.js +24 -0
  254. package/dist/public/assets/diagram-I5XIIV2D-Cmu5z1ad.js +24 -0
  255. package/dist/public/assets/diagram-ODIL2UCW-Cz1kkDDX.js +30 -0
  256. package/dist/public/assets/diagram-PFBEJUXE-faMkmqUW.js +3 -0
  257. package/dist/public/assets/diagram-RJA3I4VV-nycvfte-.js +41 -0
  258. package/dist/public/assets/diagram-TYUNFSNR-CjEv5QCm.js +200 -0
  259. package/dist/public/assets/dist-DGs_yUrP.js +1 -0
  260. package/dist/public/assets/ebnfDiagram-V4P3TTPT-DN-IIxCy.js +1 -0
  261. package/dist/public/assets/elk-QONTBCTQ-Bsam88GP.js +27 -0
  262. package/dist/public/assets/erDiagram-KYQIGQAA-DEU_qqNK.js +99 -0
  263. package/dist/public/assets/eventmodeling-K75KTNOO-Bl6NCM9E.js +1 -0
  264. package/dist/public/assets/flowDiagram-IUGLLWBU-Cl4qZ-36.js +1 -0
  265. package/dist/public/assets/ganttDiagram-R7GPNTJY-BmMd4aGi.js +292 -0
  266. package/dist/public/assets/gitGraph-VSP46ZUC-Q0H2PWek.js +1 -0
  267. package/dist/public/assets/gitGraphDiagram-PDYL7XHY-BlCTBYTj.js +106 -0
  268. package/dist/public/assets/index-CuBJ0hof.css +1 -0
  269. package/dist/public/assets/index-D6WqGtsG.js +27876 -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-FXEZZL3T-CiLpASIW.js → ishikawaDiagram-HPEHV2GE-_Y3Fr0hu.js} +6 -6
  274. package/dist/public/assets/journeyDiagram-BOSHW7O7-Bo55jJ4m.js +139 -0
  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/path-B_0haWDX.js +1 -0
  283. package/dist/public/assets/pegDiagram-ECIUJNBX-BEGI5k3m.js +1 -0
  284. package/dist/public/assets/pie-XZMESJXO-COyqzA3N.js +1 -0
  285. package/dist/public/assets/pieDiagram-GNMPY74T-CrLJhZJJ.js +39 -0
  286. package/dist/public/assets/{quadrantDiagram-ABIIQ3AL-B3czMbdS.js → quadrantDiagram-D57K4MC3-Fl7HMHxK.js} +6 -6
  287. package/dist/public/assets/radar-ABXABTNO-DeXHKowk.js +1 -0
  288. package/dist/public/assets/railroad-I3PHUGI6-CUjKUdPz.js +1 -0
  289. package/dist/public/assets/railroad-abnf-LNEFI6M7-B1aEgHE6.js +1 -0
  290. package/dist/public/assets/railroad-ebnf-DWYD2UWJ-DmmI3Voz.js +1 -0
  291. package/dist/public/assets/railroad-peg-JR7BVNR7-BHzi9m7r.js +1 -0
  292. package/dist/public/assets/railroadDiagram-Y72NRBL7-D1oeE5fy.js +1 -0
  293. package/dist/public/assets/requirementDiagram-EQYSW5RA-BJDKK1aS.js +84 -0
  294. package/dist/public/assets/rolldown-runtime-BCiCTKAo.js +1 -0
  295. package/dist/public/assets/{rough.esm-By172zw-.js → rough.esm-Dy-Kn_BL.js} +1 -1
  296. package/dist/public/assets/sankeyDiagram-SY24JHO5-C4g0OwZ9.js +40 -0
  297. package/dist/public/assets/sequenceDiagram-BLEHNHQU-CEvy4P-b.js +169 -0
  298. package/dist/public/assets/sizeCapture-INFHLROL-3uHXrFqA.js +1 -0
  299. package/dist/public/assets/src-MPsEqXxq.js +1 -0
  300. package/dist/public/assets/stateDiagram-v2-A6IESKWZ-BFhvw4Gl.js +291 -0
  301. package/dist/public/assets/swimlanes-B3ENRKFQ-BIl_Q-FM.js +1 -0
  302. package/dist/public/assets/swimlanesDiagram-AYQRV4AK-rvDbKEHQ.js +8 -0
  303. package/dist/public/assets/timeline-definition-JXYKGLGB-qAoWTH4N.js +120 -0
  304. package/dist/public/assets/treeView-D4JQ5SDB-vq16JKkJ.js +1 -0
  305. package/dist/public/assets/treemap-SAJKECNS-C0IZTaDk.js +1 -0
  306. package/dist/public/assets/usecaseDiagram-WPOLBNNX-Dq8iz49r.js +328 -0
  307. package/dist/public/assets/vennDiagram-Q3Y3IDCW-Br4JmRjM.js +34 -0
  308. package/dist/public/assets/wardley-7MLQ67FV-CEPlAQ79.js +1 -0
  309. package/dist/public/assets/wardleyDiagram-IVAIDKWA-DURB7Ue6.js +78 -0
  310. package/dist/public/assets/xychartDiagram-4URNHDU4-BiZywfhy.js +7 -0
  311. package/dist/public/index.html +27 -28
  312. package/dist/public/sbom.cdx.json +1 -0
  313. package/dist/types.d.ts +0 -12
  314. package/dist/types.js +2 -12
  315. package/dist/types.js.map +1 -1
  316. package/dist/utils.d.ts +12 -5
  317. package/dist/utils.js +18 -43
  318. package/dist/utils.js.map +1 -1
  319. package/package.json +14 -14
  320. package/src/app.ts +51 -49
  321. package/src/auth/index.ts +3 -13
  322. package/src/auth/keycloak.ts +10 -15
  323. package/src/auth/mock.ts +144 -48
  324. package/src/auth/types.ts +10 -13
  325. package/src/common/errors.ts +45 -0
  326. package/src/common/validationSchemas.ts +3 -12
  327. package/src/domain/auth/index.ts +2 -12
  328. package/src/domain/calculations/index.ts +4 -14
  329. package/src/domain/calculations/schema.ts +2 -12
  330. package/src/domain/calculations/service.ts +8 -21
  331. package/src/domain/cardTypes/index.ts +10 -20
  332. package/src/domain/cardTypes/schema.ts +3 -12
  333. package/src/domain/cardTypes/service.ts +22 -29
  334. package/src/domain/cards/index.ts +158 -218
  335. package/src/domain/cards/lib.ts +9 -173
  336. package/src/domain/cards/mermaid.ts +25 -0
  337. package/src/domain/cards/schema.ts +19 -15
  338. package/src/domain/cards/service.ts +166 -134
  339. package/src/domain/connectors/index.ts +5 -14
  340. package/src/domain/connectors/service.ts +5 -20
  341. package/src/domain/events/events-by-project.ts +59 -0
  342. package/src/domain/events/index.ts +102 -0
  343. package/src/domain/events/lifetime.ts +17 -0
  344. package/src/domain/events/project-events.ts +266 -0
  345. package/src/domain/events/schema.ts +11 -0
  346. package/src/domain/fieldTypes/index.ts +6 -16
  347. package/src/domain/fieldTypes/schema.ts +3 -12
  348. package/src/domain/fieldTypes/service.ts +9 -21
  349. package/src/domain/graphModels/index.ts +4 -14
  350. package/src/domain/graphModels/schema.ts +3 -12
  351. package/src/domain/graphModels/service.ts +5 -18
  352. package/src/domain/graphViews/index.ts +4 -14
  353. package/src/domain/graphViews/schema.ts +3 -0
  354. package/src/domain/graphViews/service.ts +5 -18
  355. package/src/domain/labels/index.ts +4 -14
  356. package/src/domain/labels/service.ts +6 -16
  357. package/src/domain/linkTypes/index.ts +6 -16
  358. package/src/domain/linkTypes/schema.ts +2 -12
  359. package/src/domain/linkTypes/service.ts +8 -21
  360. package/src/domain/logicPrograms/index.ts +5 -17
  361. package/src/domain/logicPrograms/service.ts +7 -16
  362. package/src/domain/mcp/index.ts +33 -24
  363. package/src/domain/project/index.ts +59 -37
  364. package/src/domain/project/schema.ts +41 -18
  365. package/src/domain/project/service.ts +81 -71
  366. package/src/domain/projects/index.ts +38 -50
  367. package/src/domain/projects/schema.ts +3 -12
  368. package/src/domain/projects/service.ts +18 -88
  369. package/src/domain/reports/index.ts +4 -14
  370. package/src/domain/reports/schema.ts +2 -12
  371. package/src/domain/reports/service.ts +5 -18
  372. package/src/domain/resources/index.ts +102 -30
  373. package/src/domain/resources/schema.ts +15 -2
  374. package/src/domain/resources/service.ts +98 -81
  375. package/src/domain/skills/index.ts +51 -0
  376. package/src/domain/skills/schema.ts +9 -0
  377. package/src/domain/skills/service.ts +8 -0
  378. package/src/domain/templates/index.ts +8 -18
  379. package/src/domain/templates/schema.ts +2 -12
  380. package/src/domain/templates/service.ts +9 -22
  381. package/src/domain/tree/index.ts +4 -14
  382. package/src/domain/tree/service.ts +10 -21
  383. package/src/domain/workflows/index.ts +4 -14
  384. package/src/domain/workflows/schema.ts +2 -12
  385. package/src/domain/workflows/service.ts +5 -18
  386. package/src/export.ts +82 -73
  387. package/src/index.ts +30 -46
  388. package/src/main.ts +45 -37
  389. package/src/middleware/auth.ts +25 -16
  390. package/src/middleware/commandManager.ts +37 -49
  391. package/src/middleware/tree.ts +3 -0
  392. package/src/middleware/zvalidator.ts +3 -0
  393. package/src/overlay.ts +185 -0
  394. package/src/types.ts +2 -12
  395. package/src/utils.ts +26 -46
  396. package/dist/domain/cards/presence.d.ts +0 -50
  397. package/dist/domain/cards/presence.js +0 -93
  398. package/dist/domain/cards/presence.js.map +0 -1
  399. package/dist/project-registry.d.ts +0 -57
  400. package/dist/project-registry.js +0 -93
  401. package/dist/project-registry.js.map +0 -1
  402. package/dist/public/assets/abnfDiagram-VRR7QNED-Djr4KJ5E.js +0 -1
  403. package/dist/public/assets/arc-DrR4k_H-.js +0 -1
  404. package/dist/public/assets/architecture-TIHT7OUA-XL6N-4o9.js +0 -1
  405. package/dist/public/assets/architectureDiagram-ZJ3FMSHR-DsMU2Uwa.js +0 -36
  406. package/dist/public/assets/blockDiagram-677ZJIJ3-DRBmQUQJ.js +0 -132
  407. package/dist/public/assets/c4Diagram-LMCZKHZV-E0rM02LD.js +0 -10
  408. package/dist/public/assets/channel-D5fnImJy.js +0 -1
  409. package/dist/public/assets/chunk-32BRIVSS-BnDY0aSV.js +0 -1
  410. package/dist/public/assets/chunk-52WLFC77-N5YugKaZ.js +0 -10
  411. package/dist/public/assets/chunk-5FCAYU7R-I3_t_Ic_.js +0 -1
  412. package/dist/public/assets/chunk-5HE753X5-Dxz40rzH.js +0 -1
  413. package/dist/public/assets/chunk-5JV3BV7I-CNwCKRLH.js +0 -1
  414. package/dist/public/assets/chunk-5TONJI2A-ezWQ_Z2j.js +0 -2
  415. package/dist/public/assets/chunk-7BUUIJ7U-Bb538aSH.js +0 -1
  416. package/dist/public/assets/chunk-BIQX33UG-DS132-R_.js +0 -1
  417. package/dist/public/assets/chunk-C7G6YPKG-BN-cNjoj.js +0 -1
  418. package/dist/public/assets/chunk-CQNSW5MT-D8Mn1I73.js +0 -1
  419. package/dist/public/assets/chunk-CYSBUYHQ-Dc64Dwdo.js +0 -1
  420. package/dist/public/assets/chunk-EMLP6XTP-aIK0V8GX.js +0 -1
  421. package/dist/public/assets/chunk-EX3LRPZG-Db0XYyxy.js +0 -231
  422. package/dist/public/assets/chunk-FWX5IMBZ-BF_P2-Do.js +0 -2
  423. package/dist/public/assets/chunk-HOUHSVGY-L35GPy9G.js +0 -1
  424. package/dist/public/assets/chunk-ICXQ74PX-Bb8zaHde.js +0 -2
  425. package/dist/public/assets/chunk-JG7HCLWE-BtAXK3iQ.js +0 -2
  426. package/dist/public/assets/chunk-KEIR6QF5-DEvma7oi.js +0 -161
  427. package/dist/public/assets/chunk-MOZMSUNE-5FIqIBsY.js +0 -1
  428. package/dist/public/assets/chunk-OGEWGWER-BVIFy9xz.js +0 -1
  429. package/dist/public/assets/chunk-OSBZ3O6U-Cfd7kf1R.js +0 -1
  430. package/dist/public/assets/chunk-PUDLZKDR-Db3FSNR9.js +0 -156
  431. package/dist/public/assets/chunk-Q4XR5HBZ-BuKFRUzR.js +0 -70
  432. package/dist/public/assets/chunk-QBLGF6JB-DUGZXFh-.js +0 -1
  433. package/dist/public/assets/chunk-R7FJI6CG-D7mUd-qN.js +0 -1
  434. package/dist/public/assets/chunk-RYQCIY6F-C_3rESBd.js +0 -1
  435. package/dist/public/assets/chunk-U6XO7XAA-C3UhlwA1.js +0 -2
  436. package/dist/public/assets/chunk-V7JOEXUC-71b0ABpv.js +0 -206
  437. package/dist/public/assets/chunk-VAUOI2AC-C-GBw18h.js +0 -1
  438. package/dist/public/assets/chunk-VR4S4FIN-tUhbELKr.js +0 -1
  439. package/dist/public/assets/chunk-WYO6CB5R-BQoO62-B.js +0 -127
  440. package/dist/public/assets/chunk-XXDRQBXY-Co8n4ZHT.js +0 -1
  441. package/dist/public/assets/chunk-YOTPTUD7-DhCRKU1A.js +0 -1
  442. package/dist/public/assets/chunk-ZGVPDNZ5-hpz2Ryq5.js +0 -62
  443. package/dist/public/assets/chunk-ZIRB5QZD-BpeS1aZ7.js +0 -32
  444. package/dist/public/assets/classDiagram-OUVF2IWQ-CXdVorPK.js +0 -1
  445. package/dist/public/assets/classDiagram-v2-EOCWNBFH-CXdVorPK.js +0 -1
  446. package/dist/public/assets/colors-Cg5Vh3br.js +0 -1
  447. package/dist/public/assets/cose-bilkent-JH36ORCC-4GoRbloS.js +0 -1
  448. package/dist/public/assets/cynefin-VYW2F7L2-BPH-25fI.js +0 -1
  449. package/dist/public/assets/cynefinDiagram-TSTJHNR4-PEf16euv.js +0 -62
  450. package/dist/public/assets/cytoscape.esm-C3UvhD5t.js +0 -321
  451. package/dist/public/assets/dagre-Buvkdvvj.js +0 -1
  452. package/dist/public/assets/dagre-VKFMJZFB-DPsCMBF1.js +0 -4
  453. package/dist/public/assets/diagram-FQU43EPY-DS-ryuRg.js +0 -3
  454. package/dist/public/assets/diagram-G47NLZAW-CzUoYkFf.js +0 -24
  455. package/dist/public/assets/diagram-NH7WQ7WH-MhGnE2fh.js +0 -24
  456. package/dist/public/assets/diagram-OA4YK3LP-CsQ9aFR_.js +0 -30
  457. package/dist/public/assets/diagram-WEI45ONY-Er3q49ew.js +0 -41
  458. package/dist/public/assets/dist-BzwexiH1.js +0 -1
  459. package/dist/public/assets/ebnfDiagram-CCIWWBDH-AnJAsk14.js +0 -1
  460. package/dist/public/assets/erDiagram-Q63AITRT-DulA16my.js +0 -85
  461. package/dist/public/assets/eventmodeling-45OFAUF4-CoIhTpHU.js +0 -1
  462. package/dist/public/assets/flowDiagram-23GEKE2U-BGMXUq18.js +0 -1
  463. package/dist/public/assets/ganttDiagram-NO4QXBWP-DAvCPT7_.js +0 -292
  464. package/dist/public/assets/gitGraph-TEB2WS4Q-BcPsZts5.js +0 -1
  465. package/dist/public/assets/gitGraphDiagram-IHSO6WYX-CksvJvsQ.js +0 -106
  466. package/dist/public/assets/index-COSSLZqt.css +0 -1
  467. package/dist/public/assets/index-Y8Ckwau7.js +0 -447
  468. package/dist/public/assets/info-DKCQHKI2-7VGzrAVB.js +0 -1
  469. package/dist/public/assets/infoDiagram-FWYZ7A6U-D_by7lSL.js +0 -2
  470. package/dist/public/assets/journeyDiagram-5HDEW3XC-DpvFmk7c.js +0 -139
  471. package/dist/public/assets/kanban-definition-HUTT4EX6-DYP_x6zD.js +0 -89
  472. package/dist/public/assets/katex-DolUETbr.js +0 -257
  473. package/dist/public/assets/line-C8Sfsgt8.js +0 -1
  474. package/dist/public/assets/linear-BWTvbP1l.js +0 -1
  475. package/dist/public/assets/map-BaFkSB1l.js +0 -1
  476. package/dist/public/assets/mermaid-parser.core--8614tkK.js +0 -4
  477. package/dist/public/assets/mindmap-definition-LN4V7U3C-3IAd4gp3.js +0 -96
  478. package/dist/public/assets/ordinal-BdBDtYTt.js +0 -1
  479. package/dist/public/assets/packet-7NZHBO7P-KYt33H0C.js +0 -1
  480. package/dist/public/assets/path-HTXttWil.js +0 -1
  481. package/dist/public/assets/pegDiagram-2B236MQR-BQNFxYz2.js +0 -1
  482. package/dist/public/assets/pie-RZYD4A2V-xKz9s9I4.js +0 -1
  483. package/dist/public/assets/pieDiagram-ENE6RG2P-Cy13tg8_.js +0 -39
  484. package/dist/public/assets/radar-I7S5WNFK-B4QTX-fX.js +0 -1
  485. package/dist/public/assets/railroad-3IZDKUUU-Co_9rPVC.js +0 -1
  486. package/dist/public/assets/railroad-abnf-AHOZXSZD-Bhy_c3ol.js +0 -1
  487. package/dist/public/assets/railroad-ebnf-EBAXGLYW-B9ENjG34.js +0 -1
  488. package/dist/public/assets/railroad-peg-LSFZ7HO6-CyJxDBsB.js +0 -1
  489. package/dist/public/assets/railroadDiagram-RFXS5EU6-M2j5SJF2.js +0 -1
  490. package/dist/public/assets/range-EplFIxc7.js +0 -1
  491. package/dist/public/assets/requirementDiagram-TGXJPOKE-CmvJWy_S.js +0 -84
  492. package/dist/public/assets/sankeyDiagram-HTMAVEWB-tAeOzMTn.js +0 -40
  493. package/dist/public/assets/sequenceDiagram-DBY2YBRQ-r0pwijM4.js +0 -162
  494. package/dist/public/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +0 -1
  495. package/dist/public/assets/src-DOh7_en_.js +0 -1
  496. package/dist/public/assets/stateDiagram-2N3HPSRC-a9IdkSQG.js +0 -1
  497. package/dist/public/assets/stateDiagram-v2-6OUMAXLB-s2blPtZ-.js +0 -1
  498. package/dist/public/assets/swimlanes-5IMT3BWC-5w0Cdxk6.js +0 -2
  499. package/dist/public/assets/swimlanesDiagram-G3AALYLV-BWa-KRed.js +0 -8
  500. package/dist/public/assets/time-BM2d9MsQ.js +0 -1
  501. package/dist/public/assets/timeline-definition-FHXFAJF6-CvXlv_4Y.js +0 -120
  502. package/dist/public/assets/treeView-QDETBFTQ-B9cxjfpB.js +0 -1
  503. package/dist/public/assets/treemap-6X3UGDF4-BplEq4hB.js +0 -1
  504. package/dist/public/assets/treemap-BfjIY-m6.js +0 -1
  505. package/dist/public/assets/vennDiagram-L72KCM5P-ti2qNcvo.js +0 -34
  506. package/dist/public/assets/wardley-OPB4EBWU-BX2ghg5e.js +0 -1
  507. package/dist/public/assets/wardleyDiagram-EHGQE667-C8lblm8x.js +0 -78
  508. package/dist/public/assets/xychartDiagram-FW5EYKEG-US-_k5eu.js +0 -7
  509. package/src/domain/cards/presence.ts +0 -124
  510. package/src/project-registry.ts +0 -130
@@ -1,32 +1,20 @@
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 { streamSSE } from 'hono/streaming';
17
- import { getCardDetails } from './lib.js';
18
5
  import * as cardService from './service.js';
19
6
  import { isSSGContext, ssgParams } from 'hono/ssg';
20
7
  import type { AppContext } from '../../types.js';
21
8
  import { UserRole } from '../../types.js';
22
- import { presenceStore } from './presence.js';
23
9
  import { requireRole } from '../../middleware/auth.js';
24
10
  import { zValidator } from '../../middleware/zvalidator.js';
25
11
  import {
12
+ cardKeyParamSchema,
26
13
  createLinkSchema,
27
14
  removeLinkSchema,
28
15
  updateLinkSchema,
29
16
  exportCardPdfSchema,
17
+ cardBatchSchema,
30
18
  type ExportCardPdfRequestBody,
31
19
  } from './schema.js';
32
20
 
@@ -47,10 +35,10 @@ const router = new Hono();
47
35
  * description: project_path not set.
48
36
  */
49
37
  router.get('/', requireRole(UserRole.Reader), async (c) => {
50
- const commands = c.get('commands');
38
+ const ws = c.get('ws');
51
39
 
52
40
  try {
53
- const response = await cardService.getProjectInfo(commands);
41
+ const response = await cardService.getProjectInfo(ws);
54
42
  return c.json(response);
55
43
  } catch (error) {
56
44
  return c.text(
@@ -102,10 +90,10 @@ router.post(
102
90
  requireRole(UserRole.Reader),
103
91
  zValidator('json', exportCardPdfSchema),
104
92
  async (c) => {
105
- const commands = c.get('commands');
93
+ const ws = c.get('ws');
106
94
  const body = (await c.req.json()) as ExportCardPdfRequestBody;
107
95
  try {
108
- const result = await cardService.exportCard(commands, {
96
+ const result = await cardService.exportCard(ws, {
109
97
  cardKey: body.cardKey,
110
98
  title: body.title,
111
99
  name: body.name,
@@ -131,64 +119,140 @@ router.post(
131
119
  },
132
120
  );
133
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
+
134
163
  /**
135
164
  * @swagger
136
165
  * /api/cards/{key}:
137
166
  * get:
138
- * summary: Returns the full content of a specific card including calculations.
139
- * 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.
140
169
  * parameters:
141
170
  * - name: key
142
171
  * in: path
143
172
  * required: true
144
173
  * description: Card key (string)
145
- * - name: raw
146
- * in: query
147
- * required: false
148
- * schema:
149
- * type: boolean
150
- * description: When true, returns the raw card data without triggering calculations
151
174
  * responses:
152
175
  * 200:
153
- * 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.
154
177
  * 400:
155
- * 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
156
181
  * 500:
157
182
  * description: project_path not set.
158
183
  */
159
184
  router.get(
160
185
  '/:key',
161
186
  requireRole(UserRole.Reader),
162
- ssgParams(async (c: AppContext) => {
163
- const commands = c.get('commands');
164
- const opts = c.get('tree');
165
- const cards = await cardService.findAllCards(commands, opts);
166
- return cards.map((card) => ({ key: card.key }));
167
- }),
187
+ cardKeyParams,
188
+ zValidator('param', cardKeyParamSchema),
168
189
  async (c) => {
169
- const key = c.req.param('key');
170
- if (!key) {
171
- return c.text('No search key', 400);
172
- }
190
+ const { key } = c.req.valid('param');
191
+ return c.json(
192
+ await cardService.getCardData(c.get('ws'), key, isSSGContext(c)),
193
+ );
194
+ },
195
+ );
173
196
 
174
- 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
+ );
175
227
 
176
- const result = await getCardDetails(
177
- c.get('commands'),
178
- key,
179
- isSSGContext(c),
180
- 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)),
181
255
  );
182
- if (result.status === 200) {
183
- return c.json(result.data);
184
- } else {
185
- return c.json(
186
- {
187
- error: result.message || 'Unknown error',
188
- },
189
- result.status as ContentfulStatusCode,
190
- );
191
- }
192
256
  },
193
257
  );
194
258
 
@@ -211,16 +275,10 @@ router.get(
211
275
  * in: body
212
276
  * type: object
213
277
  * required: false
214
- * description: New metadata for the card. Must be an object with key-value pairs.
215
- * - name: raw
216
- * in: query
217
- * required: false
218
- * schema:
219
- * type: boolean
220
- * 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.
221
279
  * responses:
222
280
  * 200:
223
- * 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.
224
282
  * 207:
225
283
  * description: Partial success. some updates failed, some succeeded. Returns card object with successful updates.
226
284
  * 400:
@@ -228,42 +286,27 @@ router.get(
228
286
  * 500:
229
287
  * description: project_path not set.
230
288
  */
231
- router.patch('/:key', requireRole(UserRole.Editor), async (c) => {
232
- const commands = c.get('commands');
233
- const key = c.req.param('key');
234
- if (!key) {
235
- return c.text('No search key', 400);
236
- }
237
-
238
- 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');
239
296
 
240
- const body = await c.req.json();
297
+ const body = await c.req.json();
241
298
 
242
- try {
243
- await cardService.updateCard(commands, key, body);
244
- const result = await getCardDetails(
245
- c.get('commands'),
246
- key,
247
- isSSGContext(c),
248
- raw?.toLowerCase() === 'true' ? true : false,
249
- );
250
- if (result.status === 200) {
251
- return c.json(result.data);
252
- } else {
253
- return c.json(
254
- {
255
- error: result.message || 'Unknown error',
256
- },
257
- 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,
258
306
  );
259
307
  }
260
- } catch (error) {
261
- return c.text(
262
- error instanceof Error ? error.message : 'Unknown error',
263
- 400,
264
- );
265
- }
266
- });
308
+ },
309
+ );
267
310
 
268
311
  /**
269
312
  * @swagger
@@ -286,14 +329,14 @@ router.patch('/:key', requireRole(UserRole.Editor), async (c) => {
286
329
  * description: project_path not set.
287
330
  */
288
331
  router.delete('/:key', requireRole(UserRole.Editor), async (c) => {
289
- const commands = c.get('commands');
332
+ const ws = c.get('ws');
290
333
  const key = c.req.param('key');
291
334
  if (!key) {
292
335
  return c.text('No search key', 400);
293
336
  }
294
337
 
295
338
  try {
296
- await cardService.deleteCard(commands, key);
339
+ await cardService.deleteCard(ws, key);
297
340
  return new Response(null, { status: 204 });
298
341
  } catch (error) {
299
342
  return c.json(
@@ -341,7 +384,7 @@ router.post('/:key', requireRole(UserRole.Editor), async (c) => {
341
384
 
342
385
  try {
343
386
  const result = await cardService.createCard(
344
- c.get('commands'),
387
+ c.get('ws'),
345
388
  body.template,
346
389
  key,
347
390
  );
@@ -385,7 +428,7 @@ router.post('/:key', requireRole(UserRole.Editor), async (c) => {
385
428
  * description: Server error
386
429
  */
387
430
  router.post('/:key/attachments', requireRole(UserRole.Editor), async (c) => {
388
- const commands = c.get('commands');
431
+ const ws = c.get('ws');
389
432
  const key = c.req.param('key');
390
433
 
391
434
  try {
@@ -396,7 +439,7 @@ router.post('/:key/attachments', requireRole(UserRole.Editor), async (c) => {
396
439
  }
397
440
 
398
441
  const result = await cardService.uploadAttachments(
399
- commands,
442
+ ws,
400
443
  key,
401
444
  files as File[],
402
445
  );
@@ -442,15 +485,11 @@ router.delete(
442
485
  '/:key/attachments/:filename',
443
486
  requireRole(UserRole.Editor),
444
487
  async (c) => {
445
- const commands = c.get('commands');
488
+ const ws = c.get('ws');
446
489
  const { key, filename } = c.req.param();
447
490
 
448
491
  try {
449
- const result = await cardService.removeAttachment(
450
- commands,
451
- key,
452
- filename,
453
- );
492
+ const result = await cardService.removeAttachment(ws, key, filename);
454
493
  return c.json(result);
455
494
  } catch (error) {
456
495
  return c.json(
@@ -466,54 +505,6 @@ router.delete(
466
505
  },
467
506
  );
468
507
 
469
- /**
470
- * @swagger
471
- * /api/cards/{key}/attachments/{filename}/open:
472
- * post:
473
- * summary: Open an attachment using the system's default application
474
- * parameters:
475
- * - name: key
476
- * in: path
477
- * required: true
478
- * schema:
479
- * type: string
480
- * - name: filename
481
- * in: path
482
- * required: true
483
- * schema:
484
- * type: string
485
- * responses:
486
- * 200:
487
- * description: Attachment opened successfully
488
- * 400:
489
- * description: Invalid request
490
- * 500:
491
- * description: Server error
492
- */
493
- router.post(
494
- '/:key/attachments/:filename/open',
495
- requireRole(UserRole.Reader),
496
- async (c) => {
497
- const commands = c.get('commands');
498
- const { key, filename } = c.req.param();
499
-
500
- try {
501
- const result = await cardService.openAttachment(commands, key, filename);
502
- return c.json(result);
503
- } catch (error) {
504
- return c.json(
505
- {
506
- error:
507
- error instanceof Error
508
- ? error.message
509
- : 'Failed to open attachment',
510
- },
511
- 500,
512
- );
513
- }
514
- },
515
- );
516
-
517
508
  /**
518
509
  * @swagger
519
510
  * /api/cards/{key}/parse:
@@ -542,7 +533,7 @@ router.post(
542
533
  * description: Server error
543
534
  */
544
535
  router.post('/:key/parse', requireRole(UserRole.Reader), async (c) => {
545
- const commands = c.get('commands');
536
+ const ws = c.get('ws');
546
537
  const key = c.req.param('key');
547
538
  const { content } = await c.req.json();
548
539
 
@@ -551,7 +542,7 @@ router.post('/:key/parse', requireRole(UserRole.Reader), async (c) => {
551
542
  }
552
543
 
553
544
  try {
554
- const result = await cardService.parseContent(commands, key, content);
545
+ const result = await cardService.parseContent(ws, key, content);
555
546
  return c.json(result);
556
547
  } catch (error) {
557
548
  return c.json(
@@ -600,13 +591,13 @@ router.post(
600
591
  requireRole(UserRole.Editor),
601
592
  zValidator('json', createLinkSchema),
602
593
  async (c) => {
603
- const commands = c.get('commands');
594
+ const ws = c.get('ws');
604
595
  const key = c.req.param('key');
605
596
  const { toCard, linkType, description, direction } = c.req.valid('json');
606
597
 
607
598
  try {
608
599
  const result = await cardService.createLink(
609
- commands,
600
+ ws,
610
601
  key,
611
602
  toCard,
612
603
  linkType,
@@ -662,13 +653,13 @@ router.delete(
662
653
  requireRole(UserRole.Editor),
663
654
  zValidator('json', removeLinkSchema),
664
655
  async (c) => {
665
- const commands = c.get('commands');
656
+ const ws = c.get('ws');
666
657
  const key = c.req.param('key');
667
658
  const { toCard, linkType, description, direction } = c.req.valid('json');
668
659
 
669
660
  try {
670
661
  const result = await cardService.removeLink(
671
- commands,
662
+ ws,
672
663
  key,
673
664
  toCard,
674
665
  linkType,
@@ -734,7 +725,7 @@ router.put(
734
725
  requireRole(UserRole.Editor),
735
726
  zValidator('json', updateLinkSchema),
736
727
  async (c) => {
737
- const commands = c.get('commands');
728
+ const ws = c.get('ws');
738
729
  const key = c.req.param('key');
739
730
 
740
731
  const {
@@ -750,7 +741,7 @@ router.put(
750
741
 
751
742
  try {
752
743
  const result = await cardService.updateLink(
753
- commands,
744
+ ws,
754
745
  key,
755
746
  toCard,
756
747
  linkType,
@@ -802,11 +793,11 @@ router.get(
802
793
  '/:key/a/:attachment',
803
794
  requireRole(UserRole.Reader),
804
795
  ssgParams(async (c: Context) => {
805
- const commands = c.get('commands');
806
- return await cardService.findRelevantAttachments(commands, c.get('tree'));
796
+ const ws = c.get('ws');
797
+ return await cardService.findRelevantAttachments(ws, c.get('tree'));
807
798
  }),
808
799
  async (c) => {
809
- const commands = c.get('commands');
800
+ const ws = c.get('ws');
810
801
  const { key, attachment } = c.req.param();
811
802
  const filename = decodeURI(attachment);
812
803
 
@@ -816,7 +807,7 @@ router.get(
816
807
 
817
808
  try {
818
809
  const attachmentResponse = await cardService.getAttachment(
819
- commands,
810
+ ws,
820
811
  key,
821
812
  filename,
822
813
  );
@@ -843,55 +834,4 @@ router.get(
843
834
  }
844
835
  },
845
836
  );
846
- /**
847
- * @swagger
848
- * /api/cards/{key}/presence:
849
- * get:
850
- * summary: SSE stream of users currently viewing or editing this card
851
- * parameters:
852
- * - name: key
853
- * in: path
854
- * required: true
855
- * description: Card key (string)
856
- * - name: mode
857
- * in: query
858
- * required: false
859
- * schema:
860
- * type: string
861
- * enum: [viewing, editing]
862
- * description: Whether the user is viewing or editing (default: viewing)
863
- * responses:
864
- * 200:
865
- * description: SSE stream with presence events
866
- */
867
- router.get('/:key/presence', requireRole(UserRole.Reader), (c) => {
868
- const key = c.req.param('key');
869
- const mode = c.req.query('mode') === 'editing' ? 'editing' : 'viewing';
870
- const user = c.get('user');
871
-
872
- if (!key) {
873
- return c.text('No card key', 400);
874
- }
875
-
876
- return streamSSE(c, async (stream) => {
877
- const connId = presenceStore.add(
878
- key,
879
- user,
880
- mode,
881
- (data) => void stream.writeSSE(data),
882
- );
883
-
884
- let aborted = false;
885
- stream.onAbort(() => {
886
- aborted = true;
887
- presenceStore.remove(key, connId);
888
- });
889
-
890
- // Keep connection alive with periodic heartbeat
891
- while (!aborted) {
892
- await stream.write(': hb\n\n');
893
- await stream.sleep(30000);
894
- }
895
- });
896
- });
897
837
  export default router;