@plandesk/api 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth.d.ts +3 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +37 -0
- package/dist/auth.js.map +1 -0
- package/dist/events.d.ts +38 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +20 -0
- package/dist/events.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/routes/agent-runs.d.ts +4 -0
- package/dist/routes/agent-runs.d.ts.map +1 -0
- package/dist/routes/agent-runs.js +13 -0
- package/dist/routes/agent-runs.js.map +1 -0
- package/dist/routes/canvas.d.ts +4 -0
- package/dist/routes/canvas.d.ts.map +1 -0
- package/dist/routes/canvas.js +53 -0
- package/dist/routes/canvas.js.map +1 -0
- package/dist/routes/documents.d.ts +4 -0
- package/dist/routes/documents.d.ts.map +1 -0
- package/dist/routes/documents.js +88 -0
- package/dist/routes/documents.js.map +1 -0
- package/dist/routes/events.d.ts +4 -0
- package/dist/routes/events.d.ts.map +1 -0
- package/dist/routes/events.js +35 -0
- package/dist/routes/events.js.map +1 -0
- package/dist/routes/health.d.ts +3 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +4 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/projects.d.ts +5 -0
- package/dist/routes/projects.d.ts.map +1 -0
- package/dist/routes/projects.js +42 -0
- package/dist/routes/projects.js.map +1 -0
- package/dist/routes/tasks.d.ts +4 -0
- package/dist/routes/tasks.d.ts.map +1 -0
- package/dist/routes/tasks.js +32 -0
- package/dist/routes/tasks.js.map +1 -0
- package/dist/routes/tokens.d.ts +4 -0
- package/dist/routes/tokens.d.ts.map +1 -0
- package/dist/routes/tokens.js +22 -0
- package/dist/routes/tokens.js.map +1 -0
- package/dist/serialize.d.ts +84 -0
- package/dist/serialize.d.ts.map +1 -0
- package/dist/serialize.js +111 -0
- package/dist/serialize.js.map +1 -0
- package/dist/server.d.ts +13 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +35 -0
- package/dist/server.js.map +1 -0
- package/dist/services/agent-runs.d.ts +48 -0
- package/dist/services/agent-runs.d.ts.map +1 -0
- package/dist/services/agent-runs.js +93 -0
- package/dist/services/agent-runs.js.map +1 -0
- package/dist/services/canvas.d.ts +100 -0
- package/dist/services/canvas.d.ts.map +1 -0
- package/dist/services/canvas.js +152 -0
- package/dist/services/canvas.js.map +1 -0
- package/dist/services/documents.d.ts +33 -0
- package/dist/services/documents.d.ts.map +1 -0
- package/dist/services/documents.js +97 -0
- package/dist/services/documents.js.map +1 -0
- package/dist/services/index.d.ts +23 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +26 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/projects.d.ts +35 -0
- package/dist/services/projects.d.ts.map +1 -0
- package/dist/services/projects.js +30 -0
- package/dist/services/projects.js.map +1 -0
- package/dist/services/tasks.d.ts +66 -0
- package/dist/services/tasks.d.ts.map +1 -0
- package/dist/services/tasks.js +64 -0
- package/dist/services/tasks.js.map +1 -0
- package/dist/services/tokens.d.ts +15 -0
- package/dist/services/tokens.d.ts.map +1 -0
- package/dist/services/tokens.js +26 -0
- package/dist/services/tokens.js.map +1 -0
- package/dist/static.d.ts +3 -0
- package/dist/static.d.ts.map +1 -0
- package/dist/static.js +27 -0
- package/dist/static.js.map +1 -0
- package/dist/test-helpers.d.ts +37 -0
- package/dist/test-helpers.d.ts.map +1 -0
- package/dist/test-helpers.js +17 -0
- package/dist/test-helpers.js.map +1 -0
- package/package.json +32 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { createEdge, createTask, deleteEdge, getEdgeByProjectAndId, getProject, getTask, listEdges, listTasks, updateEdge, updateProject, updateTask, } from '@plandesk/db';
|
|
2
|
+
import { serializeEdge, serializeTask } from '../serialize.js';
|
|
3
|
+
export class InvalidCanvasError extends Error {
|
|
4
|
+
constructor(message) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = 'InvalidCanvasError';
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
function parseLayout(projectLayout) {
|
|
10
|
+
if (projectLayout === null) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
return JSON.parse(projectLayout);
|
|
14
|
+
}
|
|
15
|
+
function serializeLayout(projectLayout) {
|
|
16
|
+
return parseLayout(projectLayout);
|
|
17
|
+
}
|
|
18
|
+
export function createCanvasService(deps) {
|
|
19
|
+
const { db, eventBus } = deps;
|
|
20
|
+
function buildCanvas(projectId, project) {
|
|
21
|
+
const tasks = listTasks(db, projectId);
|
|
22
|
+
const edgeRows = listEdges(db, projectId);
|
|
23
|
+
return {
|
|
24
|
+
nodes: tasks.map(serializeTask),
|
|
25
|
+
edges: edgeRows.map(serializeEdge),
|
|
26
|
+
layout: serializeLayout(project.canvasLayout),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
get(projectId) {
|
|
31
|
+
const project = getProject(db, projectId);
|
|
32
|
+
if (!project) {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
return buildCanvas(projectId, project);
|
|
36
|
+
},
|
|
37
|
+
createEdge(projectId, input) {
|
|
38
|
+
const project = getProject(db, projectId);
|
|
39
|
+
if (!project) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
const taskIds = new Set(listTasks(db, projectId).map((task) => task.id));
|
|
43
|
+
if (!taskIds.has(input.fromTaskId)) {
|
|
44
|
+
throw new InvalidCanvasError('Edge references missing from task');
|
|
45
|
+
}
|
|
46
|
+
if (!taskIds.has(input.toTaskId)) {
|
|
47
|
+
throw new InvalidCanvasError('Edge references missing to task');
|
|
48
|
+
}
|
|
49
|
+
const edge = createEdge(db, {
|
|
50
|
+
projectId,
|
|
51
|
+
fromTaskId: input.fromTaskId,
|
|
52
|
+
toTaskId: input.toTaskId,
|
|
53
|
+
label: input.label ?? null,
|
|
54
|
+
style: input.style ?? null,
|
|
55
|
+
});
|
|
56
|
+
eventBus.emit({ type: 'canvas_updated', projectId });
|
|
57
|
+
return serializeEdge(edge);
|
|
58
|
+
},
|
|
59
|
+
putLayout(projectId, payload) {
|
|
60
|
+
const project = getProject(db, projectId);
|
|
61
|
+
if (!project) {
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
for (const node of payload.nodes) {
|
|
65
|
+
if (node.id !== undefined) {
|
|
66
|
+
const existing = getTask(db, node.id);
|
|
67
|
+
if (existing && existing.projectId !== projectId) {
|
|
68
|
+
throw new InvalidCanvasError('Task does not belong to project');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const taskIds = new Set(listTasks(db, projectId).map((task) => task.id));
|
|
73
|
+
for (const edge of payload.edges) {
|
|
74
|
+
if (!taskIds.has(edge.from_task_id) &&
|
|
75
|
+
!payload.nodes.some((n) => n.id === edge.from_task_id)) {
|
|
76
|
+
throw new InvalidCanvasError('Edge references missing from task');
|
|
77
|
+
}
|
|
78
|
+
if (!taskIds.has(edge.to_task_id) && !payload.nodes.some((n) => n.id === edge.to_task_id)) {
|
|
79
|
+
throw new InvalidCanvasError('Edge references missing to task');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
db.transaction((tx) => {
|
|
83
|
+
for (const node of payload.nodes) {
|
|
84
|
+
if (node.id !== undefined) {
|
|
85
|
+
const existing = getTask(tx, node.id);
|
|
86
|
+
if (existing) {
|
|
87
|
+
updateTask(tx, node.id, { x: node.x, y: node.y });
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (typeof node.label !== 'string' || node.label.trim() === '') {
|
|
92
|
+
throw new InvalidCanvasError('New canvas node requires label');
|
|
93
|
+
}
|
|
94
|
+
const created = createTask(tx, {
|
|
95
|
+
projectId,
|
|
96
|
+
id: node.id,
|
|
97
|
+
label: node.label,
|
|
98
|
+
status: 'todo',
|
|
99
|
+
x: node.x,
|
|
100
|
+
y: node.y,
|
|
101
|
+
});
|
|
102
|
+
taskIds.add(created.id);
|
|
103
|
+
}
|
|
104
|
+
for (const edgeInput of payload.edges) {
|
|
105
|
+
if (!taskIds.has(edgeInput.from_task_id)) {
|
|
106
|
+
throw new InvalidCanvasError('Edge references missing from task');
|
|
107
|
+
}
|
|
108
|
+
if (!taskIds.has(edgeInput.to_task_id)) {
|
|
109
|
+
throw new InvalidCanvasError('Edge references missing to task');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const existingEdges = listEdges(tx, projectId);
|
|
113
|
+
const payloadEdgeIds = new Set(payload.edges.map((edge) => edge.id).filter((id) => id !== undefined));
|
|
114
|
+
for (const existingEdge of existingEdges) {
|
|
115
|
+
if (!payloadEdgeIds.has(existingEdge.id)) {
|
|
116
|
+
deleteEdge(tx, existingEdge.id);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
for (const edgeInput of payload.edges) {
|
|
120
|
+
const edgeData = {
|
|
121
|
+
fromTaskId: edgeInput.from_task_id,
|
|
122
|
+
toTaskId: edgeInput.to_task_id,
|
|
123
|
+
label: edgeInput.label ?? null,
|
|
124
|
+
arrowDirection: edgeInput.arrow_direction ?? null,
|
|
125
|
+
style: edgeInput.style ?? null,
|
|
126
|
+
};
|
|
127
|
+
if (edgeInput.id !== undefined) {
|
|
128
|
+
const existing = getEdgeByProjectAndId(tx, projectId, edgeInput.id);
|
|
129
|
+
if (existing) {
|
|
130
|
+
updateEdge(tx, edgeInput.id, edgeData);
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
createEdge(tx, { projectId, id: edgeInput.id, ...edgeData });
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
createEdge(tx, { projectId, ...edgeData });
|
|
137
|
+
}
|
|
138
|
+
const layoutJson = payload.layout === undefined ? undefined : JSON.stringify(payload.layout);
|
|
139
|
+
updateProject(tx, projectId, {
|
|
140
|
+
...(layoutJson !== undefined ? { canvasLayout: layoutJson } : {}),
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
const updatedProject = getProject(db, projectId);
|
|
144
|
+
if (!updatedProject) {
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
eventBus.emit({ type: 'canvas_updated', projectId });
|
|
148
|
+
return buildCanvas(projectId, updatedProject);
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=canvas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../src/services/canvas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type Db } from '@plandesk/db';
|
|
2
|
+
import { type SerializedDocument, type SerializedDocumentTree } from '../serialize.js';
|
|
3
|
+
import type { EventBus } from '../events.js';
|
|
4
|
+
export type DocumentServiceDeps = {
|
|
5
|
+
db: Db;
|
|
6
|
+
eventBus: EventBus;
|
|
7
|
+
};
|
|
8
|
+
export type CreateDocumentInput = {
|
|
9
|
+
title: string;
|
|
10
|
+
body?: string | null;
|
|
11
|
+
statusLine?: string | null;
|
|
12
|
+
parentId?: string | null;
|
|
13
|
+
linkedTaskId?: string | null;
|
|
14
|
+
};
|
|
15
|
+
export type UpdateDocumentInput = {
|
|
16
|
+
title?: string;
|
|
17
|
+
body?: string | null;
|
|
18
|
+
statusLine?: string | null;
|
|
19
|
+
parentId?: string | null;
|
|
20
|
+
linkedTaskId?: string | null;
|
|
21
|
+
};
|
|
22
|
+
export declare class InvalidDocumentError extends Error {
|
|
23
|
+
constructor(message: string);
|
|
24
|
+
}
|
|
25
|
+
export declare function createDocumentService(deps: DocumentServiceDeps): {
|
|
26
|
+
listTree(projectId: string): SerializedDocumentTree[] | undefined;
|
|
27
|
+
create(projectId: string, input: CreateDocumentInput): SerializedDocument | undefined;
|
|
28
|
+
get(id: string): SerializedDocument | undefined;
|
|
29
|
+
update(id: string, input: UpdateDocumentInput): SerializedDocument | undefined;
|
|
30
|
+
getByTask(taskId: string): SerializedDocument | undefined;
|
|
31
|
+
};
|
|
32
|
+
export type DocumentService = ReturnType<typeof createDocumentService>;
|
|
33
|
+
//# sourceMappingURL=documents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/services/documents.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,EAAE,EACR,MAAM,cAAc,CAAC;AACtB,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,EAAE,CAAC;IACP,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAgBD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB;wBAIvC,MAAM,GAAG,sBAAsB,EAAE,GAAG,SAAS;sBAQ/C,MAAM,SAAS,mBAAmB,GAAG,kBAAkB,GAAG,SAAS;YAgC7E,MAAM,GAAG,kBAAkB,GAAG,SAAS;eAQpC,MAAM,SAAS,mBAAmB,GAAG,kBAAkB,GAAG,SAAS;sBAyB5D,MAAM,GAAG,kBAAkB,GAAG,SAAS;EAc5D;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { createDocument as dbCreateDocument, getDocument as dbGetDocument, getDocumentByTask as dbGetDocumentByTask, getProject, getTask, listDocuments as dbListDocuments, updateDocument as dbUpdateDocument, } from '@plandesk/db';
|
|
2
|
+
import { buildDocumentTree, serializeDocument, } from '../serialize.js';
|
|
3
|
+
export class InvalidDocumentError extends Error {
|
|
4
|
+
constructor(message) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = 'InvalidDocumentError';
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
function assertTaskInProject(db, projectId, taskId) {
|
|
10
|
+
const task = getTask(db, taskId);
|
|
11
|
+
if (!task || task.projectId !== projectId) {
|
|
12
|
+
throw new InvalidDocumentError('Task does not belong to project');
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function assertParentInProject(db, projectId, parentId) {
|
|
16
|
+
const parent = dbGetDocument(db, parentId);
|
|
17
|
+
if (!parent || parent.projectId !== projectId) {
|
|
18
|
+
throw new InvalidDocumentError('Parent document does not belong to project');
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function createDocumentService(deps) {
|
|
22
|
+
const { db, eventBus } = deps;
|
|
23
|
+
return {
|
|
24
|
+
listTree(projectId) {
|
|
25
|
+
const project = getProject(db, projectId);
|
|
26
|
+
if (!project) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
return buildDocumentTree(dbListDocuments(db, projectId));
|
|
30
|
+
},
|
|
31
|
+
create(projectId, input) {
|
|
32
|
+
const project = getProject(db, projectId);
|
|
33
|
+
if (!project) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
if (input.linkedTaskId !== undefined && input.linkedTaskId !== null) {
|
|
37
|
+
assertTaskInProject(db, projectId, input.linkedTaskId);
|
|
38
|
+
}
|
|
39
|
+
if (input.parentId !== undefined && input.parentId !== null) {
|
|
40
|
+
assertParentInProject(db, projectId, input.parentId);
|
|
41
|
+
}
|
|
42
|
+
const document = dbCreateDocument(db, {
|
|
43
|
+
projectId,
|
|
44
|
+
title: input.title,
|
|
45
|
+
body: input.body,
|
|
46
|
+
statusLine: input.statusLine,
|
|
47
|
+
parentId: input.parentId,
|
|
48
|
+
linkedTaskId: input.linkedTaskId,
|
|
49
|
+
});
|
|
50
|
+
eventBus.emit({
|
|
51
|
+
type: 'document_created',
|
|
52
|
+
documentId: document.id,
|
|
53
|
+
projectId,
|
|
54
|
+
});
|
|
55
|
+
return serializeDocument(document);
|
|
56
|
+
},
|
|
57
|
+
get(id) {
|
|
58
|
+
const document = dbGetDocument(db, id);
|
|
59
|
+
if (!document) {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
return serializeDocument(document);
|
|
63
|
+
},
|
|
64
|
+
update(id, input) {
|
|
65
|
+
const existing = dbGetDocument(db, id);
|
|
66
|
+
if (!existing) {
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
if (input.linkedTaskId !== undefined && input.linkedTaskId !== null) {
|
|
70
|
+
assertTaskInProject(db, existing.projectId, input.linkedTaskId);
|
|
71
|
+
}
|
|
72
|
+
if (input.parentId !== undefined && input.parentId !== null) {
|
|
73
|
+
if (input.parentId === id) {
|
|
74
|
+
throw new InvalidDocumentError('Document cannot be its own parent');
|
|
75
|
+
}
|
|
76
|
+
assertParentInProject(db, existing.projectId, input.parentId);
|
|
77
|
+
}
|
|
78
|
+
const document = dbUpdateDocument(db, id, input);
|
|
79
|
+
if (!document) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
return serializeDocument(document);
|
|
83
|
+
},
|
|
84
|
+
getByTask(taskId) {
|
|
85
|
+
const task = getTask(db, taskId);
|
|
86
|
+
if (!task) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
const document = dbGetDocumentByTask(db, taskId);
|
|
90
|
+
if (!document) {
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
return serializeDocument(document);
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=documents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/services/documents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Db } from '@plandesk/db';
|
|
2
|
+
import { type EventBus } from '../events.js';
|
|
3
|
+
import { type CanvasService } from './canvas.js';
|
|
4
|
+
import { type DocumentService } from './documents.js';
|
|
5
|
+
import { type ProjectService } from './projects.js';
|
|
6
|
+
import { type AgentRunService } from './agent-runs.js';
|
|
7
|
+
import { type TaskService } from './tasks.js';
|
|
8
|
+
import { type TokenService } from './tokens.js';
|
|
9
|
+
export type ServicesDeps = {
|
|
10
|
+
db: Db;
|
|
11
|
+
eventBus?: EventBus;
|
|
12
|
+
};
|
|
13
|
+
export type Services = {
|
|
14
|
+
eventBus: EventBus;
|
|
15
|
+
projectService: ProjectService;
|
|
16
|
+
taskService: TaskService;
|
|
17
|
+
canvasService: CanvasService;
|
|
18
|
+
documentService: DocumentService;
|
|
19
|
+
agentRunService: AgentRunService;
|
|
20
|
+
tokenService: TokenService;
|
|
21
|
+
};
|
|
22
|
+
export declare function createServices(deps: ServicesDeps): Services;
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEpE,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,EAAE,CAAC;IACP,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,eAAe,CAAC;IACjC,eAAe,EAAE,eAAe,CAAC;IACjC,YAAY,EAAE,YAAY,CAAC;CAC5B,CAAC;AAEF,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAkB3D"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createEventBus } from '../events.js';
|
|
2
|
+
import { createCanvasService } from './canvas.js';
|
|
3
|
+
import { createDocumentService } from './documents.js';
|
|
4
|
+
import { createProjectService } from './projects.js';
|
|
5
|
+
import { createAgentRunService } from './agent-runs.js';
|
|
6
|
+
import { createTaskService } from './tasks.js';
|
|
7
|
+
import { createTokenService } from './tokens.js';
|
|
8
|
+
export function createServices(deps) {
|
|
9
|
+
const eventBus = deps.eventBus ?? createEventBus();
|
|
10
|
+
const projectService = createProjectService({ db: deps.db });
|
|
11
|
+
const taskService = createTaskService({ db: deps.db, eventBus });
|
|
12
|
+
const canvasService = createCanvasService({ db: deps.db, eventBus });
|
|
13
|
+
const documentService = createDocumentService({ db: deps.db, eventBus });
|
|
14
|
+
const agentRunService = createAgentRunService({ db: deps.db, eventBus });
|
|
15
|
+
const tokenService = createTokenService({ db: deps.db });
|
|
16
|
+
return {
|
|
17
|
+
eventBus,
|
|
18
|
+
projectService,
|
|
19
|
+
taskService,
|
|
20
|
+
canvasService,
|
|
21
|
+
documentService,
|
|
22
|
+
agentRunService,
|
|
23
|
+
tokenService,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAiB,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAsB,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAwB,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAuB,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAwB,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAoB,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAqB,MAAM,aAAa,CAAC;AAiBpE,MAAM,UAAU,cAAc,CAAC,IAAkB;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,cAAc,EAAE,CAAC;IACnD,MAAM,cAAc,GAAG,oBAAoB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG,mBAAmB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrE,MAAM,eAAe,GAAG,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzE,MAAM,eAAe,GAAG,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzE,MAAM,YAAY,GAAG,kBAAkB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAEzD,OAAO;QACL,QAAQ;QACR,cAAc;QACd,WAAW;QACX,aAAa;QACb,eAAe;QACf,eAAe;QACf,YAAY;KACb,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type Db } from '@plandesk/db';
|
|
2
|
+
import { type TaskStatusSummary } from '../serialize.js';
|
|
3
|
+
export type ProjectServiceDeps = {
|
|
4
|
+
db: Db;
|
|
5
|
+
};
|
|
6
|
+
export type CreateProjectInput = {
|
|
7
|
+
name: string;
|
|
8
|
+
description?: string | null;
|
|
9
|
+
};
|
|
10
|
+
export declare function createProjectService(deps: ProjectServiceDeps): {
|
|
11
|
+
create(input: CreateProjectInput): {
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
description: string | null;
|
|
15
|
+
created_at: string;
|
|
16
|
+
updated_at: string;
|
|
17
|
+
};
|
|
18
|
+
list(): {
|
|
19
|
+
id: string;
|
|
20
|
+
name: string;
|
|
21
|
+
description: string | null;
|
|
22
|
+
created_at: string;
|
|
23
|
+
updated_at: string;
|
|
24
|
+
}[];
|
|
25
|
+
get(id: string): {
|
|
26
|
+
summary: TaskStatusSummary;
|
|
27
|
+
id: string;
|
|
28
|
+
name: string;
|
|
29
|
+
description: string | null;
|
|
30
|
+
created_at: string;
|
|
31
|
+
updated_at: string;
|
|
32
|
+
} | undefined;
|
|
33
|
+
};
|
|
34
|
+
export type ProjectService = ReturnType<typeof createProjectService>;
|
|
35
|
+
//# sourceMappingURL=projects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/services/projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,EAAE,EACR,MAAM,cAAc,CAAC;AACtB,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,EAAE,CAAC;CACR,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAUF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB;kBAI3C,kBAAkB;;;;;;;;;;;;;;YASxB,MAAM;;;;;;;;EASjB;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { createProject as dbCreateProject, getProject as dbGetProject, listProjects as dbListProjects, listTasks, } from '@plandesk/db';
|
|
2
|
+
import { emptyTaskStatusSummary, serializeProject, serializeProjectDetail, } from '../serialize.js';
|
|
3
|
+
function summarizeTasks(tasks) {
|
|
4
|
+
const summary = emptyTaskStatusSummary();
|
|
5
|
+
for (const task of tasks) {
|
|
6
|
+
summary[task.status] += 1;
|
|
7
|
+
}
|
|
8
|
+
return summary;
|
|
9
|
+
}
|
|
10
|
+
export function createProjectService(deps) {
|
|
11
|
+
const { db } = deps;
|
|
12
|
+
return {
|
|
13
|
+
create(input) {
|
|
14
|
+
const project = dbCreateProject(db, input);
|
|
15
|
+
return serializeProject(project);
|
|
16
|
+
},
|
|
17
|
+
list() {
|
|
18
|
+
return dbListProjects(db).map(serializeProject);
|
|
19
|
+
},
|
|
20
|
+
get(id) {
|
|
21
|
+
const project = dbGetProject(db, id);
|
|
22
|
+
if (!project) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
const summary = summarizeTasks(listTasks(db, id));
|
|
26
|
+
return serializeProjectDetail(project, summary);
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/services/projects.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,IAAI,eAAe,EAChC,UAAU,IAAI,YAAY,EAC1B,YAAY,IAAI,cAAc,EAC9B,SAAS,GAEV,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,GAEvB,MAAM,iBAAiB,CAAC;AAWzB,SAAS,cAAc,CAAC,KAAmC;IACzD,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAwB;IAC3D,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IAEpB,OAAO;QACL,MAAM,CAAC,KAAyB;YAC9B,MAAM,OAAO,GAAG,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC3C,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QAED,IAAI;YACF,OAAO,cAAc,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAClD,CAAC;QAED,GAAG,CAAC,EAAU;YACZ,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACrC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAClD,OAAO,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type Db, type TaskStatus } from '@plandesk/db';
|
|
2
|
+
import type { EventBus } from '../events.js';
|
|
3
|
+
export type TaskServiceDeps = {
|
|
4
|
+
db: Db;
|
|
5
|
+
eventBus: EventBus;
|
|
6
|
+
};
|
|
7
|
+
export type CreateTaskInput = {
|
|
8
|
+
label: string;
|
|
9
|
+
status?: TaskStatus;
|
|
10
|
+
description?: string | null;
|
|
11
|
+
x?: number;
|
|
12
|
+
y?: number;
|
|
13
|
+
};
|
|
14
|
+
export type UpdateTaskInput = {
|
|
15
|
+
label?: string;
|
|
16
|
+
status?: TaskStatus;
|
|
17
|
+
description?: string | null;
|
|
18
|
+
x?: number;
|
|
19
|
+
y?: number;
|
|
20
|
+
};
|
|
21
|
+
export type ListTasksFilter = {
|
|
22
|
+
status?: string;
|
|
23
|
+
};
|
|
24
|
+
export declare function createTaskService(deps: TaskServiceDeps): {
|
|
25
|
+
listByProject(projectId: string, filter?: ListTasksFilter): {
|
|
26
|
+
id: string;
|
|
27
|
+
project_id: string;
|
|
28
|
+
label: string;
|
|
29
|
+
status: "scope" | "todo" | "in_progress" | "done" | "backlog";
|
|
30
|
+
description: string | null;
|
|
31
|
+
x: number;
|
|
32
|
+
y: number;
|
|
33
|
+
assignee: string | null;
|
|
34
|
+
due_date: string | null;
|
|
35
|
+
created_at: string;
|
|
36
|
+
updated_at: string;
|
|
37
|
+
}[] | undefined;
|
|
38
|
+
create(projectId: string, input: CreateTaskInput): {
|
|
39
|
+
id: string;
|
|
40
|
+
project_id: string;
|
|
41
|
+
label: string;
|
|
42
|
+
status: "scope" | "todo" | "in_progress" | "done" | "backlog";
|
|
43
|
+
description: string | null;
|
|
44
|
+
x: number;
|
|
45
|
+
y: number;
|
|
46
|
+
assignee: string | null;
|
|
47
|
+
due_date: string | null;
|
|
48
|
+
created_at: string;
|
|
49
|
+
updated_at: string;
|
|
50
|
+
} | undefined;
|
|
51
|
+
update(id: string, input: UpdateTaskInput): {
|
|
52
|
+
id: string;
|
|
53
|
+
project_id: string;
|
|
54
|
+
label: string;
|
|
55
|
+
status: "scope" | "todo" | "in_progress" | "done" | "backlog";
|
|
56
|
+
description: string | null;
|
|
57
|
+
x: number;
|
|
58
|
+
y: number;
|
|
59
|
+
assignee: string | null;
|
|
60
|
+
due_date: string | null;
|
|
61
|
+
created_at: string;
|
|
62
|
+
updated_at: string;
|
|
63
|
+
} | undefined;
|
|
64
|
+
};
|
|
65
|
+
export type TaskService = ReturnType<typeof createTaskService>;
|
|
66
|
+
//# sourceMappingURL=tasks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/services/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,EAAE,EACP,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG7C,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,EAAE,CAAC;IACP,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe;6BAI1B,MAAM,WAAU,eAAe;;;;;;;;;;;;;sBAkBtC,MAAM,SAAS,eAAe;;;;;;;;;;;;;eA4BrC,MAAM,SAAS,eAAe;;;;;;;;;;;;;EAwB5C;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { createTask, getProject, getTask, InvalidTaskStatusError, isTaskStatus, listTasks, updateTask, } from '@plandesk/db';
|
|
2
|
+
import { serializeTask } from '../serialize.js';
|
|
3
|
+
export function createTaskService(deps) {
|
|
4
|
+
const { db, eventBus } = deps;
|
|
5
|
+
return {
|
|
6
|
+
listByProject(projectId, filter = {}) {
|
|
7
|
+
if (filter.status !== undefined && !isTaskStatus(filter.status)) {
|
|
8
|
+
throw new InvalidTaskStatusError(filter.status);
|
|
9
|
+
}
|
|
10
|
+
const project = getProject(db, projectId);
|
|
11
|
+
if (!project) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
const statusFilter = filter.status;
|
|
15
|
+
const tasks = statusFilter !== undefined
|
|
16
|
+
? listTasks(db, projectId, { status: statusFilter })
|
|
17
|
+
: listTasks(db, projectId);
|
|
18
|
+
return tasks.map(serializeTask);
|
|
19
|
+
},
|
|
20
|
+
create(projectId, input) {
|
|
21
|
+
if (input.status !== undefined && !isTaskStatus(input.status)) {
|
|
22
|
+
throw new InvalidTaskStatusError(input.status);
|
|
23
|
+
}
|
|
24
|
+
const project = getProject(db, projectId);
|
|
25
|
+
if (!project) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
const task = createTask(db, {
|
|
29
|
+
projectId,
|
|
30
|
+
label: input.label,
|
|
31
|
+
status: input.status,
|
|
32
|
+
description: input.description,
|
|
33
|
+
x: input.x,
|
|
34
|
+
y: input.y,
|
|
35
|
+
});
|
|
36
|
+
eventBus.emit({
|
|
37
|
+
type: 'task_updated',
|
|
38
|
+
taskId: task.id,
|
|
39
|
+
projectId,
|
|
40
|
+
});
|
|
41
|
+
return serializeTask(task);
|
|
42
|
+
},
|
|
43
|
+
update(id, input) {
|
|
44
|
+
if (input.status !== undefined && !isTaskStatus(input.status)) {
|
|
45
|
+
throw new InvalidTaskStatusError(input.status);
|
|
46
|
+
}
|
|
47
|
+
const existing = getTask(db, id);
|
|
48
|
+
if (!existing) {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
const task = updateTask(db, id, input);
|
|
52
|
+
if (!task) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
eventBus.emit({
|
|
56
|
+
type: 'task_updated',
|
|
57
|
+
taskId: task.id,
|
|
58
|
+
projectId: task.projectId,
|
|
59
|
+
});
|
|
60
|
+
return serializeTask(task);
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=tasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/services/tasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type Db } from '@plandesk/db';
|
|
2
|
+
export type TokenServiceDeps = {
|
|
3
|
+
db: Db;
|
|
4
|
+
};
|
|
5
|
+
export declare function createTokenService(deps: TokenServiceDeps): {
|
|
6
|
+
create(name: string): {
|
|
7
|
+
id: string;
|
|
8
|
+
name: string;
|
|
9
|
+
token: string;
|
|
10
|
+
};
|
|
11
|
+
list(): import("../serialize.js").SerializedToken[];
|
|
12
|
+
revoke(id: string): import("../serialize.js").SerializedToken | undefined;
|
|
13
|
+
};
|
|
14
|
+
export type TokenService = ReturnType<typeof createTokenService>;
|
|
15
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/services/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,EAAE,EACR,MAAM,cAAc,CAAC;AAGtB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,EAAE,CAAC;CACR,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB;iBAIxC,MAAM;;;;;;eAaR,MAAM;EAQpB;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createToken as dbCreateToken, listTokens as dbListTokens, revokeToken as dbRevokeToken, } from '@plandesk/db';
|
|
2
|
+
import { serializeToken } from '../serialize.js';
|
|
3
|
+
export function createTokenService(deps) {
|
|
4
|
+
const { db } = deps;
|
|
5
|
+
return {
|
|
6
|
+
create(name) {
|
|
7
|
+
const result = dbCreateToken(db, { name });
|
|
8
|
+
return {
|
|
9
|
+
id: result.id,
|
|
10
|
+
name: result.name,
|
|
11
|
+
token: result.token,
|
|
12
|
+
};
|
|
13
|
+
},
|
|
14
|
+
list() {
|
|
15
|
+
return dbListTokens(db).map(serializeToken);
|
|
16
|
+
},
|
|
17
|
+
revoke(id) {
|
|
18
|
+
const revoked = dbRevokeToken(db, id);
|
|
19
|
+
if (!revoked) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
return serializeToken(revoked);
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/services/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,IAAI,aAAa,EAC5B,UAAU,IAAI,YAAY,EAC1B,WAAW,IAAI,aAAa,GAE7B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAMjD,MAAM,UAAU,kBAAkB,CAAC,IAAsB;IACvD,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IAEpB,OAAO;QACL,MAAM,CAAC,IAAY;YACjB,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,OAAO;gBACL,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC;QACJ,CAAC;QAED,IAAI;YACF,OAAO,YAAY,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,CAAC,EAAU;YACf,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/static.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAOjC,wBAAgB,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,GAAE,MAAwB,GAAG,IAAI,CAqB/E"}
|