@stoneforge/shared-routes 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/LICENSE +13 -0
- package/README.md +69 -0
- package/dist/channels.d.ts +9 -0
- package/dist/channels.d.ts.map +1 -0
- package/dist/channels.js +413 -0
- package/dist/channels.js.map +1 -0
- package/dist/documents.d.ts +9 -0
- package/dist/documents.d.ts.map +1 -0
- package/dist/documents.js +1205 -0
- package/dist/documents.js.map +1 -0
- package/dist/elements.d.ts +9 -0
- package/dist/elements.d.ts.map +1 -0
- package/dist/elements.js +87 -0
- package/dist/elements.js.map +1 -0
- package/dist/entities.d.ts +9 -0
- package/dist/entities.d.ts.map +1 -0
- package/dist/entities.js +92 -0
- package/dist/entities.js.map +1 -0
- package/dist/inbox.d.ts +10 -0
- package/dist/inbox.d.ts.map +1 -0
- package/dist/inbox.js +538 -0
- package/dist/inbox.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/libraries.d.ts +9 -0
- package/dist/libraries.d.ts.map +1 -0
- package/dist/libraries.js +467 -0
- package/dist/libraries.js.map +1 -0
- package/dist/messages.d.ts +9 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +338 -0
- package/dist/messages.js.map +1 -0
- package/dist/plans.d.ts +10 -0
- package/dist/plans.d.ts.map +1 -0
- package/dist/plans.js +495 -0
- package/dist/plans.js.map +1 -0
- package/dist/types.d.ts +128 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/ws/broadcaster.d.ts +62 -0
- package/dist/ws/broadcaster.d.ts.map +1 -0
- package/dist/ws/broadcaster.js +146 -0
- package/dist/ws/broadcaster.js.map +1 -0
- package/dist/ws/handler.d.ts +11 -0
- package/dist/ws/handler.d.ts.map +1 -0
- package/dist/ws/handler.js +38 -0
- package/dist/ws/handler.js.map +1 -0
- package/dist/ws/index.d.ts +11 -0
- package/dist/ws/index.d.ts.map +1 -0
- package/dist/ws/index.js +11 -0
- package/dist/ws/index.js.map +1 -0
- package/dist/ws/types.d.ts +85 -0
- package/dist/ws/types.d.ts.map +1 -0
- package/dist/ws/types.js +63 -0
- package/dist/ws/types.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Library Routes Factory
|
|
3
|
+
*
|
|
4
|
+
* CRUD operations for document libraries.
|
|
5
|
+
*/
|
|
6
|
+
import { Hono } from 'hono';
|
|
7
|
+
import { createLibrary } from '@stoneforge/core';
|
|
8
|
+
export function createLibraryRoutes(services) {
|
|
9
|
+
const { api } = services;
|
|
10
|
+
const app = new Hono();
|
|
11
|
+
// GET /api/libraries - List all libraries
|
|
12
|
+
app.get('/api/libraries', async (c) => {
|
|
13
|
+
try {
|
|
14
|
+
const url = new URL(c.req.url);
|
|
15
|
+
const hydrateDescription = url.searchParams.get('hydrate.description') === 'true';
|
|
16
|
+
const limitParam = url.searchParams.get('limit');
|
|
17
|
+
const limit = limitParam ? parseInt(limitParam, 10) : 10000; // Default to loading all
|
|
18
|
+
const libraries = await api.list({
|
|
19
|
+
type: 'library',
|
|
20
|
+
limit,
|
|
21
|
+
...(hydrateDescription && { hydrate: { description: true } }),
|
|
22
|
+
});
|
|
23
|
+
// Get parent relationships for all libraries
|
|
24
|
+
// Parent-child dependencies have: blockedId = child, blockerId = parent
|
|
25
|
+
const librariesWithParent = await Promise.all(libraries.map(async (library) => {
|
|
26
|
+
// Find if this library has a parent (it would be the source in a parent-child dependency)
|
|
27
|
+
const dependencies = await api.getDependencies(library.id, ['parent-child']);
|
|
28
|
+
const parentDep = dependencies.find((d) => d.type === 'parent-child');
|
|
29
|
+
return {
|
|
30
|
+
...library,
|
|
31
|
+
parentId: parentDep?.blockerId || null,
|
|
32
|
+
};
|
|
33
|
+
}));
|
|
34
|
+
return c.json(librariesWithParent);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
console.error('[stoneforge] Failed to get libraries:', error);
|
|
38
|
+
return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to get libraries' } }, 500);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
// GET /api/libraries/:id - Get single library with children
|
|
42
|
+
app.get('/api/libraries/:id', async (c) => {
|
|
43
|
+
try {
|
|
44
|
+
const id = c.req.param('id');
|
|
45
|
+
const url = new URL(c.req.url);
|
|
46
|
+
const hydrateDescription = url.searchParams.get('hydrate.description') === 'true';
|
|
47
|
+
const library = await api.get(id, hydrateDescription ? { hydrate: { description: true } } : undefined);
|
|
48
|
+
if (!library) {
|
|
49
|
+
return c.json({ error: { code: 'NOT_FOUND', message: 'Library not found' } }, 404);
|
|
50
|
+
}
|
|
51
|
+
if (library.type !== 'library') {
|
|
52
|
+
return c.json({ error: { code: 'NOT_FOUND', message: 'Library not found' } }, 404);
|
|
53
|
+
}
|
|
54
|
+
// Get sub-libraries and documents (children via parent-child dependency)
|
|
55
|
+
const dependents = await api.getDependents(id, ['parent-child']);
|
|
56
|
+
// Separate into sub-libraries and documents
|
|
57
|
+
const childIds = dependents.map((d) => d.blockedId);
|
|
58
|
+
const children = [];
|
|
59
|
+
for (const childId of childIds) {
|
|
60
|
+
const child = await api.get(childId);
|
|
61
|
+
if (child) {
|
|
62
|
+
children.push(child);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const subLibraries = children.filter((c) => c.type === 'library');
|
|
66
|
+
const documents = children.filter((c) => c.type === 'document');
|
|
67
|
+
return c.json({
|
|
68
|
+
...library,
|
|
69
|
+
_subLibraries: subLibraries,
|
|
70
|
+
_documents: documents,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
console.error('[stoneforge] Failed to get library:', error);
|
|
75
|
+
return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to get library' } }, 500);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
// GET /api/libraries/:id/documents - Get documents in a library
|
|
79
|
+
app.get('/api/libraries/:id/documents', async (c) => {
|
|
80
|
+
try {
|
|
81
|
+
const id = c.req.param('id');
|
|
82
|
+
const url = new URL(c.req.url);
|
|
83
|
+
const limitParam = url.searchParams.get('limit');
|
|
84
|
+
const offsetParam = url.searchParams.get('offset');
|
|
85
|
+
// First verify library exists
|
|
86
|
+
const library = await api.get(id);
|
|
87
|
+
if (!library) {
|
|
88
|
+
return c.json({ error: { code: 'NOT_FOUND', message: 'Library not found' } }, 404);
|
|
89
|
+
}
|
|
90
|
+
if (library.type !== 'library') {
|
|
91
|
+
return c.json({ error: { code: 'NOT_FOUND', message: 'Library not found' } }, 404);
|
|
92
|
+
}
|
|
93
|
+
// Get documents via parent-child dependency
|
|
94
|
+
const dependents = await api.getDependents(id, ['parent-child']);
|
|
95
|
+
// Filter to only documents and fetch full data
|
|
96
|
+
const documentIds = dependents.map((d) => d.blockedId);
|
|
97
|
+
const documents = [];
|
|
98
|
+
for (const docId of documentIds) {
|
|
99
|
+
const doc = await api.get(docId);
|
|
100
|
+
if (doc && doc.type === 'document') {
|
|
101
|
+
documents.push(doc);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Apply pagination if requested
|
|
105
|
+
let result = documents;
|
|
106
|
+
const offset = offsetParam ? parseInt(offsetParam, 10) : 0;
|
|
107
|
+
const limit = limitParam ? parseInt(limitParam, 10) : undefined;
|
|
108
|
+
if (offset > 0) {
|
|
109
|
+
result = result.slice(offset);
|
|
110
|
+
}
|
|
111
|
+
if (limit !== undefined) {
|
|
112
|
+
result = result.slice(0, limit);
|
|
113
|
+
}
|
|
114
|
+
return c.json(result);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
console.error('[stoneforge] Failed to get library documents:', error);
|
|
118
|
+
return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to get library documents' } }, 500);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
/**
|
|
122
|
+
* Helper to get siblings of a library (other libraries with the same parent)
|
|
123
|
+
*/
|
|
124
|
+
async function getSiblingLibraries(libraryId, parentId) {
|
|
125
|
+
if (parentId) {
|
|
126
|
+
// Get children of parent
|
|
127
|
+
const dependents = await api.getDependents(parentId, ['parent-child']);
|
|
128
|
+
const siblings = [];
|
|
129
|
+
for (const dep of dependents) {
|
|
130
|
+
if (dep.blockedId !== libraryId) {
|
|
131
|
+
const sibling = await api.get(dep.blockedId);
|
|
132
|
+
if (sibling && sibling.type === 'library') {
|
|
133
|
+
siblings.push(sibling);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return siblings;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
// Root level - get all libraries without a parent
|
|
141
|
+
const allLibraries = await api.list({ type: 'library' });
|
|
142
|
+
const rootSiblings = [];
|
|
143
|
+
for (const lib of allLibraries) {
|
|
144
|
+
if (lib.id !== libraryId) {
|
|
145
|
+
const deps = await api.getDependencies(lib.id, ['parent-child']);
|
|
146
|
+
const hasParent = deps.some((d) => d.type === 'parent-child');
|
|
147
|
+
if (!hasParent) {
|
|
148
|
+
rootSiblings.push(lib);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return rootSiblings;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Helper to assign sort indices to siblings when reordering
|
|
157
|
+
*/
|
|
158
|
+
async function assignSortIndices(libraryId, siblings, targetIndex) {
|
|
159
|
+
// Sort siblings by their current sortIndex (or name for those without)
|
|
160
|
+
const sortedSiblings = [...siblings].sort((a, b) => {
|
|
161
|
+
const aIndex = a.metadata?.sortIndex ?? Infinity;
|
|
162
|
+
const bIndex = b.metadata?.sortIndex ?? Infinity;
|
|
163
|
+
if (aIndex !== bIndex)
|
|
164
|
+
return aIndex - bIndex;
|
|
165
|
+
// Cast to access 'name' since we know these are libraries
|
|
166
|
+
const aName = a.name ?? '';
|
|
167
|
+
const bName = b.name ?? '';
|
|
168
|
+
return aName.localeCompare(bName);
|
|
169
|
+
});
|
|
170
|
+
// Assign new indices: items before targetIndex keep their position,
|
|
171
|
+
// items at or after targetIndex shift up by 1
|
|
172
|
+
for (let i = 0; i < sortedSiblings.length; i++) {
|
|
173
|
+
const sibling = sortedSiblings[i];
|
|
174
|
+
const currentIndex = sibling.metadata?.sortIndex ?? i;
|
|
175
|
+
let newIndex = i;
|
|
176
|
+
// Shift items at or after target position
|
|
177
|
+
if (newIndex >= targetIndex) {
|
|
178
|
+
newIndex = i + 1;
|
|
179
|
+
}
|
|
180
|
+
if (newIndex !== currentIndex || sibling.metadata?.sortIndex === undefined) {
|
|
181
|
+
await api.update(sibling.id, {
|
|
182
|
+
metadata: { ...sibling.metadata, sortIndex: newIndex },
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// Set the moved library's sortIndex
|
|
187
|
+
const library = await api.get(libraryId);
|
|
188
|
+
if (library) {
|
|
189
|
+
await api.update(libraryId, {
|
|
190
|
+
metadata: { ...library.metadata, sortIndex: targetIndex },
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* PUT /api/libraries/:id/order
|
|
196
|
+
* Reorder a library within its current parent
|
|
197
|
+
* Body: { index: number }
|
|
198
|
+
*/
|
|
199
|
+
app.put('/api/libraries/:id/order', async (c) => {
|
|
200
|
+
try {
|
|
201
|
+
const libraryId = c.req.param('id');
|
|
202
|
+
const body = await c.req.json();
|
|
203
|
+
const index = body.index;
|
|
204
|
+
if (typeof index !== 'number' || index < 0) {
|
|
205
|
+
return c.json({ error: { code: 'VALIDATION_ERROR', message: 'index must be a non-negative number' } }, 400);
|
|
206
|
+
}
|
|
207
|
+
// Verify library exists
|
|
208
|
+
const library = await api.get(libraryId);
|
|
209
|
+
if (!library) {
|
|
210
|
+
return c.json({ error: { code: 'NOT_FOUND', message: 'Library not found' } }, 404);
|
|
211
|
+
}
|
|
212
|
+
if (library.type !== 'library') {
|
|
213
|
+
return c.json({ error: { code: 'NOT_FOUND', message: 'Library not found' } }, 404);
|
|
214
|
+
}
|
|
215
|
+
// Find current parent
|
|
216
|
+
const deps = await api.getDependencies(libraryId, ['parent-child']);
|
|
217
|
+
let parentId = null;
|
|
218
|
+
for (const dep of deps) {
|
|
219
|
+
const parent = await api.get(dep.blockerId);
|
|
220
|
+
if (parent && parent.type === 'library') {
|
|
221
|
+
parentId = dep.blockerId;
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// Get siblings and assign indices
|
|
226
|
+
const siblings = await getSiblingLibraries(libraryId, parentId);
|
|
227
|
+
await assignSortIndices(libraryId, siblings, index);
|
|
228
|
+
return c.json({ libraryId, index, parentId });
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
console.error('[stoneforge] Failed to reorder library:', error);
|
|
232
|
+
return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to reorder library' } }, 500);
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
/**
|
|
236
|
+
* PUT /api/libraries/:id/parent
|
|
237
|
+
* Move a library to a new parent (or to root level)
|
|
238
|
+
* Body: { parentId: string | null, index?: number, actor?: string }
|
|
239
|
+
*/
|
|
240
|
+
app.put('/api/libraries/:id/parent', async (c) => {
|
|
241
|
+
try {
|
|
242
|
+
const libraryId = c.req.param('id');
|
|
243
|
+
const body = await c.req.json();
|
|
244
|
+
// Verify library exists
|
|
245
|
+
const library = await api.get(libraryId);
|
|
246
|
+
if (!library) {
|
|
247
|
+
return c.json({ error: { code: 'NOT_FOUND', message: 'Library not found' } }, 404);
|
|
248
|
+
}
|
|
249
|
+
if (library.type !== 'library') {
|
|
250
|
+
return c.json({ error: { code: 'NOT_FOUND', message: 'Library not found' } }, 404);
|
|
251
|
+
}
|
|
252
|
+
const newParentId = body.parentId;
|
|
253
|
+
const index = body.index;
|
|
254
|
+
const actor = body.actor || 'el-0000';
|
|
255
|
+
// Validate new parent if provided
|
|
256
|
+
if (newParentId) {
|
|
257
|
+
// Verify parent library exists
|
|
258
|
+
const parent = await api.get(newParentId);
|
|
259
|
+
if (!parent || parent.type !== 'library') {
|
|
260
|
+
return c.json({ error: { code: 'VALIDATION_ERROR', message: 'Invalid parentId: library not found' } }, 400);
|
|
261
|
+
}
|
|
262
|
+
// Prevent circular nesting: check if new parent is a descendant of this library
|
|
263
|
+
const isDescendant = async (ancestorId, potentialDescendantId) => {
|
|
264
|
+
if (ancestorId === potentialDescendantId)
|
|
265
|
+
return true;
|
|
266
|
+
// Get children of ancestor
|
|
267
|
+
const dependents = await api.getDependents(ancestorId, ['parent-child']);
|
|
268
|
+
const childIds = dependents.map((d) => d.blockedId);
|
|
269
|
+
for (const childId of childIds) {
|
|
270
|
+
const child = await api.get(childId);
|
|
271
|
+
if (child && child.type === 'library') {
|
|
272
|
+
if (await isDescendant(childId, potentialDescendantId)) {
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
return false;
|
|
278
|
+
};
|
|
279
|
+
if (await isDescendant(libraryId, newParentId)) {
|
|
280
|
+
return c.json({ error: { code: 'VALIDATION_ERROR', message: 'Cannot move library to its own descendant (circular nesting)' } }, 400);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// Find current parent
|
|
284
|
+
const deps = await api.getDependencies(libraryId, ['parent-child']);
|
|
285
|
+
let previousParentId = null;
|
|
286
|
+
for (const dep of deps) {
|
|
287
|
+
const parent = await api.get(dep.blockerId);
|
|
288
|
+
if (parent && parent.type === 'library') {
|
|
289
|
+
previousParentId = dep.blockerId;
|
|
290
|
+
break;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// Already at requested parent — check if we need to reorder
|
|
294
|
+
if (previousParentId === newParentId) {
|
|
295
|
+
if (index !== undefined) {
|
|
296
|
+
// Reorder within same parent
|
|
297
|
+
const siblings = await getSiblingLibraries(libraryId, newParentId);
|
|
298
|
+
await assignSortIndices(libraryId, siblings, index);
|
|
299
|
+
}
|
|
300
|
+
return c.json({ libraryId, parentId: newParentId, previousParentId });
|
|
301
|
+
}
|
|
302
|
+
// Remove from old parent if present
|
|
303
|
+
if (previousParentId) {
|
|
304
|
+
await api.removeDependency(libraryId, previousParentId, 'parent-child');
|
|
305
|
+
}
|
|
306
|
+
// Add to new parent if provided
|
|
307
|
+
if (newParentId) {
|
|
308
|
+
await api.addDependency({
|
|
309
|
+
blockedId: libraryId,
|
|
310
|
+
blockerId: newParentId,
|
|
311
|
+
type: 'parent-child',
|
|
312
|
+
actor,
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
// If index is provided, set sortIndex in the new parent context
|
|
316
|
+
if (index !== undefined) {
|
|
317
|
+
const siblings = await getSiblingLibraries(libraryId, newParentId);
|
|
318
|
+
await assignSortIndices(libraryId, siblings, index);
|
|
319
|
+
}
|
|
320
|
+
return c.json({ libraryId, parentId: newParentId, previousParentId });
|
|
321
|
+
}
|
|
322
|
+
catch (error) {
|
|
323
|
+
console.error('[stoneforge] Failed to move library:', error);
|
|
324
|
+
return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to move library' } }, 500);
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
/**
|
|
328
|
+
* DELETE /api/libraries/:id
|
|
329
|
+
* Delete a library and optionally all its documents
|
|
330
|
+
* Query params:
|
|
331
|
+
* - cascade: 'true' to also delete all documents in the library (default: false)
|
|
332
|
+
*/
|
|
333
|
+
app.delete('/api/libraries/:id', async (c) => {
|
|
334
|
+
try {
|
|
335
|
+
const libraryId = c.req.param('id');
|
|
336
|
+
const url = new URL(c.req.url);
|
|
337
|
+
const cascade = url.searchParams.get('cascade') === 'true';
|
|
338
|
+
// Verify library exists
|
|
339
|
+
const library = await api.get(libraryId);
|
|
340
|
+
if (!library) {
|
|
341
|
+
return c.json({ error: { code: 'NOT_FOUND', message: 'Library not found' } }, 404);
|
|
342
|
+
}
|
|
343
|
+
if (library.type !== 'library') {
|
|
344
|
+
return c.json({ error: { code: 'NOT_FOUND', message: 'Library not found' } }, 404);
|
|
345
|
+
}
|
|
346
|
+
// Get all children (sub-libraries and documents)
|
|
347
|
+
const dependents = await api.getDependents(libraryId, ['parent-child']);
|
|
348
|
+
const childIds = dependents.map((d) => d.blockedId);
|
|
349
|
+
// Categorize children
|
|
350
|
+
const subLibraryIds = [];
|
|
351
|
+
const documentIds = [];
|
|
352
|
+
for (const childId of childIds) {
|
|
353
|
+
const child = await api.get(childId);
|
|
354
|
+
if (child) {
|
|
355
|
+
if (child.type === 'library') {
|
|
356
|
+
subLibraryIds.push(childId);
|
|
357
|
+
}
|
|
358
|
+
else if (child.type === 'document') {
|
|
359
|
+
documentIds.push(childId);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
// Prevent deletion if library has sub-libraries
|
|
364
|
+
if (subLibraryIds.length > 0) {
|
|
365
|
+
return c.json({
|
|
366
|
+
error: {
|
|
367
|
+
code: 'HAS_CHILDREN',
|
|
368
|
+
message: `Cannot delete library: it has ${subLibraryIds.length} sub-libraries. Delete them first.`,
|
|
369
|
+
},
|
|
370
|
+
}, 400);
|
|
371
|
+
}
|
|
372
|
+
// Handle documents based on cascade flag
|
|
373
|
+
if (documentIds.length > 0) {
|
|
374
|
+
if (cascade) {
|
|
375
|
+
// Delete all documents in the library
|
|
376
|
+
for (const docId of documentIds) {
|
|
377
|
+
await api.delete(docId);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
// Remove documents from library but don't delete them
|
|
382
|
+
for (const docId of documentIds) {
|
|
383
|
+
await api.removeDependency(docId, libraryId, 'parent-child');
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
// Remove library from parent if it has one
|
|
388
|
+
const deps = await api.getDependencies(libraryId, ['parent-child']);
|
|
389
|
+
for (const dep of deps) {
|
|
390
|
+
const parent = await api.get(dep.blockerId);
|
|
391
|
+
if (parent && parent.type === 'library') {
|
|
392
|
+
await api.removeDependency(libraryId, dep.blockerId, 'parent-child');
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
// Delete the library itself
|
|
396
|
+
await api.delete(libraryId);
|
|
397
|
+
return c.json({
|
|
398
|
+
success: true,
|
|
399
|
+
id: libraryId,
|
|
400
|
+
documentsDeleted: cascade ? documentIds.length : 0,
|
|
401
|
+
documentsRemoved: cascade ? 0 : documentIds.length,
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
catch (error) {
|
|
405
|
+
if (error.code === 'NOT_FOUND') {
|
|
406
|
+
return c.json({ error: { code: 'NOT_FOUND', message: 'Library not found' } }, 404);
|
|
407
|
+
}
|
|
408
|
+
console.error('[stoneforge] Failed to delete library:', error);
|
|
409
|
+
return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to delete library' } }, 500);
|
|
410
|
+
}
|
|
411
|
+
});
|
|
412
|
+
// POST /api/libraries - Create a new library
|
|
413
|
+
app.post('/api/libraries', async (c) => {
|
|
414
|
+
try {
|
|
415
|
+
const body = (await c.req.json());
|
|
416
|
+
// Validate required fields
|
|
417
|
+
if (!body.name || typeof body.name !== 'string') {
|
|
418
|
+
return c.json({ error: { code: 'VALIDATION_ERROR', message: 'name is required and must be a string' } }, 400);
|
|
419
|
+
}
|
|
420
|
+
if (!body.createdBy || typeof body.createdBy !== 'string') {
|
|
421
|
+
return c.json({ error: { code: 'VALIDATION_ERROR', message: 'createdBy is required and must be a string' } }, 400);
|
|
422
|
+
}
|
|
423
|
+
// Create the library input
|
|
424
|
+
const libraryInput = {
|
|
425
|
+
name: body.name.trim(),
|
|
426
|
+
createdBy: body.createdBy,
|
|
427
|
+
...(body.tags && { tags: body.tags }),
|
|
428
|
+
...(body.metadata && { metadata: body.metadata }),
|
|
429
|
+
};
|
|
430
|
+
// Create the library using the factory function
|
|
431
|
+
const library = await createLibrary(libraryInput);
|
|
432
|
+
// Persist to database
|
|
433
|
+
const created = await api.create(library);
|
|
434
|
+
// If parentId is provided, establish parent-child relationship
|
|
435
|
+
if (body.parentId) {
|
|
436
|
+
// Verify parent library exists
|
|
437
|
+
const parent = await api.get(body.parentId);
|
|
438
|
+
if (!parent) {
|
|
439
|
+
// Library was created but parent doesn't exist - delete and return error
|
|
440
|
+
await api.delete(created.id);
|
|
441
|
+
return c.json({ error: { code: 'VALIDATION_ERROR', message: 'Parent library not found' } }, 400);
|
|
442
|
+
}
|
|
443
|
+
if (parent.type !== 'library') {
|
|
444
|
+
await api.delete(created.id);
|
|
445
|
+
return c.json({ error: { code: 'VALIDATION_ERROR', message: 'Parent must be a library' } }, 400);
|
|
446
|
+
}
|
|
447
|
+
// Add parent-child dependency (child is blocked, parent is blocker)
|
|
448
|
+
await api.addDependency({
|
|
449
|
+
blockedId: created.id,
|
|
450
|
+
blockerId: body.parentId,
|
|
451
|
+
type: 'parent-child',
|
|
452
|
+
actor: body.createdBy,
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
return c.json(created, 201);
|
|
456
|
+
}
|
|
457
|
+
catch (error) {
|
|
458
|
+
if (error.code === 'VALIDATION_ERROR') {
|
|
459
|
+
return c.json({ error: { code: 'VALIDATION_ERROR', message: error.message } }, 400);
|
|
460
|
+
}
|
|
461
|
+
console.error('[stoneforge] Failed to create library:', error);
|
|
462
|
+
return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to create library' } }, 500);
|
|
463
|
+
}
|
|
464
|
+
});
|
|
465
|
+
return app;
|
|
466
|
+
}
|
|
467
|
+
//# sourceMappingURL=libraries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"libraries.js","sourceRoot":"","sources":["../src/libraries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,MAAM,UAAU,mBAAmB,CAAC,QAA6B;IAC/D,MAAM,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,0CAA0C;IAC1C,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACpC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,kBAAkB,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,MAAM,CAAC;YAClF,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,yBAAyB;YAEtF,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC;gBAC/B,IAAI,EAAE,SAAS;gBACf,KAAK;gBACL,GAAG,CAAC,kBAAkB,IAAI,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;aAC5B,CAAC,CAAC;YAErC,6CAA6C;YAC7C,wEAAwE;YACxE,MAAM,mBAAmB,GAAG,MAAM,OAAO,CAAC,GAAG,CAC3C,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBAC9B,0FAA0F;gBAC1F,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;gBAC7E,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;gBACtE,OAAO;oBACL,GAAG,OAAO;oBACV,QAAQ,EAAE,SAAS,EAAE,SAAS,IAAI,IAAI;iBACvC,CAAC;YACJ,CAAC,CAAC,CACH,CAAC;YAEF,OAAO,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;YAC9D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,yBAAyB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAChG,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,4DAA4D;IAC5D,GAAG,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;YAC1C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,kBAAkB,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,MAAM,CAAC;YAElF,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAEvG,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACrF,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC/B,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACrF,CAAC;YAED,yEAAyE;YACzE,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;YAEjE,4CAA4C;YAC5C,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACpD,MAAM,QAAQ,GAAc,EAAE,CAAC;YAC/B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,OAAoB,CAAC,CAAC;gBAClD,IAAI,KAAK,EAAE,CAAC;oBACV,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;YAED,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;YAClE,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;YAEhE,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,GAAG,OAAO;gBACV,aAAa,EAAE,YAAY;gBAC3B,UAAU,EAAE,SAAS;aACtB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;YAC5D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,uBAAuB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,gEAAgE;IAChE,GAAG,CAAC,GAAG,CAAC,8BAA8B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAClD,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;YAC1C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAEnD,8BAA8B;YAC9B,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACrF,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC/B,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACrF,CAAC;YAED,4CAA4C;YAC5C,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;YAEjE,+CAA+C;YAC/C,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACvD,MAAM,SAAS,GAAc,EAAE,CAAC;YAEhC,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;gBAChC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,KAAkB,CAAC,CAAC;gBAC9C,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBACnC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;YAED,gCAAgC;YAChC,IAAI,MAAM,GAAG,SAAS,CAAC;YACvB,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAEhE,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBACf,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC;YACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC;YAED,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,KAAK,CAAC,CAAC;YACtE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,iCAAiC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QACxG,CAAC;IACH,CAAC,CAAC,CAAC;IAEH;;OAEG;IACH,KAAK,UAAU,mBAAmB,CAAC,SAAoB,EAAE,QAAuB;QAC9E,IAAI,QAAQ,EAAE,CAAC;YACb,yBAAyB;YACzB,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,QAAqB,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;YACpF,MAAM,QAAQ,GAAc,EAAE,CAAC;YAC/B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gBAC7B,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;oBAChC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,SAAsB,CAAC,CAAC;oBAC1D,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBAC1C,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,kDAAkD;YAClD,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAoC,CAAC,CAAC;YAC3F,MAAM,YAAY,GAAc,EAAE,CAAC;YACnC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;gBAC/B,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;oBACzB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;oBACjE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;oBAC9D,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,iBAAiB,CAC9B,SAAoB,EACpB,QAAmB,EACnB,WAAmB;QAEnB,uEAAuE;QACvE,MAAM,cAAc,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACjD,MAAM,MAAM,GAAI,CAAC,CAAC,QAAQ,EAAE,SAAoB,IAAI,QAAQ,CAAC;YAC7D,MAAM,MAAM,GAAI,CAAC,CAAC,QAAQ,EAAE,SAAoB,IAAI,QAAQ,CAAC;YAC7D,IAAI,MAAM,KAAK,MAAM;gBAAE,OAAO,MAAM,GAAG,MAAM,CAAC;YAC9C,0DAA0D;YAC1D,MAAM,KAAK,GAAI,CAAiC,CAAC,IAAI,IAAI,EAAE,CAAC;YAC5D,MAAM,KAAK,GAAI,CAAiC,CAAC,IAAI,IAAI,EAAE,CAAC;YAC5D,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,oEAAoE;QACpE,8CAA8C;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,YAAY,GAAI,OAAO,CAAC,QAAQ,EAAE,SAAoB,IAAI,CAAC,CAAC;YAClE,IAAI,QAAQ,GAAG,CAAC,CAAC;YAEjB,0CAA0C;YAC1C,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;gBAC5B,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YAED,IAAI,QAAQ,KAAK,YAAY,IAAI,OAAO,CAAC,QAAQ,EAAE,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC3E,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE;oBAC3B,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE;iBACvD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,oCAAoC;QACpC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE;gBAC1B,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE;aAC1D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9C,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;YACjD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAe,CAAC;YAEnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC3C,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,qCAAqC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9G,CAAC;YAED,wBAAwB;YACxB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACrF,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC/B,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACrF,CAAC;YAED,sBAAsB;YACtB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;YACpE,IAAI,QAAQ,GAAkB,IAAI,CAAC;YACnC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,SAAsB,CAAC,CAAC;gBACzD,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBACxC,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC;oBACzB,MAAM;gBACR,CAAC;YACH,CAAC;YAED,kCAAkC;YAClC,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAChE,MAAM,iBAAiB,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YAEpD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;YAChE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,2BAA2B,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAClG,CAAC;IACH,CAAC,CAAC,CAAC;IAEH;;;;OAIG;IACH,GAAG,CAAC,GAAG,CAAC,2BAA2B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC/C,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;YACjD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAEhC,wBAAwB;YACxB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACrF,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC/B,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACrF,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,QAA4B,CAAC;YACtD,MAAM,KAAK,GAAG,IAAI,CAAC,KAA2B,CAAC;YAC/C,MAAM,KAAK,GAAI,IAAI,CAAC,KAAkB,IAAK,SAAsB,CAAC;YAElE,kCAAkC;YAClC,IAAI,WAAW,EAAE,CAAC;gBAChB,+BAA+B;gBAC/B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAC1C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBACzC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,qCAAqC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9G,CAAC;gBAED,gFAAgF;gBAChF,MAAM,YAAY,GAAG,KAAK,EAAE,UAAqB,EAAE,qBAAgC,EAAoB,EAAE;oBACvG,IAAI,UAAU,KAAK,qBAAqB;wBAAE,OAAO,IAAI,CAAC;oBAEtD,2BAA2B;oBAC3B,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;oBACzE,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBAEpD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;wBAC/B,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,OAAoB,CAAC,CAAC;wBAClD,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;4BACtC,IAAI,MAAM,YAAY,CAAC,OAAoB,EAAE,qBAAqB,CAAC,EAAE,CAAC;gCACpE,OAAO,IAAI,CAAC;4BACd,CAAC;wBACH,CAAC;oBACH,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC,CAAC;gBAEF,IAAI,MAAM,YAAY,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC;oBAC/C,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,8DAA8D,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;gBACvI,CAAC;YACH,CAAC;YAED,sBAAsB;YACtB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;YACpE,IAAI,gBAAgB,GAAkB,IAAI,CAAC;YAC3C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,SAAsB,CAAC,CAAC;gBACzD,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBACxC,gBAAgB,GAAG,GAAG,CAAC,SAAS,CAAC;oBACjC,MAAM;gBACR,CAAC;YACH,CAAC;YAED,4DAA4D;YAC5D,IAAI,gBAAgB,KAAK,WAAW,EAAE,CAAC;gBACrC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,6BAA6B;oBAC7B,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;oBACnE,MAAM,iBAAiB,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACtD,CAAC;gBACD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACxE,CAAC;YAED,oCAAoC;YACpC,IAAI,gBAAgB,EAAE,CAAC;gBACrB,MAAM,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,gBAA6B,EAAE,cAAc,CAAC,CAAC;YACvF,CAAC;YAED,gCAAgC;YAChC,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,GAAG,CAAC,aAAa,CAAC;oBACtB,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,WAAW;oBACtB,IAAI,EAAE,cAAc;oBACpB,KAAK;iBACN,CAAC,CAAC;YACL,CAAC;YAED,gEAAgE;YAChE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;gBACnE,MAAM,iBAAiB,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YACtD,CAAC;YAED,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;YAC7D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,wBAAwB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC,CAAC,CAAC;IAEH;;;;;OAKG;IACH,GAAG,CAAC,MAAM,CAAC,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;YACjD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC;YAE3D,wBAAwB;YACxB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACrF,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC/B,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACrF,CAAC;YAED,iDAAiD;YACjD,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;YACxE,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAEpD,sBAAsB;YACtB,MAAM,aAAa,GAAa,EAAE,CAAC;YACnC,MAAM,WAAW,GAAa,EAAE,CAAC;YAEjC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,OAAoB,CAAC,CAAC;gBAClD,IAAI,KAAK,EAAE,CAAC;oBACV,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBAC7B,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC9B,CAAC;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;wBACrC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC5B,CAAC;gBACH,CAAC;YACH,CAAC;YAED,gDAAgD;YAChD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC,CAAC,IAAI,CAAC;oBACZ,KAAK,EAAE;wBACL,IAAI,EAAE,cAAc;wBACpB,OAAO,EAAE,iCAAiC,aAAa,CAAC,MAAM,oCAAoC;qBACnG;iBACF,EAAE,GAAG,CAAC,CAAC;YACV,CAAC;YAED,yCAAyC;YACzC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,IAAI,OAAO,EAAE,CAAC;oBACZ,sCAAsC;oBACtC,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;wBAChC,MAAM,GAAG,CAAC,MAAM,CAAC,KAAkB,CAAC,CAAC;oBACvC,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,sDAAsD;oBACtD,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;wBAChC,MAAM,GAAG,CAAC,gBAAgB,CAAC,KAAkB,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;oBAC5E,CAAC;gBACH,CAAC;YACH,CAAC;YAED,2CAA2C;YAC3C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;YACpE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,SAAsB,CAAC,CAAC;gBACzD,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBACxC,MAAM,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,SAAsB,EAAE,cAAc,CAAC,CAAC;gBACpF,CAAC;YACH,CAAC;YAED,4BAA4B;YAC5B,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAE5B,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,IAAI;gBACb,EAAE,EAAE,SAAS;gBACb,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAClD,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM;aACnD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA2B,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACtD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACrF,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;YAC/D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,0BAA0B,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QACjG,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,6CAA6C;IAC7C,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAM/B,CAAC;YAEF,2BAA2B;YAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAChD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,uCAAuC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAChH,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAC1D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,4CAA4C,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACrH,CAAC;YAED,2BAA2B;YAC3B,MAAM,YAAY,GAAuB;gBACvC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACtB,SAAS,EAAE,IAAI,CAAC,SAAqB;gBACrC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;gBACrC,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;aAClD,CAAC;YAEF,gDAAgD;YAChD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC;YAElD,sBAAsB;YACtB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAuD,CAAC,CAAC;YAE1F,+DAA+D;YAC/D,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,+BAA+B;gBAC/B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAqB,CAAC,CAAC;gBACzD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,yEAAyE;oBACzE,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC7B,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,0BAA0B,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;gBACnG,CAAC;gBACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC9B,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC7B,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,0BAA0B,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;gBACnG,CAAC;gBAED,oEAAoE;gBACpE,MAAM,GAAG,CAAC,aAAa,CAAC;oBACtB,SAAS,EAAE,OAAO,CAAC,EAAE;oBACrB,SAAS,EAAE,IAAI,CAAC,QAAqB;oBACrC,IAAI,EAAE,cAAc;oBACpB,KAAK,EAAE,IAAI,CAAC,SAAqB;iBAClC,CAAC,CAAC;YACL,CAAC;YAED,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA2B,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBAC7D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACjG,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;YAC/D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,0BAA0B,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QACjG,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Message Routes Factory
|
|
3
|
+
*
|
|
4
|
+
* Message creation, search, and thread replies.
|
|
5
|
+
*/
|
|
6
|
+
import { Hono } from 'hono';
|
|
7
|
+
import type { CollaborateServicesWithBroadcast } from './types.js';
|
|
8
|
+
export declare function createMessageRoutes(services: CollaborateServicesWithBroadcast): Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
|
|
9
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,YAAY,CAAC;AAEnE,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,gCAAgC,8EAwZ7E"}
|