@cyberismo/backend 0.0.27 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.d.ts +1 -1
- package/dist/app.js +10 -4
- package/dist/app.js.map +1 -1
- package/dist/auth/index.d.ts +1 -1
- package/dist/auth/index.js +1 -1
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/keycloak.js +3 -0
- package/dist/auth/keycloak.js.map +1 -1
- package/dist/auth/mock.d.ts +8 -1
- package/dist/auth/mock.js +51 -2
- package/dist/auth/mock.js.map +1 -1
- package/dist/common/validationSchemas.d.ts +3 -1
- package/dist/common/validationSchemas.js +1 -0
- package/dist/common/validationSchemas.js.map +1 -1
- package/dist/domain/calculations/index.js +1 -1
- package/dist/domain/calculations/index.js.map +1 -1
- package/dist/domain/cardTypes/service.d.ts +1 -1
- package/dist/domain/cardTypes/service.js +26 -4
- package/dist/domain/cardTypes/service.js.map +1 -1
- package/dist/domain/cards/lib.js +7 -5
- package/dist/domain/cards/lib.js.map +1 -1
- package/dist/domain/cards/service.js +3 -6
- package/dist/domain/cards/service.js.map +1 -1
- package/dist/domain/project/index.js +32 -1
- package/dist/domain/project/index.js.map +1 -1
- package/dist/domain/project/schema.d.ts +11 -0
- package/dist/domain/project/schema.js +20 -0
- package/dist/domain/project/schema.js.map +1 -1
- package/dist/domain/project/service.d.ts +23 -1
- package/dist/domain/project/service.js +52 -1
- package/dist/domain/project/service.js.map +1 -1
- package/dist/domain/projects/index.d.ts +1 -1
- package/dist/domain/projects/index.js +66 -3
- package/dist/domain/projects/index.js.map +1 -1
- package/dist/domain/projects/schema.d.ts +22 -0
- package/dist/domain/projects/schema.js +40 -0
- package/dist/domain/projects/schema.js.map +1 -0
- package/dist/domain/projects/service.d.ts +37 -0
- package/dist/domain/projects/service.js +53 -0
- package/dist/domain/projects/service.js.map +1 -0
- package/dist/domain/resources/index.js +1 -1
- package/dist/domain/resources/index.js.map +1 -1
- package/dist/domain/resources/schema.d.ts +4 -1
- package/dist/domain/resources/schema.js +4 -2
- package/dist/domain/resources/schema.js.map +1 -1
- package/dist/domain/resources/service.d.ts +1 -1
- package/dist/domain/resources/service.js +7 -2
- package/dist/domain/resources/service.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/main.js +0 -4
- package/dist/main.js.map +1 -1
- package/dist/middleware/auth.d.ts +5 -3
- package/dist/middleware/auth.js +7 -4
- package/dist/middleware/auth.js.map +1 -1
- package/dist/middleware/zvalidator.d.ts +1 -1
- package/dist/project-registry.d.ts +2 -1
- package/dist/project-registry.js +4 -2
- package/dist/project-registry.js.map +1 -1
- package/dist/public/THIRD-PARTY.txt +932 -1022
- package/dist/public/assets/abnfDiagram-VRR7QNED-Djr4KJ5E.js +1 -0
- package/dist/public/assets/arc-DrR4k_H-.js +1 -0
- package/dist/public/assets/architecture-TIHT7OUA-XL6N-4o9.js +1 -0
- package/dist/public/assets/architectureDiagram-ZJ3FMSHR-DsMU2Uwa.js +36 -0
- package/dist/public/assets/blockDiagram-677ZJIJ3-DRBmQUQJ.js +132 -0
- package/dist/public/assets/c4Diagram-LMCZKHZV-E0rM02LD.js +10 -0
- package/dist/public/assets/channel-D5fnImJy.js +1 -0
- package/dist/public/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- package/dist/public/assets/chunk-32BRIVSS-BnDY0aSV.js +1 -0
- package/dist/public/assets/chunk-52WLFC77-N5YugKaZ.js +10 -0
- package/dist/public/assets/chunk-5FCAYU7R-I3_t_Ic_.js +1 -0
- package/dist/public/assets/chunk-5HE753X5-Dxz40rzH.js +1 -0
- package/dist/public/assets/chunk-5JV3BV7I-CNwCKRLH.js +1 -0
- package/dist/public/assets/chunk-5TONJI2A-ezWQ_Z2j.js +2 -0
- package/dist/public/assets/{chunk-FMBD7UC4-Cgl-u-NC.js → chunk-5VM5RSS4-ZNzvKenW.js} +1 -1
- package/dist/public/assets/chunk-7BUUIJ7U-Bb538aSH.js +1 -0
- package/dist/public/assets/chunk-BIQX33UG-DS132-R_.js +1 -0
- package/dist/public/assets/chunk-C7G6YPKG-BN-cNjoj.js +1 -0
- package/dist/public/assets/chunk-CQNSW5MT-D8Mn1I73.js +1 -0
- package/dist/public/assets/chunk-CYSBUYHQ-Dc64Dwdo.js +1 -0
- package/dist/public/assets/chunk-EMLP6XTP-aIK0V8GX.js +1 -0
- package/dist/public/assets/chunk-EX3LRPZG-Db0XYyxy.js +231 -0
- package/dist/public/assets/chunk-FWX5IMBZ-BF_P2-Do.js +2 -0
- package/dist/public/assets/chunk-HOUHSVGY-L35GPy9G.js +1 -0
- package/dist/public/assets/chunk-ICXQ74PX-Bb8zaHde.js +2 -0
- package/dist/public/assets/chunk-JG7HCLWE-BtAXK3iQ.js +2 -0
- package/dist/public/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- package/dist/public/assets/chunk-KEIR6QF5-DEvma7oi.js +161 -0
- package/dist/public/assets/chunk-MOJQB5TN-D1shKbMs.js +88 -0
- package/dist/public/assets/chunk-MOZMSUNE-5FIqIBsY.js +1 -0
- package/dist/public/assets/chunk-OGEWGWER-BVIFy9xz.js +1 -0
- package/dist/public/assets/chunk-OSBZ3O6U-Cfd7kf1R.js +1 -0
- package/dist/public/assets/chunk-PUDLZKDR-Db3FSNR9.js +156 -0
- package/dist/public/assets/chunk-Q4XR5HBZ-BuKFRUzR.js +70 -0
- package/dist/public/assets/chunk-QBLGF6JB-DUGZXFh-.js +1 -0
- package/dist/public/assets/chunk-R7FJI6CG-D7mUd-qN.js +1 -0
- package/dist/public/assets/chunk-RYQCIY6F-C_3rESBd.js +1 -0
- package/dist/public/assets/chunk-U6XO7XAA-C3UhlwA1.js +2 -0
- package/dist/public/assets/chunk-V7JOEXUC-71b0ABpv.js +206 -0
- package/dist/public/assets/chunk-VAUOI2AC-C-GBw18h.js +1 -0
- package/dist/public/assets/chunk-VR4S4FIN-tUhbELKr.js +1 -0
- package/dist/public/assets/chunk-WYO6CB5R-BQoO62-B.js +127 -0
- package/dist/public/assets/chunk-XXDRQBXY-Co8n4ZHT.js +1 -0
- package/dist/public/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- package/dist/public/assets/chunk-YOTPTUD7-DhCRKU1A.js +1 -0
- package/dist/public/assets/chunk-ZGVPDNZ5-hpz2Ryq5.js +62 -0
- package/dist/public/assets/chunk-ZIRB5QZD-BpeS1aZ7.js +32 -0
- package/dist/public/assets/classDiagram-OUVF2IWQ-CXdVorPK.js +1 -0
- package/dist/public/assets/classDiagram-v2-EOCWNBFH-CXdVorPK.js +1 -0
- package/dist/public/assets/colors-Cg5Vh3br.js +1 -0
- package/dist/public/assets/cose-bilkent-JH36ORCC-4GoRbloS.js +1 -0
- package/dist/public/assets/cynefin-VYW2F7L2-BPH-25fI.js +1 -0
- package/dist/public/assets/cynefinDiagram-TSTJHNR4-PEf16euv.js +62 -0
- package/dist/public/assets/cytoscape.esm-C3UvhD5t.js +321 -0
- package/dist/public/assets/dagre-Buvkdvvj.js +1 -0
- package/dist/public/assets/dagre-VKFMJZFB-DPsCMBF1.js +4 -0
- package/dist/public/assets/defaultLocale-CNPGWpMu.js +1 -0
- package/dist/public/assets/diagram-FQU43EPY-DS-ryuRg.js +3 -0
- package/dist/public/assets/diagram-G47NLZAW-CzUoYkFf.js +24 -0
- package/dist/public/assets/diagram-NH7WQ7WH-MhGnE2fh.js +24 -0
- package/dist/public/assets/diagram-OA4YK3LP-CsQ9aFR_.js +30 -0
- package/dist/public/assets/diagram-WEI45ONY-Er3q49ew.js +41 -0
- package/dist/public/assets/dist-BzwexiH1.js +1 -0
- package/dist/public/assets/ebnfDiagram-CCIWWBDH-AnJAsk14.js +1 -0
- package/dist/public/assets/erDiagram-Q63AITRT-DulA16my.js +85 -0
- package/dist/public/assets/eventmodeling-45OFAUF4-CoIhTpHU.js +1 -0
- package/dist/public/assets/flowDiagram-23GEKE2U-BGMXUq18.js +1 -0
- package/dist/public/assets/ganttDiagram-NO4QXBWP-DAvCPT7_.js +292 -0
- package/dist/public/assets/gitGraph-TEB2WS4Q-BcPsZts5.js +1 -0
- package/dist/public/assets/gitGraphDiagram-IHSO6WYX-CksvJvsQ.js +106 -0
- package/dist/public/assets/{graphlib-B8gBHxth.js → graphlib-DS17s2tU.js} +1 -1
- package/dist/public/assets/index-H1CkT-JT.js +447 -0
- package/dist/public/assets/info-DKCQHKI2-7VGzrAVB.js +1 -0
- package/dist/public/assets/infoDiagram-FWYZ7A6U-D_by7lSL.js +2 -0
- package/dist/public/assets/init-ZlXS9mIS.js +1 -0
- package/dist/public/assets/{ishikawaDiagram-YF4QCWOH-D5HGS4h9.js → ishikawaDiagram-FXEZZL3T-CiLpASIW.js} +6 -6
- package/dist/public/assets/journeyDiagram-5HDEW3XC-DpvFmk7c.js +139 -0
- package/dist/public/assets/kanban-definition-HUTT4EX6-DYP_x6zD.js +89 -0
- package/dist/public/assets/{katex-Vhh-h91d.js → katex-DolUETbr.js} +3 -3
- package/dist/public/assets/{line-DNZMOnJ3.js → line-C8Sfsgt8.js} +1 -1
- package/dist/public/assets/linear-BWTvbP1l.js +1 -0
- package/dist/public/assets/map-BaFkSB1l.js +1 -0
- package/dist/public/assets/mermaid-parser.core--8614tkK.js +4 -0
- package/dist/public/assets/mindmap-definition-LN4V7U3C-3IAd4gp3.js +96 -0
- package/dist/public/assets/ordinal-BdBDtYTt.js +1 -0
- package/dist/public/assets/packet-7NZHBO7P-KYt33H0C.js +1 -0
- package/dist/public/assets/pegDiagram-2B236MQR-BQNFxYz2.js +1 -0
- package/dist/public/assets/pie-RZYD4A2V-xKz9s9I4.js +1 -0
- package/dist/public/assets/pieDiagram-ENE6RG2P-Cy13tg8_.js +39 -0
- package/dist/public/assets/quadrantDiagram-ABIIQ3AL-B3czMbdS.js +7 -0
- package/dist/public/assets/radar-I7S5WNFK-B4QTX-fX.js +1 -0
- package/dist/public/assets/railroad-3IZDKUUU-Co_9rPVC.js +1 -0
- package/dist/public/assets/railroad-abnf-AHOZXSZD-Bhy_c3ol.js +1 -0
- package/dist/public/assets/railroad-ebnf-EBAXGLYW-B9ENjG34.js +1 -0
- package/dist/public/assets/railroad-peg-LSFZ7HO6-CyJxDBsB.js +1 -0
- package/dist/public/assets/railroadDiagram-RFXS5EU6-M2j5SJF2.js +1 -0
- package/dist/public/assets/range-EplFIxc7.js +1 -0
- package/dist/public/assets/requirementDiagram-TGXJPOKE-CmvJWy_S.js +84 -0
- package/dist/public/assets/{rough.esm-CSKSodPl.js → rough.esm-By172zw-.js} +1 -1
- package/dist/public/assets/sankeyDiagram-HTMAVEWB-tAeOzMTn.js +40 -0
- package/dist/public/assets/sequenceDiagram-DBY2YBRQ-r0pwijM4.js +162 -0
- package/dist/public/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +1 -0
- package/dist/public/assets/src-DOh7_en_.js +1 -0
- package/dist/public/assets/stateDiagram-2N3HPSRC-a9IdkSQG.js +1 -0
- package/dist/public/assets/stateDiagram-v2-6OUMAXLB-s2blPtZ-.js +1 -0
- package/dist/public/assets/swimlanes-5IMT3BWC-5w0Cdxk6.js +2 -0
- package/dist/public/assets/swimlanesDiagram-G3AALYLV-BWa-KRed.js +8 -0
- package/dist/public/assets/time-BM2d9MsQ.js +1 -0
- package/dist/public/assets/timeline-definition-FHXFAJF6-CvXlv_4Y.js +120 -0
- package/dist/public/assets/treeView-QDETBFTQ-B9cxjfpB.js +1 -0
- package/dist/public/assets/treemap-6X3UGDF4-BplEq4hB.js +1 -0
- package/dist/public/assets/treemap-BfjIY-m6.js +1 -0
- package/dist/public/assets/vennDiagram-L72KCM5P-ti2qNcvo.js +34 -0
- package/dist/public/assets/wardley-OPB4EBWU-BX2ghg5e.js +1 -0
- package/dist/public/assets/wardleyDiagram-EHGQE667-C8lblm8x.js +78 -0
- package/dist/public/assets/xychartDiagram-FW5EYKEG-US-_k5eu.js +7 -0
- package/dist/public/index.html +31 -12
- package/dist/types.d.ts +4 -1
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/package.json +11 -10
- package/src/app.ts +11 -4
- package/src/auth/index.ts +1 -1
- package/src/auth/keycloak.ts +3 -0
- package/src/auth/mock.ts +54 -2
- package/src/common/validationSchemas.ts +1 -0
- package/src/domain/calculations/index.ts +1 -1
- package/src/domain/cardTypes/service.ts +26 -21
- package/src/domain/cards/lib.ts +11 -4
- package/src/domain/cards/service.ts +4 -5
- package/src/domain/project/index.ts +54 -0
- package/src/domain/project/schema.ts +23 -0
- package/src/domain/project/service.ts +89 -1
- package/src/domain/projects/index.ts +115 -3
- package/src/domain/projects/schema.ts +42 -0
- package/src/domain/projects/service.ts +98 -0
- package/src/domain/resources/index.ts +1 -1
- package/src/domain/resources/schema.ts +4 -2
- package/src/domain/resources/service.ts +5 -4
- package/src/index.ts +11 -6
- package/src/main.ts +0 -6
- package/src/middleware/auth.ts +10 -4
- package/src/project-registry.ts +7 -2
- package/src/types.ts +3 -0
- package/dist/public/assets/architecture-7EHR7CIX-CHU1xuYF.js +0 -1
- package/dist/public/assets/architectureDiagram-3BPJPVTR--CSL9yP4.js +0 -36
- package/dist/public/assets/blockDiagram-GPEHLZMM-KVU5YZg5.js +0 -132
- package/dist/public/assets/c4Diagram-AAUBKEIU-CKZoRo4y.js +0 -10
- package/dist/public/assets/channel-DylEVeTd.js +0 -1
- package/dist/public/assets/chunk-2J33WTMH-3csjo24p.js +0 -1
- package/dist/public/assets/chunk-3OPIFGDE-BKzRNP07.js +0 -62
- package/dist/public/assets/chunk-4BX2VUAB-ClBqZOcE.js +0 -1
- package/dist/public/assets/chunk-55IACEB6-Bgi2dUOh.js +0 -1
- package/dist/public/assets/chunk-5ZQYHXKU-CECM_AkK.js +0 -2
- package/dist/public/assets/chunk-727SXJPM-DwCEXlGv.js +0 -206
- package/dist/public/assets/chunk-AQP2D5EJ-4K2xdOIK.js +0 -231
- package/dist/public/assets/chunk-BSJP7CBP-ByoKnyMP.js +0 -1
- package/dist/public/assets/chunk-CSCIHK7Q-DPeQmPB5.js +0 -124
- package/dist/public/assets/chunk-L5ZTLDWV-pkYUefHU.js +0 -1
- package/dist/public/assets/chunk-ND2GUHAM-BbBhIALU.js +0 -1
- package/dist/public/assets/chunk-NNHCCRGN-DlpIbxXb.js +0 -159
- package/dist/public/assets/chunk-NZK2D7GU-Bsg3s0FQ.js +0 -1
- package/dist/public/assets/chunk-O5CBEL6O-CLKEM0Ng.js +0 -70
- package/dist/public/assets/chunk-QZHKN3VN-DYbrfjC5.js +0 -1
- package/dist/public/assets/classDiagram-4FO5ZUOK-BJy5zoel.js +0 -1
- package/dist/public/assets/classDiagram-v2-Q7XG4LA2-BJy5zoel.js +0 -1
- package/dist/public/assets/cose-bilkent-S5V4N54A-BW2eHW0s.js +0 -1
- package/dist/public/assets/cytoscape.esm-FqbQrHcz.js +0 -321
- package/dist/public/assets/dagre-BM42HDAG-BthzRaVA.js +0 -4
- package/dist/public/assets/dagre-Bx709z4p.js +0 -1
- package/dist/public/assets/diagram-2AECGRRQ-CQJQx4k6.js +0 -43
- package/dist/public/assets/diagram-5GNKFQAL-DZn5aW7S.js +0 -10
- package/dist/public/assets/diagram-KO2AKTUF-C-khQZwA.js +0 -3
- package/dist/public/assets/diagram-LMA3HP47-DgWJfUcV.js +0 -24
- package/dist/public/assets/diagram-OG6HWLK6-44JZNjGl.js +0 -24
- package/dist/public/assets/dist-Dek0Yhn0.js +0 -1
- package/dist/public/assets/erDiagram-TEJ5UH35-BVkYJRJ3.js +0 -85
- package/dist/public/assets/eventmodeling-FCH6USID-C_5XBe82.js +0 -1
- package/dist/public/assets/flowDiagram-I6XJVG4X-DanY8_jA.js +0 -162
- package/dist/public/assets/ganttDiagram-6RSMTGT7-DD1Pw4Yz.js +0 -292
- package/dist/public/assets/gitGraph-WXDBUCRP-D4dBNuhe.js +0 -1
- package/dist/public/assets/gitGraphDiagram-PVQCEYII-BPrVPTyG.js +0 -106
- package/dist/public/assets/index-CKFcPbR1.js +0 -729
- package/dist/public/assets/info-J43DQDTF-D7lvZ6o6.js +0 -1
- package/dist/public/assets/infoDiagram-5YYISTIA-t6t0skjQ.js +0 -2
- package/dist/public/assets/journeyDiagram-JHISSGLW-DZle34fL.js +0 -139
- package/dist/public/assets/kanban-definition-UN3LZRKU-DvUHZ0z2.js +0 -89
- package/dist/public/assets/mermaid-parser.core-DFZGVidJ.js +0 -4
- package/dist/public/assets/mindmap-definition-RKZ34NQL-Lmrs6IX6.js +0 -96
- package/dist/public/assets/packet-YPE3B663-AbbU2Ze4.js +0 -1
- package/dist/public/assets/pie-LRSECV5Y-DN4QBmSF.js +0 -1
- package/dist/public/assets/pieDiagram-4H26LBE5-BwD91PEd.js +0 -30
- package/dist/public/assets/quadrantDiagram-W4KKPZXB-DXCkBrKi.js +0 -7
- package/dist/public/assets/radar-GUYGQ44K-ej308gGR.js +0 -1
- package/dist/public/assets/requirementDiagram-4Y6WPE33-jDFKiwdn.js +0 -84
- package/dist/public/assets/sankeyDiagram-5OEKKPKP-D9xT2nUr.js +0 -40
- package/dist/public/assets/sequenceDiagram-3UESZ5HK-Bmko-3_U.js +0 -162
- package/dist/public/assets/src-CqxF9LGw.js +0 -1
- package/dist/public/assets/stateDiagram-AJRCARHV-DjPm6sNG.js +0 -1
- package/dist/public/assets/stateDiagram-v2-BHNVJYJU-B-cimf9q.js +0 -1
- package/dist/public/assets/timeline-definition-PNZ67QCA-nKPLYYzI.js +0 -120
- package/dist/public/assets/treeView-BLDUP644--ooV0k8a.js +0 -1
- package/dist/public/assets/treemap-LRROVOQU-BKq-VDOX.js +0 -1
- package/dist/public/assets/vennDiagram-CIIHVFJN-DHORAsW0.js +0 -34
- package/dist/public/assets/wardley-L42UT6IY-VU5ormp0.js +0 -1
- package/dist/public/assets/wardleyDiagram-YWT4CUSO-DwqR74vk.js +0 -78
- package/dist/public/assets/xychartDiagram-2RQKCTM6-CUU1IRcn.js +0 -7
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
Cyberismo
|
|
3
|
+
Copyright © Cyberismo Ltd and contributors 2026
|
|
4
|
+
This program is free software: you can redistribute it and/or modify it under
|
|
5
|
+
the terms of the GNU Affero General Public License version 3 as published by
|
|
6
|
+
the Free Software Foundation.
|
|
7
|
+
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
8
|
+
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
9
|
+
FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
10
|
+
details. You should have received a copy of the GNU Affero General Public
|
|
11
|
+
License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { join } from 'node:path';
|
|
15
|
+
import {
|
|
16
|
+
CommandManager,
|
|
17
|
+
Create,
|
|
18
|
+
scanForProjects,
|
|
19
|
+
} from '@cyberismo/data-handler';
|
|
20
|
+
import type { ProjectRegistry } from '../../project-registry.js';
|
|
21
|
+
|
|
22
|
+
export interface CreateProjectParams {
|
|
23
|
+
name: string;
|
|
24
|
+
prefix: string;
|
|
25
|
+
category?: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface CreateProjectResult {
|
|
30
|
+
prefix: string;
|
|
31
|
+
name: string;
|
|
32
|
+
category?: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export async function createProject(
|
|
37
|
+
registry: ProjectRegistry,
|
|
38
|
+
rootPath: string,
|
|
39
|
+
params: CreateProjectParams,
|
|
40
|
+
user?: { name: string; email: string } | null,
|
|
41
|
+
): Promise<CreateProjectResult> {
|
|
42
|
+
const { name, prefix, category, description } = params;
|
|
43
|
+
const projectPath = join(rootPath, prefix);
|
|
44
|
+
|
|
45
|
+
const commands = await CommandManager.createProjectWithDefaults(
|
|
46
|
+
projectPath,
|
|
47
|
+
params,
|
|
48
|
+
{
|
|
49
|
+
...registry.options,
|
|
50
|
+
gitUser: user ?? undefined,
|
|
51
|
+
},
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
registry.add(prefix, commands);
|
|
55
|
+
|
|
56
|
+
return {
|
|
57
|
+
prefix,
|
|
58
|
+
name,
|
|
59
|
+
category: category || undefined,
|
|
60
|
+
description: description || undefined,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface CloneProjectResult {
|
|
65
|
+
projects: { prefix: string; name: string }[];
|
|
66
|
+
skippedDuplicates?: string[];
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export async function cloneProject(
|
|
70
|
+
registry: ProjectRegistry,
|
|
71
|
+
rootPath: string,
|
|
72
|
+
url: string,
|
|
73
|
+
): Promise<CloneProjectResult> {
|
|
74
|
+
const clonedPath = await Create.cloneProject(url, rootPath);
|
|
75
|
+
const scanned = await scanForProjects(clonedPath);
|
|
76
|
+
|
|
77
|
+
const registered: { prefix: string; name: string }[] = [];
|
|
78
|
+
const skippedDuplicates: string[] = [];
|
|
79
|
+
|
|
80
|
+
for (const project of scanned) {
|
|
81
|
+
if (registry.has(project.prefix)) {
|
|
82
|
+
skippedDuplicates.push(project.prefix);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const commands = new CommandManager(project.path, registry.options);
|
|
86
|
+
await commands.initialize();
|
|
87
|
+
registry.add(project.prefix, commands);
|
|
88
|
+
registered.push({
|
|
89
|
+
prefix: project.prefix,
|
|
90
|
+
name: project.name,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
projects: registered,
|
|
96
|
+
...(skippedDuplicates.length > 0 && { skippedDuplicates }),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
@@ -213,7 +213,7 @@ router.get(
|
|
|
213
213
|
|
|
214
214
|
router.post(
|
|
215
215
|
'/:prefix/:type/:identifier/operation',
|
|
216
|
-
requireRole(UserRole.Admin),
|
|
216
|
+
requireRole(UserRole.Admin, [UserRole.Connector]),
|
|
217
217
|
zValidator('param', resourceParamsSchema),
|
|
218
218
|
zValidator('json', updateOperationBodySchema),
|
|
219
219
|
async (c) => {
|
|
@@ -25,7 +25,7 @@ export const resourceFileParamsSchema = resourceParamsSchema.extend({
|
|
|
25
25
|
export type ResourceFileParams = z.infer<typeof resourceFileParamsSchema>;
|
|
26
26
|
|
|
27
27
|
export const validateResourceParamsSchema = resourceParamsSchema.extend({
|
|
28
|
-
type: z.enum(resourceTypes
|
|
28
|
+
type: z.enum(resourceTypes),
|
|
29
29
|
});
|
|
30
30
|
|
|
31
31
|
export type ValidateResourceParams = z.infer<
|
|
@@ -54,7 +54,9 @@ export const updateOperationBodySchema = z.object({
|
|
|
54
54
|
}),
|
|
55
55
|
z.object({
|
|
56
56
|
name: z.literal('change'),
|
|
57
|
-
|
|
57
|
+
// The old value; scalar changes have none, and clients drop the key
|
|
58
|
+
// entirely when it is undefined (JSON.stringify omits undefined).
|
|
59
|
+
target: z.unknown().optional(),
|
|
58
60
|
to: z.unknown(),
|
|
59
61
|
mappingTable: z
|
|
60
62
|
.object({
|
|
@@ -532,7 +532,7 @@ export async function getWorkflowGraph(
|
|
|
532
532
|
|
|
533
533
|
/**
|
|
534
534
|
* Perform an updateOperation on a resource key.
|
|
535
|
-
* This delegates to data-handler
|
|
535
|
+
* This delegates to the data-handler mutation engine.
|
|
536
536
|
*/
|
|
537
537
|
export async function updateResourceWithOperation(
|
|
538
538
|
commands: CommandManager,
|
|
@@ -542,11 +542,12 @@ export async function updateResourceWithOperation(
|
|
|
542
542
|
const { updateKey, operation } = body;
|
|
543
543
|
await commands.atomic(
|
|
544
544
|
() =>
|
|
545
|
-
commands.updateCmd.
|
|
546
|
-
|
|
545
|
+
commands.updateCmd.apply({
|
|
546
|
+
kind: 'edit',
|
|
547
|
+
target: resource,
|
|
547
548
|
updateKey,
|
|
548
549
|
operation,
|
|
549
|
-
),
|
|
550
|
+
}),
|
|
550
551
|
`Update ${resource.type} ${resource.identifier}`,
|
|
551
552
|
);
|
|
552
553
|
}
|
package/src/index.ts
CHANGED
|
@@ -37,13 +37,12 @@ const DEFAULT_MAX_PORT = DEFAULT_PORT + 100;
|
|
|
37
37
|
export async function previewSite(dir: string, findPort: boolean = true) {
|
|
38
38
|
const app = new Hono();
|
|
39
39
|
app.use(serveStatic({ root: dir }));
|
|
40
|
-
app.get('*', (c) => {
|
|
40
|
+
app.get('*', async (c) => {
|
|
41
41
|
if (c.req.path.startsWith('/api/')) {
|
|
42
42
|
return c.json({ error: 'Resource not found' }, 404);
|
|
43
43
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
);
|
|
44
|
+
const file = await readFile(path.join(dir, 'index.html'));
|
|
45
|
+
return c.html(file.toString());
|
|
47
46
|
});
|
|
48
47
|
|
|
49
48
|
let port = parseInt(process.env.PORT || DEFAULT_PORT.toString(), 10);
|
|
@@ -64,7 +63,7 @@ export async function startServer(
|
|
|
64
63
|
authProvider: AuthProvider,
|
|
65
64
|
registry: ProjectRegistry,
|
|
66
65
|
findPort: boolean = true,
|
|
67
|
-
|
|
66
|
+
multiProjectRoot?: string,
|
|
68
67
|
) {
|
|
69
68
|
const useOsAssigned = process.env.CYBERISMO_E2E_OSPORT === 'true';
|
|
70
69
|
let port = useOsAssigned
|
|
@@ -73,7 +72,13 @@ export async function startServer(
|
|
|
73
72
|
if (findPort && !useOsAssigned) {
|
|
74
73
|
port = await findFreePort(port, DEFAULT_MAX_PORT);
|
|
75
74
|
}
|
|
76
|
-
const app = createApp(
|
|
75
|
+
const app = createApp(
|
|
76
|
+
authProvider,
|
|
77
|
+
registry,
|
|
78
|
+
undefined,
|
|
79
|
+
false,
|
|
80
|
+
multiProjectRoot,
|
|
81
|
+
);
|
|
77
82
|
startApp(app, port);
|
|
78
83
|
}
|
|
79
84
|
|
package/src/main.ts
CHANGED
|
@@ -91,12 +91,6 @@ if (args.export) {
|
|
|
91
91
|
: undefined,
|
|
92
92
|
});
|
|
93
93
|
} else {
|
|
94
|
-
if (projects.length === 0) {
|
|
95
|
-
console.error(
|
|
96
|
-
`No projects found in "${projectPath}". Cannot start the server without at least one project.`,
|
|
97
|
-
);
|
|
98
|
-
process.exit(1);
|
|
99
|
-
}
|
|
100
94
|
const autocommit = process.env.CYBERISMO_AUTOCOMMIT === 'true';
|
|
101
95
|
const registry = await ProjectRegistry.fromScannedProjects(projects, {
|
|
102
96
|
autocommit,
|
package/src/middleware/auth.ts
CHANGED
|
@@ -24,6 +24,7 @@ declare module 'hono' {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
const roleLevel: Record<UserRole, number> = {
|
|
27
|
+
[UserRole.Connector]: -1,
|
|
27
28
|
[UserRole.Reader]: 0,
|
|
28
29
|
[UserRole.Editor]: 1,
|
|
29
30
|
[UserRole.Admin]: 2,
|
|
@@ -72,10 +73,15 @@ export function hasRole(c: Context, minimumRole: UserRole): boolean {
|
|
|
72
73
|
}
|
|
73
74
|
|
|
74
75
|
/**
|
|
75
|
-
* Require minimum role middleware factory
|
|
76
|
-
*
|
|
76
|
+
* Require minimum role middleware factory.
|
|
77
|
+
* Optional exactRoles allows orthogonal roles (e.g. Connector) that bypass
|
|
78
|
+
* the hierarchy with an exact match.
|
|
79
|
+
* e.g. requireRole(Admin, [Connector]) → Admin ✓, Editor ✗, Connector ✓
|
|
77
80
|
*/
|
|
78
|
-
export function requireRole(
|
|
81
|
+
export function requireRole(
|
|
82
|
+
minimumRole: UserRole,
|
|
83
|
+
exactRoles?: UserRole[],
|
|
84
|
+
): MiddlewareHandler {
|
|
79
85
|
return async (c, next) => {
|
|
80
86
|
const user = c.get('user');
|
|
81
87
|
|
|
@@ -83,7 +89,7 @@ export function requireRole(minimumRole: UserRole): MiddlewareHandler {
|
|
|
83
89
|
return c.json({ error: 'Unauthorized' }, 401);
|
|
84
90
|
}
|
|
85
91
|
|
|
86
|
-
if (!hasRole(c, minimumRole)) {
|
|
92
|
+
if (!hasRole(c, minimumRole) && !exactRoles?.includes(user.role)) {
|
|
87
93
|
return c.json({ error: 'Forbidden' }, 403);
|
|
88
94
|
}
|
|
89
95
|
|
package/src/project-registry.ts
CHANGED
|
@@ -34,8 +34,13 @@ export interface ScannedProject {
|
|
|
34
34
|
|
|
35
35
|
export class ProjectRegistry implements ProjectProvider {
|
|
36
36
|
private projects: Map<string, CommandManager> = new Map();
|
|
37
|
+
readonly options: ConstructorParameters<typeof CommandManager>[1];
|
|
37
38
|
|
|
38
|
-
constructor(
|
|
39
|
+
constructor(
|
|
40
|
+
entries: ProjectRegistryEntry[] = [],
|
|
41
|
+
options?: ConstructorParameters<typeof CommandManager>[1],
|
|
42
|
+
) {
|
|
43
|
+
this.options = options;
|
|
39
44
|
for (const entry of entries) {
|
|
40
45
|
this.add(entry.prefix, entry.commands);
|
|
41
46
|
}
|
|
@@ -120,6 +125,6 @@ export class ProjectRegistry implements ProjectProvider {
|
|
|
120
125
|
await commands.initialize();
|
|
121
126
|
entries.push({ prefix: project.prefix, commands });
|
|
122
127
|
}
|
|
123
|
-
return new ProjectRegistry(entries);
|
|
128
|
+
return new ProjectRegistry(entries, options);
|
|
124
129
|
}
|
|
125
130
|
}
|
package/src/types.ts
CHANGED
|
@@ -32,11 +32,14 @@ export interface TreeOptions {
|
|
|
32
32
|
* - Admin: All operations including configuration
|
|
33
33
|
* - Editor: Can create, edit, and manage content but not config
|
|
34
34
|
* - Reader: Can only view content
|
|
35
|
+
* Orthogonal role (outside hierarchy):
|
|
36
|
+
* - Connector: Service accounts that can only create/update calculations
|
|
35
37
|
*/
|
|
36
38
|
export enum UserRole {
|
|
37
39
|
Admin = 'admin',
|
|
38
40
|
Editor = 'editor',
|
|
39
41
|
Reader = 'reader',
|
|
42
|
+
Connector = 'connector',
|
|
40
43
|
}
|
|
41
44
|
|
|
42
45
|
/**
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./chunk-NNHCCRGN-DlpIbxXb.js";import{x as e}from"./mermaid-parser.core-DFZGVidJ.js";export{e as createArchitectureServices};
|