@cyberismo/backend 0.0.22 → 0.0.24
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.js +3 -1
- package/dist/app.js.map +1 -1
- package/dist/domain/cards/index.js +169 -12
- package/dist/domain/cards/index.js.map +1 -1
- package/dist/domain/cards/lib.js +4 -4
- package/dist/domain/cards/lib.js.map +1 -1
- package/dist/domain/cards/presence.d.ts +50 -0
- package/dist/domain/cards/presence.js +93 -0
- package/dist/domain/cards/presence.js.map +1 -0
- package/dist/domain/cards/schema.d.ts +55 -0
- package/dist/domain/cards/schema.js +44 -0
- package/dist/domain/cards/schema.js.map +1 -0
- package/dist/domain/cards/service.d.ts +7 -2
- package/dist/domain/cards/service.js +37 -4
- package/dist/domain/cards/service.js.map +1 -1
- package/dist/domain/connectors/index.d.ts +15 -0
- package/dist/domain/connectors/index.js +37 -0
- package/dist/domain/connectors/index.js.map +1 -0
- package/dist/domain/connectors/service.d.ts +23 -0
- package/dist/domain/connectors/service.js +46 -0
- package/dist/domain/connectors/service.js.map +1 -0
- package/dist/domain/project/index.js +12 -1
- package/dist/domain/project/index.js.map +1 -1
- package/dist/domain/project/schema.d.ts +3 -0
- package/dist/domain/project/schema.js +8 -0
- package/dist/domain/project/schema.js.map +1 -1
- package/dist/domain/project/service.d.ts +3 -1
- package/dist/domain/project/service.js +7 -1
- package/dist/domain/project/service.js.map +1 -1
- package/dist/domain/resources/index.js +63 -1
- package/dist/domain/resources/index.js.map +1 -1
- package/dist/domain/resources/schema.d.ts +9 -0
- package/dist/domain/resources/schema.js +8 -1
- package/dist/domain/resources/schema.js.map +1 -1
- package/dist/domain/resources/service.d.ts +12 -0
- package/dist/domain/resources/service.js +47 -4
- package/dist/domain/resources/service.js.map +1 -1
- package/dist/domain/tree/service.js +0 -1
- package/dist/domain/tree/service.js.map +1 -1
- package/dist/export.js +1 -2
- package/dist/export.js.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/public/THIRD-PARTY.txt +4283 -1734
- package/dist/public/assets/arc-DFTvTCxD.js +1 -0
- package/dist/public/assets/architecture-YZFGNWBL-DsWVZJri.js +1 -0
- package/dist/public/assets/architectureDiagram-Q4EWVU46-AN0fWZIG.js +36 -0
- package/dist/public/assets/array-xS8TccZC.js +1 -0
- package/dist/public/assets/blockDiagram-DXYQGD6D-RrIidZT3.js +132 -0
- package/dist/public/assets/c4Diagram-AHTNJAMY-CW7AUKhY.js +10 -0
- package/dist/public/assets/channel-BxffgrNT.js +1 -0
- package/dist/public/assets/chunk-2KRD3SAO-D5XH6bj9.js +1 -0
- package/dist/public/assets/chunk-336JU56O-CVDEj5x8.js +2 -0
- package/dist/public/assets/chunk-426QAEUC-CIWkCWTf.js +1 -0
- package/dist/public/assets/chunk-4BX2VUAB-O8dxzEpn.js +1 -0
- package/dist/public/assets/chunk-4TB4RGXK-Bt4fWDlh.js +206 -0
- package/dist/public/assets/chunk-55IACEB6-R-yr7oHq.js +1 -0
- package/dist/public/assets/chunk-5FUZZQ4R-D7L4hZzZ.js +62 -0
- package/dist/public/assets/chunk-5PVQY5BW-D46cRkay.js +2 -0
- package/dist/public/assets/chunk-67CJDMHE-1fLguPDq.js +1 -0
- package/dist/public/assets/chunk-7N4EOEYR-BPbEiVZr.js +1 -0
- package/dist/public/assets/chunk-AA7GKIK3-DZOqN73n.js +1 -0
- package/dist/public/assets/chunk-BSJP7CBP-BQPMRa-Q.js +1 -0
- package/dist/public/assets/chunk-CFjPhJqf.js +1 -0
- package/dist/public/assets/chunk-CIAEETIT-CoKBG93U.js +1 -0
- package/dist/public/assets/chunk-EDXVE4YY-BxmMvdBY.js +1 -0
- package/dist/public/assets/chunk-ENJZ2VHE-BrjxYY_T.js +10 -0
- package/dist/public/assets/chunk-FMBD7UC4-DChB7ne2.js +15 -0
- package/dist/public/assets/chunk-FOC6F5B3-DyK4SoM2.js +1 -0
- package/dist/public/assets/chunk-ICPOFSXX-6-ABzkfw.js +122 -0
- package/dist/public/assets/chunk-K5T4RW27-432kjUXO.js +94 -0
- package/dist/public/assets/chunk-KGLVRYIC-ChpiuJys.js +1 -0
- package/dist/public/assets/chunk-LIHQZDEY-C65uflEj.js +1 -0
- package/dist/public/assets/chunk-ORNJ4GCN-DPvOqXKg.js +1 -0
- package/dist/public/assets/chunk-OYMX7WX6-BecMUsrL.js +231 -0
- package/dist/public/assets/chunk-QZHKN3VN-d1i_Lm1t.js +1 -0
- package/dist/public/assets/chunk-U2HBQHQK-C6yvwOAo.js +70 -0
- package/dist/public/assets/chunk-X2U36JSP-D1C3tOED.js +1 -0
- package/dist/public/assets/chunk-XPW4576I-BH37LuuF.js +32 -0
- package/dist/public/assets/chunk-YZCP3GAM-D83gHdmx.js +1 -0
- package/dist/public/assets/chunk-ZZ45TVLE-DrCjtkdu.js +1 -0
- package/dist/public/assets/classDiagram-6PBFFD2Q-CRYacdjd.js +1 -0
- package/dist/public/assets/classDiagram-v2-HSJHXN6E-qOJXC_A9.js +1 -0
- package/dist/public/assets/clone-Bno0nirE.js +1 -0
- package/dist/public/assets/colors-DZGTowqM.js +1 -0
- package/dist/public/assets/cose-bilkent-S5V4N54A-BdSMsFO7.js +1 -0
- package/dist/public/assets/cytoscape.esm-DpmcErfs.js +321 -0
- package/dist/public/assets/dagre-D0KOcyEK.js +1 -0
- package/dist/public/assets/dagre-KV5264BT-C_l1Bck_.js +4 -0
- package/dist/public/assets/defaultLocale-B6dPnyNg.js +1 -0
- package/dist/public/assets/diagram-5BDNPKRD-D6FxiIv1.js +10 -0
- package/dist/public/assets/diagram-G4DWMVQ6-COGBv7tQ.js +24 -0
- package/dist/public/assets/diagram-MMDJMWI5-U6E9w334.js +43 -0
- package/dist/public/assets/diagram-TYMM5635-Tvfdnlo4.js +24 -0
- package/dist/public/assets/dist-C6vvxvVV.js +1 -0
- package/dist/public/assets/erDiagram-SMLLAGMA-VcPXkmy9.js +85 -0
- package/dist/public/assets/flatten-BKeNCJRx.js +1 -0
- package/dist/public/assets/flowDiagram-DWJPFMVM-PRQdlypB.js +162 -0
- package/dist/public/assets/ganttDiagram-T4ZO3ILL-CSVaTciZ.js +292 -0
- package/dist/public/assets/gitGraph-7Q5UKJZL-C6GVmHC4.js +1 -0
- package/dist/public/assets/gitGraphDiagram-UUTBAWPF-DMa-Gcy1.js +106 -0
- package/dist/public/assets/graphlib-BYojtb6k.js +1 -0
- package/dist/public/assets/identity-nF-8qK2-.js +1 -0
- package/dist/public/assets/index-oVbUFngg.js +737 -0
- package/dist/public/assets/index-ypsafPwV.css +1 -0
- package/dist/public/assets/info-OMHHGYJF-CjsmQeYR.js +1 -0
- package/dist/public/assets/infoDiagram-42DDH7IO-COL_Na4w.js +2 -0
- package/dist/public/assets/init-B9nbfZCT.js +1 -0
- package/dist/public/assets/isEmpty-Di-NpihJ.js +1 -0
- package/dist/public/assets/ishikawaDiagram-UXIWVN3A-B3HoSFaq.js +70 -0
- package/dist/public/assets/journeyDiagram-VCZTEJTY-kH30WNF3.js +139 -0
- package/dist/public/assets/kanban-definition-6JOO6SKY-RdjEsejt.js +89 -0
- package/dist/public/assets/katex-Bfn1OZEl.js +257 -0
- package/dist/public/assets/line-DrKJYWGi.js +1 -0
- package/dist/public/assets/linear-C8MDrvxz.js +1 -0
- package/dist/public/assets/mermaid-parser.core-BeZK8g2G.js +4 -0
- package/dist/public/assets/mindmap-definition-QFDTVHPH-CNWWI4MF.js +96 -0
- package/dist/public/assets/ordinal-BXaEVJbT.js +1 -0
- package/dist/public/assets/packet-4T2RLAQJ-Dq0Z9G3r.js +1 -0
- package/dist/public/assets/path-C7Bv0Qdk.js +1 -0
- package/dist/public/assets/pie-ZZUOXDRM-Coeb8Atk.js +1 -0
- package/dist/public/assets/pieDiagram-DEJITSTG-CrDW-30P.js +30 -0
- package/dist/public/assets/quadrantDiagram-34T5L4WZ-BoDA5WQ-.js +7 -0
- package/dist/public/assets/radar-PYXPWWZC-BF2NN2TG.js +1 -0
- package/dist/public/assets/range-DuD7Go1R.js +1 -0
- package/dist/public/assets/reduce-5tLTMRkg.js +1 -0
- package/dist/public/assets/requirementDiagram-MS252O5E-BnG7epLH.js +84 -0
- package/dist/public/assets/rough.esm-DE7XMpOC.js +1 -0
- package/dist/public/assets/sankeyDiagram-XADWPNL6-oyTFoxhB.js +10 -0
- package/dist/public/assets/sequenceDiagram-FGHM5R23-hwG2jT_2.js +157 -0
- package/dist/public/assets/src-ps-3oTnY.js +1 -0
- package/dist/public/assets/stateDiagram-FHFEXIEX-BiYqw63j.js +1 -0
- package/dist/public/assets/stateDiagram-v2-QKLJ7IA2-CggSrcDh.js +1 -0
- package/dist/public/assets/time-Bgnk7ODM.js +1 -0
- package/dist/public/assets/timeline-definition-GMOUNBTQ-9MnBod43.js +120 -0
- package/dist/public/assets/treeView-SZITEDCU-IRdgIoRV.js +1 -0
- package/dist/public/assets/treemap-DK8fitek.js +1 -0
- package/dist/public/assets/treemap-W4RFUUIX-C-JBwyWW.js +1 -0
- package/dist/public/assets/vennDiagram-DHZGUBPP-sEA6JNL-.js +34 -0
- package/dist/public/assets/wardley-RL74JXVD-DdU04Q7E.js +1 -0
- package/dist/public/assets/wardleyDiagram-NUSXRM2D-Dws321pY.js +20 -0
- package/dist/public/assets/xychartDiagram-5P7HB3ND-BcqyvmmW.js +7 -0
- package/dist/public/images/broken_link.svg +7 -0
- package/dist/public/index.html +31 -2
- package/package.json +7 -7
- package/src/app.ts +3 -1
- package/src/domain/cards/index.ts +271 -48
- package/src/domain/cards/lib.ts +6 -5
- package/src/domain/cards/presence.ts +124 -0
- package/src/domain/cards/schema.ts +50 -0
- package/src/domain/cards/service.ts +91 -5
- package/src/domain/connectors/index.ts +39 -0
- package/src/domain/connectors/service.ts +67 -0
- package/src/domain/project/index.ts +23 -1
- package/src/domain/project/schema.ts +9 -0
- package/src/domain/project/service.ts +18 -2
- package/src/domain/resources/index.ts +74 -0
- package/src/domain/resources/schema.ts +14 -0
- package/src/domain/resources/service.ts +50 -4
- package/src/domain/tree/service.ts +0 -1
- package/src/export.ts +1 -2
- package/src/index.ts +8 -4
- package/dist/public/assets/index-B_lh6qtv.css +0 -1
- package/dist/public/assets/index-CEol8Bfi.js +0 -164949
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
details. You should have received a copy of the GNU Affero General Public
|
|
11
11
|
License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
12
12
|
*/
|
|
13
|
+
import type { ExportPdfOptions } from '@cyberismo/data-handler/interfaces/project-interfaces';
|
|
13
14
|
import type { attachmentPayload } from '@cyberismo/data-handler/interfaces/request-status-interfaces';
|
|
14
15
|
import { type CommandManager } from '@cyberismo/data-handler';
|
|
15
16
|
import { allCards } from './lib.js';
|
|
@@ -36,10 +37,13 @@ export declare function openAttachment(commands: CommandManager, key: string, fi
|
|
|
36
37
|
export declare function parseContent(commands: CommandManager, key: string, content: string): Promise<{
|
|
37
38
|
parsedContent: string;
|
|
38
39
|
}>;
|
|
39
|
-
export declare function createLink(commands: CommandManager, key: string,
|
|
40
|
+
export declare function createLink(commands: CommandManager, key: string, target: string, linkType: string, direction?: 'outbound' | 'inbound', description?: string): Promise<{
|
|
40
41
|
message: string;
|
|
41
42
|
}>;
|
|
42
|
-
export declare function removeLink(commands: CommandManager, key: string,
|
|
43
|
+
export declare function removeLink(commands: CommandManager, key: string, target: string, linkType: string, direction?: 'outbound' | 'inbound', description?: string): Promise<{
|
|
44
|
+
message: string;
|
|
45
|
+
}>;
|
|
46
|
+
export declare function updateLink(commands: CommandManager, key: string, toCard: string, linkType: string, direction: 'outbound' | 'inbound', previousToCard: string, previousLinkType: string, previousDirection: 'outbound' | 'inbound', linkDescription?: string, previousLinkDescription?: string): Promise<{
|
|
43
47
|
message: string;
|
|
44
48
|
}>;
|
|
45
49
|
export declare function getAttachment(commands: CommandManager, key: string, filename: string): Promise<attachmentPayload>;
|
|
@@ -60,3 +64,4 @@ export declare function findRelevantAttachments(commands: CommandManager, option
|
|
|
60
64
|
key: string;
|
|
61
65
|
attachment: string;
|
|
62
66
|
}[]>;
|
|
67
|
+
export declare function exportCard(commands: CommandManager, options: ExportPdfOptions): Promise<Buffer>;
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import Processor from '@asciidoctor/core';
|
|
14
14
|
import { evaluateMacros } from '@cyberismo/data-handler';
|
|
15
|
+
import { preprocessMermaidBlocksForHtml } from '@cyberismo/data-handler/utils/mermaid-renderer';
|
|
15
16
|
import { allCards } from './lib.js';
|
|
16
17
|
export async function getProjectInfo(commands) {
|
|
17
18
|
return commands.consistent(async () => {
|
|
@@ -81,11 +82,19 @@ export async function uploadAttachments(commands, key, files) {
|
|
|
81
82
|
files: succeeded,
|
|
82
83
|
};
|
|
83
84
|
}
|
|
85
|
+
function validateAttachmentFileName(filename) {
|
|
86
|
+
const decoded = decodeURIComponent(filename);
|
|
87
|
+
if (/(^|[/\\])\.\.([/\\]|$)/.test(decoded)) {
|
|
88
|
+
throw new Error('Invalid attachment filename');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
84
91
|
export async function removeAttachment(commands, key, filename) {
|
|
92
|
+
validateAttachmentFileName(filename);
|
|
85
93
|
await commands.removeCmd.remove('attachment', key, filename);
|
|
86
94
|
return { message: 'Attachment removed successfully' };
|
|
87
95
|
}
|
|
88
96
|
export async function openAttachment(commands, key, filename) {
|
|
97
|
+
validateAttachmentFileName(filename);
|
|
89
98
|
await commands.showCmd.openAttachment(key, filename);
|
|
90
99
|
return { message: 'Attachment opened successfully' };
|
|
91
100
|
}
|
|
@@ -103,6 +112,8 @@ export async function parseContent(commands, key, content) {
|
|
|
103
112
|
catch (error) {
|
|
104
113
|
asciidocContent = `Macro error: ${error instanceof Error ? error.message : 'Unknown error'}\n\n${content}`;
|
|
105
114
|
}
|
|
115
|
+
// Convert [mermaid] AsciiDoc blocks to passthrough HTML before asciidoctor processes them
|
|
116
|
+
asciidocContent = preprocessMermaidBlocksForHtml(asciidocContent);
|
|
106
117
|
const processor = Processor();
|
|
107
118
|
const parsedContent = processor
|
|
108
119
|
.convert(asciidocContent, {
|
|
@@ -116,15 +127,33 @@ export async function parseContent(commands, key, content) {
|
|
|
116
127
|
return { parsedContent };
|
|
117
128
|
});
|
|
118
129
|
}
|
|
119
|
-
export async function createLink(commands, key,
|
|
120
|
-
|
|
130
|
+
export async function createLink(commands, key, target, linkType, direction = 'outbound', description) {
|
|
131
|
+
// For outbound: key is source, target is destination
|
|
132
|
+
// For inbound: target is source, key is destination
|
|
133
|
+
const source = direction === 'outbound' ? key : target;
|
|
134
|
+
const destination = direction === 'outbound' ? target : key;
|
|
135
|
+
await commands.createCmd.createLink(source, destination, linkType, description, direction);
|
|
121
136
|
return { message: 'Link created successfully' };
|
|
122
137
|
}
|
|
123
|
-
export async function removeLink(commands, key,
|
|
124
|
-
|
|
138
|
+
export async function removeLink(commands, key, target, linkType, direction = 'outbound', description) {
|
|
139
|
+
// For outbound: key is source, target is destination
|
|
140
|
+
// For inbound: target is source, key is destination
|
|
141
|
+
const source = direction === 'outbound' ? key : target;
|
|
142
|
+
const destination = direction === 'outbound' ? target : key;
|
|
143
|
+
await commands.removeCmd.remove('link', source, destination, linkType, description);
|
|
125
144
|
return { message: 'Link removed successfully' };
|
|
126
145
|
}
|
|
146
|
+
export async function updateLink(commands, key, toCard, linkType, direction, previousToCard, previousLinkType, previousDirection, linkDescription, previousLinkDescription) {
|
|
147
|
+
// For simplicity create the new link first so that duplicate-link validation runs before
|
|
148
|
+
// the old link is removed. This also handles direction changes.
|
|
149
|
+
return commands.atomic(async () => {
|
|
150
|
+
await createLink(commands, key, toCard, linkType, direction, linkDescription);
|
|
151
|
+
await removeLink(commands, key, previousToCard, previousLinkType, previousDirection, previousLinkDescription);
|
|
152
|
+
return { message: 'Link updated successfully' };
|
|
153
|
+
}, `Update link on ${key} to ${toCard}`);
|
|
154
|
+
}
|
|
127
155
|
export async function getAttachment(commands, key, filename) {
|
|
156
|
+
validateAttachmentFileName(filename);
|
|
128
157
|
return commands.showCmd.showAttachment(key, filename);
|
|
129
158
|
}
|
|
130
159
|
/**
|
|
@@ -152,4 +181,8 @@ export async function findRelevantAttachments(commands, options) {
|
|
|
152
181
|
attachment: attachment.fileName,
|
|
153
182
|
}));
|
|
154
183
|
}
|
|
184
|
+
export async function exportCard(commands, options) {
|
|
185
|
+
const result = await commands.exportCmd.exportPdfBuffer(options);
|
|
186
|
+
return result;
|
|
187
|
+
}
|
|
155
188
|
//# sourceMappingURL=service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/domain/cards/service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAEF,OAAO,SAAS,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/domain/cards/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
+
import { Hono } from 'hono';
|
|
14
|
+
declare const router: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
|
|
15
|
+
export default router;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
Cyberismo
|
|
3
|
+
Copyright © Cyberismo Ltd and contributors 2026
|
|
4
|
+
This program is free software: you can redistribute it and/or modify it under
|
|
5
|
+
the terms of the GNU Affero General Public License version 3 as published by
|
|
6
|
+
the Free Software Foundation. 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
|
+
import { Hono } from 'hono';
|
|
14
|
+
import { isSSGContext } from 'hono/ssg';
|
|
15
|
+
import * as connectorsService from './service.js';
|
|
16
|
+
import { UserRole } from '../../types.js';
|
|
17
|
+
import { requireRole } from '../../middleware/auth.js';
|
|
18
|
+
const router = new Hono();
|
|
19
|
+
/**
|
|
20
|
+
* @openapi
|
|
21
|
+
* /api/connectors:
|
|
22
|
+
* get:
|
|
23
|
+
* summary: Returns all available connectors
|
|
24
|
+
* responses:
|
|
25
|
+
* 200:
|
|
26
|
+
* description: List of connectors with their display names
|
|
27
|
+
*/
|
|
28
|
+
router.get('/', requireRole(UserRole.Reader), async (c) => {
|
|
29
|
+
if (isSSGContext(c)) {
|
|
30
|
+
return c.json([]);
|
|
31
|
+
}
|
|
32
|
+
const commands = c.get('commands');
|
|
33
|
+
const connectors = await connectorsService.getConnectors(commands);
|
|
34
|
+
return c.json(connectors);
|
|
35
|
+
});
|
|
36
|
+
export default router;
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/connectors/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AACF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,KAAK,iBAAiB,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;AAE1B;;;;;;;;GAQG;AACH,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACxD,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACnE,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
Cyberismo
|
|
3
|
+
Copyright © Cyberismo Ltd and contributors 2024
|
|
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
|
+
export interface ExternalItem {
|
|
15
|
+
key: string;
|
|
16
|
+
title: string;
|
|
17
|
+
}
|
|
18
|
+
export interface Connector {
|
|
19
|
+
name: string;
|
|
20
|
+
displayName: string;
|
|
21
|
+
items: ExternalItem[];
|
|
22
|
+
}
|
|
23
|
+
export declare function getConnectors(commands: CommandManager): Promise<Connector[]>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
Cyberismo
|
|
3
|
+
Copyright © Cyberismo Ltd and contributors 2024
|
|
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
|
+
export async function getConnectors(commands) {
|
|
14
|
+
const results = await commands.calculateCmd.runQuery('connectors', 'localApp');
|
|
15
|
+
// Separate connectors from items based on type field
|
|
16
|
+
const connectorsMap = new Map();
|
|
17
|
+
const items = [];
|
|
18
|
+
for (const r of results) {
|
|
19
|
+
if (r.type === 'connector') {
|
|
20
|
+
connectorsMap.set(r.key, {
|
|
21
|
+
name: r.key,
|
|
22
|
+
displayName: r.displayName ?? r.key,
|
|
23
|
+
items: [],
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
items.push({
|
|
28
|
+
connector: r.connector ?? '',
|
|
29
|
+
key: r.itemKey ?? '',
|
|
30
|
+
title: r.title ?? '',
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Associate items with their connectors
|
|
35
|
+
for (const item of items) {
|
|
36
|
+
const connector = connectorsMap.get(item.connector);
|
|
37
|
+
if (connector) {
|
|
38
|
+
connector.items.push({
|
|
39
|
+
key: item.key,
|
|
40
|
+
title: item.title,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return Array.from(connectorsMap.values());
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/domain/connectors/service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAeF,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAwB;IAExB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAClD,YAAY,EACZ,UAAU,CACX,CAAC;IAEF,qDAAqD;IACrD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAqB,CAAC;IACnD,MAAM,KAAK,GAAwD,EAAE,CAAC;IAEtE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC3B,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE;gBACvB,IAAI,EAAE,CAAC,CAAC,GAAG;gBACX,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG;gBACnC,KAAK,EAAE,EAAE;aACV,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC;gBACT,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;gBAC5B,GAAG,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;gBACpB,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;aACrB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { Hono } from 'hono';
|
|
14
14
|
import { zValidator } from '../../middleware/zvalidator.js';
|
|
15
|
-
import { moduleParamSchema, updateProjectSchema } from './schema.js';
|
|
15
|
+
import { importModuleSchema, moduleParamSchema, updateProjectSchema, } from './schema.js';
|
|
16
16
|
import * as projectService from './service.js';
|
|
17
17
|
import { UserRole } from '../../types.js';
|
|
18
18
|
import { requireRole } from '../../middleware/auth.js';
|
|
@@ -39,6 +39,17 @@ router.post('/modules/:module/update', requireRole(UserRole.Admin), zValidator('
|
|
|
39
39
|
await projectService.updateModule(commands, module);
|
|
40
40
|
return c.json({ message: 'Module updated' });
|
|
41
41
|
});
|
|
42
|
+
router.get('/modules/importable', requireRole(UserRole.Reader), async (c) => {
|
|
43
|
+
const commands = c.get('commands');
|
|
44
|
+
const modules = await projectService.getImportableModules(commands);
|
|
45
|
+
return c.json(modules);
|
|
46
|
+
});
|
|
47
|
+
router.post('/modules', requireRole(UserRole.Admin), zValidator('json', importModuleSchema), async (c) => {
|
|
48
|
+
const commands = c.get('commands');
|
|
49
|
+
const { source } = c.req.valid('json');
|
|
50
|
+
await projectService.importModule(commands, source);
|
|
51
|
+
return c.json({ message: 'Module imported successfully' });
|
|
52
|
+
});
|
|
42
53
|
router.delete('/modules/:module', requireRole(UserRole.Admin), zValidator('param', moduleParamSchema), async (c) => {
|
|
43
54
|
const commands = c.get('commands');
|
|
44
55
|
const { module } = c.req.valid('param');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/project/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAEF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/project/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,4 +18,12 @@ export const updateProjectSchema = z.object({
|
|
|
18
18
|
name: z.string().optional(),
|
|
19
19
|
cardKeyPrefix: z.string().optional(),
|
|
20
20
|
});
|
|
21
|
+
export const importModuleSchema = z.object({
|
|
22
|
+
source: z
|
|
23
|
+
.string()
|
|
24
|
+
.min(1)
|
|
25
|
+
.refine((s) => s.startsWith('https') || s.startsWith('git@'), {
|
|
26
|
+
message: 'Source must be a git URL (https:// or git@)',
|
|
27
|
+
}),
|
|
28
|
+
});
|
|
21
29
|
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/domain/project/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAEF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/domain/project/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAEF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QAC5D,OAAO,EAAE,6CAA6C;KACvD,CAAC;CACL,CAAC,CAAC"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
details. You should have received a copy of the GNU Affero General Public
|
|
11
11
|
License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
12
12
|
*/
|
|
13
|
-
import { type CommandManager } from '@cyberismo/data-handler';
|
|
13
|
+
import { type CommandManager, type ModuleSettingFromHub } from '@cyberismo/data-handler';
|
|
14
14
|
export interface ProjectModule {
|
|
15
15
|
name: string;
|
|
16
16
|
cardKeyPrefix: string;
|
|
@@ -29,3 +29,5 @@ export declare function updateProject(commands: CommandManager, updates: Project
|
|
|
29
29
|
export declare function updateModule(commands: CommandManager, module: string): Promise<void>;
|
|
30
30
|
export declare function updateAllModules(commands: CommandManager): Promise<void>;
|
|
31
31
|
export declare function deleteModule(commands: CommandManager, module: string): Promise<void>;
|
|
32
|
+
export declare function getImportableModules(commands: CommandManager): Promise<ModuleSettingFromHub[]>;
|
|
33
|
+
export declare function importModule(commands: CommandManager, source: string): Promise<void>;
|
|
@@ -29,7 +29,7 @@ export async function getProject(commands) {
|
|
|
29
29
|
return commands.consistent(async () => {
|
|
30
30
|
const project = await commands.showCmd.showProject();
|
|
31
31
|
const modules = await commands.showCmd.showModules();
|
|
32
|
-
const moduleDetails = await Promise.all(modules.map((mod) => toModuleInfo(commands, mod)));
|
|
32
|
+
const moduleDetails = await Promise.all(modules.map((mod) => toModuleInfo(commands, mod.name)));
|
|
33
33
|
return {
|
|
34
34
|
name: project.name,
|
|
35
35
|
cardKeyPrefix: project.prefix,
|
|
@@ -58,4 +58,10 @@ export async function updateAllModules(commands) {
|
|
|
58
58
|
export async function deleteModule(commands, module) {
|
|
59
59
|
await commands.removeCmd.remove('module', module);
|
|
60
60
|
}
|
|
61
|
+
export async function getImportableModules(commands) {
|
|
62
|
+
return commands.showCmd.showImportableModules(false, true);
|
|
63
|
+
}
|
|
64
|
+
export async function importModule(commands, source) {
|
|
65
|
+
await commands.importCmd.importModule(source);
|
|
66
|
+
}
|
|
61
67
|
//# sourceMappingURL=service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/domain/project/service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/domain/project/service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAuBF,KAAK,UAAU,YAAY,CACzB,QAAwB,EACxB,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC3D,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,UAAU;YAC7B,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,UAAU;SAChD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,aAAa,EAAE,UAAU;SAC1B,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,QAAwB;IAExB,OAAO,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;QACpC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACrD,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CACvD,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,aAAa,EAAE,OAAO,CAAC,MAAM;YAC7B,OAAO,EAAE,aAAa;SACvB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAwB,EACxB,OAA6B;IAE7B,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAExC,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QAC/B,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC,EAAE,yBAAyB,CAAC,CAAC;IAE9B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAwB,EAAE,MAAc;IACzE,MAAM,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAwB;IAC7D,MAAM,QAAQ,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAwB,EAAE,MAAc;IACzE,MAAM,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAwB;IAExB,OAAO,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAwB,EACxB,MAAc;IAEd,MAAM,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -15,7 +15,7 @@ import * as resourceService from './service.js';
|
|
|
15
15
|
import { UserRole } from '../../types.js';
|
|
16
16
|
import { resourceParamsSchema } from '../../common/validationSchemas.js';
|
|
17
17
|
import { zValidator } from '../../middleware/zvalidator.js';
|
|
18
|
-
import { validateResourceParamsSchema, updateOperationBodySchema, } from './schema.js';
|
|
18
|
+
import { validateResourceParamsSchema, updateOperationBodySchema, workflowGraphParamsSchema, workflowGraphQuerySchema, } from './schema.js';
|
|
19
19
|
import { requireRole } from '../../middleware/auth.js';
|
|
20
20
|
const router = new Hono();
|
|
21
21
|
/**
|
|
@@ -108,6 +108,68 @@ router.delete('/:prefix/:type/:identifier', requireRole(UserRole.Admin), zValida
|
|
|
108
108
|
message: 'Resource deleted',
|
|
109
109
|
});
|
|
110
110
|
});
|
|
111
|
+
/**
|
|
112
|
+
* @swagger
|
|
113
|
+
* /api/resources/{prefix}/workflows/{identifier}/graph:
|
|
114
|
+
* get:
|
|
115
|
+
* summary: Render the state-machine graph for a workflow
|
|
116
|
+
* description: Returns a base64-encoded sanitized SVG of the workflow's
|
|
117
|
+
* state-machine diagram, rendered with the built-in
|
|
118
|
+
* workflow graph model and view. When the optional `card`
|
|
119
|
+
* query parameter is provided, the diagram highlights
|
|
120
|
+
* that card's current workflowState.
|
|
121
|
+
* parameters:
|
|
122
|
+
* - in: path
|
|
123
|
+
* name: prefix
|
|
124
|
+
* required: true
|
|
125
|
+
* schema:
|
|
126
|
+
* type: string
|
|
127
|
+
* - in: path
|
|
128
|
+
* name: identifier
|
|
129
|
+
* required: true
|
|
130
|
+
* schema:
|
|
131
|
+
* type: string
|
|
132
|
+
* - in: query
|
|
133
|
+
* name: card
|
|
134
|
+
* required: false
|
|
135
|
+
* schema:
|
|
136
|
+
* type: string
|
|
137
|
+
* description: Card key whose current workflowState should be
|
|
138
|
+
* highlighted in the rendered diagram.
|
|
139
|
+
* responses:
|
|
140
|
+
* 200:
|
|
141
|
+
* description: Rendered diagram
|
|
142
|
+
* content:
|
|
143
|
+
* application/json:
|
|
144
|
+
* schema:
|
|
145
|
+
* type: object
|
|
146
|
+
* properties:
|
|
147
|
+
* svg:
|
|
148
|
+
* type: string
|
|
149
|
+
* description: Base64-encoded SVG document.
|
|
150
|
+
* 400:
|
|
151
|
+
* description: Invalid path parameters
|
|
152
|
+
* 404:
|
|
153
|
+
* description: Workflow or card not found
|
|
154
|
+
* 500:
|
|
155
|
+
* description: Server error
|
|
156
|
+
*/
|
|
157
|
+
router.get('/:prefix/workflows/:identifier/graph', requireRole(UserRole.Reader), zValidator('param', workflowGraphParamsSchema), zValidator('query', workflowGraphQuerySchema), async (c) => {
|
|
158
|
+
const commands = c.get('commands');
|
|
159
|
+
const { prefix, identifier } = c.req.valid('param');
|
|
160
|
+
const { card } = c.req.valid('query');
|
|
161
|
+
const workflowName = `${prefix}/workflows/${identifier}`;
|
|
162
|
+
try {
|
|
163
|
+
const svg = await resourceService.getWorkflowGraph(commands, workflowName, card);
|
|
164
|
+
return c.json({ svg });
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
if (error instanceof Error && error.message.includes('not found')) {
|
|
168
|
+
return c.json({ error: error.message }, 404);
|
|
169
|
+
}
|
|
170
|
+
throw error;
|
|
171
|
+
}
|
|
172
|
+
});
|
|
111
173
|
router.post('/:prefix/:type/:identifier/operation', requireRole(UserRole.Admin), zValidator('param', resourceParamsSchema), zValidator('json', updateOperationBodySchema), async (c) => {
|
|
112
174
|
const commands = c.get('commands');
|
|
113
175
|
const resourceParams = c.req.valid('param');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/resources/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAEF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,eAAe,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/resources/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
export declare const workflowGraphParamsSchema: z.ZodObject<{
|
|
3
|
+
prefix: z.ZodString;
|
|
4
|
+
identifier: z.ZodString;
|
|
5
|
+
}, z.core.$strip>;
|
|
6
|
+
export type WorkflowGraphParams = z.infer<typeof workflowGraphParamsSchema>;
|
|
7
|
+
export declare const workflowGraphQuerySchema: z.ZodObject<{
|
|
8
|
+
card: z.ZodOptional<z.ZodString>;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
export type WorkflowGraphQuery = z.infer<typeof workflowGraphQuerySchema>;
|
|
2
11
|
export declare const resourceFileParamsSchema: z.ZodObject<{
|
|
3
12
|
prefix: z.ZodString;
|
|
4
13
|
type: z.ZodEnum<{
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { resourceParamsSchema, resourceTypes, } from '../../common/validationSchemas.js';
|
|
2
|
+
import { identifierSchema, resourceParamsSchema, resourceTypes, } from '../../common/validationSchemas.js';
|
|
3
|
+
export const workflowGraphParamsSchema = z.object({
|
|
4
|
+
prefix: z.string(),
|
|
5
|
+
identifier: identifierSchema,
|
|
6
|
+
});
|
|
7
|
+
export const workflowGraphQuerySchema = z.object({
|
|
8
|
+
card: z.string().optional(),
|
|
9
|
+
});
|
|
3
10
|
export const resourceFileParamsSchema = resourceParamsSchema.extend({
|
|
4
11
|
file: z.string(),
|
|
5
12
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/domain/resources/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,aAAa,GACd,MAAM,mCAAmC,CAAC;AAE3C,MAAM,CAAC,MAAM,wBAAwB,GAAG,oBAAoB,CAAC,MAAM,CAAC;IAClE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,4BAA4B,GAAG,oBAAoB,CAAC,MAAM,CAAC;IACtE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;CACtE,CAAC,CAAC;AAMH,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;IACxB,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QACzB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;KACnB,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,EAAE;YAC7C,OAAO,EAAE,8BAA8B;SACxC,CAAC;KACH,CAAC;CACH,CAAC,CAAC;AAEH,yDAAyD;AACzD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,SAAS;IACT,SAAS,EAAE,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;QACtC,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;YACtB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;SACpB,CAAC;QACF,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACzB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;YACnB,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE;YACf,YAAY,EAAE,CAAC;iBACZ,MAAM,CAAC;gBACN,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;aAC/C,CAAC;iBACD,QAAQ,EAAE;SACd,CAAC;QACF,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACzB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;YACnB,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SACzC,CAAC;QACF,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;YACvB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;YACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;SACrB,CAAC;KACH,CAAC;CACH,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/domain/resources/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GACd,MAAM,mCAAmC,CAAC;AAE3C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,UAAU,EAAE,gBAAgB;CAC7B,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,wBAAwB,GAAG,oBAAoB,CAAC,MAAM,CAAC;IAClE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,4BAA4B,GAAG,oBAAoB,CAAC,MAAM,CAAC;IACtE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;CACtE,CAAC,CAAC;AAMH,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;IACxB,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QACzB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;KACnB,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,EAAE;YAC7C,OAAO,EAAE,8BAA8B;SACxC,CAAC;KACH,CAAC;CACH,CAAC,CAAC;AAEH,yDAAyD;AACzD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,SAAS;IACT,SAAS,EAAE,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;QACtC,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;YACtB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;SACpB,CAAC;QACF,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACzB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;YACnB,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE;YACf,YAAY,EAAE,CAAC;iBACZ,MAAM,CAAC;gBACN,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;aAC/C,CAAC;iBACD,QAAQ,EAAE;SACd,CAAC;QACF,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACzB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;YACnB,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SACzC,CAAC;QACF,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;YACvB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;YACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;SACrB,CAAC;KACH,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -29,6 +29,18 @@ export declare function deleteResource(commands: CommandManager, resource: Resou
|
|
|
29
29
|
export declare function validateResource(commands: CommandManager, resource: ValidateResourceParams): Promise<{
|
|
30
30
|
errors: string[];
|
|
31
31
|
}>;
|
|
32
|
+
/**
|
|
33
|
+
* Renders the built-in state-machine graph for a single workflow.
|
|
34
|
+
* When `cardKey` is provided, the card's current workflowState is
|
|
35
|
+
* highlighted in the diagram. The workflow lookup, card lookup and
|
|
36
|
+
* graph rendering all run inside the same consistency window so the
|
|
37
|
+
* highlighted state matches the diagram even if the card is being
|
|
38
|
+
* transitioned concurrently.
|
|
39
|
+
* @returns base64-encoded sanitized SVG.
|
|
40
|
+
* @throws Error with 'not found' in the message when the workflow or
|
|
41
|
+
* card cannot be resolved.
|
|
42
|
+
*/
|
|
43
|
+
export declare function getWorkflowGraph(commands: CommandManager, workflowName: string, cardKey?: string): Promise<string>;
|
|
32
44
|
/**
|
|
33
45
|
* Perform an updateOperation on a resource key.
|
|
34
46
|
* This delegates to data-handler Update.applyResourceOperation.
|
|
@@ -24,14 +24,14 @@ const resourceTypes = [
|
|
|
24
24
|
];
|
|
25
25
|
async function getModules(commands) {
|
|
26
26
|
try {
|
|
27
|
-
const
|
|
28
|
-
return Promise.all(
|
|
27
|
+
const modules = await commands.showCmd.showModules();
|
|
28
|
+
return Promise.all(modules.map(async (mod) => {
|
|
29
29
|
try {
|
|
30
|
-
const module = await commands.showCmd.showModule(
|
|
30
|
+
const module = await commands.showCmd.showModule(mod.name);
|
|
31
31
|
return { name: module.name, cardKeyPrefix: module.cardKeyPrefix };
|
|
32
32
|
}
|
|
33
33
|
catch {
|
|
34
|
-
return { name:
|
|
34
|
+
return { name: mod.name, cardKeyPrefix: mod.name };
|
|
35
35
|
}
|
|
36
36
|
}));
|
|
37
37
|
}
|
|
@@ -286,6 +286,49 @@ export async function validateResource(commands, resource) {
|
|
|
286
286
|
errors: errors.split('\n\n').filter((error) => error !== ''),
|
|
287
287
|
};
|
|
288
288
|
}
|
|
289
|
+
/**
|
|
290
|
+
* Renders the built-in state-machine graph for a single workflow.
|
|
291
|
+
* When `cardKey` is provided, the card's current workflowState is
|
|
292
|
+
* highlighted in the diagram. The workflow lookup, card lookup and
|
|
293
|
+
* graph rendering all run inside the same consistency window so the
|
|
294
|
+
* highlighted state matches the diagram even if the card is being
|
|
295
|
+
* transitioned concurrently.
|
|
296
|
+
* @returns base64-encoded sanitized SVG.
|
|
297
|
+
* @throws Error with 'not found' in the message when the workflow or
|
|
298
|
+
* card cannot be resolved.
|
|
299
|
+
*/
|
|
300
|
+
export async function getWorkflowGraph(commands, workflowName, cardKey) {
|
|
301
|
+
return commands.consistent(async () => {
|
|
302
|
+
try {
|
|
303
|
+
await commands.showCmd.showResource(workflowName, 'workflows');
|
|
304
|
+
}
|
|
305
|
+
catch (error) {
|
|
306
|
+
if (error instanceof Error && error.message.includes('does not exist')) {
|
|
307
|
+
throw new Error(`Workflow '${workflowName}' not found`, {
|
|
308
|
+
cause: error,
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
throw error;
|
|
312
|
+
}
|
|
313
|
+
let currentState;
|
|
314
|
+
if (cardKey) {
|
|
315
|
+
let card;
|
|
316
|
+
try {
|
|
317
|
+
card = await commands.showCmd.showCardDetails(cardKey);
|
|
318
|
+
}
|
|
319
|
+
catch (error) {
|
|
320
|
+
throw new Error(`Card '${cardKey}' not found`, { cause: error });
|
|
321
|
+
}
|
|
322
|
+
if (!card?.metadata) {
|
|
323
|
+
throw new Error(`Card '${cardKey}' not found`);
|
|
324
|
+
}
|
|
325
|
+
currentState = card.metadata.workflowState;
|
|
326
|
+
}
|
|
327
|
+
return commands.calculateCmd.runWorkflowGraph(workflowName, {
|
|
328
|
+
currentState,
|
|
329
|
+
});
|
|
330
|
+
});
|
|
331
|
+
}
|
|
289
332
|
/**
|
|
290
333
|
* Perform an updateOperation on a resource key.
|
|
291
334
|
* This delegates to data-handler Update.applyResourceOperation.
|