@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.
Files changed (164) hide show
  1. package/dist/app.js +3 -1
  2. package/dist/app.js.map +1 -1
  3. package/dist/domain/cards/index.js +169 -12
  4. package/dist/domain/cards/index.js.map +1 -1
  5. package/dist/domain/cards/lib.js +4 -4
  6. package/dist/domain/cards/lib.js.map +1 -1
  7. package/dist/domain/cards/presence.d.ts +50 -0
  8. package/dist/domain/cards/presence.js +93 -0
  9. package/dist/domain/cards/presence.js.map +1 -0
  10. package/dist/domain/cards/schema.d.ts +55 -0
  11. package/dist/domain/cards/schema.js +44 -0
  12. package/dist/domain/cards/schema.js.map +1 -0
  13. package/dist/domain/cards/service.d.ts +7 -2
  14. package/dist/domain/cards/service.js +37 -4
  15. package/dist/domain/cards/service.js.map +1 -1
  16. package/dist/domain/connectors/index.d.ts +15 -0
  17. package/dist/domain/connectors/index.js +37 -0
  18. package/dist/domain/connectors/index.js.map +1 -0
  19. package/dist/domain/connectors/service.d.ts +23 -0
  20. package/dist/domain/connectors/service.js +46 -0
  21. package/dist/domain/connectors/service.js.map +1 -0
  22. package/dist/domain/project/index.js +12 -1
  23. package/dist/domain/project/index.js.map +1 -1
  24. package/dist/domain/project/schema.d.ts +3 -0
  25. package/dist/domain/project/schema.js +8 -0
  26. package/dist/domain/project/schema.js.map +1 -1
  27. package/dist/domain/project/service.d.ts +3 -1
  28. package/dist/domain/project/service.js +7 -1
  29. package/dist/domain/project/service.js.map +1 -1
  30. package/dist/domain/resources/index.js +63 -1
  31. package/dist/domain/resources/index.js.map +1 -1
  32. package/dist/domain/resources/schema.d.ts +9 -0
  33. package/dist/domain/resources/schema.js +8 -1
  34. package/dist/domain/resources/schema.js.map +1 -1
  35. package/dist/domain/resources/service.d.ts +12 -0
  36. package/dist/domain/resources/service.js +47 -4
  37. package/dist/domain/resources/service.js.map +1 -1
  38. package/dist/domain/tree/service.js +0 -1
  39. package/dist/domain/tree/service.js.map +1 -1
  40. package/dist/export.js +1 -2
  41. package/dist/export.js.map +1 -1
  42. package/dist/index.js +7 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/public/THIRD-PARTY.txt +4283 -1734
  45. package/dist/public/assets/arc-DFTvTCxD.js +1 -0
  46. package/dist/public/assets/architecture-YZFGNWBL-DsWVZJri.js +1 -0
  47. package/dist/public/assets/architectureDiagram-Q4EWVU46-AN0fWZIG.js +36 -0
  48. package/dist/public/assets/array-xS8TccZC.js +1 -0
  49. package/dist/public/assets/blockDiagram-DXYQGD6D-RrIidZT3.js +132 -0
  50. package/dist/public/assets/c4Diagram-AHTNJAMY-CW7AUKhY.js +10 -0
  51. package/dist/public/assets/channel-BxffgrNT.js +1 -0
  52. package/dist/public/assets/chunk-2KRD3SAO-D5XH6bj9.js +1 -0
  53. package/dist/public/assets/chunk-336JU56O-CVDEj5x8.js +2 -0
  54. package/dist/public/assets/chunk-426QAEUC-CIWkCWTf.js +1 -0
  55. package/dist/public/assets/chunk-4BX2VUAB-O8dxzEpn.js +1 -0
  56. package/dist/public/assets/chunk-4TB4RGXK-Bt4fWDlh.js +206 -0
  57. package/dist/public/assets/chunk-55IACEB6-R-yr7oHq.js +1 -0
  58. package/dist/public/assets/chunk-5FUZZQ4R-D7L4hZzZ.js +62 -0
  59. package/dist/public/assets/chunk-5PVQY5BW-D46cRkay.js +2 -0
  60. package/dist/public/assets/chunk-67CJDMHE-1fLguPDq.js +1 -0
  61. package/dist/public/assets/chunk-7N4EOEYR-BPbEiVZr.js +1 -0
  62. package/dist/public/assets/chunk-AA7GKIK3-DZOqN73n.js +1 -0
  63. package/dist/public/assets/chunk-BSJP7CBP-BQPMRa-Q.js +1 -0
  64. package/dist/public/assets/chunk-CFjPhJqf.js +1 -0
  65. package/dist/public/assets/chunk-CIAEETIT-CoKBG93U.js +1 -0
  66. package/dist/public/assets/chunk-EDXVE4YY-BxmMvdBY.js +1 -0
  67. package/dist/public/assets/chunk-ENJZ2VHE-BrjxYY_T.js +10 -0
  68. package/dist/public/assets/chunk-FMBD7UC4-DChB7ne2.js +15 -0
  69. package/dist/public/assets/chunk-FOC6F5B3-DyK4SoM2.js +1 -0
  70. package/dist/public/assets/chunk-ICPOFSXX-6-ABzkfw.js +122 -0
  71. package/dist/public/assets/chunk-K5T4RW27-432kjUXO.js +94 -0
  72. package/dist/public/assets/chunk-KGLVRYIC-ChpiuJys.js +1 -0
  73. package/dist/public/assets/chunk-LIHQZDEY-C65uflEj.js +1 -0
  74. package/dist/public/assets/chunk-ORNJ4GCN-DPvOqXKg.js +1 -0
  75. package/dist/public/assets/chunk-OYMX7WX6-BecMUsrL.js +231 -0
  76. package/dist/public/assets/chunk-QZHKN3VN-d1i_Lm1t.js +1 -0
  77. package/dist/public/assets/chunk-U2HBQHQK-C6yvwOAo.js +70 -0
  78. package/dist/public/assets/chunk-X2U36JSP-D1C3tOED.js +1 -0
  79. package/dist/public/assets/chunk-XPW4576I-BH37LuuF.js +32 -0
  80. package/dist/public/assets/chunk-YZCP3GAM-D83gHdmx.js +1 -0
  81. package/dist/public/assets/chunk-ZZ45TVLE-DrCjtkdu.js +1 -0
  82. package/dist/public/assets/classDiagram-6PBFFD2Q-CRYacdjd.js +1 -0
  83. package/dist/public/assets/classDiagram-v2-HSJHXN6E-qOJXC_A9.js +1 -0
  84. package/dist/public/assets/clone-Bno0nirE.js +1 -0
  85. package/dist/public/assets/colors-DZGTowqM.js +1 -0
  86. package/dist/public/assets/cose-bilkent-S5V4N54A-BdSMsFO7.js +1 -0
  87. package/dist/public/assets/cytoscape.esm-DpmcErfs.js +321 -0
  88. package/dist/public/assets/dagre-D0KOcyEK.js +1 -0
  89. package/dist/public/assets/dagre-KV5264BT-C_l1Bck_.js +4 -0
  90. package/dist/public/assets/defaultLocale-B6dPnyNg.js +1 -0
  91. package/dist/public/assets/diagram-5BDNPKRD-D6FxiIv1.js +10 -0
  92. package/dist/public/assets/diagram-G4DWMVQ6-COGBv7tQ.js +24 -0
  93. package/dist/public/assets/diagram-MMDJMWI5-U6E9w334.js +43 -0
  94. package/dist/public/assets/diagram-TYMM5635-Tvfdnlo4.js +24 -0
  95. package/dist/public/assets/dist-C6vvxvVV.js +1 -0
  96. package/dist/public/assets/erDiagram-SMLLAGMA-VcPXkmy9.js +85 -0
  97. package/dist/public/assets/flatten-BKeNCJRx.js +1 -0
  98. package/dist/public/assets/flowDiagram-DWJPFMVM-PRQdlypB.js +162 -0
  99. package/dist/public/assets/ganttDiagram-T4ZO3ILL-CSVaTciZ.js +292 -0
  100. package/dist/public/assets/gitGraph-7Q5UKJZL-C6GVmHC4.js +1 -0
  101. package/dist/public/assets/gitGraphDiagram-UUTBAWPF-DMa-Gcy1.js +106 -0
  102. package/dist/public/assets/graphlib-BYojtb6k.js +1 -0
  103. package/dist/public/assets/identity-nF-8qK2-.js +1 -0
  104. package/dist/public/assets/index-oVbUFngg.js +737 -0
  105. package/dist/public/assets/index-ypsafPwV.css +1 -0
  106. package/dist/public/assets/info-OMHHGYJF-CjsmQeYR.js +1 -0
  107. package/dist/public/assets/infoDiagram-42DDH7IO-COL_Na4w.js +2 -0
  108. package/dist/public/assets/init-B9nbfZCT.js +1 -0
  109. package/dist/public/assets/isEmpty-Di-NpihJ.js +1 -0
  110. package/dist/public/assets/ishikawaDiagram-UXIWVN3A-B3HoSFaq.js +70 -0
  111. package/dist/public/assets/journeyDiagram-VCZTEJTY-kH30WNF3.js +139 -0
  112. package/dist/public/assets/kanban-definition-6JOO6SKY-RdjEsejt.js +89 -0
  113. package/dist/public/assets/katex-Bfn1OZEl.js +257 -0
  114. package/dist/public/assets/line-DrKJYWGi.js +1 -0
  115. package/dist/public/assets/linear-C8MDrvxz.js +1 -0
  116. package/dist/public/assets/mermaid-parser.core-BeZK8g2G.js +4 -0
  117. package/dist/public/assets/mindmap-definition-QFDTVHPH-CNWWI4MF.js +96 -0
  118. package/dist/public/assets/ordinal-BXaEVJbT.js +1 -0
  119. package/dist/public/assets/packet-4T2RLAQJ-Dq0Z9G3r.js +1 -0
  120. package/dist/public/assets/path-C7Bv0Qdk.js +1 -0
  121. package/dist/public/assets/pie-ZZUOXDRM-Coeb8Atk.js +1 -0
  122. package/dist/public/assets/pieDiagram-DEJITSTG-CrDW-30P.js +30 -0
  123. package/dist/public/assets/quadrantDiagram-34T5L4WZ-BoDA5WQ-.js +7 -0
  124. package/dist/public/assets/radar-PYXPWWZC-BF2NN2TG.js +1 -0
  125. package/dist/public/assets/range-DuD7Go1R.js +1 -0
  126. package/dist/public/assets/reduce-5tLTMRkg.js +1 -0
  127. package/dist/public/assets/requirementDiagram-MS252O5E-BnG7epLH.js +84 -0
  128. package/dist/public/assets/rough.esm-DE7XMpOC.js +1 -0
  129. package/dist/public/assets/sankeyDiagram-XADWPNL6-oyTFoxhB.js +10 -0
  130. package/dist/public/assets/sequenceDiagram-FGHM5R23-hwG2jT_2.js +157 -0
  131. package/dist/public/assets/src-ps-3oTnY.js +1 -0
  132. package/dist/public/assets/stateDiagram-FHFEXIEX-BiYqw63j.js +1 -0
  133. package/dist/public/assets/stateDiagram-v2-QKLJ7IA2-CggSrcDh.js +1 -0
  134. package/dist/public/assets/time-Bgnk7ODM.js +1 -0
  135. package/dist/public/assets/timeline-definition-GMOUNBTQ-9MnBod43.js +120 -0
  136. package/dist/public/assets/treeView-SZITEDCU-IRdgIoRV.js +1 -0
  137. package/dist/public/assets/treemap-DK8fitek.js +1 -0
  138. package/dist/public/assets/treemap-W4RFUUIX-C-JBwyWW.js +1 -0
  139. package/dist/public/assets/vennDiagram-DHZGUBPP-sEA6JNL-.js +34 -0
  140. package/dist/public/assets/wardley-RL74JXVD-DdU04Q7E.js +1 -0
  141. package/dist/public/assets/wardleyDiagram-NUSXRM2D-Dws321pY.js +20 -0
  142. package/dist/public/assets/xychartDiagram-5P7HB3ND-BcqyvmmW.js +7 -0
  143. package/dist/public/images/broken_link.svg +7 -0
  144. package/dist/public/index.html +31 -2
  145. package/package.json +7 -7
  146. package/src/app.ts +3 -1
  147. package/src/domain/cards/index.ts +271 -48
  148. package/src/domain/cards/lib.ts +6 -5
  149. package/src/domain/cards/presence.ts +124 -0
  150. package/src/domain/cards/schema.ts +50 -0
  151. package/src/domain/cards/service.ts +91 -5
  152. package/src/domain/connectors/index.ts +39 -0
  153. package/src/domain/connectors/service.ts +67 -0
  154. package/src/domain/project/index.ts +23 -1
  155. package/src/domain/project/schema.ts +9 -0
  156. package/src/domain/project/service.ts +18 -2
  157. package/src/domain/resources/index.ts +74 -0
  158. package/src/domain/resources/schema.ts +14 -0
  159. package/src/domain/resources/service.ts +50 -4
  160. package/src/domain/tree/service.ts +0 -1
  161. package/src/export.ts +1 -2
  162. package/src/index.ts +8 -4
  163. package/dist/public/assets/index-B_lh6qtv.css +0 -1
  164. 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, toCard: string, linkType: string, description?: string): Promise<{
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, toCard: string, linkType: string, description?: string): Promise<{
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, toCard, linkType, description) {
120
- await commands.createCmd.createLink(key, toCard, linkType, description);
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, toCard, linkType, description) {
124
- await commands.removeCmd.remove('link', key, toCard, linkType, description);
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":"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"}
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/project/index.ts"],"names":[],"mappings":"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"}
@@ -18,3 +18,6 @@ export declare const updateProjectSchema: z.ZodObject<{
18
18
  name: z.ZodOptional<z.ZodString>;
19
19
  cardKeyPrefix: z.ZodOptional<z.ZodString>;
20
20
  }, z.core.$strip>;
21
+ export declare const importModuleSchema: z.ZodObject<{
22
+ source: z.ZodString;
23
+ }, z.core.$strip>;
@@ -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;AAoBF,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,CAAC,CAClD,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"}
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,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;AAE1B;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC5D,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAEnC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC/D,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,CAAC,IAAI,CACX;YACE,KAAK,EAAE,kCAAkC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE;SACpG,EACD,GAAG,CACJ,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,MAAM,CAAC,GAAG,CACR,qCAAqC,EACrC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC5B,UAAU,CAAC,OAAO,EAAE,4BAA4B,CAAC,EACjD,KAAK,EAAE,CAAC,EAAE,EAAE;IACV,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE5C,IAAI,CAAC;QACH,MAAM,QAAQ,GACZ,MAAM,eAAe,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACnE,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAClE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,CACX,4BAA4B,EAC5B,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC3B,UAAU,CAAC,OAAO,EAAE,oBAAoB,CAAC,EACzC,KAAK,EAAE,CAAC,EAAE,EAAE;IACV,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,eAAe,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC/D,OAAO,CAAC,CAAC,IAAI,CAAC;QACZ,OAAO,EAAE,kBAAkB;KAC5B,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,sCAAsC,EACtC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC3B,UAAU,CAAC,OAAO,EAAE,oBAAoB,CAAC,EACzC,UAAU,CAAC,MAAM,EAAE,yBAAyB,CAAC,EAC7C,KAAK,EAAE,CAAC,EAAE,EAAE;IACV,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAErD,MAAM,eAAe,CAAC,2BAA2B,CAC/C,QAAQ,EACR,cAAc,EACd,EAAE,SAAS,EAAE,SAAS,EAAE,CACzB,CAAC;IACF,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AACxC,CAAC,CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
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 moduleNames = await commands.showCmd.showModules();
28
- return Promise.all(moduleNames.map(async (moduleName) => {
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(moduleName);
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: moduleName, cardKeyPrefix: moduleName };
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.