@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 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/domain/workflows/service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAIF,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAwB,EACxB,YAAoB;IAEpB,MAAM,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/domain/workflows/service.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,yCAAyC;AAIzC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAa,EAAE,YAAoB;IACtE,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;AAC3D,CAAC"}
package/dist/export.d.ts CHANGED
@@ -1,18 +1,5 @@
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
- */
13
- import type { CommandManager } from '@cyberismo/data-handler';
14
- import type { ProjectRegistry } from './project-registry.js';
15
- import type { QueryResult } from '@cyberismo/data-handler/types/queries';
1
+ import { type ProjectDirectory, type Workspace } from '@cyberismo/data-handler';
2
+ import type { QueryResult, ProjectErrors } from '@cyberismo/model';
16
3
  import type { TreeOptions } from './types.js';
17
4
  export interface ExportSiteOptions extends TreeOptions {
18
5
  defaultProject?: string;
@@ -25,23 +12,23 @@ export declare function reset(): void;
25
12
  /**
26
13
  * Get the card query result for a given card key. Should only be called during
27
14
  * static site generation
28
- * @param commands - CommandManager instance for the project.
15
+ * @param ws - Handle of the project.
29
16
  * @param cardKey - Key of the card to get the query result for.
30
17
  * @returns The card query result for the given card key.
31
18
  */
32
- export declare function getCardQueryResult(commands: CommandManager, cardKey?: string): Promise<QueryResult<'card'>[]>;
19
+ export declare function getCardQueryResult(ws: Workspace, cardKey?: string): Promise<QueryResult<'card'>[]>;
33
20
  /**
34
21
  * Export the site to a given directory.
35
22
  * Note: Do not call this function in parallel.
36
- * @param registry - ProjectRegistry holding all project CommandManagers.
23
+ * @param directory - Directory the exported projects are opened from.
37
24
  * @param exportDir - Directory to export to.
38
25
  * @param options - Export options.
39
26
  * @param options.recursive - Whether to export cards recursively.
40
27
  * @param options.cardKey - Key of the card to export. If not provided, all cards will be exported.
41
28
  * @param options.defaultProject - Default project prefix to write into config.json.
42
29
  * @param onProgress - Optional progress callback function.
43
- * @returns An object containing any errors that occurred during export.
30
+ * @returns Errors that occurred during export, grouped by project.
44
31
  */
45
- export declare function exportSite(registry: ProjectRegistry, exportDir?: string, options?: ExportSiteOptions, onProgress?: (current: number, total: number) => void): Promise<{
46
- errors: string[];
32
+ export declare function exportSite(directory: ProjectDirectory, exportDir?: string, options?: ExportSiteOptions, onProgress?: (current: number, total: number) => void): Promise<{
33
+ errors: ProjectErrors[];
47
34
  }>;
package/dist/export.js CHANGED
@@ -1,23 +1,17 @@
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
  import fs from 'node:fs/promises';
4
+ import { SYSTEM_ACTOR, } from '@cyberismo/data-handler';
14
5
  import { createApp } from './app.js';
15
6
  import { MockAuthProvider } from './auth/mock.js';
16
7
  import { cp } from 'node:fs/promises';
17
8
  import { staticFrontendDirRelative } from './utils.js';
18
9
  import { toSSG } from 'hono/ssg';
19
10
  import { findAllCards, findRelevantAttachments, } from './domain/cards/service.js';
11
+ import { CARD_ROUTES_PER_KEY } from './domain/cards/lib.js';
20
12
  const _cardQueryCache = new Map();
13
+ /** Label for errors from routes that belong to no project. */
14
+ const SHARED_ROUTES = '(shared)';
21
15
  const OVERHEAD_CALLS = 6; // estimated number of overhead calls during export in addition to card exports
22
16
  /**
23
17
  * DO NO USE DIRECTLY. This resets the callOnce map, allowing you to redo the export.
@@ -29,14 +23,14 @@ export function reset() {
29
23
  /**
30
24
  * Get the card query result for a given card key. Should only be called during
31
25
  * static site generation
32
- * @param commands - CommandManager instance for the project.
26
+ * @param ws - Handle of the project.
33
27
  * @param cardKey - Key of the card to get the query result for.
34
28
  * @returns The card query result for the given card key.
35
29
  */
36
- export async function getCardQueryResult(commands, cardKey) {
37
- const prefix = commands.project.configuration.cardKeyPrefix;
30
+ export async function getCardQueryResult(ws, cardKey) {
31
+ const prefix = ws.settings.prefix;
38
32
  if (!_cardQueryCache.has(prefix)) {
39
- _cardQueryCache.set(prefix, commands.calculateCmd.runQuery('card', 'exportedSite', {}));
33
+ _cardQueryCache.set(prefix, ws.queries.runQuery('card', 'exportedSite', {}));
40
34
  }
41
35
  return _cardQueryCache.get(prefix).then((results) => {
42
36
  if (!cardKey) {
@@ -52,84 +46,95 @@ export async function getCardQueryResult(commands, cardKey) {
52
46
  /**
53
47
  * Export the site to a given directory.
54
48
  * Note: Do not call this function in parallel.
55
- * @param registry - ProjectRegistry holding all project CommandManagers.
49
+ * @param directory - Directory the exported projects are opened from.
56
50
  * @param exportDir - Directory to export to.
57
51
  * @param options - Export options.
58
52
  * @param options.recursive - Whether to export cards recursively.
59
53
  * @param options.cardKey - Key of the card to export. If not provided, all cards will be exported.
60
54
  * @param options.defaultProject - Default project prefix to write into config.json.
61
55
  * @param onProgress - Optional progress callback function.
62
- * @returns An object containing any errors that occurred during export.
56
+ * @returns Errors that occurred during export, grouped by project.
63
57
  */
64
- export async function exportSite(registry, exportDir, options, onProgress) {
58
+ export async function exportSite(directory, exportDir, options, onProgress) {
65
59
  exportDir = exportDir || 'static';
66
60
  const { defaultProject, ...treeOpts } = options ?? {};
67
61
  const opts = {
68
62
  recursive: false,
69
63
  ...treeOpts,
70
64
  };
71
- if (defaultProject && !registry.has(defaultProject)) {
72
- throw new Error(`Default project '${defaultProject}' is not in the registry. Available: ${registry
73
- .list()
74
- .map((p) => p.prefix)
75
- .join(', ')}`);
65
+ const prefixes = (await directory.list()).map((p) => p.prefix);
66
+ if (defaultProject && !prefixes.includes(defaultProject)) {
67
+ throw new Error(`Default project '${defaultProject}' is not in the registry. Available: ${prefixes.join(', ')}`);
76
68
  }
77
69
  if (defaultProject) {
78
70
  process.env.CYBERISMO_DEFAULT_PROJECT = defaultProject;
79
71
  }
80
- const app = createApp(new MockAuthProvider(), registry, opts, true);
72
+ const app = createApp(new MockAuthProvider(), directory, opts, prefixes);
81
73
  // copy whole frontend to the same directory
82
74
  await cp(staticFrontendDirRelative, exportDir, { recursive: true });
83
75
  reset();
84
76
  // estimate total based on the number of cards to export across all projects
85
77
  let total = OVERHEAD_CALLS;
86
- for (const commands of registry.values()) {
87
- const cards = await findAllCards(commands, opts);
88
- const attachments = await findRelevantAttachments(commands, opts);
89
- total += cards.length + attachments.length;
78
+ for (const prefix of prefixes) {
79
+ const ws = await directory.open(prefix, SYSTEM_ACTOR);
80
+ const cards = await findAllCards(ws, opts);
81
+ const attachments = await findRelevantAttachments(ws, opts);
82
+ total += cards.length * CARD_ROUTES_PER_KEY + attachments.length;
90
83
  }
91
- // Actual export with progress reporting
84
+ // One pass per project so an error is attributed to the project whose route
85
+ // produced it (the response itself carries no project). Shared routes get
86
+ // their own pass so each route is emitted exactly once.
87
+ const projectOf = (pathname) => prefixes.find((p) => {
88
+ const base = `/api/projects/${p}`;
89
+ return pathname === base || pathname.startsWith(`${base}/`);
90
+ });
92
91
  let done = 0;
93
92
  onProgress?.(done, total);
94
93
  const errors = [];
95
- await toSSG(app, fs, {
96
- dir: exportDir,
97
- concurrency: 5,
98
- plugins: [
99
- {
100
- beforeRequestHook: (req) => {
101
- const url = new URL(req.url);
102
- // Skip MCP routes — they require session state and are not part of the static site
103
- if (url.pathname.startsWith('/mcp')) {
104
- return false;
105
- }
106
- // Skip OIDC/well-known routes — not relevant for static export
107
- if (url.pathname.startsWith('/.well-known')) {
108
- return false;
109
- }
110
- return req;
111
- },
112
- afterResponseHook: async (response) => {
113
- if (![200, 201, 204].includes(response.status)) {
114
- const error = await response.json();
115
- if (typeof error === 'object' &&
116
- error != null &&
117
- 'error' in error &&
118
- typeof error.error === 'string') {
119
- errors.push(error.error);
94
+ for (const scope of [undefined, ...prefixes]) {
95
+ const scopeErrors = [];
96
+ await toSSG(app, fs, {
97
+ dir: exportDir,
98
+ concurrency: 5,
99
+ plugins: [
100
+ {
101
+ beforeRequestHook: (req) => {
102
+ const url = new URL(req.url);
103
+ // Skip MCP routes — they require session state and are not part of the static site
104
+ if (url.pathname.startsWith('/mcp')) {
105
+ return false;
106
+ }
107
+ // Skip OIDC/well-known routes — not relevant for static export
108
+ if (url.pathname.startsWith('/.well-known')) {
109
+ return false;
110
+ }
111
+ return projectOf(url.pathname) === scope ? req : false;
112
+ },
113
+ afterResponseHook: async (response) => {
114
+ if (![200, 201, 204].includes(response.status)) {
115
+ const error = await response.json();
116
+ if (typeof error === 'object' &&
117
+ error != null &&
118
+ 'error' in error &&
119
+ typeof error.error === 'string') {
120
+ scopeErrors.push(error.error);
121
+ }
122
+ return false; // ignore route
120
123
  }
121
- return false; // ignore route
122
- }
123
- done++;
124
- if (done > total) {
125
- total = done; // adjust total if underestimated
126
- }
127
- onProgress?.(done, total);
128
- return response;
124
+ done++;
125
+ if (done > total) {
126
+ total = done; // adjust total if underestimated
127
+ }
128
+ onProgress?.(done, total);
129
+ return response;
130
+ },
129
131
  },
130
- },
131
- ],
132
- });
132
+ ],
133
+ });
134
+ if (scopeErrors.length > 0) {
135
+ errors.push({ prefix: scope ?? SHARED_ROUTES, errors: scopeErrors });
136
+ }
137
+ }
133
138
  return {
134
139
  errors,
135
140
  };
@@ -1 +1 @@
1
- {"version":3,"file":"export.js","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAEF,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGlC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,OAAO,EACL,YAAY,EACZ,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AAMnC,MAAM,eAAe,GAAG,IAAI,GAAG,EAA0C,CAAC;AAC1E,MAAM,cAAc,GAAG,CAAC,CAAC,CAAC,+EAA+E;AAEzG;;;GAGG;AACH,MAAM,UAAU,KAAK;IACnB,eAAe,CAAC,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAwB,EACxB,OAAgB;IAEhB,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC;IAC5D,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,eAAe,CAAC,GAAG,CACjB,MAAM,EACN,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,CAAC,CAC3D,CAAC;IACJ,CAAC;IACD,OAAO,eAAe,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;QACnD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,QAAQ,OAAO,YAAY,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,QAAyB,EACzB,SAAkB,EAClB,OAA2B,EAC3B,UAAqD;IAErD,SAAS,GAAG,SAAS,IAAI,QAAQ,CAAC;IAClC,MAAM,EAAE,cAAc,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IACtD,MAAM,IAAI,GAAgB;QACxB,SAAS,EAAE,KAAK;QAChB,GAAG,QAAQ;KACZ,CAAC;IAEF,IAAI,cAAc,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CACb,oBAAoB,cAAc,wCAAwC,QAAQ;aAC/E,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;aACpB,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;IACJ,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,cAAc,CAAC;IACzD,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAEpE,4CAA4C;IAC5C,MAAM,EAAE,CAAC,yBAAyB,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpE,KAAK,EAAE,CAAC;IAER,4EAA4E;IAC5E,IAAI,KAAK,GAAG,cAAc,CAAC;IAC3B,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAClE,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAC7C,CAAC;IAED,wCAAwC;IACxC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE;QACnB,GAAG,EAAE,SAAS;QACd,WAAW,EAAE,CAAC;QACd,OAAO,EAAE;YACP;gBACE,iBAAiB,EAAE,CAAC,GAAG,EAAE,EAAE;oBACzB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7B,mFAAmF;oBACnF,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;wBACpC,OAAO,KAAK,CAAC;oBACf,CAAC;oBACD,+DAA+D;oBAC/D,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;wBAC5C,OAAO,KAAK,CAAC;oBACf,CAAC;oBACD,OAAO,GAAG,CAAC;gBACb,CAAC;gBACD,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;oBACpC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC/C,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;wBACpC,IACE,OAAO,KAAK,KAAK,QAAQ;4BACzB,KAAK,IAAI,IAAI;4BACb,OAAO,IAAI,KAAK;4BAChB,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAC/B,CAAC;4BACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBAC3B,CAAC;wBACD,OAAO,KAAK,CAAC,CAAC,eAAe;oBAC/B,CAAC;oBACD,IAAI,EAAE,CAAC;oBACP,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;wBACjB,KAAK,GAAG,IAAI,CAAC,CAAC,iCAAiC;oBACjD,CAAC;oBACD,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBAC1B,OAAO,QAAQ,CAAC;gBAClB,CAAC;aACF;SACF;KACF,CAAC,CAAC;IACH,OAAO;QACL,MAAM;KACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,10 +1,9 @@
1
1
  import type { AuthProvider } from './auth/types.js';
2
- import type { ProjectRegistry } from './project-registry.js';
2
+ import type { ProjectDirectory } from '@cyberismo/data-handler';
3
3
  export { MockAuthProvider } from './auth/mock.js';
4
4
  export type { MockUserConfig } from './auth/mock.js';
5
5
  export type { AuthProvider } from './auth/types.js';
6
6
  export { exportSite, type ExportSiteOptions } from './export.js';
7
- export { ProjectRegistry } from './project-registry.js';
8
7
  /**
9
8
  * Preview the exported site
10
9
  * @param dir - Directory to preview
@@ -14,7 +13,7 @@ export declare function previewSite(dir: string, findPort?: boolean): Promise<vo
14
13
  /**
15
14
  * Start the server
16
15
  * @param authProvider - Authentication provider
17
- * @param registry - ProjectRegistry holding all project CommandManagers
16
+ * @param directory - Directory the projects are opened from
18
17
  * @param findPort - If true, find a free port
19
18
  */
20
- export declare function startServer(authProvider: AuthProvider, registry: ProjectRegistry, findPort?: boolean, multiProjectRoot?: string): Promise<void>;
19
+ export declare function startServer(authProvider: AuthProvider, directory: ProjectDirectory, findPort?: boolean, multiProjectRoot?: string): Promise<void>;
package/dist/index.js CHANGED
@@ -1,27 +1,16 @@
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
- */
13
- import { serve } from '@hono/node-server';
1
+ // SPDX-FileCopyrightText: Cyberismo Ltd and contributors
2
+ // SPDX-License-Identifier: AGPL-3.0-only
14
3
  import { Hono } from 'hono';
15
4
  import { serveStatic } from '@hono/node-server/serve-static';
16
5
  import path from 'node:path';
17
6
  import { readFile } from 'node:fs/promises';
18
- import { findFreePort } from './utils.js';
7
+ import { listen } from './utils.js';
8
+ import { startPolicyPolling } from './overlay.js';
19
9
  import { createApp } from './app.js';
20
10
  export { MockAuthProvider } from './auth/mock.js';
21
11
  export { exportSite } from './export.js';
22
- export { ProjectRegistry } from './project-registry.js';
23
12
  const DEFAULT_PORT = 3000;
24
- const DEFAULT_MAX_PORT = DEFAULT_PORT + 100;
13
+ const MAX_PORT_ATTEMPTS = 100;
25
14
  /**
26
15
  * Preview the exported site
27
16
  * @param dir - Directory to preview
@@ -37,40 +26,30 @@ export async function previewSite(dir, findPort = true) {
37
26
  const file = await readFile(path.join(dir, 'index.html'));
38
27
  return c.html(file.toString());
39
28
  });
40
- let port = parseInt(process.env.PORT || DEFAULT_PORT.toString(), 10);
41
- if (findPort) {
42
- port = await findFreePort(port, DEFAULT_MAX_PORT);
43
- }
44
- startApp(app, port);
29
+ const port = parseInt(process.env.PORT || DEFAULT_PORT.toString(), 10);
30
+ await startApp(app, port, findPort);
45
31
  }
46
32
  /**
47
33
  * Start the server
48
34
  * @param authProvider - Authentication provider
49
- * @param registry - ProjectRegistry holding all project CommandManagers
35
+ * @param directory - Directory the projects are opened from
50
36
  * @param findPort - If true, find a free port
51
37
  */
52
- export async function startServer(authProvider, registry, findPort = true, multiProjectRoot) {
38
+ export async function startServer(authProvider, directory, findPort = true, multiProjectRoot) {
53
39
  const useOsAssigned = process.env.CYBERISMO_E2E_OSPORT === 'true';
54
- let port = useOsAssigned
40
+ const port = useOsAssigned
55
41
  ? 0
56
42
  : parseInt(process.env.PORT || DEFAULT_PORT.toString(), 10);
57
- if (findPort && !useOsAssigned) {
58
- port = await findFreePort(port, DEFAULT_MAX_PORT);
59
- }
60
- const app = createApp(authProvider, registry, undefined, false, multiProjectRoot);
61
- startApp(app, port);
43
+ startPolicyPolling(async () => (await directory.list()).map((p) => ({ prefix: p.prefix })));
44
+ const app = createApp(authProvider, directory, undefined, undefined, multiProjectRoot);
45
+ await startApp(app, port, findPort && !useOsAssigned);
62
46
  }
63
- function startApp(app, port) {
64
- serve({
65
- fetch: app.fetch,
66
- port: port,
67
- hostname: process.env.HOST || '127.0.0.1',
68
- }, (info) => {
69
- console.log(`Running Cyberismo app on http://localhost:${info.port}`);
70
- console.log('Press Control+C to stop.');
71
- // When spawned with stdio: [..., 'ipc'], publish the bound port to the parent.
72
- // No-op in normal startup (process.send is undefined without an IPC channel).
73
- process.send?.({ type: 'listening', port: info.port });
74
- });
47
+ async function startApp(app, port, findPort) {
48
+ const bound = await listen(app.fetch, port, process.env.HOST || '127.0.0.1', findPort ? port + MAX_PORT_ATTEMPTS : port);
49
+ console.log(`Running Cyberismo app on http://localhost:${bound.port}`);
50
+ console.log('Press Control+C to stop.');
51
+ // When spawned with stdio: [..., 'ipc'], publish the bound port to the parent.
52
+ // No-op in normal startup (process.send is undefined without an IPC channel).
53
+ process.send?.({ type: 'listening', port: bound.port });
75
54
  }
76
55
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/main.js CHANGED
@@ -1,21 +1,11 @@
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
- */
13
- import { scanForProjects } from '@cyberismo/data-handler';
1
+ // SPDX-FileCopyrightText: Cyberismo Ltd and contributors
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { localFolder } from '@cyberismo/data-handler';
14
4
  import { startServer } from './index.js';
15
5
  import { exportSite } from './export.js';
16
6
  import { MockAuthProvider } from './auth/mock.js';
17
7
  import { KeycloakAuthProvider } from './auth/keycloak.js';
18
- import { ProjectRegistry } from './project-registry.js';
8
+ import { formatProjectErrors } from '@cyberismo/model';
19
9
  import { gitOptionsFromEnv } from './utils.js';
20
10
  import { parseArgs } from 'node:util';
21
11
  import dotenv from 'dotenv';
@@ -28,7 +18,7 @@ function createAuthProvider() {
28
18
  process.exit(1);
29
19
  }
30
20
  if (authMode === 'mock') {
31
- return new MockAuthProvider();
21
+ return new MockAuthProvider({ roster: true });
32
22
  }
33
23
  if (authMode === 'idp') {
34
24
  const issuer = process.env.OIDC_ISSUER;
@@ -43,9 +33,16 @@ function createAuthProvider() {
43
33
  process.exit(1);
44
34
  }
45
35
  const projectPath = process.env.npm_config_project_path || process.cwd();
46
- let projects;
36
+ const { values: args } = parseArgs({
37
+ options: {
38
+ export: { type: 'boolean', default: false },
39
+ 'default-project': { type: 'string' },
40
+ },
41
+ strict: false,
42
+ });
43
+ let opened;
47
44
  try {
48
- projects = await scanForProjects(projectPath);
45
+ opened = await localFolder(projectPath, args.export ? undefined : gitOptionsFromEnv());
49
46
  }
50
47
  catch (error) {
51
48
  console.error(error instanceof Error
@@ -53,28 +50,35 @@ catch (error) {
53
50
  : `Failed to scan for projects in '${projectPath}'`);
54
51
  process.exit(1);
55
52
  }
56
- const { values: args } = parseArgs({
57
- options: {
58
- export: { type: 'boolean', default: false },
59
- 'default-project': { type: 'string' },
60
- },
61
- strict: false,
62
- });
53
+ const { directory, failed } = opened;
63
54
  if (args.export) {
64
- if (projects.length === 0) {
55
+ const projects = await directory.list();
56
+ if (projects.length === 0 && failed.length === 0) {
65
57
  console.error('No projects found to export.');
66
58
  process.exit(1);
67
59
  }
68
- const registry = await ProjectRegistry.fromScannedProjects(projects);
69
- await exportSite(registry, undefined, {
70
- defaultProject: typeof args['default-project'] === 'string'
71
- ? args['default-project']
72
- : undefined,
60
+ const defaultProject = typeof args['default-project'] === 'string'
61
+ ? args['default-project']
62
+ : undefined;
63
+ if (projects.length === 0 ||
64
+ failed.some((f) => f.prefix === defaultProject)) {
65
+ console.error(formatProjectErrors(failed));
66
+ process.exit(1);
67
+ }
68
+ const { errors: exportErrors } = await exportSite(directory, undefined, {
69
+ defaultProject,
73
70
  });
71
+ const errors = [...failed, ...exportErrors];
72
+ if (errors.length > 0) {
73
+ console.error(formatProjectErrors(errors));
74
+ process.exit(1);
75
+ }
74
76
  }
75
77
  else {
76
- const registry = await ProjectRegistry.fromScannedProjects(projects, gitOptionsFromEnv());
78
+ if (failed.length > 0) {
79
+ console.error(formatProjectErrors(failed));
80
+ }
77
81
  const authProvider = createAuthProvider();
78
- await startServer(authProvider, registry, true, projectPath);
82
+ await startServer(authProvider, directory, true, projectPath);
79
83
  }
80
84
  //# sourceMappingURL=main.js.map
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,3 @@
1
- /**
2
- Cyberismo
3
- Copyright © Cyberismo Ltd and contributors 2026
4
- This program is free software: you can redistribute it and/or modify it under
5
- the terms of the GNU Affero General Public License version 3 as published by
6
- the Free Software Foundation. This program is distributed in the hope that it
7
- will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
8
- of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9
- See the GNU Affero General Public License for more details.
10
- You should have received a copy of the GNU Affero General Public
11
- License along with this program. If not, see <https://www.gnu.org/licenses/>.
12
- */
13
1
  import type { Context, MiddlewareHandler } from 'hono';
14
2
  import type { UserInfo } from '../types.js';
15
3
  import { UserRole } from '../types.js';
@@ -17,6 +5,7 @@ import type { AuthProvider } from '../auth/types.js';
17
5
  declare module 'hono' {
18
6
  interface ContextVariableMap {
19
7
  user: UserInfo;
8
+ tokenExp: number;
20
9
  }
21
10
  }
22
11
  /**
@@ -24,6 +13,10 @@ declare module 'hono' {
24
13
  * Validates the user and attaches user info to the context.
25
14
  */
26
15
  export declare function createAuthMiddleware(provider: AuthProvider): MiddlewareHandler;
16
+ /**
17
+ * Check if a role meets or exceeds a minimum role in the hierarchy.
18
+ */
19
+ export declare function isAtLeastRole(role: UserRole, minimumRole: UserRole): boolean;
27
20
  /**
28
21
  * Check if the current user has at least the required role
29
22
  */
@@ -1,31 +1,31 @@
1
- /**
2
- Cyberismo
3
- Copyright © Cyberismo Ltd and contributors 2026
4
- This program is free software: you can redistribute it and/or modify it under
5
- the terms of the GNU Affero General Public License version 3 as published by
6
- the Free Software Foundation. This program is distributed in the hope that it
7
- will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
8
- of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9
- See the GNU Affero General Public License for more details.
10
- 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
  import { UserRole } from '../types.js';
4
+ import { isReadOnly } from '../overlay.js';
14
5
  const roleLevel = {
15
6
  [UserRole.Connector]: -1,
16
7
  [UserRole.Reader]: 0,
17
8
  [UserRole.Editor]: 1,
18
9
  [UserRole.Admin]: 2,
19
10
  };
11
+ /** Everyone below administrator is a reader; lifting read-only is their job. */
12
+ function applyReadOnly(user) {
13
+ if (user.role === UserRole.Admin) {
14
+ return user;
15
+ }
16
+ return { ...user, role: UserRole.Reader };
17
+ }
20
18
  /**
21
19
  * Create authentication middleware from an AuthProvider.
22
20
  * Validates the user and attaches user info to the context.
23
21
  */
24
22
  export function createAuthMiddleware(provider) {
25
23
  return async (c, next) => {
26
- const user = await provider.authenticate(c.req.raw);
27
- if (user) {
28
- c.set('user', user);
24
+ const result = await provider.authenticate(c.req.raw);
25
+ if (result) {
26
+ const { exp, ...user } = result;
27
+ c.set('user', isReadOnly(c.req.path) ? applyReadOnly(user) : user);
28
+ c.set('tokenExp', exp);
29
29
  }
30
30
  else {
31
31
  // RFC 9728 §5.1: include resource_metadata in WWW-Authenticate
@@ -43,6 +43,12 @@ export function createAuthMiddleware(provider) {
43
43
  await next();
44
44
  };
45
45
  }
46
+ /**
47
+ * Check if a role meets or exceeds a minimum role in the hierarchy.
48
+ */
49
+ export function isAtLeastRole(role, minimumRole) {
50
+ return roleLevel[role] >= roleLevel[minimumRole];
51
+ }
46
52
  /**
47
53
  * Check if the current user has at least the required role
48
54
  */
@@ -51,7 +57,7 @@ export function hasRole(c, minimumRole) {
51
57
  if (!user) {
52
58
  return false;
53
59
  }
54
- return roleLevel[user.role] >= roleLevel[minimumRole];
60
+ return isAtLeastRole(user.role, minimumRole);
55
61
  }
56
62
  /**
57
63
  * Require minimum role middleware factory.