@relaycast/engine 5.1.0 → 6.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 (74) hide show
  1. package/dist/adapters/node/realtime.d.ts +28 -1
  2. package/dist/adapters/node/realtime.d.ts.map +1 -1
  3. package/dist/adapters/node/realtime.js +229 -50
  4. package/dist/adapters/node/realtime.js.map +1 -1
  5. package/dist/auth/tokenKind.d.ts +1 -1
  6. package/dist/auth/tokenKind.d.ts.map +1 -1
  7. package/dist/auth/tokenKind.js +4 -1
  8. package/dist/auth/tokenKind.js.map +1 -1
  9. package/dist/db/migrations/0028_node_providers.sql +55 -0
  10. package/dist/db/schema.d.ts +376 -0
  11. package/dist/db/schema.d.ts.map +1 -1
  12. package/dist/db/schema.js +59 -1
  13. package/dist/db/schema.js.map +1 -1
  14. package/dist/engine/action.d.ts +44 -1
  15. package/dist/engine/action.d.ts.map +1 -1
  16. package/dist/engine/action.js +237 -18
  17. package/dist/engine/action.js.map +1 -1
  18. package/dist/engine/delivery.d.ts.map +1 -1
  19. package/dist/engine/delivery.js +2 -1
  20. package/dist/engine/delivery.js.map +1 -1
  21. package/dist/engine/inboundWebhook.d.ts +24 -0
  22. package/dist/engine/inboundWebhook.d.ts.map +1 -1
  23. package/dist/engine/inboundWebhook.js +74 -0
  24. package/dist/engine/inboundWebhook.js.map +1 -1
  25. package/dist/engine/node.d.ts +71 -28
  26. package/dist/engine/node.d.ts.map +1 -1
  27. package/dist/engine/node.js +230 -106
  28. package/dist/engine/node.js.map +1 -1
  29. package/dist/engine/nodeContext.d.ts.map +1 -1
  30. package/dist/engine/nodeContext.js +17 -6
  31. package/dist/engine/nodeContext.js.map +1 -1
  32. package/dist/engine/nodeDeliver.d.ts.map +1 -1
  33. package/dist/engine/nodeDeliver.js +4 -1
  34. package/dist/engine/nodeDeliver.js.map +1 -1
  35. package/dist/engine/nodeProvider.d.ts +62 -0
  36. package/dist/engine/nodeProvider.d.ts.map +1 -0
  37. package/dist/engine/nodeProvider.js +256 -0
  38. package/dist/engine/nodeProvider.js.map +1 -0
  39. package/dist/engine.d.ts.map +1 -1
  40. package/dist/engine.js +2 -0
  41. package/dist/engine.js.map +1 -1
  42. package/dist/middleware/auth.d.ts +6 -0
  43. package/dist/middleware/auth.d.ts.map +1 -1
  44. package/dist/middleware/auth.js +6 -0
  45. package/dist/middleware/auth.js.map +1 -1
  46. package/dist/middleware/idempotency.d.ts +1 -0
  47. package/dist/middleware/idempotency.d.ts.map +1 -1
  48. package/dist/middleware/idempotency.js +21 -2
  49. package/dist/middleware/idempotency.js.map +1 -1
  50. package/dist/node-control.d.ts +1 -1
  51. package/dist/node-control.d.ts.map +1 -1
  52. package/dist/node-control.js +11 -1
  53. package/dist/node-control.js.map +1 -1
  54. package/dist/ports/auth.d.ts +1 -1
  55. package/dist/ports/auth.d.ts.map +1 -1
  56. package/dist/ports/index.d.ts +6 -0
  57. package/dist/ports/index.d.ts.map +1 -1
  58. package/dist/ports/realtime.d.ts +24 -2
  59. package/dist/ports/realtime.d.ts.map +1 -1
  60. package/dist/routes/deliveryRouting.d.ts +3 -1
  61. package/dist/routes/deliveryRouting.d.ts.map +1 -1
  62. package/dist/routes/deliveryRouting.js +14 -5
  63. package/dist/routes/deliveryRouting.js.map +1 -1
  64. package/dist/routes/message.d.ts.map +1 -1
  65. package/dist/routes/message.js +44 -14
  66. package/dist/routes/message.js.map +1 -1
  67. package/dist/routes/node.d.ts.map +1 -1
  68. package/dist/routes/node.js +89 -3
  69. package/dist/routes/node.js.map +1 -1
  70. package/dist/routes/relayfileInbound.d.ts +41 -0
  71. package/dist/routes/relayfileInbound.d.ts.map +1 -0
  72. package/dist/routes/relayfileInbound.js +446 -0
  73. package/dist/routes/relayfileInbound.js.map +1 -0
  74. package/package.json +3 -3
@@ -0,0 +1,446 @@
1
+ import { Hono } from 'hono';
2
+ import { z } from 'zod';
3
+ import { and, eq } from 'drizzle-orm';
4
+ import { channels } from '../db/schema.js';
5
+ import { requireWorkspaceKey } from '../middleware/auth.js';
6
+ import { rateLimit } from '../middleware/rateLimit.js';
7
+ import { jsonCreated, jsonError, jsonNotFound, jsonOk, parseJsonBody } from '../lib/httpResponse.js';
8
+ import { getRequestLogger } from '../lib/logger.js';
9
+ import { runIdempotent } from '../middleware/idempotency.js';
10
+ import * as inboundWebhookEngine from '../engine/inboundWebhook.js';
11
+ import { fanoutToChannel } from './fanout.js';
12
+ import { routeDeliveryOutcomes } from './deliveryRouting.js';
13
+ import { resolveMailboxConfig } from '../engine/mailboxConfig.js';
14
+ import { runInBackground } from './background.js';
15
+ import { sendWebhookEvent } from './webhookOutbox.js';
16
+ import { emitServerEvent } from '../lib/serverTelemetry.js';
17
+ export const relayfileInboundRoutes = new Hono();
18
+ const MAX_SKEW_MS = 5 * 60 * 1000;
19
+ const MAX_RELAYFILE_BODY_BYTES = 1024 * 1024;
20
+ const SECRET_LABEL = 'relayfile-inbound:v1';
21
+ const IDEMPOTENCY_TTL_SECONDS = 60 * 60 * 24 * 30;
22
+ const createTargetSchema = z.object({
23
+ channel: z.string().min(1),
24
+ provider: z.string().min(1),
25
+ path_glob: z.string().trim().min(1),
26
+ });
27
+ const relayfileSnapshotSchema = z.object({
28
+ path: z.string().optional(),
29
+ contentType: z.string().optional(),
30
+ encoding: z.string().optional(),
31
+ content: z.string().optional(),
32
+ truncated: z.boolean().optional(),
33
+ }).passthrough();
34
+ const relayfileEventSchema = z.object({
35
+ eventId: z.string().optional(),
36
+ type: z.string().optional(),
37
+ path: z.string().optional(),
38
+ revision: z.string().optional(),
39
+ origin: z.string().optional(),
40
+ provider: z.string().optional(),
41
+ correlationId: z.string().optional(),
42
+ timestamp: z.string().optional(),
43
+ contentHash: z.string().optional(),
44
+ snapshot: relayfileSnapshotSchema.optional(),
45
+ }).passthrough();
46
+ relayfileInboundRoutes.post('/integrations/relayfile/inbound-target', requireWorkspaceKey, rateLimit, async (c) => {
47
+ const parsed = await parseJsonBody(c, createTargetSchema, 'invalid relayfile inbound target body');
48
+ if (!parsed.ok)
49
+ return parsed.response;
50
+ const workspace = c.get('workspace');
51
+ const db = c.get('db');
52
+ const channel = await getChannelByName(db, workspace.id, parsed.data.channel);
53
+ if (!channel) {
54
+ return jsonNotFound(c, 'channel_not_found', `Channel "${parsed.data.channel}" not found`);
55
+ }
56
+ const master = c.get('engine').config?.relayfileInboundSecret?.trim();
57
+ if (!master) {
58
+ return jsonError(c, 'relayfile_inbound_unavailable', 'Relayfile inbound bridge is not configured', 503);
59
+ }
60
+ const provider = normalizeProvider(parsed.data.provider);
61
+ const pathGlob = normalizePathGlob(parsed.data.path_glob);
62
+ const secret = await deriveRelayfileInboundSecret(master, {
63
+ workspaceId: workspace.id,
64
+ channelId: channel.id,
65
+ provider,
66
+ pathGlob,
67
+ });
68
+ const url = new URL(`/v1/integrations/relayfile/inbound/${encodeURIComponent(workspace.id)}/${encodeURIComponent(channel.id)}`, c.req.url);
69
+ url.searchParams.set('provider', provider);
70
+ url.searchParams.set('path_glob', pathGlob);
71
+ return jsonCreated(c, {
72
+ url: url.toString(),
73
+ secret,
74
+ workspace_id: workspace.id,
75
+ channel_id: channel.id,
76
+ channel: channel.name,
77
+ provider,
78
+ path_glob: pathGlob,
79
+ });
80
+ });
81
+ relayfileInboundRoutes.post('/integrations/relayfile/inbound/:workspaceId/:channelId', async (c) => {
82
+ const logger = getRequestLogger(c, 'relayfile.inbound');
83
+ const workspaceId = c.req.param('workspaceId');
84
+ const channelId = c.req.param('channelId');
85
+ const provider = normalizeProvider(c.req.query('provider') ?? '');
86
+ const rawPathGlob = c.req.query('path_glob')?.trim();
87
+ if (!workspaceId || !channelId || !provider || !rawPathGlob) {
88
+ return jsonError(c, 'bad_request', 'missing relayfile inbound route parameters', 400);
89
+ }
90
+ const pathGlob = normalizePathGlob(rawPathGlob);
91
+ const master = c.get('engine').config?.relayfileInboundSecret?.trim();
92
+ if (!master) {
93
+ return jsonError(c, 'relayfile_inbound_unavailable', 'Relayfile inbound bridge is not configured', 503);
94
+ }
95
+ const rawBodyResult = await readRequestBodyWithLimit(c.req.raw, MAX_RELAYFILE_BODY_BYTES);
96
+ if (!rawBodyResult.ok) {
97
+ return jsonError(c, 'payload_too_large', 'relayfile event body exceeds maximum size', 413);
98
+ }
99
+ const rawBody = rawBodyResult.body;
100
+ const secret = await deriveRelayfileInboundSecret(master, { workspaceId, channelId, provider, pathGlob });
101
+ const verified = await verifyRelayfileSignature(c.req.raw.headers, rawBody, secret, Date.now());
102
+ if (!verified.ok) {
103
+ logger.warn('relayfile inbound signature rejected', { workspace_id: workspaceId, channel_id: channelId, reason: verified.reason });
104
+ return jsonError(c, 'unauthorized', 'invalid relayfile signature', 401);
105
+ }
106
+ let parsedEvent;
107
+ try {
108
+ parsedEvent = JSON.parse(new TextDecoder().decode(rawBody));
109
+ }
110
+ catch {
111
+ return jsonError(c, 'bad_request', 'invalid relayfile event body', 400);
112
+ }
113
+ const eventResult = relayfileEventSchema.safeParse(parsedEvent);
114
+ if (!eventResult.success) {
115
+ return jsonError(c, 'bad_request', 'invalid relayfile event body', 400);
116
+ }
117
+ const event = eventResult.data;
118
+ const deliveryEventId = c.req.header('X-Relay-Event-Id')?.trim() || event.eventId;
119
+ // Without a stable dedupe key we cannot make delivery idempotent, so a
120
+ // relayfile-cloud retry/redelivery would inject the message twice. Skip
121
+ // cleanly (2xx) rather than inject un-deduplicated. relayfile-cloud always
122
+ // sends X-Relay-Event-Id, so this only trips on malformed deliveries.
123
+ if (!deliveryEventId) {
124
+ logger.warn('relayfile inbound missing event id', { workspace_id: workspaceId, channel_id: channelId });
125
+ return jsonOk(c, { skipped: 'missing_event_id' });
126
+ }
127
+ if (!event.path || !event.type) {
128
+ return jsonOk(c, { skipped: 'missing_event_fields' });
129
+ }
130
+ if (event.provider && normalizeProvider(event.provider) !== provider) {
131
+ return jsonOk(c, { skipped: 'provider_mismatch' });
132
+ }
133
+ if (!eventMatchesGlob(event.path, pathGlob)) {
134
+ return jsonOk(c, { skipped: 'path_mismatch' });
135
+ }
136
+ if (event.origin === 'agent_write') {
137
+ return jsonOk(c, { skipped: 'agent_write' });
138
+ }
139
+ if (event.type !== 'file.created' && event.type !== 'file.updated') {
140
+ return jsonOk(c, { skipped: 'ignored_event_type' });
141
+ }
142
+ const channel = await getChannelById(c.get('db'), workspaceId, channelId);
143
+ if (!channel) {
144
+ return jsonOk(c, { skipped: 'channel_not_found' });
145
+ }
146
+ const message = formatRelayfileEventMessage(event, provider);
147
+ if (!message) {
148
+ return jsonOk(c, { skipped: 'unformatted_event' });
149
+ }
150
+ const mailbox = resolveMailboxConfig(c.get('engine').config, workspaceId);
151
+ try {
152
+ const result = await runIdempotent({
153
+ workspaceId,
154
+ actorId: 'relayfile-inbound',
155
+ scope: `relayfile-inbound:${channelId}`,
156
+ key: deliveryEventId,
157
+ fingerprint: JSON.stringify({ path: event.path, revision: event.revision, contentHash: event.contentHash }),
158
+ kv: c.get('engine').kv,
159
+ requireKv: true,
160
+ ttlSeconds: IDEMPOTENCY_TTL_SECONDS,
161
+ operation: () => inboundWebhookEngine.triggerIntegrationMessage(c.get('db'), workspaceId, channelId, {
162
+ text: message.text,
163
+ source: `relayfile:${provider}`,
164
+ author: message.author,
165
+ webhookId: `relayfile:${provider}`,
166
+ webhookName: `Relayfile ${provider}`,
167
+ payload: {
168
+ relayfile: {
169
+ workspaceId: eventWorkspaceId(event),
170
+ path: event.path,
171
+ revision: event.revision,
172
+ eventId: deliveryEventId,
173
+ provider,
174
+ contentHash: event.contentHash,
175
+ },
176
+ provider,
177
+ path: event.path,
178
+ event: event.type,
179
+ record: message.record,
180
+ },
181
+ }, { mailbox }),
182
+ });
183
+ if (!result.replayed) {
184
+ const eventData = {
185
+ id: result.data.message_id,
186
+ channel: result.data.channel,
187
+ channel_name: result.data.channel,
188
+ channel_id: result.data.channel_id,
189
+ text: result.data.text,
190
+ created_at: result.data.created_at,
191
+ from_name: result.data.author,
192
+ metadata: result.data.metadata,
193
+ };
194
+ try {
195
+ await sendWebhookEvent(c, { type: 'message.created', workspaceId, data: eventData });
196
+ }
197
+ catch (err) {
198
+ logger.error('relayfile inbound outbox enqueue failed', {
199
+ workspace_id: workspaceId,
200
+ channel_id: channelId,
201
+ provider,
202
+ error: err instanceof Error ? err.message : String(err),
203
+ });
204
+ }
205
+ // Fan out to workspace-stream subscribers (dashboard/websocket) and
206
+ // dispatch the computed mailbox deliveries to node-connected (broker)
207
+ // agents. Without routeDeliveryOutcomes, fanoutToChannel alone reaches only
208
+ // workspace-stream subscribers and node agents get nothing. Both run in the
209
+ // background so a delivery-routing hiccup never fails the ingress — it must
210
+ // return 2xx fast, since the transport retries (and eventually DLQs) non-2xx.
211
+ runInBackground(c, fanoutToChannel(c, channelId, 'message.created', eventData, workspaceId), 'relayfile inbound fanout');
212
+ const deliveries = result.data._deliveries;
213
+ if (deliveries && deliveries.length > 0) {
214
+ runInBackground(c, routeDeliveryOutcomes(c, deliveries, 'message.created', eventData, { workspaceId }), 'relayfile inbound deliveries');
215
+ }
216
+ emitServerEvent(c, workspaceId, 'relaycast_server_relayfile_inbound_delivered', {
217
+ channel_id: channelId,
218
+ message_id: result.data.message_id,
219
+ provider,
220
+ });
221
+ }
222
+ return jsonCreated(c, { replayed: result.replayed, message_id: result.data.message_id });
223
+ }
224
+ catch (err) {
225
+ const code = err.code;
226
+ if (code === 'idempotency_in_progress') {
227
+ return jsonOk(c, { skipped: 'duplicate_in_progress' });
228
+ }
229
+ if (code === 'idempotency_key_reused') {
230
+ logger.warn('relayfile inbound event id reused with different payload', { workspace_id: workspaceId, event_id: deliveryEventId });
231
+ return jsonOk(c, { skipped: 'event_id_reused' });
232
+ }
233
+ if (code === 'idempotency_unavailable') {
234
+ logger.error('relayfile inbound idempotency storage unavailable', { workspace_id: workspaceId, event_id: deliveryEventId });
235
+ return jsonError(c, 'idempotency_unavailable', 'idempotency storage unavailable', 503);
236
+ }
237
+ logger.error('relayfile inbound delivery failed', {
238
+ workspace_id: workspaceId,
239
+ channel_id: channelId,
240
+ provider,
241
+ error: err instanceof Error ? err.message : String(err),
242
+ });
243
+ // Unknown failures here mean the message insert / delivery-row write itself
244
+ // failed — most likely transient (DB/infra), not a poison payload. Return 5xx
245
+ // so relayfile-cloud's queue consumer retries (and eventually DLQs) instead of
246
+ // recording the drop as a successful 2xx and silently losing the message.
247
+ return jsonError(c, 'delivery_failed', 'inbound delivery failed', 500);
248
+ }
249
+ });
250
+ async function getChannelByName(db, workspaceId, name) {
251
+ const [row] = await db
252
+ .select({ id: channels.id, name: channels.name })
253
+ .from(channels)
254
+ .where(and(eq(channels.workspaceId, workspaceId), eq(channels.name, name)));
255
+ return row ?? null;
256
+ }
257
+ async function getChannelById(db, workspaceId, channelId) {
258
+ const [row] = await db
259
+ .select({ id: channels.id, name: channels.name })
260
+ .from(channels)
261
+ .where(and(eq(channels.workspaceId, workspaceId), eq(channels.id, channelId)));
262
+ return row ?? null;
263
+ }
264
+ export async function deriveRelayfileInboundSecret(master, input) {
265
+ const label = `${SECRET_LABEL}:${input.workspaceId}:${input.channelId}:${normalizeProvider(input.provider)}:${normalizePathGlob(input.pathGlob)}`;
266
+ const key = await crypto.subtle.importKey('raw', new TextEncoder().encode(master), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
267
+ const signed = await crypto.subtle.sign('HMAC', key, new TextEncoder().encode(label));
268
+ return bytesToHex(new Uint8Array(signed));
269
+ }
270
+ export async function verifyRelayfileSignature(headers, body, secret, nowMs = Date.now()) {
271
+ const timestamp = headers.get('X-Relay-Timestamp')?.trim() ?? '';
272
+ const signature = headers.get('X-Relay-Signature')?.trim().toLowerCase() ?? '';
273
+ if (!timestamp || !signature)
274
+ return { ok: false, reason: 'missing_headers' };
275
+ const timestampMs = parseRelayTimestamp(timestamp);
276
+ if (!Number.isFinite(timestampMs))
277
+ return { ok: false, reason: 'invalid_timestamp' };
278
+ if (Math.abs(nowMs - timestampMs) > MAX_SKEW_MS)
279
+ return { ok: false, reason: 'timestamp_skew' };
280
+ const providedHex = signature.startsWith('sha256=') ? signature.slice('sha256='.length) : signature;
281
+ const provided = hexToBytes(providedHex);
282
+ if (!provided)
283
+ return { ok: false, reason: 'invalid_signature_encoding' };
284
+ const key = await crypto.subtle.importKey('raw', new TextEncoder().encode(secret), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
285
+ const prefix = new TextEncoder().encode(`${timestamp}.`);
286
+ const data = new Uint8Array(prefix.length + body.byteLength);
287
+ data.set(prefix);
288
+ data.set(new Uint8Array(body), prefix.length);
289
+ const signed = await crypto.subtle.sign('HMAC', key, data);
290
+ if (!constantTimeEqual(provided, new Uint8Array(signed)))
291
+ return { ok: false, reason: 'signature_mismatch' };
292
+ return { ok: true };
293
+ }
294
+ export function formatRelayfileEventMessage(event, provider) {
295
+ const record = parseSnapshotRecord(event.snapshot);
296
+ const author = recordAuthor(record) ?? provider;
297
+ const title = recordTitle(record);
298
+ const body = recordBody(record);
299
+ const providerLabel = provider.charAt(0).toUpperCase() + provider.slice(1);
300
+ const lines = [`${providerLabel} update`];
301
+ if (title)
302
+ lines.push(title);
303
+ if (body && body !== title)
304
+ lines.push(body);
305
+ lines.push(`Relayfile path: ${event.path}`);
306
+ return { text: lines.filter(Boolean).join('\n'), author, record };
307
+ }
308
+ function parseSnapshotRecord(snapshot) {
309
+ if (!snapshot?.content)
310
+ return null;
311
+ if (snapshot.encoding === 'base64')
312
+ return null;
313
+ const content = snapshot.content.trim();
314
+ if (!content)
315
+ return null;
316
+ try {
317
+ return JSON.parse(content);
318
+ }
319
+ catch {
320
+ return content.slice(0, 500);
321
+ }
322
+ }
323
+ function recordAuthor(record) {
324
+ const r = asRecord(record);
325
+ if (!r)
326
+ return null;
327
+ return firstString(r.author, r.author_name, r.user_name, r.username, asRecord(r.user)?.name, asRecord(r.user)?.login, asRecord(r.assignee)?.name);
328
+ }
329
+ function recordTitle(record) {
330
+ if (typeof record === 'string')
331
+ return record;
332
+ const r = asRecord(record);
333
+ if (!r)
334
+ return null;
335
+ const title = firstString(r.title, r.name, r.identifier, r.subject);
336
+ return title && title.length > 300 ? `${title.slice(0, 300)}...` : title;
337
+ }
338
+ function recordBody(record) {
339
+ const r = asRecord(record);
340
+ if (!r)
341
+ return null;
342
+ const text = firstString(r.text, r.body, r.description, r.message, r.content);
343
+ if (text && text.length > 1200)
344
+ return `${text.slice(0, 1200)}...`;
345
+ return text;
346
+ }
347
+ function firstString(...values) {
348
+ for (const value of values) {
349
+ if (typeof value === 'string' && value.trim())
350
+ return value.trim();
351
+ }
352
+ return null;
353
+ }
354
+ function asRecord(value) {
355
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : null;
356
+ }
357
+ function normalizeProvider(provider) {
358
+ return provider.trim().toLowerCase();
359
+ }
360
+ function normalizePathGlob(pathGlob) {
361
+ const trimmed = pathGlob.trim();
362
+ if (!trimmed || trimmed === '*')
363
+ return '/**';
364
+ return trimmed.startsWith('/') ? trimmed : `/${trimmed}`;
365
+ }
366
+ function eventMatchesGlob(path, glob) {
367
+ const normalizedPath = normalizePathGlob(path);
368
+ const normalizedGlob = normalizePathGlob(glob);
369
+ if (normalizedGlob === '/**' || normalizedGlob === normalizedPath)
370
+ return true;
371
+ if (normalizedGlob.endsWith('/**')) {
372
+ const prefix = normalizedGlob.slice(0, -'/**'.length);
373
+ return normalizedPath === prefix || normalizedPath.startsWith(`${prefix}/`);
374
+ }
375
+ if (normalizedGlob.endsWith('/*')) {
376
+ const prefix = normalizedGlob.slice(0, -'/*'.length);
377
+ const rest = normalizedPath.slice(prefix.length + 1);
378
+ return normalizedPath.startsWith(`${prefix}/`) && !rest.includes('/');
379
+ }
380
+ if (normalizedGlob.endsWith('*'))
381
+ return normalizedPath.startsWith(normalizedGlob.slice(0, -1));
382
+ return false;
383
+ }
384
+ function eventWorkspaceId(event) {
385
+ const correlation = event.correlationId ?? '';
386
+ return correlation.startsWith('workspace:') ? correlation.slice('workspace:'.length) : undefined;
387
+ }
388
+ async function readRequestBodyWithLimit(request, maxBytes) {
389
+ const contentLength = request.headers.get('content-length')?.trim();
390
+ if (contentLength && /^\d+$/.test(contentLength) && Number.parseInt(contentLength, 10) > maxBytes) {
391
+ return { ok: false };
392
+ }
393
+ if (!request.body)
394
+ return { ok: true, body: new ArrayBuffer(0) };
395
+ const reader = request.body.getReader();
396
+ const chunks = [];
397
+ let total = 0;
398
+ for (;;) {
399
+ const { done, value } = await reader.read();
400
+ if (done)
401
+ break;
402
+ total += value.byteLength;
403
+ if (total > maxBytes) {
404
+ await reader.cancel();
405
+ return { ok: false };
406
+ }
407
+ chunks.push(value);
408
+ }
409
+ const out = new Uint8Array(total);
410
+ let offset = 0;
411
+ for (const chunk of chunks) {
412
+ out.set(chunk, offset);
413
+ offset += chunk.byteLength;
414
+ }
415
+ return { ok: true, body: out.buffer };
416
+ }
417
+ function parseRelayTimestamp(timestamp) {
418
+ if (/^\d+$/.test(timestamp)) {
419
+ const seconds = Number.parseInt(timestamp, 10);
420
+ return seconds * 1000;
421
+ }
422
+ return Date.parse(timestamp);
423
+ }
424
+ function constantTimeEqual(a, b) {
425
+ let diff = a.length ^ b.length;
426
+ const len = Math.max(a.length, b.length);
427
+ for (let i = 0; i < len; i += 1) {
428
+ diff |= (a[i] ?? 0) ^ (b[i] ?? 0);
429
+ }
430
+ return diff === 0;
431
+ }
432
+ function bytesToHex(bytes) {
433
+ let out = '';
434
+ for (const b of bytes)
435
+ out += b.toString(16).padStart(2, '0');
436
+ return out;
437
+ }
438
+ function hexToBytes(hex) {
439
+ if (!hex || hex.length % 2 !== 0 || /[^0-9a-f]/.test(hex))
440
+ return null;
441
+ const out = new Uint8Array(hex.length / 2);
442
+ for (let i = 0; i < out.length; i += 1)
443
+ out[i] = Number.parseInt(hex.slice(i * 2, i * 2 + 2), 16);
444
+ return out;
445
+ }
446
+ //# sourceMappingURL=relayfileInbound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relayfileInbound.js","sourceRoot":"","sources":["../../src/routes/relayfileInbound.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@relaycast/engine",
3
- "version": "5.1.0",
3
+ "version": "6.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": {
@@ -59,8 +59,8 @@
59
59
  },
60
60
  "dependencies": {
61
61
  "@hono/node-server": "^1.13.7",
62
- "@relaycast/a2a": "5.1.0",
63
- "@relaycast/types": "5.1.0",
62
+ "@relaycast/a2a": "6.0.0",
63
+ "@relaycast/types": "6.0.0",
64
64
  "better-sqlite3": "^11.10.0",
65
65
  "drizzle-orm": "^0.45.1",
66
66
  "hono": "^4.11.9",