@relaycast/engine 4.2.0 → 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 (178) 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 +5 -2
  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 +15 -2
  77. package/dist/lib/httpResponse.d.ts.map +1 -1
  78. package/dist/lib/httpResponse.js +35 -7
  79. package/dist/lib/httpResponse.js.map +1 -1
  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/fanout.d.ts +2 -1
  127. package/dist/routes/fanout.d.ts.map +1 -1
  128. package/dist/routes/fanout.js +25 -15
  129. package/dist/routes/fanout.js.map +1 -1
  130. package/dist/routes/file.d.ts.map +1 -1
  131. package/dist/routes/file.js +34 -40
  132. package/dist/routes/file.js.map +1 -1
  133. package/dist/routes/groupDm.d.ts.map +1 -1
  134. package/dist/routes/groupDm.js +23 -48
  135. package/dist/routes/groupDm.js.map +1 -1
  136. package/dist/routes/inboundWebhook.d.ts.map +1 -1
  137. package/dist/routes/inboundWebhook.js +17 -35
  138. package/dist/routes/inboundWebhook.js.map +1 -1
  139. package/dist/routes/inbox.d.ts.map +1 -1
  140. package/dist/routes/inbox.js +2 -1
  141. package/dist/routes/inbox.js.map +1 -1
  142. package/dist/routes/message.d.ts.map +1 -1
  143. package/dist/routes/message.js +39 -50
  144. package/dist/routes/message.js.map +1 -1
  145. package/dist/routes/node.d.ts.map +1 -1
  146. package/dist/routes/node.js +118 -6
  147. package/dist/routes/node.js.map +1 -1
  148. package/dist/routes/presence.d.ts.map +1 -1
  149. package/dist/routes/presence.js +4 -3
  150. package/dist/routes/presence.js.map +1 -1
  151. package/dist/routes/reaction.d.ts.map +1 -1
  152. package/dist/routes/reaction.js +10 -21
  153. package/dist/routes/reaction.js.map +1 -1
  154. package/dist/routes/routing.d.ts.map +1 -1
  155. package/dist/routes/routing.js +38 -51
  156. package/dist/routes/routing.js.map +1 -1
  157. package/dist/routes/search.d.ts.map +1 -1
  158. package/dist/routes/search.js +15 -12
  159. package/dist/routes/search.js.map +1 -1
  160. package/dist/routes/thread.d.ts.map +1 -1
  161. package/dist/routes/thread.js +17 -35
  162. package/dist/routes/thread.js.map +1 -1
  163. package/dist/routes/workspace.d.ts.map +1 -1
  164. package/dist/routes/workspace.js +39 -220
  165. package/dist/routes/workspace.js.map +1 -1
  166. package/package.json +3 -3
  167. package/dist/lib/fleetNodes.d.ts +0 -9
  168. package/dist/lib/fleetNodes.d.ts.map +0 -1
  169. package/dist/lib/fleetNodes.js +0 -66
  170. package/dist/lib/fleetNodes.js.map +0 -1
  171. package/dist/lib/workspaceStream.d.ts +0 -9
  172. package/dist/lib/workspaceStream.d.ts.map +0 -1
  173. package/dist/lib/workspaceStream.js +0 -53
  174. package/dist/lib/workspaceStream.js.map +0 -1
  175. package/dist/middleware/fleetNodes.d.ts +0 -10
  176. package/dist/middleware/fleetNodes.d.ts.map +0 -1
  177. package/dist/middleware/fleetNodes.js +0 -18
  178. package/dist/middleware/fleetNodes.js.map +0 -1
@@ -7,11 +7,10 @@ import * as workspaceEngine from '../engine/workspace.js';
7
7
  import * as activityEngine from '../engine/activity.js';
8
8
  import * as dmAllEngine from '../engine/dmAll.js';
9
9
  import * as tokenRotateEngine from '../engine/tokenRotate.js';
10
- import { getWorkspaceStreamConfig, setWorkspaceStreamOverride, } from '../lib/workspaceStream.js';
11
- import { getFleetNodesConfig, setFleetNodesOverride, } from '../lib/fleetNodes.js';
12
- import { getRequestLogger, toErrorDetails } from '../lib/logger.js';
13
10
  import { emitServerEvent } from '../lib/serverTelemetry.js';
14
- import { errorResponse, asCodedError } from '../lib/httpError.js';
11
+ import { errorResponse } from '../lib/httpError.js';
12
+ import { jsonCreated, jsonError, jsonNoContent, jsonNotFound, jsonOk, parseJsonBody, parseQueryParams, } from '../lib/httpResponse.js';
13
+ import { parsePaginationQuery, positiveIntQueryParam } from '../lib/httpQuery.js';
15
14
  export const workspaceRoutes = new Hono();
16
15
  const createWorkspaceSchema = z.object({
17
16
  name: z.string().min(1),
@@ -20,14 +19,12 @@ const updateWorkspaceSchema = z.object({
20
19
  name: z.string().optional(),
21
20
  system_prompt: z.string().nullable().optional(),
22
21
  });
23
- const updateWorkspaceStreamSchema = z.object({
24
- enabled: z.boolean().optional(),
25
- mode: z.string().optional(),
26
- }).passthrough();
27
- const updateFleetNodesSchema = z.object({
28
- enabled: z.boolean().optional(),
29
- mode: z.string().optional(),
30
- }).passthrough();
22
+ const activityQuerySchema = z.object({
23
+ limit: positiveIntQueryParam({ defaultValue: 20, max: 500 }),
24
+ });
25
+ function workspaceNotFound(c) {
26
+ return jsonNotFound(c, 'workspace_not_found', 'Workspace not found');
27
+ }
31
28
  const PUBLIC_WORKSPACE_LOOKUP_LIMIT = 30;
32
29
  const publicWorkspaceLookupBuckets = new Map();
33
30
  let lastPublicWorkspaceLookupCleanup = Date.now();
@@ -80,13 +77,7 @@ const publicWorkspaceLookupRateLimit = createMiddleware(async (c, next) => {
80
77
  c.header('X-RateLimit-Limit', String(limit));
81
78
  c.header('X-RateLimit-Remaining', String(remaining));
82
79
  if (!allowed) {
83
- return c.json({
84
- ok: false,
85
- error: {
86
- code: 'rate_limit_exceeded',
87
- message: `Rate limit exceeded. ${limit} requests per minute allowed for public workspace lookups.`,
88
- },
89
- }, 429);
80
+ return jsonError(c, 'rate_limit_exceeded', `Rate limit exceeded. ${limit} requests per minute allowed for public workspace lookups.`, 429);
90
81
  }
91
82
  }
92
83
  catch {
@@ -94,13 +85,7 @@ const publicWorkspaceLookupRateLimit = createMiddleware(async (c, next) => {
94
85
  c.header('X-RateLimit-Limit', String(limit));
95
86
  c.header('X-RateLimit-Remaining', String(remaining));
96
87
  if (!allowed) {
97
- return c.json({
98
- ok: false,
99
- error: {
100
- code: 'rate_limit_exceeded',
101
- message: `Rate limit exceeded. ${limit} requests per minute allowed for public workspace lookups.`,
102
- },
103
- }, 429);
88
+ return jsonError(c, 'rate_limit_exceeded', `Rate limit exceeded. ${limit} requests per minute allowed for public workspace lookups.`, 429);
104
89
  }
105
90
  }
106
91
  await next();
@@ -108,9 +93,9 @@ const publicWorkspaceLookupRateLimit = createMiddleware(async (c, next) => {
108
93
  // POST /workspaces - create workspace (no auth required, workspace key optional)
109
94
  workspaceRoutes.post('/workspaces', async (c) => {
110
95
  try {
111
- const parsed = createWorkspaceSchema.safeParse(await c.req.json());
112
- if (!parsed.success) {
113
- return c.json({ ok: false, error: { code: 'invalid_request', message: 'name is required' } }, 400);
96
+ const parsed = await parseJsonBody(c, createWorkspaceSchema, 'name is required');
97
+ if (!parsed.ok) {
98
+ return parsed.response;
114
99
  }
115
100
  const { name } = parsed.data;
116
101
  const db = c.get('db');
@@ -121,7 +106,7 @@ workspaceRoutes.post('/workspaces', async (c) => {
121
106
  created_via: 'api',
122
107
  });
123
108
  }
124
- return c.json({ ok: true, data: result.workspace }, result.created ? 201 : 200);
109
+ return result.created ? jsonCreated(c, result.workspace) : jsonOk(c, result.workspace);
125
110
  }
126
111
  catch (err) {
127
112
  return errorResponse(c, err);
@@ -133,9 +118,9 @@ workspaceRoutes.get('/workspaces/by-name/:name', publicWorkspaceLookupRateLimit,
133
118
  const db = c.get('db');
134
119
  const workspace = await workspaceEngine.getWorkspaceByName(db, c.req.param('name'));
135
120
  if (!workspace) {
136
- return c.json({ ok: false, error: { code: 'workspace_not_found', message: 'Workspace not found' } }, 404);
121
+ return workspaceNotFound(c);
137
122
  }
138
- return c.json({ ok: true, data: workspace });
123
+ return jsonOk(c, workspace);
139
124
  }
140
125
  catch (err) {
141
126
  return errorResponse(c, err);
@@ -147,9 +132,9 @@ workspaceRoutes.get('/workspace', requireWorkspaceKey, rateLimit, async (c) => {
147
132
  const db = c.get('db');
148
133
  const workspace = await workspaceEngine.getWorkspace(db, c.get('workspace').id);
149
134
  if (!workspace) {
150
- return c.json({ ok: false, error: { code: 'workspace_not_found', message: 'Workspace not found' } }, 404);
135
+ return workspaceNotFound(c);
151
136
  }
152
- return c.json({ ok: true, data: workspace });
137
+ return jsonOk(c, workspace);
153
138
  }
154
139
  catch (err) {
155
140
  return errorResponse(c, err);
@@ -160,20 +145,20 @@ workspaceRoutes.patch('/workspace', requireWorkspaceKey, rateLimit, async (c) =>
160
145
  try {
161
146
  const db = c.get('db');
162
147
  const workspace = c.get('workspace');
163
- const parsed = updateWorkspaceSchema.safeParse(await c.req.json());
164
- if (!parsed.success) {
165
- return c.json({ ok: false, error: { code: 'invalid_request', message: 'invalid workspace update body' } }, 400);
148
+ const parsed = await parseJsonBody(c, updateWorkspaceSchema, 'invalid workspace update body');
149
+ if (!parsed.ok) {
150
+ return parsed.response;
166
151
  }
167
152
  const body = parsed.data;
168
153
  const updated = await workspaceEngine.updateWorkspace(db, workspace.id, body);
169
154
  if (!updated) {
170
- return c.json({ ok: false, error: { code: 'workspace_not_found', message: 'Workspace not found' } }, 404);
155
+ return workspaceNotFound(c);
171
156
  }
172
157
  emitServerEvent(c, workspace.id, 'relaycast_server_workspace_updated', {
173
158
  changed_name: typeof body?.name === 'string',
174
159
  changed_system_prompt: typeof body?.system_prompt === 'string',
175
160
  });
176
- return c.json({ ok: true, data: updated });
161
+ return jsonOk(c, updated);
177
162
  }
178
163
  catch (err) {
179
164
  return errorResponse(c, err);
@@ -188,7 +173,7 @@ workspaceRoutes.delete('/workspace', requireWorkspaceKey, rateLimit, async (c) =
188
173
  emitServerEvent(c, workspace.id, 'relaycast_server_workspace_deleted', {
189
174
  deleted_via: 'api',
190
175
  });
191
- return c.body(null, 204);
176
+ return jsonNoContent(c);
192
177
  }
193
178
  catch (err) {
194
179
  return errorResponse(c, err);
@@ -199,10 +184,13 @@ workspaceRoutes.get('/activity', requireWorkspaceKey, rateLimit, async (c) => {
199
184
  try {
200
185
  const db = c.get('db');
201
186
  const workspace = c.get('workspace');
202
- const limitStr = c.req.query('limit');
203
- const limit = limitStr ? parseInt(limitStr, 10) : 20;
187
+ const parsed = parseQueryParams(c, activityQuerySchema, 'Invalid activity query');
188
+ if (!parsed.ok) {
189
+ return parsed.response;
190
+ }
191
+ const { limit } = parsed.data;
204
192
  const items = await activityEngine.getActivityFeed(db, workspace.id, limit);
205
- return c.json({ ok: true, data: items });
193
+ return jsonOk(c, items);
206
194
  }
207
195
  catch (err) {
208
196
  return errorResponse(c, err);
@@ -214,7 +202,7 @@ workspaceRoutes.get('/dm/conversations/all', requireWorkspaceKey, rateLimit, asy
214
202
  const db = c.get('db');
215
203
  const workspace = c.get('workspace');
216
204
  const conversations = await dmAllEngine.listAllDmConversations(db, workspace.id);
217
- return c.json({ ok: true, data: conversations });
205
+ return jsonOk(c, conversations);
218
206
  }
219
207
  catch (err) {
220
208
  return errorResponse(c, err);
@@ -226,12 +214,13 @@ workspaceRoutes.get('/dm/conversations/:conversation_id/messages', requireWorksp
226
214
  const db = c.get('db');
227
215
  const workspace = c.get('workspace');
228
216
  const conversationId = c.req.param('conversation_id');
229
- const limitStr = c.req.query('limit');
230
- const limit = limitStr ? parseInt(limitStr, 10) : undefined;
231
- const before = c.req.query('before') || undefined;
232
- const after = c.req.query('after') || undefined;
217
+ const query = parsePaginationQuery(c);
218
+ if (!query.ok) {
219
+ return query.response;
220
+ }
221
+ const { limit, before, after } = query.data;
233
222
  const msgs = await dmAllEngine.getDmMessagesForWorkspace(db, workspace.id, conversationId, { limit, before, after });
234
- return c.json({ ok: true, data: msgs });
223
+ return jsonOk(c, msgs);
235
224
  }
236
225
  catch (err) {
237
226
  return errorResponse(c, err);
@@ -246,180 +235,10 @@ workspaceRoutes.post('/agents/:name/rotate-token', requireWorkspaceKey, rateLimi
246
235
  emitServerEvent(c, workspace.id, 'relaycast_server_agent_token_rotated', {
247
236
  agent_name: c.req.param('name'),
248
237
  });
249
- return c.json({ ok: true, data: result });
238
+ return jsonOk(c, result);
250
239
  }
251
240
  catch (err) {
252
241
  return errorResponse(c, err);
253
242
  }
254
243
  });
255
- // GET /workspace/stream - get workspace stream effective config
256
- workspaceRoutes.get('/workspace/stream', requireWorkspaceKey, rateLimit, async (c) => {
257
- const logger = getRequestLogger(c, 'workspace.stream.get');
258
- const workspaceId = c.get('workspace').id;
259
- try {
260
- const { kv, config: engineConfig } = c.get('engine');
261
- const config = await getWorkspaceStreamConfig(kv, workspaceId, engineConfig.workspaceStreamEnabled ?? false);
262
- return c.json({
263
- ok: true,
264
- data: {
265
- enabled: config.enabled,
266
- default_enabled: config.defaultEnabled,
267
- override: config.override,
268
- },
269
- });
270
- }
271
- catch (err) {
272
- const error = asCodedError(err);
273
- logger.error('Failed to get stream config', {
274
- workspaceId,
275
- code: error.code,
276
- status: error.status,
277
- ...toErrorDetails(error),
278
- });
279
- return c.json({
280
- ok: false,
281
- error: { code: error.code || 'internal_error', message: error.message },
282
- }, (error.status || 500));
283
- }
284
- });
285
- // PUT /workspace/stream - set workspace stream override
286
- workspaceRoutes.put('/workspace/stream', requireWorkspaceKey, rateLimit, async (c) => {
287
- const logger = getRequestLogger(c, 'workspace.stream.put');
288
- const workspaceId = c.get('workspace').id;
289
- try {
290
- const parsed = updateWorkspaceStreamSchema.safeParse(await c.req.json());
291
- if (!parsed.success) {
292
- return c.json({
293
- ok: false,
294
- error: { code: 'invalid_request', message: 'Provide { enabled: boolean } or { mode: "inherit" }' },
295
- }, 400);
296
- }
297
- const body = parsed.data;
298
- let override;
299
- if (body?.mode === 'inherit') {
300
- override = null;
301
- }
302
- else if (typeof body?.enabled === 'boolean') {
303
- override = body.enabled;
304
- }
305
- else {
306
- return c.json({
307
- ok: false,
308
- error: { code: 'invalid_request', message: 'Provide { enabled: boolean } or { mode: "inherit" }' },
309
- }, 400);
310
- }
311
- const { kv, config: engineConfig } = c.get('engine');
312
- await setWorkspaceStreamOverride(kv, workspaceId, override);
313
- const config = await getWorkspaceStreamConfig(kv, workspaceId, engineConfig.workspaceStreamEnabled ?? false);
314
- emitServerEvent(c, workspaceId, 'relaycast_server_workspace_stream_updated', {
315
- stream_mode: override === null ? 'inherit' : (override ? 'enabled' : 'disabled'),
316
- });
317
- return c.json({
318
- ok: true,
319
- data: {
320
- enabled: config.enabled,
321
- default_enabled: config.defaultEnabled,
322
- override: config.override,
323
- },
324
- });
325
- }
326
- catch (err) {
327
- const error = asCodedError(err);
328
- logger.error('Failed to update stream config', {
329
- workspaceId,
330
- code: error.code,
331
- status: error.status,
332
- ...toErrorDetails(error),
333
- });
334
- return c.json({
335
- ok: false,
336
- error: { code: error.code || 'internal_error', message: error.message },
337
- }, (error.status || 500));
338
- }
339
- });
340
- // GET /workspace/fleet-nodes - effective fleet node control rollout flag (Phase 6)
341
- workspaceRoutes.get('/workspace/fleet-nodes', requireWorkspaceKey, rateLimit, async (c) => {
342
- const logger = getRequestLogger(c, 'workspace.fleet_nodes.get');
343
- const workspaceId = c.get('workspace').id;
344
- try {
345
- const { kv, config: engineConfig } = c.get('engine');
346
- const config = await getFleetNodesConfig(kv, workspaceId, engineConfig.fleetNodesEnabled ?? false);
347
- return c.json({
348
- ok: true,
349
- data: {
350
- enabled: config.enabled,
351
- default_enabled: config.defaultEnabled,
352
- override: config.override,
353
- },
354
- });
355
- }
356
- catch (err) {
357
- const error = asCodedError(err);
358
- logger.error('Failed to get fleet nodes config', {
359
- workspaceId,
360
- code: error.code,
361
- status: error.status,
362
- ...toErrorDetails(error),
363
- });
364
- return c.json({
365
- ok: false,
366
- error: { code: error.code || 'internal_error', message: error.message },
367
- }, (error.status || 500));
368
- }
369
- });
370
- // PUT /workspace/fleet-nodes - set the per-workspace fleet node control override
371
- workspaceRoutes.put('/workspace/fleet-nodes', requireWorkspaceKey, rateLimit, async (c) => {
372
- const logger = getRequestLogger(c, 'workspace.fleet_nodes.put');
373
- const workspaceId = c.get('workspace').id;
374
- try {
375
- const parsed = updateFleetNodesSchema.safeParse(await c.req.json());
376
- if (!parsed.success) {
377
- return c.json({
378
- ok: false,
379
- error: { code: 'invalid_request', message: 'Provide { enabled: boolean } or { mode: "inherit" }' },
380
- }, 400);
381
- }
382
- const body = parsed.data;
383
- let override;
384
- if (body?.mode === 'inherit') {
385
- override = null;
386
- }
387
- else if (typeof body?.enabled === 'boolean') {
388
- override = body.enabled;
389
- }
390
- else {
391
- return c.json({
392
- ok: false,
393
- error: { code: 'invalid_request', message: 'Provide { enabled: boolean } or { mode: "inherit" }' },
394
- }, 400);
395
- }
396
- const { kv, config: engineConfig } = c.get('engine');
397
- await setFleetNodesOverride(kv, workspaceId, override);
398
- const config = await getFleetNodesConfig(kv, workspaceId, engineConfig.fleetNodesEnabled ?? false);
399
- emitServerEvent(c, workspaceId, 'relaycast_server_workspace_fleet_nodes_updated', {
400
- fleet_nodes_mode: override === null ? 'inherit' : (override ? 'enabled' : 'disabled'),
401
- });
402
- return c.json({
403
- ok: true,
404
- data: {
405
- enabled: config.enabled,
406
- default_enabled: config.defaultEnabled,
407
- override: config.override,
408
- },
409
- });
410
- }
411
- catch (err) {
412
- const error = asCodedError(err);
413
- logger.error('Failed to update fleet nodes config', {
414
- workspaceId,
415
- code: error.code,
416
- status: error.status,
417
- ...toErrorDetails(error),
418
- });
419
- return c.json({
420
- ok: false,
421
- error: { code: error.code || 'internal_error', message: error.message },
422
- }, (error.status || 500));
423
- }
424
- });
425
244
  //# sourceMappingURL=workspace.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/routes/workspace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/routes/workspace.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@relaycast/engine",
3
- "version": "4.2.0",
3
+ "version": "5.0.0",
4
4
  "type": "module",
5
5
  "description": "Portable, platform-agnostic engine for Relaycast — channels, threads, DMs, presence, real-time events. Runs on Node + SQLite (self-host) or behind a Cloudflare Durable Object adapter (hosted).",
6
6
  "bin": {
@@ -43,8 +43,8 @@
43
43
  },
44
44
  "dependencies": {
45
45
  "@hono/node-server": "^1.13.7",
46
- "@relaycast/a2a": "4.2.0",
47
- "@relaycast/types": "4.2.0",
46
+ "@relaycast/a2a": "5.0.0",
47
+ "@relaycast/types": "5.0.0",
48
48
  "better-sqlite3": "^11.10.0",
49
49
  "drizzle-orm": "^0.45.1",
50
50
  "hono": "^4.11.9",
@@ -1,9 +0,0 @@
1
- import type { KeyValueStore } from '../ports/kv.js';
2
- export declare function getFleetNodesConfig(kv: KeyValueStore, workspaceId: string, defaultEnabled?: boolean): Promise<{
3
- enabled: boolean;
4
- defaultEnabled: boolean;
5
- override: boolean | null;
6
- }>;
7
- export declare function isFleetNodesEnabled(kv: KeyValueStore, workspaceId: string, defaultEnabled?: boolean): Promise<boolean>;
8
- export declare function setFleetNodesOverride(kv: KeyValueStore, workspaceId: string, override: boolean | null): Promise<void>;
9
- //# sourceMappingURL=fleetNodes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fleetNodes.d.ts","sourceRoot":"","sources":["../../src/lib/fleetNodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAyCpD,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,aAAa,EACjB,WAAW,EAAE,MAAM,EACnB,cAAc,GAAE,OAAyB,GACxC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAA;CAAE,CAAC,CAuBlF;AAED,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,aAAa,EACjB,WAAW,EAAE,MAAM,EACnB,cAAc,GAAE,OAAyB,GACxC,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,aAAa,EACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,OAAO,GAAG,IAAI,GACvB,OAAO,CAAC,IAAI,CAAC,CAQf"}
@@ -1,66 +0,0 @@
1
- /**
2
- * Per-workspace rollout flag for the fleet node control surface (Phase 6).
3
- *
4
- * The node registry, node control WS, declarative triggers, and spawn/node-action
5
- * placement are all gated behind this flag so the feature can be dark-launched and
6
- * enabled workspace-by-workspace during migration. The default is OFF: a workspace
7
- * with no explicit override inherits the engine-wide default
8
- * (`EngineConfig.fleetNodesEnabled`, also false unless the deployment opts in).
9
- *
10
- * Mirrors {@link ./workspaceStream.ts} — a KV override with a short in-memory cache,
11
- * so the hot paths (every message post, every node frame) pay at most one KV read
12
- * per workspace per {@link CACHE_TTL_MS} window.
13
- */
14
- const KEY_PREFIX = 'fleet-nodes-enabled:';
15
- const CACHE_TTL_MS = 10_000;
16
- const DEFAULT_ENABLED = false;
17
- const cache = new Map();
18
- function parseBool(value) {
19
- if (value == null)
20
- return null;
21
- const normalized = value.trim().toLowerCase();
22
- if (['1', 'true', 'yes', 'on'].includes(normalized))
23
- return true;
24
- if (['0', 'false', 'no', 'off'].includes(normalized))
25
- return false;
26
- return null;
27
- }
28
- function getKey(workspaceId) {
29
- return `${KEY_PREFIX}${workspaceId}`;
30
- }
31
- export async function getFleetNodesConfig(kv, workspaceId, defaultEnabled = DEFAULT_ENABLED) {
32
- const now = Date.now();
33
- const cached = cache.get(workspaceId);
34
- if (cached && cached.expiresAt > now && cached.defaultEnabled === defaultEnabled) {
35
- return {
36
- enabled: cached.enabled,
37
- defaultEnabled: cached.defaultEnabled,
38
- override: cached.override,
39
- };
40
- }
41
- const raw = await kv.get(getKey(workspaceId));
42
- const override = parseBool(raw);
43
- const enabled = override ?? defaultEnabled;
44
- cache.set(workspaceId, {
45
- enabled,
46
- defaultEnabled,
47
- override,
48
- expiresAt: now + CACHE_TTL_MS,
49
- });
50
- return { enabled, defaultEnabled, override };
51
- }
52
- export async function isFleetNodesEnabled(kv, workspaceId, defaultEnabled = DEFAULT_ENABLED) {
53
- const cfg = await getFleetNodesConfig(kv, workspaceId, defaultEnabled);
54
- return cfg.enabled;
55
- }
56
- export async function setFleetNodesOverride(kv, workspaceId, override) {
57
- const key = getKey(workspaceId);
58
- if (override === null) {
59
- await kv.delete(key);
60
- }
61
- else {
62
- await kv.put(key, override ? 'true' : 'false');
63
- }
64
- cache.delete(workspaceId);
65
- }
66
- //# sourceMappingURL=fleetNodes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fleetNodes.js","sourceRoot":"","sources":["../../src/lib/fleetNodes.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AAEH,MAAM,UAAU,GAAG,sBAAsB,CAAC;AAC1C,MAAM,YAAY,GAAG,MAAM,CAAC;AAC5B,MAAM,eAAe,GAAG,KAAK,CAAC;AAS9B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;AAE5C,SAAS,SAAS,CAAC,KAAgC;IACjD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IACjE,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IACnE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,MAAM,CAAC,WAAmB;IACjC,OAAO,GAAG,UAAU,GAAG,WAAW,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAiB,EACjB,WAAmB,EACnB,iBAA0B,eAAe;IAEzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACtC,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,GAAG,IAAI,MAAM,CAAC,cAAc,KAAK,cAAc,EAAE,CAAC;QACjF,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,QAAQ,IAAI,cAAc,CAAC;IAE3C,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE;QACrB,OAAO;QACP,cAAc;QACd,QAAQ;QACR,SAAS,EAAE,GAAG,GAAG,YAAY;KAC9B,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAiB,EACjB,WAAmB,EACnB,iBAA0B,eAAe;IAEzC,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,EAAE,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IACvE,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,EAAiB,EACjB,WAAmB,EACnB,QAAwB;IAExB,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAChC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC5B,CAAC"}
@@ -1,9 +0,0 @@
1
- import type { KeyValueStore } from '../ports/kv.js';
2
- export declare function getWorkspaceStreamConfig(kv: KeyValueStore, workspaceId: string, defaultEnabled?: boolean): Promise<{
3
- enabled: boolean;
4
- defaultEnabled: boolean;
5
- override: boolean | null;
6
- }>;
7
- export declare function isWorkspaceStreamEnabled(kv: KeyValueStore, workspaceId: string, defaultEnabled?: boolean): Promise<boolean>;
8
- export declare function setWorkspaceStreamOverride(kv: KeyValueStore, workspaceId: string, override: boolean | null): Promise<void>;
9
- //# sourceMappingURL=workspaceStream.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspaceStream.d.ts","sourceRoot":"","sources":["../../src/lib/workspaceStream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AA2BpD,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,aAAa,EACjB,WAAW,EAAE,MAAM,EACnB,cAAc,GAAE,OAAyB,GACxC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAA;CAAE,CAAC,CAuBlF;AAED,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,aAAa,EACjB,WAAW,EAAE,MAAM,EACnB,cAAc,GAAE,OAAyB,GACxC,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,aAAa,EACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,OAAO,GAAG,IAAI,GACvB,OAAO,CAAC,IAAI,CAAC,CAQf"}
@@ -1,53 +0,0 @@
1
- const KEY_PREFIX = 'workspace-stream:';
2
- const CACHE_TTL_MS = 10_000;
3
- const DEFAULT_ENABLED = false;
4
- const cache = new Map();
5
- function parseBool(value) {
6
- if (value == null)
7
- return null;
8
- const normalized = value.trim().toLowerCase();
9
- if (['1', 'true', 'yes', 'on'].includes(normalized))
10
- return true;
11
- if (['0', 'false', 'no', 'off'].includes(normalized))
12
- return false;
13
- return null;
14
- }
15
- function getKey(workspaceId) {
16
- return `${KEY_PREFIX}${workspaceId}`;
17
- }
18
- export async function getWorkspaceStreamConfig(kv, workspaceId, defaultEnabled = DEFAULT_ENABLED) {
19
- const now = Date.now();
20
- const cached = cache.get(workspaceId);
21
- if (cached && cached.expiresAt > now) {
22
- return {
23
- enabled: cached.enabled,
24
- defaultEnabled: cached.defaultEnabled,
25
- override: cached.override,
26
- };
27
- }
28
- const raw = await kv.get(getKey(workspaceId));
29
- const override = parseBool(raw);
30
- const enabled = override ?? defaultEnabled;
31
- cache.set(workspaceId, {
32
- enabled,
33
- defaultEnabled,
34
- override,
35
- expiresAt: now + CACHE_TTL_MS,
36
- });
37
- return { enabled, defaultEnabled, override };
38
- }
39
- export async function isWorkspaceStreamEnabled(kv, workspaceId, defaultEnabled = DEFAULT_ENABLED) {
40
- const cfg = await getWorkspaceStreamConfig(kv, workspaceId, defaultEnabled);
41
- return cfg.enabled;
42
- }
43
- export async function setWorkspaceStreamOverride(kv, workspaceId, override) {
44
- const key = getKey(workspaceId);
45
- if (override === null) {
46
- await kv.delete(key);
47
- }
48
- else {
49
- await kv.put(key, override ? 'true' : 'false');
50
- }
51
- cache.delete(workspaceId);
52
- }
53
- //# sourceMappingURL=workspaceStream.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspaceStream.js","sourceRoot":"","sources":["../../src/lib/workspaceStream.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG,mBAAmB,CAAC;AACvC,MAAM,YAAY,GAAG,MAAM,CAAC;AAC5B,MAAM,eAAe,GAAG,KAAK,CAAC;AAS9B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;AAE5C,SAAS,SAAS,CAAC,KAAgC;IACjD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IACjE,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IACnE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,MAAM,CAAC,WAAmB;IACjC,OAAO,GAAG,UAAU,GAAG,WAAW,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,EAAiB,EACjB,WAAmB,EACnB,iBAA0B,eAAe;IAEzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACtC,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;QACrC,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,QAAQ,IAAI,cAAc,CAAC;IAE3C,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE;QACrB,OAAO;QACP,cAAc;QACd,QAAQ;QACR,SAAS,EAAE,GAAG,GAAG,YAAY;KAC9B,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,EAAiB,EACjB,WAAmB,EACnB,iBAA0B,eAAe;IAEzC,MAAM,GAAG,GAAG,MAAM,wBAAwB,CAAC,EAAE,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IAC5E,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,EAAiB,EACjB,WAAmB,EACnB,QAAwB;IAExB,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAChC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC5B,CAAC"}
@@ -1,10 +0,0 @@
1
- import type { AppEnv } from '../env.js';
2
- /**
3
- * Gate the fleet node control surface behind the per-workspace rollout flag
4
- * (Phase 6). When the flag is off, the node roster routes behave as if the
5
- * surface does not exist — a flat 404 — so legacy clients and old brokers see
6
- * no behavioural change. Must run after auth middleware so `c.get('workspace')`
7
- * is populated.
8
- */
9
- export declare const requireFleetNodes: import("hono").MiddlewareHandler<AppEnv, string, {}, Response>;
10
- //# sourceMappingURL=fleetNodes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fleetNodes.d.ts","sourceRoot":"","sources":["../../src/middleware/fleetNodes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGxC;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,gEAU5B,CAAC"}
@@ -1,18 +0,0 @@
1
- import { createMiddleware } from 'hono/factory';
2
- import { isFleetNodesEnabled } from '../lib/fleetNodes.js';
3
- /**
4
- * Gate the fleet node control surface behind the per-workspace rollout flag
5
- * (Phase 6). When the flag is off, the node roster routes behave as if the
6
- * surface does not exist — a flat 404 — so legacy clients and old brokers see
7
- * no behavioural change. Must run after auth middleware so `c.get('workspace')`
8
- * is populated.
9
- */
10
- export const requireFleetNodes = createMiddleware(async (c, next) => {
11
- const workspace = c.get('workspace');
12
- const { kv, config } = c.get('engine');
13
- if (!workspace || !(await isFleetNodesEnabled(kv, workspace.id, config.fleetNodesEnabled ?? false))) {
14
- return c.json({ ok: false, error: { code: 'fleet_nodes_disabled', message: 'Fleet nodes are disabled for this workspace' } }, 404);
15
- }
16
- await next();
17
- });
18
- //# sourceMappingURL=fleetNodes.js.map