@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
package/dist/inbox.js
ADDED
|
@@ -0,0 +1,538 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inbox Routes Factory
|
|
3
|
+
*
|
|
4
|
+
* Shared inbox endpoints for entities and agents.
|
|
5
|
+
* Used by both main server and orchestrator-server.
|
|
6
|
+
*/
|
|
7
|
+
import { Hono } from 'hono';
|
|
8
|
+
export function createInboxRoutes(services) {
|
|
9
|
+
const { api, inboxService, storageBackend, broadcastInboxEvent } = services;
|
|
10
|
+
const app = new Hono();
|
|
11
|
+
/**
|
|
12
|
+
* GET /api/entities/:id/inbox
|
|
13
|
+
* Get entity's inbox with pagination and optional hydration.
|
|
14
|
+
*
|
|
15
|
+
* Query params:
|
|
16
|
+
* - limit: Max items to return (default: 25)
|
|
17
|
+
* - offset: Pagination offset
|
|
18
|
+
* - status: Filter by status (unread, read, archived, or comma-separated)
|
|
19
|
+
* - sourceType: Filter by source type (direct, mention)
|
|
20
|
+
* - hydrate: If 'true', hydrate message content, sender, channel, attachments
|
|
21
|
+
*/
|
|
22
|
+
app.get('/api/entities/:id/inbox', async (c) => {
|
|
23
|
+
try {
|
|
24
|
+
const id = c.req.param('id');
|
|
25
|
+
const url = new URL(c.req.url);
|
|
26
|
+
// Parse pagination params
|
|
27
|
+
const limitParam = url.searchParams.get('limit');
|
|
28
|
+
const offsetParam = url.searchParams.get('offset');
|
|
29
|
+
const statusParam = url.searchParams.get('status');
|
|
30
|
+
const sourceTypeParam = url.searchParams.get('sourceType');
|
|
31
|
+
const hydrateParam = url.searchParams.get('hydrate');
|
|
32
|
+
// Verify entity exists
|
|
33
|
+
const entity = await api.get(id);
|
|
34
|
+
if (!entity || entity.type !== 'entity') {
|
|
35
|
+
return c.json({ error: { code: 'NOT_FOUND', message: 'Entity not found' } }, 404);
|
|
36
|
+
}
|
|
37
|
+
// Build filter
|
|
38
|
+
const filter = {
|
|
39
|
+
limit: limitParam ? parseInt(limitParam, 10) : 25,
|
|
40
|
+
offset: offsetParam ? parseInt(offsetParam, 10) : 0,
|
|
41
|
+
};
|
|
42
|
+
// Handle status filter (can be comma-separated)
|
|
43
|
+
if (statusParam) {
|
|
44
|
+
const statuses = statusParam.split(',').map((s) => s.trim());
|
|
45
|
+
filter.status = statuses.length === 1 ? statuses[0] : statuses;
|
|
46
|
+
}
|
|
47
|
+
if (sourceTypeParam) {
|
|
48
|
+
filter.sourceType = sourceTypeParam;
|
|
49
|
+
}
|
|
50
|
+
const result = inboxService.getInboxPaginated(id, filter);
|
|
51
|
+
let items = result.items;
|
|
52
|
+
// Optionally hydrate items with full data
|
|
53
|
+
if (hydrateParam === 'true') {
|
|
54
|
+
items = await Promise.all(items.map(async (item) => {
|
|
55
|
+
try {
|
|
56
|
+
// Hydrate message
|
|
57
|
+
const message = await api.get(item.messageId);
|
|
58
|
+
let messageData = null;
|
|
59
|
+
let fullContent = '';
|
|
60
|
+
let contentPreview = '';
|
|
61
|
+
let contentType = 'text';
|
|
62
|
+
let threadId = null;
|
|
63
|
+
if (message && message.type === 'message') {
|
|
64
|
+
const msgTyped = message;
|
|
65
|
+
threadId = msgTyped.threadId ?? null;
|
|
66
|
+
// Hydrate content
|
|
67
|
+
if (msgTyped.contentRef) {
|
|
68
|
+
const contentDoc = await api.get(msgTyped.contentRef);
|
|
69
|
+
if (contentDoc && contentDoc.type === 'document') {
|
|
70
|
+
const doc = contentDoc;
|
|
71
|
+
fullContent = doc.content ?? '';
|
|
72
|
+
contentPreview = fullContent.slice(0, 100);
|
|
73
|
+
contentType = doc.contentType ?? 'text';
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
messageData = {
|
|
77
|
+
id: msgTyped.id,
|
|
78
|
+
sender: msgTyped.sender,
|
|
79
|
+
contentRef: msgTyped.contentRef,
|
|
80
|
+
contentPreview,
|
|
81
|
+
fullContent,
|
|
82
|
+
contentType,
|
|
83
|
+
threadId,
|
|
84
|
+
createdAt: msgTyped.createdAt,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// Hydrate sender
|
|
88
|
+
let senderData = null;
|
|
89
|
+
if (messageData?.sender) {
|
|
90
|
+
const sender = await api.get(messageData.sender);
|
|
91
|
+
if (sender && sender.type === 'entity') {
|
|
92
|
+
const entityTyped = sender;
|
|
93
|
+
senderData = {
|
|
94
|
+
id: entityTyped.id,
|
|
95
|
+
type: 'entity',
|
|
96
|
+
name: entityTyped.name,
|
|
97
|
+
entityType: entityTyped.entityType,
|
|
98
|
+
tags: entityTyped.tags,
|
|
99
|
+
createdAt: entityTyped.createdAt,
|
|
100
|
+
updatedAt: entityTyped.updatedAt,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Hydrate channel
|
|
105
|
+
let channelData = null;
|
|
106
|
+
const channel = await api.get(item.channelId);
|
|
107
|
+
if (channel && channel.type === 'channel') {
|
|
108
|
+
const channelTyped = channel;
|
|
109
|
+
channelData = {
|
|
110
|
+
id: channelTyped.id,
|
|
111
|
+
name: channelTyped.name,
|
|
112
|
+
channelType: channelTyped.channelType,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
// Hydrate attachments (documents referenced by this message)
|
|
116
|
+
const attachments = [];
|
|
117
|
+
if (message) {
|
|
118
|
+
const deps = await api.getDependencies(message.id);
|
|
119
|
+
const refDeps = deps.filter((d) => d.type === 'references');
|
|
120
|
+
for (const dep of refDeps) {
|
|
121
|
+
const doc = await api.get(dep.blockerId);
|
|
122
|
+
if (doc && doc.type === 'document') {
|
|
123
|
+
const docTyped = doc;
|
|
124
|
+
const firstLine = (docTyped.content ?? '').split('\n')[0]?.slice(0, 50) || 'Untitled';
|
|
125
|
+
attachments.push({
|
|
126
|
+
id: docTyped.id,
|
|
127
|
+
title: firstLine,
|
|
128
|
+
content: docTyped.content?.slice(0, 500),
|
|
129
|
+
contentType: docTyped.contentType,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Hydrate thread parent (if this is a reply)
|
|
135
|
+
let threadParent = null;
|
|
136
|
+
if (threadId) {
|
|
137
|
+
const parentMsg = await api.get(threadId);
|
|
138
|
+
if (parentMsg && parentMsg.type === 'message') {
|
|
139
|
+
const parentTyped = parentMsg;
|
|
140
|
+
let parentPreview = '';
|
|
141
|
+
if (parentTyped.contentRef) {
|
|
142
|
+
const parentContent = await api.get(parentTyped.contentRef);
|
|
143
|
+
if (parentContent && parentContent.type === 'document') {
|
|
144
|
+
parentPreview = (parentContent.content ?? '').slice(0, 100);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
let parentSender = null;
|
|
148
|
+
const parentSenderEntity = await api.get(parentTyped.sender);
|
|
149
|
+
if (parentSenderEntity && parentSenderEntity.type === 'entity') {
|
|
150
|
+
const entityTyped = parentSenderEntity;
|
|
151
|
+
parentSender = {
|
|
152
|
+
id: entityTyped.id,
|
|
153
|
+
name: entityTyped.name,
|
|
154
|
+
entityType: entityTyped.entityType,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
threadParent = {
|
|
158
|
+
id: parentTyped.id,
|
|
159
|
+
sender: parentSender,
|
|
160
|
+
contentPreview: parentPreview,
|
|
161
|
+
createdAt: parentTyped.createdAt,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
...item,
|
|
167
|
+
message: messageData,
|
|
168
|
+
sender: senderData,
|
|
169
|
+
channel: channelData,
|
|
170
|
+
attachments: attachments.length > 0 ? attachments : undefined,
|
|
171
|
+
threadParent,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
catch (err) {
|
|
175
|
+
console.warn(`[stoneforge] Failed to hydrate inbox item ${item.id}:`, err);
|
|
176
|
+
return item;
|
|
177
|
+
}
|
|
178
|
+
}));
|
|
179
|
+
}
|
|
180
|
+
return c.json({
|
|
181
|
+
items,
|
|
182
|
+
total: result.total,
|
|
183
|
+
offset: filter.offset ?? 0,
|
|
184
|
+
limit: filter.limit ?? 25,
|
|
185
|
+
hasMore: (filter.offset ?? 0) + result.items.length < result.total,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
console.error('[stoneforge] Failed to get entity inbox:', error);
|
|
190
|
+
return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to get entity inbox' } }, 500);
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
/**
|
|
194
|
+
* GET /api/entities/:id/inbox/count
|
|
195
|
+
* Get unread inbox count for an entity.
|
|
196
|
+
*/
|
|
197
|
+
app.get('/api/entities/:id/inbox/count', async (c) => {
|
|
198
|
+
try {
|
|
199
|
+
const id = c.req.param('id');
|
|
200
|
+
// Verify entity exists
|
|
201
|
+
const entity = await api.get(id);
|
|
202
|
+
if (!entity || entity.type !== 'entity') {
|
|
203
|
+
return c.json({ error: { code: 'NOT_FOUND', message: 'Entity not found' } }, 404);
|
|
204
|
+
}
|
|
205
|
+
const count = inboxService.getUnreadCount(id);
|
|
206
|
+
return c.json({ count });
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
console.error('[stoneforge] Failed to get inbox count:', error);
|
|
210
|
+
return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to get inbox count' } }, 500);
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
/**
|
|
214
|
+
* POST /api/entities/:id/inbox/mark-all-read
|
|
215
|
+
* Mark all inbox items as read for an entity.
|
|
216
|
+
*/
|
|
217
|
+
app.post('/api/entities/:id/inbox/mark-all-read', async (c) => {
|
|
218
|
+
try {
|
|
219
|
+
const id = c.req.param('id');
|
|
220
|
+
// Verify entity exists
|
|
221
|
+
const entity = await api.get(id);
|
|
222
|
+
if (!entity || entity.type !== 'entity') {
|
|
223
|
+
return c.json({ error: { code: 'NOT_FOUND', message: 'Entity not found' } }, 404);
|
|
224
|
+
}
|
|
225
|
+
const count = inboxService.markAllAsRead(id);
|
|
226
|
+
// Broadcast bulk update event
|
|
227
|
+
if (count > 0 && broadcastInboxEvent) {
|
|
228
|
+
broadcastInboxEvent(`bulk-${id}`, id, 'updated', null, { bulkMarkRead: true, count }, id);
|
|
229
|
+
}
|
|
230
|
+
return c.json({ markedCount: count });
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
console.error('[stoneforge] Failed to mark all as read:', error);
|
|
234
|
+
return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to mark all as read' } }, 500);
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
/**
|
|
238
|
+
* GET /api/inbox/all
|
|
239
|
+
* Global inbox view across all entities.
|
|
240
|
+
* Supports filtering by entityId to show a specific user's inbox.
|
|
241
|
+
*/
|
|
242
|
+
app.get('/api/inbox/all', async (c) => {
|
|
243
|
+
try {
|
|
244
|
+
const url = new URL(c.req.url);
|
|
245
|
+
const limitParam = url.searchParams.get('limit');
|
|
246
|
+
const offsetParam = url.searchParams.get('offset');
|
|
247
|
+
const statusParam = url.searchParams.get('status');
|
|
248
|
+
const hydrateParam = url.searchParams.get('hydrate');
|
|
249
|
+
const entityIdParam = url.searchParams.get('entityId');
|
|
250
|
+
const limit = limitParam ? parseInt(limitParam, 10) : 50;
|
|
251
|
+
const offset = offsetParam ? parseInt(offsetParam, 10) : 0;
|
|
252
|
+
// We need to use raw SQL for global inbox (no specific recipientId)
|
|
253
|
+
// Build WHERE conditions
|
|
254
|
+
const conditions = [];
|
|
255
|
+
const params = [];
|
|
256
|
+
if (statusParam) {
|
|
257
|
+
const statuses = statusParam.split(',').map((s) => s.trim());
|
|
258
|
+
if (statuses.length === 1) {
|
|
259
|
+
conditions.push('status = ?');
|
|
260
|
+
params.push(statuses[0]);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
conditions.push(`status IN (${statuses.map(() => '?').join(',')})`);
|
|
264
|
+
params.push(...statuses);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
if (entityIdParam) {
|
|
268
|
+
conditions.push('recipient_id = ?');
|
|
269
|
+
params.push(entityIdParam);
|
|
270
|
+
}
|
|
271
|
+
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
272
|
+
// Get total count
|
|
273
|
+
const countResult = storageBackend.queryOne(`SELECT COUNT(*) as count FROM inbox_items ${whereClause}`, params);
|
|
274
|
+
const total = countResult?.count ?? 0;
|
|
275
|
+
// Get items
|
|
276
|
+
const rows = storageBackend.query(`SELECT id, recipient_id, message_id, channel_id, source_type, status, read_at, created_at
|
|
277
|
+
FROM inbox_items ${whereClause}
|
|
278
|
+
ORDER BY created_at DESC
|
|
279
|
+
LIMIT ? OFFSET ?`, [...params, limit, offset]);
|
|
280
|
+
let items = rows.map((row) => ({
|
|
281
|
+
id: row.id,
|
|
282
|
+
recipientId: row.recipient_id,
|
|
283
|
+
messageId: row.message_id,
|
|
284
|
+
channelId: row.channel_id,
|
|
285
|
+
sourceType: row.source_type,
|
|
286
|
+
status: row.status,
|
|
287
|
+
readAt: row.read_at,
|
|
288
|
+
createdAt: row.created_at,
|
|
289
|
+
}));
|
|
290
|
+
// Hydrate items if requested
|
|
291
|
+
if (hydrateParam === 'true') {
|
|
292
|
+
items = await Promise.all(items.map(async (item) => {
|
|
293
|
+
try {
|
|
294
|
+
// Hydrate message
|
|
295
|
+
const message = await api.get(item.messageId);
|
|
296
|
+
let messageData = null;
|
|
297
|
+
let fullContent = '';
|
|
298
|
+
let contentPreview = '';
|
|
299
|
+
let contentType = 'text';
|
|
300
|
+
let threadId = null;
|
|
301
|
+
if (message && message.type === 'message') {
|
|
302
|
+
const msgTyped = message;
|
|
303
|
+
threadId = msgTyped.threadId ?? null;
|
|
304
|
+
if (msgTyped.contentRef) {
|
|
305
|
+
const contentDoc = await api.get(msgTyped.contentRef);
|
|
306
|
+
if (contentDoc && contentDoc.type === 'document') {
|
|
307
|
+
const doc = contentDoc;
|
|
308
|
+
fullContent = doc.content ?? '';
|
|
309
|
+
contentPreview = fullContent.slice(0, 100);
|
|
310
|
+
contentType = doc.contentType ?? 'text';
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
messageData = {
|
|
314
|
+
id: msgTyped.id,
|
|
315
|
+
sender: msgTyped.sender,
|
|
316
|
+
contentRef: msgTyped.contentRef,
|
|
317
|
+
contentPreview,
|
|
318
|
+
fullContent,
|
|
319
|
+
contentType,
|
|
320
|
+
threadId,
|
|
321
|
+
createdAt: msgTyped.createdAt,
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
// Hydrate sender
|
|
325
|
+
let senderData = null;
|
|
326
|
+
if (messageData?.sender) {
|
|
327
|
+
const sender = await api.get(messageData.sender);
|
|
328
|
+
if (sender && sender.type === 'entity') {
|
|
329
|
+
const entityTyped = sender;
|
|
330
|
+
senderData = {
|
|
331
|
+
id: entityTyped.id,
|
|
332
|
+
type: 'entity',
|
|
333
|
+
name: entityTyped.name,
|
|
334
|
+
entityType: entityTyped.entityType,
|
|
335
|
+
tags: entityTyped.tags,
|
|
336
|
+
createdAt: entityTyped.createdAt,
|
|
337
|
+
updatedAt: entityTyped.updatedAt,
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
// Hydrate recipient
|
|
342
|
+
let recipientData = null;
|
|
343
|
+
const recipient = await api.get(item.recipientId);
|
|
344
|
+
if (recipient && recipient.type === 'entity') {
|
|
345
|
+
const entityTyped = recipient;
|
|
346
|
+
recipientData = {
|
|
347
|
+
id: entityTyped.id,
|
|
348
|
+
type: 'entity',
|
|
349
|
+
name: entityTyped.name,
|
|
350
|
+
entityType: entityTyped.entityType,
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
// Hydrate channel
|
|
354
|
+
let channelData = null;
|
|
355
|
+
const channel = await api.get(item.channelId);
|
|
356
|
+
if (channel && channel.type === 'channel') {
|
|
357
|
+
const channelTyped = channel;
|
|
358
|
+
channelData = {
|
|
359
|
+
id: channelTyped.id,
|
|
360
|
+
name: channelTyped.name,
|
|
361
|
+
channelType: channelTyped.channelType,
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
// Hydrate attachments
|
|
365
|
+
const attachments = [];
|
|
366
|
+
if (message) {
|
|
367
|
+
const deps = await api.getDependencies(message.id);
|
|
368
|
+
const refDeps = deps.filter((d) => d.type === 'references');
|
|
369
|
+
for (const dep of refDeps) {
|
|
370
|
+
const doc = await api.get(dep.blockerId);
|
|
371
|
+
if (doc && doc.type === 'document') {
|
|
372
|
+
const docTyped = doc;
|
|
373
|
+
const firstLine = (docTyped.content ?? '').split('\n')[0]?.slice(0, 50) || 'Untitled';
|
|
374
|
+
attachments.push({
|
|
375
|
+
id: docTyped.id,
|
|
376
|
+
title: firstLine,
|
|
377
|
+
content: docTyped.content?.slice(0, 500),
|
|
378
|
+
contentType: docTyped.contentType,
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
// Hydrate thread parent
|
|
384
|
+
let threadParent = null;
|
|
385
|
+
if (threadId) {
|
|
386
|
+
const parentMsg = await api.get(threadId);
|
|
387
|
+
if (parentMsg && parentMsg.type === 'message') {
|
|
388
|
+
const parentTyped = parentMsg;
|
|
389
|
+
let parentPreview = '';
|
|
390
|
+
if (parentTyped.contentRef) {
|
|
391
|
+
const parentContent = await api.get(parentTyped.contentRef);
|
|
392
|
+
if (parentContent && parentContent.type === 'document') {
|
|
393
|
+
parentPreview = (parentContent.content ?? '').slice(0, 100);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
let parentSender = null;
|
|
397
|
+
const parentSenderEntity = await api.get(parentTyped.sender);
|
|
398
|
+
if (parentSenderEntity && parentSenderEntity.type === 'entity') {
|
|
399
|
+
const entityTyped = parentSenderEntity;
|
|
400
|
+
parentSender = {
|
|
401
|
+
id: entityTyped.id,
|
|
402
|
+
name: entityTyped.name,
|
|
403
|
+
entityType: entityTyped.entityType,
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
threadParent = {
|
|
407
|
+
id: parentTyped.id,
|
|
408
|
+
sender: parentSender,
|
|
409
|
+
contentPreview: parentPreview,
|
|
410
|
+
createdAt: parentTyped.createdAt,
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
return {
|
|
415
|
+
...item,
|
|
416
|
+
message: messageData,
|
|
417
|
+
sender: senderData,
|
|
418
|
+
recipient: recipientData,
|
|
419
|
+
channel: channelData,
|
|
420
|
+
attachments: attachments.length > 0 ? attachments : undefined,
|
|
421
|
+
threadParent,
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
catch (err) {
|
|
425
|
+
console.warn(`[stoneforge] Failed to hydrate inbox item ${item.id}:`, err);
|
|
426
|
+
return item;
|
|
427
|
+
}
|
|
428
|
+
}));
|
|
429
|
+
}
|
|
430
|
+
return c.json({
|
|
431
|
+
items,
|
|
432
|
+
total,
|
|
433
|
+
offset,
|
|
434
|
+
limit,
|
|
435
|
+
hasMore: offset + items.length < total,
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
catch (error) {
|
|
439
|
+
console.error('[stoneforge] Failed to get global inbox:', error);
|
|
440
|
+
return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to get global inbox' } }, 500);
|
|
441
|
+
}
|
|
442
|
+
});
|
|
443
|
+
/**
|
|
444
|
+
* GET /api/inbox/count
|
|
445
|
+
* Global inbox unread count.
|
|
446
|
+
* Supports filtering by entityId to get count for a specific user.
|
|
447
|
+
*/
|
|
448
|
+
app.get('/api/inbox/count', async (c) => {
|
|
449
|
+
try {
|
|
450
|
+
const url = new URL(c.req.url);
|
|
451
|
+
const statusParam = url.searchParams.get('status');
|
|
452
|
+
const entityIdParam = url.searchParams.get('entityId');
|
|
453
|
+
// Build WHERE conditions
|
|
454
|
+
const conditions = [];
|
|
455
|
+
if (statusParam) {
|
|
456
|
+
conditions.push(`status = '${statusParam}'`);
|
|
457
|
+
}
|
|
458
|
+
else {
|
|
459
|
+
conditions.push(`status = 'unread'`);
|
|
460
|
+
}
|
|
461
|
+
if (entityIdParam) {
|
|
462
|
+
conditions.push(`recipient_id = '${entityIdParam}'`);
|
|
463
|
+
}
|
|
464
|
+
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
465
|
+
const countResult = storageBackend.queryOne(`SELECT COUNT(*) as count FROM inbox_items ${whereClause}`, []);
|
|
466
|
+
return c.json({ count: countResult?.count ?? 0 });
|
|
467
|
+
}
|
|
468
|
+
catch (error) {
|
|
469
|
+
console.error('[stoneforge] Failed to get global inbox count:', error);
|
|
470
|
+
return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to get global inbox count' } }, 500);
|
|
471
|
+
}
|
|
472
|
+
});
|
|
473
|
+
/**
|
|
474
|
+
* GET /api/inbox/:itemId
|
|
475
|
+
* Get single inbox item.
|
|
476
|
+
*/
|
|
477
|
+
app.get('/api/inbox/:itemId', async (c) => {
|
|
478
|
+
try {
|
|
479
|
+
const itemId = c.req.param('itemId');
|
|
480
|
+
const item = inboxService.getInboxItem(itemId);
|
|
481
|
+
if (!item) {
|
|
482
|
+
return c.json({ error: { code: 'NOT_FOUND', message: 'Inbox item not found' } }, 404);
|
|
483
|
+
}
|
|
484
|
+
return c.json(item);
|
|
485
|
+
}
|
|
486
|
+
catch (error) {
|
|
487
|
+
console.error('[stoneforge] Failed to get inbox item:', error);
|
|
488
|
+
return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to get inbox item' } }, 500);
|
|
489
|
+
}
|
|
490
|
+
});
|
|
491
|
+
/**
|
|
492
|
+
* PATCH /api/inbox/:itemId
|
|
493
|
+
* Update inbox item status.
|
|
494
|
+
*/
|
|
495
|
+
app.patch('/api/inbox/:itemId', async (c) => {
|
|
496
|
+
try {
|
|
497
|
+
const itemId = c.req.param('itemId');
|
|
498
|
+
const body = await c.req.json();
|
|
499
|
+
if (!body.status) {
|
|
500
|
+
return c.json({ error: { code: 'VALIDATION_ERROR', message: 'status is required' } }, 400);
|
|
501
|
+
}
|
|
502
|
+
// Get old item state for event broadcasting
|
|
503
|
+
const oldItem = inboxService.getInboxItem(itemId);
|
|
504
|
+
if (!oldItem) {
|
|
505
|
+
return c.json({ error: { code: 'NOT_FOUND', message: 'Inbox item not found' } }, 404);
|
|
506
|
+
}
|
|
507
|
+
let item;
|
|
508
|
+
switch (body.status) {
|
|
509
|
+
case 'read':
|
|
510
|
+
item = inboxService.markAsRead(itemId);
|
|
511
|
+
break;
|
|
512
|
+
case 'unread':
|
|
513
|
+
item = inboxService.markAsUnread(itemId);
|
|
514
|
+
break;
|
|
515
|
+
case 'archived':
|
|
516
|
+
item = inboxService.archive(itemId);
|
|
517
|
+
break;
|
|
518
|
+
default:
|
|
519
|
+
return c.json({ error: { code: 'VALIDATION_ERROR', message: 'Invalid status' } }, 400);
|
|
520
|
+
}
|
|
521
|
+
// Broadcast inbox event for real-time updates
|
|
522
|
+
if (broadcastInboxEvent) {
|
|
523
|
+
broadcastInboxEvent(itemId, item.recipientId, 'updated', { status: oldItem.status, readAt: oldItem.readAt }, { status: item.status, readAt: item.readAt }, item.recipientId);
|
|
524
|
+
}
|
|
525
|
+
return c.json(item);
|
|
526
|
+
}
|
|
527
|
+
catch (error) {
|
|
528
|
+
const errorObj = error;
|
|
529
|
+
if (errorObj.code === 'NOT_FOUND') {
|
|
530
|
+
return c.json({ error: { code: 'NOT_FOUND', message: 'Inbox item not found' } }, 404);
|
|
531
|
+
}
|
|
532
|
+
console.error('[stoneforge] Failed to update inbox item:', error);
|
|
533
|
+
return c.json({ error: { code: 'INTERNAL_ERROR', message: 'Failed to update inbox item' } }, 500);
|
|
534
|
+
}
|
|
535
|
+
});
|
|
536
|
+
return app;
|
|
537
|
+
}
|
|
538
|
+
//# sourceMappingURL=inbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../src/inbox.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Routes Package
|
|
3
|
+
*
|
|
4
|
+
* Route factories for collaborate features that can be used by multiple servers.
|
|
5
|
+
*/
|
|
6
|
+
export type { CollaborateServices, CollaborateServicesWithBroadcast, BroadcastInboxEventFn, QuarryLikeAPI, InboxLikeService } from './types.js';
|
|
7
|
+
export { createElementsRoutes } from './elements.js';
|
|
8
|
+
export { createEntityRoutes } from './entities.js';
|
|
9
|
+
export { createChannelRoutes } from './channels.js';
|
|
10
|
+
export { createMessageRoutes } from './messages.js';
|
|
11
|
+
export { createLibraryRoutes } from './libraries.js';
|
|
12
|
+
export { createDocumentRoutes } from './documents.js';
|
|
13
|
+
export { createInboxRoutes } from './inbox.js';
|
|
14
|
+
export { createPlanRoutes } from './plans.js';
|
|
15
|
+
export * from './ws/index.js';
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EAAE,mBAAmB,EAAE,gCAAgC,EAAE,qBAAqB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGhJ,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9C,cAAc,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Routes Package
|
|
3
|
+
*
|
|
4
|
+
* Route factories for collaborate features that can be used by multiple servers.
|
|
5
|
+
*/
|
|
6
|
+
// Route factories
|
|
7
|
+
export { createElementsRoutes } from './elements.js';
|
|
8
|
+
export { createEntityRoutes } from './entities.js';
|
|
9
|
+
export { createChannelRoutes } from './channels.js';
|
|
10
|
+
export { createMessageRoutes } from './messages.js';
|
|
11
|
+
export { createLibraryRoutes } from './libraries.js';
|
|
12
|
+
export { createDocumentRoutes } from './documents.js';
|
|
13
|
+
export { createInboxRoutes } from './inbox.js';
|
|
14
|
+
export { createPlanRoutes } from './plans.js';
|
|
15
|
+
// WebSocket types, broadcaster, and handler utilities
|
|
16
|
+
export * from './ws/index.js';
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,kBAAkB;AAClB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,sDAAsD;AACtD,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Library Routes Factory
|
|
3
|
+
*
|
|
4
|
+
* CRUD operations for document libraries.
|
|
5
|
+
*/
|
|
6
|
+
import { Hono } from 'hono';
|
|
7
|
+
import type { CollaborateServices } from './types.js';
|
|
8
|
+
export declare function createLibraryRoutes(services: CollaborateServices): Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
|
|
9
|
+
//# sourceMappingURL=libraries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"libraries.d.ts","sourceRoot":"","sources":["../src/libraries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,mBAAmB,8EA2gBhE"}
|