@relaycast/engine 4.1.6 → 5.0.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.
Files changed (190) hide show
  1. package/dist/adapters/node/index.d.ts.map +1 -1
  2. package/dist/adapters/node/index.js +23 -1
  3. package/dist/adapters/node/index.js.map +1 -1
  4. package/dist/adapters/node/presence.d.ts +7 -3
  5. package/dist/adapters/node/presence.d.ts.map +1 -1
  6. package/dist/adapters/node/presence.js +10 -8
  7. package/dist/adapters/node/presence.js.map +1 -1
  8. package/dist/adapters/node/realtime.d.ts.map +1 -1
  9. package/dist/adapters/node/realtime.js +8 -3
  10. package/dist/adapters/node/realtime.js.map +1 -1
  11. package/dist/bin/serve.js +2 -4
  12. package/dist/bin/serve.js.map +1 -1
  13. package/dist/db/migrations/0021_node_delivery_contracts.sql +70 -0
  14. package/dist/db/migrations/0022_http_push_redrive.sql +13 -0
  15. package/dist/db/migrations/0023_direct_ws_nodes.sql +124 -0
  16. package/dist/db/migrations/0024_binding_workspace_constraints.sql +109 -0
  17. package/dist/db/schema.d.ts +339 -0
  18. package/dist/db/schema.d.ts.map +1 -1
  19. package/dist/db/schema.js +48 -1
  20. package/dist/db/schema.js.map +1 -1
  21. package/dist/engine/action.d.ts +0 -7
  22. package/dist/engine/action.d.ts.map +1 -1
  23. package/dist/engine/action.js +0 -7
  24. package/dist/engine/action.js.map +1 -1
  25. package/dist/engine/agent.d.ts.map +1 -1
  26. package/dist/engine/agent.js +7 -1
  27. package/dist/engine/agent.js.map +1 -1
  28. package/dist/engine/delivery.d.ts +24 -0
  29. package/dist/engine/delivery.d.ts.map +1 -1
  30. package/dist/engine/delivery.js +190 -74
  31. package/dist/engine/delivery.js.map +1 -1
  32. package/dist/engine/deliveryWrites.d.ts +5 -0
  33. package/dist/engine/deliveryWrites.d.ts.map +1 -1
  34. package/dist/engine/deliveryWrites.js +51 -11
  35. package/dist/engine/deliveryWrites.js.map +1 -1
  36. package/dist/engine/invocationCompletion.d.ts +1 -1
  37. package/dist/engine/invocationCompletion.d.ts.map +1 -1
  38. package/dist/engine/invocationCompletion.js +1 -16
  39. package/dist/engine/invocationCompletion.js.map +1 -1
  40. package/dist/engine/message.d.ts.map +1 -1
  41. package/dist/engine/message.js +1 -0
  42. package/dist/engine/message.js.map +1 -1
  43. package/dist/engine/node.d.ts +85 -0
  44. package/dist/engine/node.d.ts.map +1 -1
  45. package/dist/engine/node.js +473 -14
  46. package/dist/engine/node.js.map +1 -1
  47. package/dist/engine/nodeContext.d.ts +22 -0
  48. package/dist/engine/nodeContext.d.ts.map +1 -0
  49. package/dist/engine/nodeContext.js +104 -0
  50. package/dist/engine/nodeContext.js.map +1 -0
  51. package/dist/engine/thread.d.ts.map +1 -1
  52. package/dist/engine/thread.js +37 -17
  53. package/dist/engine/thread.js.map +1 -1
  54. package/dist/engine/wsAuth.d.ts +36 -0
  55. package/dist/engine/wsAuth.d.ts.map +1 -0
  56. package/dist/engine/wsAuth.js +57 -0
  57. package/dist/engine/wsAuth.js.map +1 -0
  58. package/dist/engine.d.ts.map +1 -1
  59. package/dist/engine.js +46 -74
  60. package/dist/engine.js.map +1 -1
  61. package/dist/entrypoints/node.d.ts.map +1 -1
  62. package/dist/entrypoints/node.js +27 -51
  63. package/dist/entrypoints/node.js.map +1 -1
  64. package/dist/index.d.ts +1 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +5 -0
  67. package/dist/index.js.map +1 -1
  68. package/dist/lib/httpError.d.ts +5 -1
  69. package/dist/lib/httpError.d.ts.map +1 -1
  70. package/dist/lib/httpError.js +9 -5
  71. package/dist/lib/httpError.js.map +1 -1
  72. package/dist/lib/httpQuery.d.ts +28 -0
  73. package/dist/lib/httpQuery.d.ts.map +1 -0
  74. package/dist/lib/httpQuery.js +32 -0
  75. package/dist/lib/httpQuery.js.map +1 -0
  76. package/dist/lib/httpResponse.d.ts +116 -0
  77. package/dist/lib/httpResponse.d.ts.map +1 -0
  78. package/dist/lib/httpResponse.js +65 -0
  79. package/dist/lib/httpResponse.js.map +1 -0
  80. package/dist/middleware/auth.d.ts.map +1 -1
  81. package/dist/middleware/auth.js +3 -2
  82. package/dist/middleware/auth.js.map +1 -1
  83. package/dist/middleware/idempotency.d.ts +30 -0
  84. package/dist/middleware/idempotency.d.ts.map +1 -1
  85. package/dist/middleware/idempotency.js +14 -0
  86. package/dist/middleware/idempotency.js.map +1 -1
  87. package/dist/middleware/planLimits.d.ts.map +1 -1
  88. package/dist/middleware/planLimits.js +2 -7
  89. package/dist/middleware/planLimits.js.map +1 -1
  90. package/dist/middleware/rateLimit.d.ts.map +1 -1
  91. package/dist/middleware/rateLimit.js +2 -7
  92. package/dist/middleware/rateLimit.js.map +1 -1
  93. package/dist/ports/index.d.ts +0 -14
  94. package/dist/ports/index.d.ts.map +1 -1
  95. package/dist/routes/a2a.d.ts.map +1 -1
  96. package/dist/routes/a2a.js +41 -83
  97. package/dist/routes/a2a.js.map +1 -1
  98. package/dist/routes/action.d.ts.map +1 -1
  99. package/dist/routes/action.js +32 -37
  100. package/dist/routes/action.js.map +1 -1
  101. package/dist/routes/agent.d.ts.map +1 -1
  102. package/dist/routes/agent.js +69 -73
  103. package/dist/routes/agent.js.map +1 -1
  104. package/dist/routes/certify.d.ts.map +1 -1
  105. package/dist/routes/certify.js +21 -35
  106. package/dist/routes/certify.js.map +1 -1
  107. package/dist/routes/channel.d.ts.map +1 -1
  108. package/dist/routes/channel.js +33 -71
  109. package/dist/routes/channel.js.map +1 -1
  110. package/dist/routes/console.d.ts.map +1 -1
  111. package/dist/routes/console.js +22 -32
  112. package/dist/routes/console.js.map +1 -1
  113. package/dist/routes/delivery.d.ts.map +1 -1
  114. package/dist/routes/delivery.js +22 -54
  115. package/dist/routes/delivery.js.map +1 -1
  116. package/dist/routes/deliveryRouting.d.ts +6 -0
  117. package/dist/routes/deliveryRouting.d.ts.map +1 -1
  118. package/dist/routes/deliveryRouting.js +289 -35
  119. package/dist/routes/deliveryRouting.js.map +1 -1
  120. package/dist/routes/directory.d.ts.map +1 -1
  121. package/dist/routes/directory.js +47 -63
  122. package/dist/routes/directory.js.map +1 -1
  123. package/dist/routes/dm.d.ts.map +1 -1
  124. package/dist/routes/dm.js +21 -42
  125. package/dist/routes/dm.js.map +1 -1
  126. package/dist/routes/eventSubscription.d.ts.map +1 -1
  127. package/dist/routes/eventSubscription.js +15 -21
  128. package/dist/routes/eventSubscription.js.map +1 -1
  129. package/dist/routes/fanout.d.ts +2 -1
  130. package/dist/routes/fanout.d.ts.map +1 -1
  131. package/dist/routes/fanout.js +25 -15
  132. package/dist/routes/fanout.js.map +1 -1
  133. package/dist/routes/file.d.ts.map +1 -1
  134. package/dist/routes/file.js +34 -40
  135. package/dist/routes/file.js.map +1 -1
  136. package/dist/routes/groupDm.d.ts.map +1 -1
  137. package/dist/routes/groupDm.js +23 -48
  138. package/dist/routes/groupDm.js.map +1 -1
  139. package/dist/routes/inboundWebhook.d.ts.map +1 -1
  140. package/dist/routes/inboundWebhook.js +17 -35
  141. package/dist/routes/inboundWebhook.js.map +1 -1
  142. package/dist/routes/inbox.d.ts.map +1 -1
  143. package/dist/routes/inbox.js +2 -1
  144. package/dist/routes/inbox.js.map +1 -1
  145. package/dist/routes/message.d.ts.map +1 -1
  146. package/dist/routes/message.js +39 -50
  147. package/dist/routes/message.js.map +1 -1
  148. package/dist/routes/node.d.ts.map +1 -1
  149. package/dist/routes/node.js +125 -12
  150. package/dist/routes/node.js.map +1 -1
  151. package/dist/routes/presence.d.ts.map +1 -1
  152. package/dist/routes/presence.js +4 -3
  153. package/dist/routes/presence.js.map +1 -1
  154. package/dist/routes/reaction.d.ts.map +1 -1
  155. package/dist/routes/reaction.js +10 -21
  156. package/dist/routes/reaction.js.map +1 -1
  157. package/dist/routes/receipt.d.ts.map +1 -1
  158. package/dist/routes/receipt.js +7 -15
  159. package/dist/routes/receipt.js.map +1 -1
  160. package/dist/routes/routing.d.ts.map +1 -1
  161. package/dist/routes/routing.js +38 -51
  162. package/dist/routes/routing.js.map +1 -1
  163. package/dist/routes/search.d.ts.map +1 -1
  164. package/dist/routes/search.js +15 -12
  165. package/dist/routes/search.js.map +1 -1
  166. package/dist/routes/systemPrompt.d.ts.map +1 -1
  167. package/dist/routes/systemPrompt.js +8 -13
  168. package/dist/routes/systemPrompt.js.map +1 -1
  169. package/dist/routes/thread.d.ts.map +1 -1
  170. package/dist/routes/thread.js +17 -35
  171. package/dist/routes/thread.js.map +1 -1
  172. package/dist/routes/trigger.d.ts.map +1 -1
  173. package/dist/routes/trigger.js +15 -14
  174. package/dist/routes/trigger.js.map +1 -1
  175. package/dist/routes/workspace.d.ts.map +1 -1
  176. package/dist/routes/workspace.js +39 -220
  177. package/dist/routes/workspace.js.map +1 -1
  178. package/package.json +3 -3
  179. package/dist/lib/fleetNodes.d.ts +0 -9
  180. package/dist/lib/fleetNodes.d.ts.map +0 -1
  181. package/dist/lib/fleetNodes.js +0 -66
  182. package/dist/lib/fleetNodes.js.map +0 -1
  183. package/dist/lib/workspaceStream.d.ts +0 -9
  184. package/dist/lib/workspaceStream.d.ts.map +0 -1
  185. package/dist/lib/workspaceStream.js +0 -53
  186. package/dist/lib/workspaceStream.js.map +0 -1
  187. package/dist/middleware/fleetNodes.d.ts +0 -10
  188. package/dist/middleware/fleetNodes.d.ts.map +0 -1
  189. package/dist/middleware/fleetNodes.js +0 -18
  190. package/dist/middleware/fleetNodes.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import { transformForClient } from '../engine/wsTransform.js';
2
- import { isWorkspaceStreamEnabled } from '../lib/workspaceStream.js';
3
2
  import { getRequestLogger, toErrorDetails } from '../lib/logger.js';
4
3
  import { dmConversations, dmParticipants } from '../db/schema.js';
5
4
  import { and, eq, isNull } from 'drizzle-orm';
5
+ import { sendNodeContextForChannel } from '../engine/nodeContext.js';
6
6
  function buildEvent(type, workspaceId, data, channelId) {
7
7
  return {
8
8
  type,
@@ -12,14 +12,8 @@ function buildEvent(type, workspaceId, data, channelId) {
12
12
  timestamp: new Date().toISOString(),
13
13
  };
14
14
  }
15
- async function workspaceStreamEnabled(c, workspaceId) {
16
- const { kv, config } = c.get('engine');
17
- return isWorkspaceStreamEnabled(kv, workspaceId, config.workspaceStreamEnabled ?? false);
18
- }
19
15
  async function publishToWorkspaceStream(c, workspaceId, payload) {
20
16
  const logger = getRequestLogger(c, 'fanout.workspace_stream');
21
- if (!(await workspaceStreamEnabled(c, workspaceId)))
22
- return;
23
17
  try {
24
18
  await c.get('engine').realtime.publishToWorkspaceStream({ workspaceId, event: payload });
25
19
  }
@@ -30,7 +24,16 @@ async function publishToWorkspaceStream(c, workspaceId, payload) {
30
24
  });
31
25
  }
32
26
  }
33
- export async function fanoutToChannel(c, channelId, type, data, members, // Optional: provide members for member-cache initialization
27
+ export async function publishWorkspaceEvent(c, type, data, channelId) {
28
+ const workspaceId = c.get('workspace').id;
29
+ if (channelId) {
30
+ await fanoutToChannel(c, channelId, type, data, undefined, workspaceId);
31
+ return;
32
+ }
33
+ const event = buildEvent(type, workspaceId, data, channelId);
34
+ await publishToWorkspaceStream(c, workspaceId, transformForClient(event));
35
+ }
36
+ export async function fanoutToChannel(c, channelId, type, data, _members, // Optional: provide members for member-cache initialization
34
37
  workspaceIdOverride) {
35
38
  const logger = getRequestLogger(c, 'fanout.channel');
36
39
  let workspaceId = workspaceIdOverride;
@@ -49,17 +52,25 @@ workspaceIdOverride) {
49
52
  const payload = transformForClient(event);
50
53
  const ws = workspaceId;
51
54
  const tasks = [];
52
- tasks.push(c.get('engine').realtime
53
- .broadcastToChannel({ workspaceId: ws, channelId, event: payload, members })
54
- .catch((err) => {
55
- logger.error(`broadcastToChannel error for channel ${channelId}, event ${type}`, {
55
+ tasks.push(publishToWorkspaceStream(c, ws, payload));
56
+ tasks.push(sendNodeContextForChannel({
57
+ db: c.get('db'),
58
+ nodeConnections: c.get('engine').nodeConnections,
59
+ realtime: c.get('engine').realtime,
60
+ workspaceId: ws,
61
+ }, {
62
+ channelId,
63
+ topic: type.startsWith('thread.') ? 'thread' : 'channel',
64
+ event: type,
65
+ data,
66
+ }).catch((err) => {
67
+ logger.error(`node context error for channel ${channelId}, event ${type}`, {
56
68
  workspace_id: ws,
57
69
  channel_id: channelId,
58
70
  event_type: type,
59
71
  ...toErrorDetails(err),
60
72
  });
61
73
  }));
62
- tasks.push(publishToWorkspaceStream(c, ws, payload));
63
74
  await Promise.allSettled(tasks);
64
75
  }
65
76
  export async function fanoutToAgents(c, agentIds, type, data) {
@@ -76,8 +87,7 @@ export async function fanoutToWorkspace(c, type, data) {
76
87
  const logger = getRequestLogger(c, 'fanout.workspace');
77
88
  const workspaceId = c.get('workspace').id;
78
89
  try {
79
- const agentIds = await c.get('engine').presence.getOnline(workspaceId);
80
- await fanoutToAgents(c, agentIds, type, data);
90
+ await publishWorkspaceEvent(c, type, data);
81
91
  }
82
92
  catch (err) {
83
93
  logger.error(`fanoutToWorkspace error for workspace ${workspaceId}, event ${type}`, {
@@ -1 +1 @@
1
- {"version":3,"file":"fanout.js","sourceRoot":"","sources":["../../src/routes/fanout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fanout.js","sourceRoot":"","sources":["../../src/routes/fanout.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/routes/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAUxC,eAAO,MAAM,UAAU,qDAAqB,CAAC"}
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/routes/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAoBxC,eAAO,MAAM,UAAU,qDAAqB,CAAC"}
@@ -1,6 +1,8 @@
1
1
  import { Hono } from 'hono';
2
2
  import { z } from 'zod';
3
3
  import { errorResponse } from '../lib/httpError.js';
4
+ import { jsonCreated, jsonError, jsonNoContent, jsonNotFound, jsonOk, parseJsonBody, parseQueryParams, } from '../lib/httpResponse.js';
5
+ import { LimitQuerySchema } from '../lib/httpQuery.js';
4
6
  import { requireAuth, requireAgentToken } from '../middleware/auth.js';
5
7
  import { rateLimit } from '../middleware/rateLimit.js';
6
8
  import * as fileEngine from '../engine/file.js';
@@ -14,6 +16,21 @@ const fileUploadSchema = z.object({
14
16
  content_type: z.string().min(1),
15
17
  size_bytes: z.number().finite().refine((value) => value !== 0),
16
18
  });
19
+ const listFilesQuerySchema = LimitQuerySchema.extend({
20
+ uploaded_by: z.string().optional(),
21
+ });
22
+ function uploadInvalidMessage(failure) {
23
+ const hasFilenameIssue = failure.error.issues.some((issue) => issue.path[0] === 'filename');
24
+ const hasContentTypeIssue = failure.error.issues.some((issue) => issue.path[0] === 'content_type');
25
+ const hasSizeBytesIssue = failure.error.issues.some((issue) => issue.path[0] === 'size_bytes');
26
+ return hasFilenameIssue
27
+ ? 'filename is required'
28
+ : hasContentTypeIssue
29
+ ? 'content_type is required'
30
+ : hasSizeBytesIssue
31
+ ? 'size_bytes is required'
32
+ : 'invalid upload body';
33
+ }
17
34
  // POST /v1/files/upload — Returns presigned PUT URL
18
35
  fileRoutes.post('/files/upload', requireAgentToken, rateLimit, async (c) => {
19
36
  try {
@@ -21,22 +38,9 @@ fileRoutes.post('/files/upload', requireAgentToken, rateLimit, async (c) => {
21
38
  const workspace = c.get('workspace');
22
39
  const agent = c.get('agent');
23
40
  const storage = c.get('engine').files;
24
- const parsed = fileUploadSchema.safeParse(await c.req.json());
25
- if (!parsed.success) {
26
- const hasFilenameIssue = parsed.error.issues.some((issue) => issue.path[0] === 'filename');
27
- const hasContentTypeIssue = parsed.error.issues.some((issue) => issue.path[0] === 'content_type');
28
- const hasSizeBytesIssue = parsed.error.issues.some((issue) => issue.path[0] === 'size_bytes');
29
- const message = hasFilenameIssue
30
- ? 'filename is required'
31
- : hasContentTypeIssue
32
- ? 'content_type is required'
33
- : hasSizeBytesIssue
34
- ? 'size_bytes is required'
35
- : 'invalid upload body';
36
- return c.json({
37
- ok: false,
38
- error: { code: 'invalid_request', message },
39
- }, 400);
41
+ const parsed = await parseJsonBody(c, fileUploadSchema, uploadInvalidMessage);
42
+ if (!parsed.ok) {
43
+ return parsed.response;
40
44
  }
41
45
  const { filename, content_type, size_bytes } = parsed.data;
42
46
  const result = await fileEngine.createUpload(db, storage, workspace.id, agent.id, { filename, content_type, size_bytes });
@@ -45,7 +49,7 @@ fileRoutes.post('/files/upload', requireAgentToken, rateLimit, async (c) => {
45
49
  size_bytes,
46
50
  content_type,
47
51
  });
48
- return c.json({ ok: true, data: result }, 201);
52
+ return jsonCreated(c, result);
49
53
  }
50
54
  catch (err) {
51
55
  return errorResponse(c, err);
@@ -60,10 +64,7 @@ fileRoutes.post('/files/:id/complete', requireAgentToken, rateLimit, async (c) =
60
64
  const storage = c.get('engine').files;
61
65
  const result = await fileEngine.completeUpload(db, storage, workspace.id, c.req.param('id'), agent.id);
62
66
  if (!result) {
63
- return c.json({
64
- ok: false,
65
- error: { code: 'file_not_found', message: 'File not found or not owned by you' },
66
- }, 404);
67
+ return jsonNotFound(c, 'file_not_found', 'File not found or not owned by you');
67
68
  }
68
69
  const eventData = { ...result, agent_id: agent.id };
69
70
  runInBackground(c, fanoutToWorkspace(c, 'file.uploaded', eventData), 'fanout file.uploaded');
@@ -77,7 +78,7 @@ fileRoutes.post('/files/:id/complete', requireAgentToken, rateLimit, async (c) =
77
78
  size_bytes: result.size_bytes,
78
79
  content_type: result.content_type,
79
80
  });
80
- return c.json({ ok: true, data: result });
81
+ return jsonOk(c, result);
81
82
  }
82
83
  catch (err) {
83
84
  return errorResponse(c, err);
@@ -91,12 +92,9 @@ fileRoutes.get('/files/:id', requireAuth, rateLimit, async (c) => {
91
92
  const storage = c.get('engine').files;
92
93
  const result = await fileEngine.getFile(db, storage, workspace.id, c.req.param('id'));
93
94
  if (!result) {
94
- return c.json({
95
- ok: false,
96
- error: { code: 'file_not_found', message: 'File not found' },
97
- }, 404);
95
+ return jsonNotFound(c, 'file_not_found', 'File not found');
98
96
  }
99
- return c.json({ ok: true, data: result });
97
+ return jsonOk(c, result);
100
98
  }
101
99
  catch (err) {
102
100
  return errorResponse(c, err);
@@ -110,18 +108,12 @@ fileRoutes.delete('/files/:id', requireAgentToken, rateLimit, async (c) => {
110
108
  const agent = c.get('agent');
111
109
  const result = await fileEngine.deleteFile(db, workspace.id, c.req.param('id'), agent.id);
112
110
  if (result === null) {
113
- return c.json({
114
- ok: false,
115
- error: { code: 'file_not_found', message: 'File not found' },
116
- }, 404);
111
+ return jsonNotFound(c, 'file_not_found', 'File not found');
117
112
  }
118
113
  if (result === 'forbidden') {
119
- return c.json({
120
- ok: false,
121
- error: { code: 'forbidden', message: 'Not the file owner' },
122
- }, 403);
114
+ return jsonError(c, 'forbidden', 'Not the file owner', 403);
123
115
  }
124
- return c.body(null, 204);
116
+ return jsonNoContent(c);
125
117
  }
126
118
  catch (err) {
127
119
  return errorResponse(c, err);
@@ -132,14 +124,16 @@ fileRoutes.get('/files', requireAuth, rateLimit, async (c) => {
132
124
  try {
133
125
  const db = c.get('db');
134
126
  const workspace = c.get('workspace');
135
- const uploaded_by = c.req.query('uploaded_by');
136
- const limitStr = c.req.query('limit');
137
- const limit = limitStr ? parseInt(limitStr, 10) : undefined;
127
+ const parsed = parseQueryParams(c, listFilesQuerySchema, 'Invalid file list query');
128
+ if (!parsed.ok) {
129
+ return parsed.response;
130
+ }
131
+ const { uploaded_by, limit } = parsed.data;
138
132
  const result = await fileEngine.listFiles(db, workspace.id, {
139
133
  uploaded_by,
140
134
  limit,
141
135
  });
142
- return c.json({ ok: true, data: result });
136
+ return jsonOk(c, result);
143
137
  }
144
138
  catch (err) {
145
139
  return errorResponse(c, err);
@@ -1 +1 @@
1
- {"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/routes/file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/routes/file.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"groupDm.d.ts","sourceRoot":"","sources":["../../src/routes/groupDm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAgBxC,eAAO,MAAM,aAAa,qDAAqB,CAAC"}
1
+ {"version":3,"file":"groupDm.d.ts","sourceRoot":"","sources":["../../src/routes/groupDm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAqBxC,eAAO,MAAM,aAAa,qDAAqB,CAAC"}
@@ -3,17 +3,16 @@ import { z } from 'zod';
3
3
  import { errorResponse } from '../lib/httpError.js';
4
4
  import { requireAgentToken } from '../middleware/auth.js';
5
5
  import { rateLimit } from '../middleware/rateLimit.js';
6
- import { parseIdempotencyKey, runIdempotent } from '../middleware/idempotency.js';
6
+ import { jsonIdempotentOk, parseIdempotencyKey, runIdempotent } from '../middleware/idempotency.js';
7
7
  import * as groupDmEngine from '../engine/groupDm.js';
8
8
  import { resolveMailboxConfig } from '../engine/mailboxConfig.js';
9
- import { and, eq, isNull } from 'drizzle-orm';
10
- import { dmParticipants } from '../db/schema.js';
11
- import { fanoutToAgents } from './fanout.js';
9
+ import { publishWorkspaceEvent } from './fanout.js';
12
10
  import { notifyDeliveryRejections, routeDeliveryOutcomes } from './deliveryRouting.js';
13
11
  import { buildGroupDmReceivedEventData } from '../engine/deliveryWire.js';
14
12
  import { runInBackground } from './background.js';
15
13
  import { sendWebhookEvent } from './webhookOutbox.js';
16
14
  import { emitServerEvent } from '../lib/serverTelemetry.js';
15
+ import { jsonCreated, jsonError, jsonNoContent, jsonOk, parseJsonBody, } from '../lib/httpResponse.js';
17
16
  export const groupDmRoutes = new Hono();
18
17
  const createGroupDmSchema = z.object({
19
18
  participants: z.array(z.string()).min(1),
@@ -33,12 +32,9 @@ groupDmRoutes.post('/dm/group', requireAgentToken, rateLimit, async (c) => {
33
32
  const db = c.get('db');
34
33
  const workspace = c.get('workspace');
35
34
  const agent = c.get('agent');
36
- const parsed = createGroupDmSchema.safeParse(await c.req.json());
37
- if (!parsed.success) {
38
- return c.json({
39
- ok: false,
40
- error: { code: 'invalid_request', message: 'participants array is required with at least 1 member' },
41
- }, 400);
35
+ const parsed = await parseJsonBody(c, createGroupDmSchema, 'participants array is required with at least 1 member');
36
+ if (!parsed.ok) {
37
+ return parsed.response;
42
38
  }
43
39
  const { participants, name } = parsed.data;
44
40
  const result = await groupDmEngine.createGroupDm(db, workspace.id, agent.id, { participants, name });
@@ -46,7 +42,7 @@ groupDmRoutes.post('/dm/group', requireAgentToken, rateLimit, async (c) => {
46
42
  conversation_id: result.id,
47
43
  participant_count: result.participants.length,
48
44
  });
49
- return c.json({ ok: true, data: result }, 201);
45
+ return jsonCreated(c, result);
50
46
  }
51
47
  catch (err) {
52
48
  return errorResponse(c, err);
@@ -58,31 +54,26 @@ groupDmRoutes.post('/dm/:conversation_id/messages', requireAgentToken, rateLimit
58
54
  const db = c.get('db');
59
55
  const workspace = c.get('workspace');
60
56
  const agent = c.get('agent');
61
- const parsed = postGroupDmMessageSchema.safeParse(await c.req.json());
62
- if (!parsed.success) {
63
- const hasTextIssue = parsed.error.issues.some((issue) => issue.path[0] === 'text');
64
- const hasModeIssue = parsed.error.issues.some((issue) => issue.path[0] === 'mode');
65
- const hasAttachmentsIssue = parsed.error.issues.some((issue) => issue.path[0] === 'attachments');
66
- const message = hasTextIssue
57
+ const parsed = await parseJsonBody(c, postGroupDmMessageSchema, (failure) => {
58
+ const hasTextIssue = failure.error.issues.some((issue) => issue.path[0] === 'text');
59
+ const hasModeIssue = failure.error.issues.some((issue) => issue.path[0] === 'mode');
60
+ const hasAttachmentsIssue = failure.error.issues.some((issue) => issue.path[0] === 'attachments');
61
+ return hasTextIssue
67
62
  ? 'text is required'
68
63
  : hasModeIssue
69
64
  ? 'mode must be one of: wait, steer'
70
65
  : hasAttachmentsIssue
71
66
  ? 'attachments must be an array of file ids'
72
67
  : 'invalid group dm body';
73
- return c.json({
74
- ok: false,
75
- error: { code: 'invalid_request', message },
76
- }, 400);
68
+ });
69
+ if (!parsed.ok) {
70
+ return parsed.response;
77
71
  }
78
72
  const { text, attachments, mode } = parsed.data;
79
73
  const normalizedAttachments = attachments && attachments.length > 0 ? attachments : undefined;
80
74
  const { key: idempotencyKey, error: idempotencyError } = parseIdempotencyKey(c.req.header('Idempotency-Key'));
81
75
  if (idempotencyError) {
82
- return c.json({
83
- ok: false,
84
- error: { code: 'invalid_idempotency_key', message: idempotencyError },
85
- }, 400);
76
+ return jsonError(c, 'invalid_idempotency_key', idempotencyError, 400);
86
77
  }
87
78
  const conversationId = c.req.param('conversation_id');
88
79
  const mailbox = resolveMailboxConfig(c.get('engine').config, workspace.id);
@@ -112,22 +103,10 @@ groupDmRoutes.post('/dm/:conversation_id/messages', requireAgentToken, rateLimit
112
103
  });
113
104
  },
114
105
  });
115
- if (idempotent.replayed) {
116
- c.header('Idempotency-Replayed', 'true');
117
- }
118
106
  if (!idempotent.replayed) {
119
107
  const { _deliveries, _delivery_rejections, ...publicGroupData } = idempotent.data;
120
108
  const eventData = toGroupDmReceivedEventData(idempotent.data);
121
- try {
122
- const rows = await db
123
- .select({ agentId: dmParticipants.agentId })
124
- .from(dmParticipants)
125
- .where(and(eq(dmParticipants.conversationId, conversationId), isNull(dmParticipants.leftAt)));
126
- runInBackground(c, fanoutToAgents(c, rows.map((r) => r.agentId), 'group_dm.received', eventData), 'fanout group_dm.received');
127
- }
128
- catch {
129
- // Ignore fanout failures
130
- }
109
+ runInBackground(c, publishWorkspaceEvent(c, 'group_dm.received', eventData), 'publish group_dm.received');
131
110
  if (_deliveries && _deliveries.length > 0) {
132
111
  runInBackground(c, routeDeliveryOutcomes(c, _deliveries, 'group_dm.received', eventData), 'route group dm deliveries');
133
112
  }
@@ -140,8 +119,7 @@ groupDmRoutes.post('/dm/:conversation_id/messages', requireAgentToken, rateLimit
140
119
  from_agent_id: agent.id,
141
120
  });
142
121
  }
143
- const { _deliveries: _dropDeliveries, _delivery_rejections: _dropRejections, ...responseData } = idempotent.data;
144
- return c.json({ ok: true, data: responseData }, idempotent.status);
122
+ return jsonIdempotentOk(c, idempotent);
145
123
  }
146
124
  catch (err) {
147
125
  return errorResponse(c, err);
@@ -153,12 +131,9 @@ groupDmRoutes.post('/dm/:conversation_id/participants', requireAgentToken, rateL
153
131
  const db = c.get('db');
154
132
  const workspace = c.get('workspace');
155
133
  const agentCtx = c.get('agent');
156
- const parsed = addGroupDmParticipantSchema.safeParse(await c.req.json());
157
- if (!parsed.success) {
158
- return c.json({
159
- ok: false,
160
- error: { code: 'invalid_request', message: 'agent_name is required' },
161
- }, 400);
134
+ const parsed = await parseJsonBody(c, addGroupDmParticipantSchema, 'agent_name is required');
135
+ if (!parsed.ok) {
136
+ return parsed.response;
162
137
  }
163
138
  const { agent_name: agentName } = parsed.data;
164
139
  const conversationId = c.req.param('conversation_id');
@@ -168,7 +143,7 @@ groupDmRoutes.post('/dm/:conversation_id/participants', requireAgentToken, rateL
168
143
  agent_name: agentName,
169
144
  invited_by_agent_id: agentCtx.id,
170
145
  });
171
- return c.json({ ok: true, data: result });
146
+ return jsonOk(c, result);
172
147
  }
173
148
  catch (err) {
174
149
  return errorResponse(c, err);
@@ -186,7 +161,7 @@ groupDmRoutes.delete('/dm/:conversation_id/participants/:agent_name', requireAge
186
161
  conversation_id: conversationId,
187
162
  agent_id: agent.id,
188
163
  });
189
- return c.body(null, 204);
164
+ return jsonNoContent(c);
190
165
  }
191
166
  catch (err) {
192
167
  return errorResponse(c, err);
@@ -1 +1 @@
1
- {"version":3,"file":"groupDm.js","sourceRoot":"","sources":["../../src/routes/groupDm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"groupDm.js","sourceRoot":"","sources":["../../src/routes/groupDm.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"inboundWebhook.d.ts","sourceRoot":"","sources":["../../src/routes/inboundWebhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAWxC,eAAO,MAAM,oBAAoB,qDAAqB,CAAC"}
1
+ {"version":3,"file":"inboundWebhook.d.ts","sourceRoot":"","sources":["../../src/routes/inboundWebhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAkBxC,eAAO,MAAM,oBAAoB,qDAAqB,CAAC"}
@@ -9,6 +9,7 @@ import { fanoutToChannel } from './fanout.js';
9
9
  import { runInBackground } from './background.js';
10
10
  import { sendWebhookEvent } from './webhookOutbox.js';
11
11
  import { emitServerEvent } from '../lib/serverTelemetry.js';
12
+ import { jsonCreated, jsonNoContent, jsonNotFound, jsonOk, parseJsonBody, } from '../lib/httpResponse.js';
12
13
  export const inboundWebhookRoutes = new Hono();
13
14
  const createInboundWebhookSchema = z.object({
14
15
  name: z.string().min(1).optional(),
@@ -34,32 +35,25 @@ inboundWebhookRoutes.post('/webhooks', requireWorkspaceKey, rateLimit, async (c)
34
35
  try {
35
36
  const db = c.get('db');
36
37
  const workspace = c.get('workspace');
37
- const parsed = createInboundWebhookSchema.safeParse(await c.req.json());
38
- if (!parsed.success) {
39
- const hasChannelIssue = parsed.error.issues.some((issue) => issue.path[0] === 'channel');
40
- const message = hasChannelIssue
41
- ? 'channel is required'
42
- : 'invalid webhook body';
43
- return c.json({
44
- ok: false,
45
- error: { code: 'invalid_request', message },
46
- }, 400);
38
+ const parsed = await parseJsonBody(c, createInboundWebhookSchema, (failure) => {
39
+ const hasChannelIssue = failure.error.issues.some((issue) => issue.path[0] === 'channel');
40
+ return hasChannelIssue ? 'channel is required' : 'invalid webhook body';
41
+ });
42
+ if (!parsed.ok) {
43
+ return parsed.response;
47
44
  }
48
45
  const { name, channel } = parsed.data;
49
46
  // Resolve channel name to ID
50
47
  const ch = await channelEngine.getChannel(db, workspace.id, channel);
51
48
  if (!ch) {
52
- return c.json({
53
- ok: false,
54
- error: { code: 'channel_not_found', message: `Channel "${channel}" not found` },
55
- }, 404);
49
+ return jsonNotFound(c, 'channel_not_found', `Channel "${channel}" not found`);
56
50
  }
57
51
  const result = await inboundWebhookEngine.createWebhook(db, workspace.id, ch.id, { name });
58
52
  emitServerEvent(c, workspace.id, 'relaycast_server_inbound_webhook_created', {
59
53
  webhook_id: result.webhook_id,
60
54
  channel_name: channel,
61
55
  });
62
- return c.json({ ok: true, data: { ...result, url: hookUrl(c.req.url, result.webhook_id) } }, 201);
56
+ return jsonCreated(c, { ...result, url: hookUrl(c.req.url, result.webhook_id) });
63
57
  }
64
58
  catch (err) {
65
59
  return errorResponse(c, err);
@@ -71,10 +65,7 @@ inboundWebhookRoutes.get('/webhooks', requireWorkspaceKey, rateLimit, async (c)
71
65
  const db = c.get('db');
72
66
  const workspace = c.get('workspace');
73
67
  const result = await inboundWebhookEngine.listWebhooks(db, workspace.id);
74
- return c.json({
75
- ok: true,
76
- data: result.map((webhook) => ({ ...webhook, url: hookUrl(c.req.url, webhook.id) })),
77
- });
68
+ return jsonOk(c, result.map((webhook) => ({ ...webhook, url: hookUrl(c.req.url, webhook.id) })));
78
69
  }
79
70
  catch (err) {
80
71
  return errorResponse(c, err);
@@ -87,15 +78,12 @@ inboundWebhookRoutes.delete('/webhooks/:id', requireWorkspaceKey, rateLimit, asy
87
78
  const workspace = c.get('workspace');
88
79
  const deleted = await inboundWebhookEngine.deleteWebhook(db, workspace.id, c.req.param('id'));
89
80
  if (!deleted) {
90
- return c.json({
91
- ok: false,
92
- error: { code: 'webhook_not_found', message: 'Webhook not found' },
93
- }, 404);
81
+ return jsonNotFound(c, 'webhook_not_found', 'Webhook not found');
94
82
  }
95
83
  emitServerEvent(c, workspace.id, 'relaycast_server_inbound_webhook_deleted', {
96
84
  webhook_id: c.req.param('id'),
97
85
  });
98
- return c.body(null, 204);
86
+ return jsonNoContent(c);
99
87
  }
100
88
  catch (err) {
101
89
  return errorResponse(c, err);
@@ -106,12 +94,9 @@ inboundWebhookRoutes.post('/hooks/:webhookId', async (c) => {
106
94
  try {
107
95
  const db = c.get('db');
108
96
  const token = extractBearerToken(c.req.header('Authorization'));
109
- const parsed = triggerInboundWebhookSchema.safeParse(await c.req.json());
110
- if (!parsed.success) {
111
- return c.json({
112
- ok: false,
113
- error: { code: 'invalid_request', message: 'invalid webhook payload' },
114
- }, 400);
97
+ const parsed = await parseJsonBody(c, triggerInboundWebhookSchema, 'invalid webhook payload');
98
+ if (!parsed.ok) {
99
+ return parsed.response;
115
100
  }
116
101
  const { text, message, source, author, payload } = parsed.data;
117
102
  const result = await inboundWebhookEngine.triggerWebhook(db, c.req.param('webhookId'), token, {
@@ -121,10 +106,7 @@ inboundWebhookRoutes.post('/hooks/:webhookId', async (c) => {
121
106
  payload: (payload && typeof payload === 'object') ? payload : undefined,
122
107
  });
123
108
  if (!result) {
124
- return c.json({
125
- ok: false,
126
- error: { code: 'webhook_not_found', message: 'Webhook not found or inactive' },
127
- }, 404);
109
+ return jsonNotFound(c, 'webhook_not_found', 'Webhook not found or inactive');
128
110
  }
129
111
  const { workspace_id, channel_id, ...responseData } = result;
130
112
  const eventData = { ...responseData, channel_id };
@@ -143,7 +125,7 @@ inboundWebhookRoutes.post('/hooks/:webhookId', async (c) => {
143
125
  source: result.source ?? null,
144
126
  author: result.author ?? null,
145
127
  });
146
- return c.json({ ok: true, data: responseData }, 201);
128
+ return jsonCreated(c, responseData);
147
129
  }
148
130
  catch (err) {
149
131
  return errorResponse(c, err);