@cyberismo/backend 0.0.7 → 0.0.9
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 +22 -8
- package/dist/app.js.map +1 -1
- package/dist/common/validationSchemas.js +39 -0
- package/dist/common/validationSchemas.js.map +1 -0
- package/dist/domain/calculations/index.js +50 -0
- package/dist/domain/calculations/index.js.map +1 -0
- package/dist/domain/calculations/schema.js +17 -0
- package/dist/domain/calculations/schema.js.map +1 -0
- package/dist/domain/calculations/service.js +16 -0
- package/dist/domain/calculations/service.js.map +1 -0
- package/dist/domain/cardTypes/index.js +86 -0
- package/dist/domain/cardTypes/index.js.map +1 -0
- package/dist/domain/cardTypes/schema.js +19 -0
- package/dist/domain/cardTypes/schema.js.map +1 -0
- package/dist/domain/cardTypes/service.js +20 -0
- package/dist/domain/cardTypes/service.js.map +1 -0
- package/dist/{routes/cards.js → domain/cards/index.js} +52 -223
- package/dist/domain/cards/index.js.map +1 -0
- package/dist/domain/cards/lib.js +80 -0
- package/dist/domain/cards/lib.js.map +1 -0
- package/dist/domain/cards/service.js +178 -0
- package/dist/domain/cards/service.js.map +1 -0
- package/dist/domain/fieldTypes/index.js +87 -0
- package/dist/domain/fieldTypes/index.js.map +1 -0
- package/dist/domain/fieldTypes/schema.js +30 -0
- package/dist/domain/fieldTypes/schema.js.map +1 -0
- package/dist/domain/fieldTypes/service.js +24 -0
- package/dist/domain/fieldTypes/service.js.map +1 -0
- package/dist/domain/graphModels/index.js +50 -0
- package/dist/domain/graphModels/index.js.map +1 -0
- package/dist/domain/graphModels/schema.js +18 -0
- package/dist/domain/graphModels/schema.js.map +1 -0
- package/dist/domain/graphModels/service.js +16 -0
- package/dist/domain/graphModels/service.js.map +1 -0
- package/dist/domain/graphViews/index.js +50 -0
- package/dist/domain/graphViews/index.js.map +1 -0
- package/dist/domain/graphViews/schema.js +6 -0
- package/dist/domain/graphViews/schema.js.map +1 -0
- package/dist/domain/graphViews/service.js +16 -0
- package/dist/domain/graphViews/service.js.map +1 -0
- package/dist/domain/linkTypes/index.js +76 -0
- package/dist/domain/linkTypes/index.js.map +1 -0
- package/dist/domain/linkTypes/schema.js +18 -0
- package/dist/domain/linkTypes/schema.js.map +1 -0
- package/dist/domain/linkTypes/service.js +24 -0
- package/dist/domain/linkTypes/service.js.map +1 -0
- package/dist/domain/logicPrograms/index.js +25 -0
- package/dist/domain/logicPrograms/index.js.map +1 -0
- package/dist/domain/logicPrograms/service.js +9 -0
- package/dist/domain/logicPrograms/service.js.map +1 -0
- package/dist/domain/reports/index.js +50 -0
- package/dist/domain/reports/index.js.map +1 -0
- package/dist/domain/reports/schema.js +18 -0
- package/dist/domain/reports/schema.js.map +1 -0
- package/dist/domain/reports/service.js +16 -0
- package/dist/domain/reports/service.js.map +1 -0
- package/dist/domain/resources/index.js +125 -0
- package/dist/domain/resources/index.js.map +1 -0
- package/dist/domain/resources/schema.js +9 -0
- package/dist/domain/resources/schema.js.map +1 -0
- package/dist/domain/resources/service.js +258 -0
- package/dist/domain/resources/service.js.map +1 -0
- package/dist/domain/templates/index.js +81 -0
- package/dist/domain/templates/index.js.map +1 -0
- package/dist/domain/templates/schema.js +18 -0
- package/dist/domain/templates/schema.js.map +1 -0
- package/dist/domain/templates/service.js +23 -0
- package/dist/domain/templates/service.js.map +1 -0
- package/dist/domain/tree/index.js +44 -0
- package/dist/domain/tree/index.js.map +1 -0
- package/dist/domain/tree/service.js +17 -0
- package/dist/domain/tree/service.js.map +1 -0
- package/dist/domain/workflows/index.js +50 -0
- package/dist/domain/workflows/index.js.map +1 -0
- package/dist/domain/workflows/schema.js +18 -0
- package/dist/domain/workflows/schema.js.map +1 -0
- package/dist/domain/workflows/service.js +16 -0
- package/dist/domain/workflows/service.js.map +1 -0
- package/dist/export.js +3 -3
- package/dist/export.js.map +1 -1
- package/dist/middleware/zvalidator.js +8 -0
- package/dist/middleware/zvalidator.js.map +1 -0
- package/dist/public/THIRD-PARTY.txt +2452 -296
- package/dist/public/assets/index-CXcBl8RN.js +161392 -0
- package/dist/public/cropped-favicon-180x180.png +0 -0
- package/dist/public/cropped-favicon-192x192.png +0 -0
- package/dist/public/cropped-favicon-270x270.png +0 -0
- package/dist/public/cropped-favicon-32x32.png +0 -0
- package/dist/public/index.html +8 -1
- package/dist/types.js +14 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.js +3 -1
- package/dist/utils.js.map +1 -1
- package/package.json +7 -3
- package/src/app.ts +22 -8
- package/src/common/validationSchemas.ts +46 -0
- package/src/domain/calculations/index.ts +54 -0
- package/src/domain/calculations/schema.ts +18 -0
- package/src/domain/calculations/service.ts +21 -0
- package/src/domain/cardTypes/index.ts +96 -0
- package/src/domain/cardTypes/schema.ts +19 -0
- package/src/domain/cardTypes/service.ts +28 -0
- package/src/{routes/cards.ts → domain/cards/index.ts} +82 -270
- package/src/domain/cards/lib.ts +103 -0
- package/src/domain/cards/service.ts +254 -0
- package/src/domain/fieldTypes/index.ts +97 -0
- package/src/domain/fieldTypes/schema.ts +30 -0
- package/src/domain/fieldTypes/service.ts +38 -0
- package/src/domain/graphModels/index.ts +54 -0
- package/src/domain/graphModels/schema.ts +18 -0
- package/src/domain/graphModels/service.ts +21 -0
- package/src/domain/graphViews/index.ts +53 -0
- package/src/domain/graphViews/schema.ts +6 -0
- package/src/domain/graphViews/service.ts +20 -0
- package/src/domain/linkTypes/index.ts +84 -0
- package/src/domain/linkTypes/schema.ts +19 -0
- package/src/domain/linkTypes/service.ts +34 -0
- package/src/domain/logicPrograms/index.ts +35 -0
- package/src/domain/logicPrograms/service.ts +25 -0
- package/src/domain/reports/index.ts +54 -0
- package/src/domain/reports/schema.ts +19 -0
- package/src/domain/reports/service.ts +21 -0
- package/src/domain/resources/index.ts +164 -0
- package/src/domain/resources/schema.ts +19 -0
- package/src/domain/resources/service.ts +436 -0
- package/src/domain/templates/index.ts +89 -0
- package/src/domain/templates/schema.ts +19 -0
- package/src/domain/templates/service.ts +29 -0
- package/src/domain/tree/index.ts +50 -0
- package/src/domain/tree/service.ts +22 -0
- package/src/domain/workflows/index.ts +54 -0
- package/src/domain/workflows/schema.ts +19 -0
- package/src/domain/workflows/service.ts +21 -0
- package/src/export.ts +9 -5
- package/src/middleware/commandManager.ts +1 -1
- package/src/middleware/zvalidator.ts +17 -0
- package/src/types.ts +20 -0
- package/src/utils.ts +4 -2
- package/dist/public/assets/index-D5kiRHuF.js +0 -111171
- package/dist/routes/cards.js.map +0 -1
- package/dist/routes/fieldTypes.js +0 -42
- package/dist/routes/fieldTypes.js.map +0 -1
- package/dist/routes/linkTypes.js +0 -42
- package/dist/routes/linkTypes.js.map +0 -1
- package/dist/routes/templates.js +0 -46
- package/dist/routes/templates.js.map +0 -1
- package/dist/routes/tree.js +0 -40
- package/dist/routes/tree.js.map +0 -1
- package/src/routes/fieldTypes.ts +0 -53
- package/src/routes/linkTypes.ts +0 -53
- package/src/routes/templates.ts +0 -52
- package/src/routes/tree.ts +0 -45
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
2
|
+
Cyberismo
|
|
3
|
+
Copyright © Cyberismo Ltd and contributors 2025
|
|
4
|
+
This program is free software: you can redistribute it and/or modify it under
|
|
5
|
+
the terms of the GNU Affero General Public License version 3 as published by
|
|
6
|
+
the Free Software Foundation.
|
|
7
|
+
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
8
|
+
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
9
|
+
FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
10
|
+
details. You should have received a copy of the GNU Affero General Public
|
|
11
|
+
License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
11
12
|
*/
|
|
12
13
|
import { Hono } from 'hono';
|
|
13
|
-
import
|
|
14
|
-
import {
|
|
15
|
-
import
|
|
16
|
-
import { getCardQueryResult, isSSGContext, ssgParams } from '../export.js';
|
|
14
|
+
import { ssgParams, isSSGContext } from '../../export.js';
|
|
15
|
+
import { getCardDetails } from './lib.js';
|
|
16
|
+
import * as cardService from './service.js';
|
|
17
17
|
const router = new Hono();
|
|
18
18
|
/**
|
|
19
19
|
* @swagger
|
|
@@ -31,89 +31,14 @@ const router = new Hono();
|
|
|
31
31
|
*/
|
|
32
32
|
router.get('/', async (c) => {
|
|
33
33
|
const commands = c.get('commands');
|
|
34
|
-
const projectResponse = await commands.showCmd.showProject();
|
|
35
|
-
const workflowsResponse = await commands.showCmd.showWorkflowsWithDetails();
|
|
36
|
-
if (!workflowsResponse) {
|
|
37
|
-
return c.text(`No workflows found from path ${c.get('projectPath')}`, 500);
|
|
38
|
-
}
|
|
39
|
-
const cardTypesResponse = await commands.showCmd.showCardTypesWithDetails();
|
|
40
|
-
if (!cardTypesResponse) {
|
|
41
|
-
return c.text(`No card types found from path ${c.get('projectPath')}`, 500);
|
|
42
|
-
}
|
|
43
|
-
const cardsResponse = await commands.showCmd.showProjectCards();
|
|
44
|
-
if (!cardsResponse) {
|
|
45
|
-
return c.text(`No cards found from path ${c.get('projectPath')}`, 500);
|
|
46
|
-
}
|
|
47
|
-
const response = {
|
|
48
|
-
name: projectResponse.name,
|
|
49
|
-
cards: cardsResponse,
|
|
50
|
-
workflows: workflowsResponse,
|
|
51
|
-
cardTypes: cardTypesResponse,
|
|
52
|
-
};
|
|
53
|
-
return c.json(response);
|
|
54
|
-
});
|
|
55
|
-
async function getCardDetails(commands, key, staticMode) {
|
|
56
|
-
const fetchCardDetails = {
|
|
57
|
-
attachments: true,
|
|
58
|
-
children: false,
|
|
59
|
-
content: true,
|
|
60
|
-
contentType: 'adoc',
|
|
61
|
-
metadata: false,
|
|
62
|
-
parent: false,
|
|
63
|
-
location: CardLocation.projectOnly,
|
|
64
|
-
};
|
|
65
|
-
let cardDetailsResponse;
|
|
66
|
-
try {
|
|
67
|
-
cardDetailsResponse = await commands.showCmd.showCardDetails(fetchCardDetails, key);
|
|
68
|
-
}
|
|
69
|
-
catch {
|
|
70
|
-
return { status: 400, message: `Card ${key} not found from project` };
|
|
71
|
-
}
|
|
72
|
-
if (!cardDetailsResponse) {
|
|
73
|
-
return { status: 400, message: `Card ${key} not found from project` };
|
|
74
|
-
}
|
|
75
|
-
let asciidocContent = '';
|
|
76
34
|
try {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
project: commands.project,
|
|
80
|
-
cardKey: key,
|
|
81
|
-
}, commands.calculateCmd);
|
|
35
|
+
const response = await cardService.getProjectInfo(commands);
|
|
36
|
+
return c.json(response);
|
|
82
37
|
}
|
|
83
38
|
catch (error) {
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
.convert(asciidocContent, {
|
|
88
|
-
safe: 'safe',
|
|
89
|
-
attributes: {
|
|
90
|
-
imagesdir: `/api/cards/${key}/a`,
|
|
91
|
-
icons: 'font',
|
|
92
|
-
},
|
|
93
|
-
})
|
|
94
|
-
.toString();
|
|
95
|
-
// always parse for now if not in export mode
|
|
96
|
-
if (!staticMode) {
|
|
97
|
-
await commands.calculateCmd.generate();
|
|
98
|
-
}
|
|
99
|
-
const card = staticMode
|
|
100
|
-
? await getCardQueryResult(commands.project.basePath, key)
|
|
101
|
-
: await commands.calculateCmd.runQuery('card', {
|
|
102
|
-
cardKey: key,
|
|
103
|
-
});
|
|
104
|
-
if (card.length !== 1) {
|
|
105
|
-
throw new Error('Query failed. Check card-query syntax');
|
|
106
|
-
}
|
|
107
|
-
return {
|
|
108
|
-
status: 200,
|
|
109
|
-
data: {
|
|
110
|
-
...card[0],
|
|
111
|
-
rawContent: cardDetailsResponse.content || '',
|
|
112
|
-
parsedContent: htmlContent,
|
|
113
|
-
attachments: cardDetailsResponse.attachments,
|
|
114
|
-
},
|
|
115
|
-
};
|
|
116
|
-
}
|
|
39
|
+
return c.text(`${error instanceof Error ? error.message : 'Unknown error'} from path ${c.get('projectPath')}`, 500);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
117
42
|
/**
|
|
118
43
|
* @swagger
|
|
119
44
|
* /api/cards/{key}:
|
|
@@ -135,12 +60,8 @@ async function getCardDetails(commands, key, staticMode) {
|
|
|
135
60
|
*/
|
|
136
61
|
router.get('/:key', ssgParams(async (c) => {
|
|
137
62
|
const commands = c.get('commands');
|
|
138
|
-
const
|
|
139
|
-
|
|
140
|
-
if (!projectCards) {
|
|
141
|
-
throw new Error('Data handler did not return project cards');
|
|
142
|
-
}
|
|
143
|
-
return projectCards.cards.map((key) => ({ key }));
|
|
63
|
+
const cards = await cardService.getAllCards(commands);
|
|
64
|
+
return cards.map((key) => ({ key }));
|
|
144
65
|
}), async (c) => {
|
|
145
66
|
const key = c.req.param('key');
|
|
146
67
|
if (!key) {
|
|
@@ -193,72 +114,19 @@ router.patch('/:key', async (c) => {
|
|
|
193
114
|
return c.text('No search key', 400);
|
|
194
115
|
}
|
|
195
116
|
const body = await c.req.json();
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
await commands.transitionCmd.cardTransition(key, body.state);
|
|
201
|
-
successes++;
|
|
202
|
-
}
|
|
203
|
-
catch (error) {
|
|
204
|
-
if (error instanceof Error)
|
|
205
|
-
errors.push(error.message);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
if (body.content != null) {
|
|
209
|
-
try {
|
|
210
|
-
await commands.editCmd.editCardContent(key, body.content);
|
|
211
|
-
successes++;
|
|
212
|
-
}
|
|
213
|
-
catch (error) {
|
|
214
|
-
if (error instanceof Error)
|
|
215
|
-
errors.push(error.message);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
if (body.metadata) {
|
|
219
|
-
for (const [metadataKey, metadataValue] of Object.entries(body.metadata)) {
|
|
220
|
-
const value = metadataValue;
|
|
221
|
-
try {
|
|
222
|
-
await commands.editCmd.editCardMetadata(key, metadataKey, value);
|
|
223
|
-
successes++;
|
|
224
|
-
}
|
|
225
|
-
catch (error) {
|
|
226
|
-
if (error instanceof Error)
|
|
227
|
-
errors.push(error.message);
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
if (body.parent) {
|
|
232
|
-
try {
|
|
233
|
-
await commands.moveCmd.moveCard(key, body.parent);
|
|
234
|
-
successes++;
|
|
235
|
-
}
|
|
236
|
-
catch (error) {
|
|
237
|
-
if (error instanceof Error)
|
|
238
|
-
errors.push(error.message);
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
if (body.index != null) {
|
|
242
|
-
try {
|
|
243
|
-
await commands.moveCmd.rankByIndex(key, body.index);
|
|
244
|
-
successes++;
|
|
117
|
+
try {
|
|
118
|
+
const result = await cardService.updateCard(commands, key, body);
|
|
119
|
+
if (result.status === 200) {
|
|
120
|
+
return c.json(result.data);
|
|
245
121
|
}
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
122
|
+
else {
|
|
123
|
+
return c.json({
|
|
124
|
+
error: result.message || 'Unknown error',
|
|
125
|
+
}, result.status);
|
|
249
126
|
}
|
|
250
127
|
}
|
|
251
|
-
|
|
252
|
-
return c.text(
|
|
253
|
-
}
|
|
254
|
-
const result = await getCardDetails(commands, key);
|
|
255
|
-
if (result.status === 200) {
|
|
256
|
-
return c.json(result.data);
|
|
257
|
-
}
|
|
258
|
-
else {
|
|
259
|
-
return c.json({
|
|
260
|
-
error: result.message || 'Unknown error',
|
|
261
|
-
}, result.status);
|
|
128
|
+
catch (error) {
|
|
129
|
+
return c.text(error instanceof Error ? error.message : 'Unknown error', 400);
|
|
262
130
|
}
|
|
263
131
|
});
|
|
264
132
|
/**
|
|
@@ -288,7 +156,7 @@ router.delete('/:key', async (c) => {
|
|
|
288
156
|
return c.text('No search key', 400);
|
|
289
157
|
}
|
|
290
158
|
try {
|
|
291
|
-
await
|
|
159
|
+
await cardService.deleteCard(commands, key);
|
|
292
160
|
return new Response(null, { status: 204 });
|
|
293
161
|
}
|
|
294
162
|
catch (error) {
|
|
@@ -330,12 +198,7 @@ router.post('/:key', async (c) => {
|
|
|
330
198
|
return c.text('template is required', 400);
|
|
331
199
|
}
|
|
332
200
|
try {
|
|
333
|
-
const result = await c
|
|
334
|
-
.get('commands')
|
|
335
|
-
.createCmd.createCard(body.template, key === 'root' ? undefined : key);
|
|
336
|
-
if (result.length === 0) {
|
|
337
|
-
return c.json({ error: 'No cards created' }, 400);
|
|
338
|
-
}
|
|
201
|
+
const result = await cardService.createCard(c.get('commands'), body.template, key);
|
|
339
202
|
return c.json(result);
|
|
340
203
|
}
|
|
341
204
|
catch (error) {
|
|
@@ -384,18 +247,8 @@ router.post('/:key/attachments', async (c) => {
|
|
|
384
247
|
if (!files || files.length === 0) {
|
|
385
248
|
return c.json({ error: 'No files uploaded' }, 400);
|
|
386
249
|
}
|
|
387
|
-
const
|
|
388
|
-
|
|
389
|
-
if (file instanceof File) {
|
|
390
|
-
const buffer = await file.arrayBuffer();
|
|
391
|
-
await commands.createCmd.createAttachment(key, file.name, Buffer.from(buffer));
|
|
392
|
-
succeeded.push(file.name);
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
return c.json({
|
|
396
|
-
message: 'Attachments uploaded successfully',
|
|
397
|
-
files: succeeded,
|
|
398
|
-
});
|
|
250
|
+
const result = await cardService.uploadAttachments(commands, key, files);
|
|
251
|
+
return c.json(result);
|
|
399
252
|
}
|
|
400
253
|
catch (error) {
|
|
401
254
|
return c.json({
|
|
@@ -433,8 +286,8 @@ router.delete('/:key/attachments/:filename', async (c) => {
|
|
|
433
286
|
const commands = c.get('commands');
|
|
434
287
|
const { key, filename } = c.req.param();
|
|
435
288
|
try {
|
|
436
|
-
await
|
|
437
|
-
return c.json(
|
|
289
|
+
const result = await cardService.removeAttachment(commands, key, filename);
|
|
290
|
+
return c.json(result);
|
|
438
291
|
}
|
|
439
292
|
catch (error) {
|
|
440
293
|
return c.json({
|
|
@@ -472,8 +325,8 @@ router.post('/:key/attachments/:filename/open', async (c) => {
|
|
|
472
325
|
const commands = c.get('commands');
|
|
473
326
|
const { key, filename } = c.req.param();
|
|
474
327
|
try {
|
|
475
|
-
await
|
|
476
|
-
return c.json(
|
|
328
|
+
const result = await cardService.openAttachment(commands, key, filename);
|
|
329
|
+
return c.json(result);
|
|
477
330
|
}
|
|
478
331
|
catch (error) {
|
|
479
332
|
return c.json({
|
|
@@ -516,28 +369,8 @@ router.post('/:key/parse', async (c) => {
|
|
|
516
369
|
return c.json({ error: 'Content is required' }, 400);
|
|
517
370
|
}
|
|
518
371
|
try {
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
asciidocContent = await evaluateMacros(content, {
|
|
522
|
-
mode: 'inject',
|
|
523
|
-
project: commands.project,
|
|
524
|
-
cardKey: key,
|
|
525
|
-
}, commands.calculateCmd);
|
|
526
|
-
}
|
|
527
|
-
catch (error) {
|
|
528
|
-
asciidocContent = `Macro error: ${error instanceof Error ? error.message : 'Unknown error'}\n\n${content}`;
|
|
529
|
-
}
|
|
530
|
-
const processor = Processor();
|
|
531
|
-
const parsedContent = processor
|
|
532
|
-
.convert(asciidocContent, {
|
|
533
|
-
safe: 'safe',
|
|
534
|
-
attributes: {
|
|
535
|
-
imagesdir: `/api/cards/${key}/a`,
|
|
536
|
-
icons: 'font',
|
|
537
|
-
},
|
|
538
|
-
})
|
|
539
|
-
.toString();
|
|
540
|
-
return c.json({ parsedContent });
|
|
372
|
+
const result = await cardService.parseContent(commands, key, content);
|
|
373
|
+
return c.json(result);
|
|
541
374
|
}
|
|
542
375
|
catch (error) {
|
|
543
376
|
return c.json({
|
|
@@ -584,8 +417,8 @@ router.post('/:key/links', async (c) => {
|
|
|
584
417
|
return c.json({ error: 'toCard and linkType are required' }, 400);
|
|
585
418
|
}
|
|
586
419
|
try {
|
|
587
|
-
await
|
|
588
|
-
return c.json(
|
|
420
|
+
const result = await cardService.createLink(commands, key, toCard, linkType, description);
|
|
421
|
+
return c.json(result);
|
|
589
422
|
}
|
|
590
423
|
catch (error) {
|
|
591
424
|
return c.json({
|
|
@@ -632,8 +465,8 @@ router.delete('/:key/links', async (c) => {
|
|
|
632
465
|
return c.json({ error: 'toCard and linkType are required' }, 400);
|
|
633
466
|
}
|
|
634
467
|
try {
|
|
635
|
-
await
|
|
636
|
-
return c.json(
|
|
468
|
+
const result = await cardService.removeLink(commands, key, toCard, linkType, description);
|
|
469
|
+
return c.json(result);
|
|
637
470
|
}
|
|
638
471
|
catch (error) {
|
|
639
472
|
return c.json({
|
|
@@ -667,11 +500,7 @@ router.delete('/:key/links', async (c) => {
|
|
|
667
500
|
*/
|
|
668
501
|
router.get('/:key/a/:attachment', ssgParams(async (c) => {
|
|
669
502
|
const commands = c.get('commands');
|
|
670
|
-
|
|
671
|
-
return attachments.map((attachment) => ({
|
|
672
|
-
key: attachment.card,
|
|
673
|
-
attachment: attachment.fileName,
|
|
674
|
-
}));
|
|
503
|
+
return await cardService.getAllAttachments(commands);
|
|
675
504
|
}), async (c) => {
|
|
676
505
|
const commands = c.get('commands');
|
|
677
506
|
const { key, attachment } = c.req.param();
|
|
@@ -680,10 +509,8 @@ router.get('/:key/a/:attachment', ssgParams(async (c) => {
|
|
|
680
509
|
return c.text('Missing cardKey or filename', 400);
|
|
681
510
|
}
|
|
682
511
|
try {
|
|
683
|
-
const attachmentResponse = await
|
|
684
|
-
|
|
685
|
-
return c.text(`No attachment found from card ${key} and filename ${filename}`, 404);
|
|
686
|
-
}
|
|
512
|
+
const attachmentResponse = await cardService.getAttachment(commands, key, filename);
|
|
513
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
687
514
|
const payload = attachmentResponse;
|
|
688
515
|
return new Response(payload.fileBuffer, {
|
|
689
516
|
headers: {
|
|
@@ -693,11 +520,13 @@ router.get('/:key/a/:attachment', ssgParams(async (c) => {
|
|
|
693
520
|
},
|
|
694
521
|
});
|
|
695
522
|
}
|
|
696
|
-
catch {
|
|
523
|
+
catch (error) {
|
|
697
524
|
return c.json({
|
|
698
|
-
error:
|
|
525
|
+
error: error instanceof Error
|
|
526
|
+
? error.message
|
|
527
|
+
: `No attachment found from card ${key} and filename ${filename}`,
|
|
699
528
|
}, 404);
|
|
700
529
|
}
|
|
701
530
|
});
|
|
702
531
|
export default router;
|
|
703
|
-
//# sourceMappingURL=
|
|
532
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/cards/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
Cyberismo
|
|
3
|
+
Copyright © Cyberismo Ltd and contributors 2025
|
|
4
|
+
This program is free software: you can redistribute it and/or modify it under
|
|
5
|
+
the terms of the GNU Affero General Public License version 3 as published by
|
|
6
|
+
the Free Software Foundation.
|
|
7
|
+
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
8
|
+
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
9
|
+
FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
10
|
+
details. You should have received a copy of the GNU Affero General Public
|
|
11
|
+
License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
12
|
+
*/
|
|
13
|
+
import Processor from '@asciidoctor/core';
|
|
14
|
+
import { CardLocation, } from '@cyberismo/data-handler/interfaces/project-interfaces';
|
|
15
|
+
import { evaluateMacros } from '@cyberismo/data-handler';
|
|
16
|
+
import { getCardQueryResult } from '../../export.js';
|
|
17
|
+
export async function getCardDetails(commands, key, staticMode) {
|
|
18
|
+
const fetchCardDetails = {
|
|
19
|
+
attachments: true,
|
|
20
|
+
children: false,
|
|
21
|
+
content: true,
|
|
22
|
+
contentType: 'adoc',
|
|
23
|
+
metadata: false,
|
|
24
|
+
parent: false,
|
|
25
|
+
location: CardLocation.all,
|
|
26
|
+
};
|
|
27
|
+
let cardDetailsResponse;
|
|
28
|
+
try {
|
|
29
|
+
cardDetailsResponse = await commands.showCmd.showCardDetails(fetchCardDetails, key);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return { status: 400, message: `Card ${key} not found from project` };
|
|
33
|
+
}
|
|
34
|
+
if (!cardDetailsResponse) {
|
|
35
|
+
return { status: 400, message: `Card ${key} not found from project` };
|
|
36
|
+
}
|
|
37
|
+
// always parse for now if not in export mode
|
|
38
|
+
if (!staticMode) {
|
|
39
|
+
await commands.calculateCmd.generate();
|
|
40
|
+
}
|
|
41
|
+
let asciidocContent = '';
|
|
42
|
+
try {
|
|
43
|
+
asciidocContent = await evaluateMacros(cardDetailsResponse.content || '', {
|
|
44
|
+
context: staticMode ? 'exportedSite' : 'localApp',
|
|
45
|
+
mode: staticMode ? 'static' : 'inject',
|
|
46
|
+
project: commands.project,
|
|
47
|
+
cardKey: key,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
asciidocContent = `Macro error: ${error instanceof Error ? error.message : 'Unknown error'}\n\n${asciidocContent}`;
|
|
52
|
+
}
|
|
53
|
+
const htmlContent = Processor()
|
|
54
|
+
.convert(asciidocContent, {
|
|
55
|
+
safe: 'safe',
|
|
56
|
+
attributes: {
|
|
57
|
+
imagesdir: `/api/cards/${key}/a`,
|
|
58
|
+
icons: 'font',
|
|
59
|
+
},
|
|
60
|
+
})
|
|
61
|
+
.toString();
|
|
62
|
+
const card = staticMode
|
|
63
|
+
? await getCardQueryResult(commands.project.basePath, key)
|
|
64
|
+
: await commands.calculateCmd.runQuery('card', 'localApp', {
|
|
65
|
+
cardKey: key,
|
|
66
|
+
});
|
|
67
|
+
if (card.length !== 1) {
|
|
68
|
+
throw new Error('Query failed. Check card-query syntax');
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
status: 200,
|
|
72
|
+
data: {
|
|
73
|
+
...card[0],
|
|
74
|
+
rawContent: cardDetailsResponse.content || '',
|
|
75
|
+
parsedContent: htmlContent,
|
|
76
|
+
attachments: cardDetailsResponse.attachments,
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=lib.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../../src/domain/cards/lib.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
Cyberismo
|
|
3
|
+
Copyright © Cyberismo Ltd and contributors 2025
|
|
4
|
+
This program is free software: you can redistribute it and/or modify it under
|
|
5
|
+
the terms of the GNU Affero General Public License version 3 as published by
|
|
6
|
+
the Free Software Foundation.
|
|
7
|
+
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
8
|
+
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
9
|
+
FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
10
|
+
details. You should have received a copy of the GNU Affero General Public
|
|
11
|
+
License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
12
|
+
*/
|
|
13
|
+
import Processor from '@asciidoctor/core';
|
|
14
|
+
import { CardLocation, } from '@cyberismo/data-handler/interfaces/project-interfaces';
|
|
15
|
+
import { evaluateMacros } from '@cyberismo/data-handler';
|
|
16
|
+
import { getCardDetails } from './lib.js';
|
|
17
|
+
export async function getProjectInfo(commands) {
|
|
18
|
+
const projectResponse = await commands.showCmd.showProject();
|
|
19
|
+
const workflowsResponse = await commands.showCmd.showWorkflowsWithDetails();
|
|
20
|
+
if (!workflowsResponse) {
|
|
21
|
+
throw new Error('No workflows found');
|
|
22
|
+
}
|
|
23
|
+
const cardTypesResponse = await commands.showCmd.showCardTypesWithDetails();
|
|
24
|
+
if (!cardTypesResponse) {
|
|
25
|
+
throw new Error('No card types found');
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
name: projectResponse.name,
|
|
29
|
+
prefix: projectResponse.prefix,
|
|
30
|
+
workflows: workflowsResponse,
|
|
31
|
+
cardTypes: cardTypesResponse,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export async function updateCard(commands, key,
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
36
|
+
body) {
|
|
37
|
+
const errors = [];
|
|
38
|
+
if (body.state) {
|
|
39
|
+
try {
|
|
40
|
+
await commands.transitionCmd.cardTransition(key, body.state);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
if (error instanceof Error)
|
|
44
|
+
errors.push(error.message);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (body.content != null) {
|
|
48
|
+
try {
|
|
49
|
+
await commands.editCmd.editCardContent(key, body.content);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
if (error instanceof Error)
|
|
53
|
+
errors.push(error.message);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (body.metadata) {
|
|
57
|
+
for (const [metadataKey, metadataValue] of Object.entries(body.metadata)) {
|
|
58
|
+
const value = metadataValue;
|
|
59
|
+
try {
|
|
60
|
+
await commands.editCmd.editCardMetadata(key, metadataKey, value);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
if (error instanceof Error)
|
|
64
|
+
errors.push(error.message);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (body.parent) {
|
|
69
|
+
try {
|
|
70
|
+
await commands.moveCmd.moveCard(key, body.parent);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
if (error instanceof Error)
|
|
74
|
+
errors.push(error.message);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (body.index != null) {
|
|
78
|
+
try {
|
|
79
|
+
await commands.moveCmd.rankByIndex(key, body.index);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
if (error instanceof Error)
|
|
83
|
+
errors.push(error.message);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (errors.length > 0) {
|
|
87
|
+
throw new Error(errors.join('\n'));
|
|
88
|
+
}
|
|
89
|
+
return await getCardDetails(commands, key);
|
|
90
|
+
}
|
|
91
|
+
export async function deleteCard(commands, key) {
|
|
92
|
+
await commands.removeCmd.remove('card', key);
|
|
93
|
+
}
|
|
94
|
+
export async function createCard(commands, template, parentKey) {
|
|
95
|
+
const result = await commands.createCmd.createCard(template, parentKey === 'root' ? undefined : parentKey);
|
|
96
|
+
if (result.length === 0) {
|
|
97
|
+
throw new Error('No cards created');
|
|
98
|
+
}
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
export async function uploadAttachments(commands, key, files) {
|
|
102
|
+
const succeeded = [];
|
|
103
|
+
for (const file of files) {
|
|
104
|
+
if (file instanceof File) {
|
|
105
|
+
const buffer = await file.arrayBuffer();
|
|
106
|
+
await commands.createCmd.createAttachment(key, file.name, Buffer.from(buffer));
|
|
107
|
+
succeeded.push(file.name);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
message: 'Attachments uploaded successfully',
|
|
112
|
+
files: succeeded,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
export async function removeAttachment(commands, key, filename) {
|
|
116
|
+
await commands.removeCmd.remove('attachment', key, filename);
|
|
117
|
+
return { message: 'Attachment removed successfully' };
|
|
118
|
+
}
|
|
119
|
+
export async function openAttachment(commands, key, filename) {
|
|
120
|
+
await commands.showCmd.openAttachment(key, filename);
|
|
121
|
+
return { message: 'Attachment opened successfully' };
|
|
122
|
+
}
|
|
123
|
+
export async function parseContent(commands, key, content) {
|
|
124
|
+
let asciidocContent = '';
|
|
125
|
+
try {
|
|
126
|
+
asciidocContent = await evaluateMacros(content, {
|
|
127
|
+
context: 'localApp',
|
|
128
|
+
mode: 'inject',
|
|
129
|
+
project: commands.project,
|
|
130
|
+
cardKey: key,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
asciidocContent = `Macro error: ${error instanceof Error ? error.message : 'Unknown error'}\n\n${content}`;
|
|
135
|
+
}
|
|
136
|
+
const processor = Processor();
|
|
137
|
+
const parsedContent = processor
|
|
138
|
+
.convert(asciidocContent, {
|
|
139
|
+
safe: 'safe',
|
|
140
|
+
attributes: {
|
|
141
|
+
imagesdir: `/api/cards/${key}/a`,
|
|
142
|
+
icons: 'font',
|
|
143
|
+
},
|
|
144
|
+
})
|
|
145
|
+
.toString();
|
|
146
|
+
return { parsedContent };
|
|
147
|
+
}
|
|
148
|
+
export async function createLink(commands, key, toCard, linkType, description) {
|
|
149
|
+
await commands.createCmd.createLink(key, toCard, linkType, description);
|
|
150
|
+
return { message: 'Link created successfully' };
|
|
151
|
+
}
|
|
152
|
+
export async function removeLink(commands, key, toCard, linkType, description) {
|
|
153
|
+
await commands.removeCmd.remove('link', key, toCard, linkType, description);
|
|
154
|
+
return { message: 'Link removed successfully' };
|
|
155
|
+
}
|
|
156
|
+
export async function getAttachment(commands, key, filename) {
|
|
157
|
+
const attachmentResponse = await commands.showCmd.showAttachment(key, filename);
|
|
158
|
+
if (!attachmentResponse) {
|
|
159
|
+
throw new Error(`No attachment found from card ${key} and filename ${filename}`);
|
|
160
|
+
}
|
|
161
|
+
return attachmentResponse;
|
|
162
|
+
}
|
|
163
|
+
export async function getAllCards(commands) {
|
|
164
|
+
const fetchedCards = await commands.showCmd.showCards(CardLocation.projectOnly);
|
|
165
|
+
const projectCards = fetchedCards.find((cardContainer) => cardContainer.type === 'project');
|
|
166
|
+
if (!projectCards) {
|
|
167
|
+
throw new Error('Data handler did not return project cards');
|
|
168
|
+
}
|
|
169
|
+
return projectCards.cards;
|
|
170
|
+
}
|
|
171
|
+
export async function getAllAttachments(commands) {
|
|
172
|
+
const attachments = await commands.showCmd.showAttachments();
|
|
173
|
+
return attachments.map((attachment) => ({
|
|
174
|
+
key: attachment.card,
|
|
175
|
+
attachment: attachment.fileName,
|
|
176
|
+
}));
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=service.js.map
|