@relaycast/engine 8.0.5 → 8.0.7

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/files.d.ts +3 -0
  2. package/dist/adapters/node/files.d.ts.map +1 -1
  3. package/dist/adapters/node/files.js +10 -1
  4. package/dist/adapters/node/files.js.map +1 -1
  5. package/dist/adapters/node/index.d.ts.map +1 -1
  6. package/dist/adapters/node/index.js +14 -1
  7. package/dist/adapters/node/index.js.map +1 -1
  8. package/dist/db/migrations/0036_workspace_expiry.sql +3 -0
  9. package/dist/db/migrations/0037_file_cleanup_outbox.sql +36 -0
  10. package/dist/db/migrations/0038_session_ref_lookup.sql +58 -0
  11. package/dist/db/schema.d.ts +269 -1
  12. package/dist/db/schema.d.ts.map +1 -1
  13. package/dist/db/schema.js +47 -2
  14. package/dist/db/schema.js.map +1 -1
  15. package/dist/engine/delivery.d.ts.map +1 -1
  16. package/dist/engine/delivery.js +2 -0
  17. package/dist/engine/delivery.js.map +1 -1
  18. package/dist/engine/dm.d.ts.map +1 -1
  19. package/dist/engine/dm.js +15 -6
  20. package/dist/engine/dm.js.map +1 -1
  21. package/dist/engine/file.d.ts.map +1 -1
  22. package/dist/engine/file.js +5 -0
  23. package/dist/engine/file.js.map +1 -1
  24. package/dist/engine/groupDm.d.ts +3 -0
  25. package/dist/engine/groupDm.d.ts.map +1 -1
  26. package/dist/engine/groupDm.js +16 -1
  27. package/dist/engine/groupDm.js.map +1 -1
  28. package/dist/engine/inboundWebhook.d.ts.map +1 -1
  29. package/dist/engine/inboundWebhook.js +45 -19
  30. package/dist/engine/inboundWebhook.js.map +1 -1
  31. package/dist/engine/message.d.ts.map +1 -1
  32. package/dist/engine/message.js +8 -0
  33. package/dist/engine/message.js.map +1 -1
  34. package/dist/engine/messageMetadata.d.ts +2 -0
  35. package/dist/engine/messageMetadata.d.ts.map +1 -1
  36. package/dist/engine/messageMetadata.js +14 -0
  37. package/dist/engine/messageMetadata.js.map +1 -1
  38. package/dist/engine/retention.d.ts +16 -0
  39. package/dist/engine/retention.d.ts.map +1 -1
  40. package/dist/engine/retention.js +70 -0
  41. package/dist/engine/retention.js.map +1 -1
  42. package/dist/engine/sessionMessages.d.ts +28 -0
  43. package/dist/engine/sessionMessages.d.ts.map +1 -0
  44. package/dist/engine/sessionMessages.js +194 -0
  45. package/dist/engine/sessionMessages.js.map +1 -0
  46. package/dist/engine/thread.d.ts.map +1 -1
  47. package/dist/engine/thread.js +8 -0
  48. package/dist/engine/thread.js.map +1 -1
  49. package/dist/engine/workspace.d.ts +69 -3
  50. package/dist/engine/workspace.d.ts.map +1 -1
  51. package/dist/engine/workspace.js +234 -21
  52. package/dist/engine/workspace.js.map +1 -1
  53. package/dist/index.d.ts +2 -1
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +6 -1
  56. package/dist/index.js.map +1 -1
  57. package/dist/middleware/idempotency.d.ts +2 -0
  58. package/dist/middleware/idempotency.d.ts.map +1 -1
  59. package/dist/middleware/idempotency.js +7 -4
  60. package/dist/middleware/idempotency.js.map +1 -1
  61. package/dist/ports/files.d.ts +12 -3
  62. package/dist/ports/files.d.ts.map +1 -1
  63. package/dist/ports/index.d.ts +9 -0
  64. package/dist/ports/index.d.ts.map +1 -1
  65. package/dist/routes/groupDm.d.ts.map +1 -1
  66. package/dist/routes/groupDm.js +40 -5
  67. package/dist/routes/groupDm.js.map +1 -1
  68. package/dist/routes/message.d.ts.map +1 -1
  69. package/dist/routes/message.js +27 -3
  70. package/dist/routes/message.js.map +1 -1
  71. package/dist/routes/workspace.d.ts.map +1 -1
  72. package/dist/routes/workspace.js +38 -18
  73. package/dist/routes/workspace.js.map +1 -1
  74. package/package.json +3 -3
@@ -1,10 +1,15 @@
1
- import { and, eq } from 'drizzle-orm';
2
- import { workspaces, channels } from '../db/schema.js';
1
+ import { and, asc, eq, gt, inArray, isNull, like, lte, or, sql } from 'drizzle-orm';
2
+ import { workspaces, channels, fileCleanupQueue, workspaceEvents } from '../db/schema.js';
3
3
  import { randomHex, sha256Hex } from '../lib/crypto.js';
4
4
  import { generateId } from './snowflake.js';
5
5
  import { codedError } from '../lib/httpError.js';
6
6
  import { D1WriteRetryExhaustedError, retryD1Write } from '../lib/d1Retry.js';
7
7
  import { runAtomicWrites } from '../ports/database.js';
8
+ import { resolveEffectiveMessageRetention } from './retention.js';
9
+ export const DEFAULT_WORKSPACE_REAP_LIMIT = 25;
10
+ export const DEFAULT_FILE_CLEANUP_LIMIT = 90;
11
+ const MAX_FILE_CLEANUP_LIMIT = 90;
12
+ const FILE_CLEANUP_RETRY_MS = 30_000;
8
13
  function hashApiKey(apiKey) {
9
14
  return sha256Hex(apiKey);
10
15
  }
@@ -13,6 +18,7 @@ function buildWorkspaceResponse(workspace, apiKey) {
13
18
  workspace_id: workspace.id,
14
19
  ...(apiKey ? { api_key: apiKey } : {}),
15
20
  created_at: workspace.createdAt.toISOString(),
21
+ expires_at: workspace.expiresAt?.toISOString() ?? null,
16
22
  };
17
23
  }
18
24
  function isExpectedWorkspacePair(writeResult, expected) {
@@ -76,6 +82,7 @@ function isUniqueConstraintError(error) {
76
82
  export async function createWorkspace(db, name, options) {
77
83
  const providedOwnerApiKeyHash = typeof options === 'string' ? undefined : options?.ownerApiKeyHash;
78
84
  const providedOwnerApiKey = typeof options === 'string' ? options : options?.ownerApiKey;
85
+ const expiresAt = typeof options === 'string' ? undefined : options?.expiresAt;
79
86
  const derivedOwnerApiKeyHash = providedOwnerApiKey ? await hashApiKey(providedOwnerApiKey) : undefined;
80
87
  if (providedOwnerApiKeyHash && derivedOwnerApiKeyHash && providedOwnerApiKeyHash !== derivedOwnerApiKeyHash) {
81
88
  throw codedError('ownerApiKeyHash must match the provided ownerApiKey', 'invalid_owner_api_key_hash', 400);
@@ -86,7 +93,7 @@ export async function createWorkspace(db, name, options) {
86
93
  const [existing] = await db
87
94
  .select()
88
95
  .from(workspaces)
89
- .where(and(eq(workspaces.name, name), eq(workspaces.apiKeyHash, ownerApiKeyHash)));
96
+ .where(and(eq(workspaces.name, name), eq(workspaces.apiKeyHash, ownerApiKeyHash), or(isNull(workspaces.expiresAt), gt(workspaces.expiresAt, new Date()))));
90
97
  if (existing) {
91
98
  const workspace = buildWorkspaceResponse(existing, providedOwnerApiKey);
92
99
  return {
@@ -108,7 +115,7 @@ export async function createWorkspace(db, name, options) {
108
115
  return await runAtomicWrites(db, (writeDb) => [
109
116
  writeDb
110
117
  .insert(workspaces)
111
- .values({ id: workspaceId, name, apiKeyHash })
118
+ .values({ id: workspaceId, name, apiKeyHash, expiresAt })
112
119
  .returning(),
113
120
  writeDb
114
121
  .insert(channels)
@@ -188,13 +195,23 @@ export async function getWorkspaceByName(db, name) {
188
195
  created_at: workspace.createdAt.toISOString(),
189
196
  };
190
197
  }
191
- export async function getWorkspace(db, workspaceId) {
192
- const [workspace] = await db
193
- .select()
194
- .from(workspaces)
195
- .where(eq(workspaces.id, workspaceId));
198
+ export async function getWorkspace(db, workspaceId, deploymentMessageTtlDays) {
199
+ const [workspace] = await db.select().from(workspaces).where(eq(workspaces.id, workspaceId));
196
200
  if (!workspace)
197
201
  return null;
202
+ let effectiveMessageRetention;
203
+ try {
204
+ effectiveMessageRetention = await resolveEffectiveMessageRetention(db, workspaceId, deploymentMessageTtlDays);
205
+ }
206
+ catch {
207
+ effectiveMessageRetention = {
208
+ policy: 'unknown',
209
+ message_ttl_days: null,
210
+ retained_since: null,
211
+ source: 'unknown',
212
+ reason: 'boundary_unavailable',
213
+ };
214
+ }
198
215
  return {
199
216
  id: workspace.id,
200
217
  name: workspace.name,
@@ -202,16 +219,18 @@ export async function getWorkspace(db, workspaceId) {
202
219
  system_prompt: workspace.systemPrompt,
203
220
  created_at: workspace.createdAt.toISOString(),
204
221
  metadata: workspace.metadata,
222
+ effective_retention: { messages: effectiveMessageRetention },
223
+ expires_at: workspace.expiresAt?.toISOString() ?? null,
205
224
  };
206
225
  }
207
- export async function updateWorkspace(db, workspaceId, updates) {
226
+ export async function updateWorkspace(db, workspaceId, updates, deploymentMessageTtlDays) {
208
227
  const setClause = {};
209
228
  if (updates.name !== undefined)
210
229
  setClause.name = updates.name;
211
230
  if (updates.system_prompt !== undefined)
212
231
  setClause.systemPrompt = updates.system_prompt;
213
232
  if (Object.keys(setClause).length === 0) {
214
- return getWorkspace(db, workspaceId);
233
+ return getWorkspace(db, workspaceId, deploymentMessageTtlDays);
215
234
  }
216
235
  const [updated] = await db
217
236
  .update(workspaces)
@@ -220,16 +239,210 @@ export async function updateWorkspace(db, workspaceId, updates) {
220
239
  .returning();
221
240
  if (!updated)
222
241
  return null;
223
- return {
224
- id: updated.id,
225
- name: updated.name,
226
- plan: updated.plan,
227
- system_prompt: updated.systemPrompt,
228
- created_at: updated.createdAt.toISOString(),
229
- metadata: updated.metadata,
230
- };
242
+ return getWorkspace(db, updated.id, deploymentMessageTtlDays);
243
+ }
244
+ async function deleteWorkspaceBatch(db, storage, workspaceIds) {
245
+ if (workspaceIds.length === 0)
246
+ return [];
247
+ if (typeof storage.deleteObjects !== 'function') {
248
+ throw codedError('The configured file storage cannot delete workspace objects', 'file_storage_delete_unsupported', 503);
249
+ }
250
+ // Deleting the workspace cascades its file rows. Migration 0037's file
251
+ // trigger writes each storage key to the durable cleanup outbox in this same
252
+ // transaction, so database rollback can never strand retained rows whose
253
+ // blobs were already removed. SQLite/D1 write serialization also means a
254
+ // concurrent file insert either commits before this delete and is queued by
255
+ // the cascade, or observes the deleted workspace and fails its FK check.
256
+ try {
257
+ await retryD1Write(() => runAtomicWrites(db, (writeDb) => [
258
+ writeDb
259
+ .delete(workspaceEvents)
260
+ .where(inArray(workspaceEvents.workspaceId, workspaceIds)),
261
+ writeDb
262
+ .delete(workspaces)
263
+ .where(inArray(workspaces.id, workspaceIds)),
264
+ ], { requireAtomic: true }));
265
+ }
266
+ catch (cause) {
267
+ if (!(cause instanceof D1WriteRetryExhaustedError))
268
+ throw cause;
269
+ let committed = false;
270
+ let storageError = cause.storageError;
271
+ try {
272
+ const remaining = await db
273
+ .select({ id: workspaces.id })
274
+ .from(workspaces)
275
+ .where(inArray(workspaces.id, workspaceIds));
276
+ committed = remaining.length === 0;
277
+ }
278
+ catch {
279
+ storageError = 'readback_unavailable';
280
+ }
281
+ if (!committed) {
282
+ const error = codedError('Workspace storage temporarily unavailable', 'workspace_storage_unavailable', 503);
283
+ error.diagnostics = {
284
+ attempts: cause.attempts,
285
+ operation: 'workspace.delete',
286
+ storage_error: storageError,
287
+ };
288
+ throw error;
289
+ }
290
+ }
291
+ const deletedIds = workspaceIds;
292
+ // Best-effort immediate revocation keeps old GET URLs from reading existing
293
+ // bytes. The outbox row intentionally remains through the PUT URL's expiry,
294
+ // then a scheduled drain deletes once more to catch a late presigned upload.
295
+ // A storage failure is not surfaced as a failed workspace delete: the DB
296
+ // commit is authoritative and the durable row is retried by later drains.
297
+ try {
298
+ await deleteQueuedWorkspaceObjects(db, storage, deletedIds);
299
+ }
300
+ catch {
301
+ // The committed outbox is the source of truth after database deletion. A
302
+ // post-commit query/update failure must not turn a completed DELETE into a
303
+ // misleading error response; the maintenance drain will retry the row.
304
+ }
305
+ return deletedIds;
306
+ }
307
+ function cleanupErrorMessage(err) {
308
+ return err instanceof Error ? err.message : String(err);
309
+ }
310
+ async function markCleanupFailure(db, storageKeys, err, now) {
311
+ if (storageKeys.length === 0)
312
+ return true;
313
+ try {
314
+ await db
315
+ .update(fileCleanupQueue)
316
+ .set({
317
+ attempts: sql `${fileCleanupQueue.attempts} + 1`,
318
+ lastError: cleanupErrorMessage(err).slice(0, 2_000),
319
+ processAfter: new Date(now.getTime() + FILE_CLEANUP_RETRY_MS),
320
+ })
321
+ .where(inArray(fileCleanupQueue.storageKey, storageKeys));
322
+ return true;
323
+ }
324
+ catch {
325
+ // The cleanup rows were already committed with the workspace deletion.
326
+ // Preserve the original storage failure and let the next sweep retry even
327
+ // if recording diagnostics itself races a database outage. The caller
328
+ // stops its current loop so it cannot spin on the still-due rows.
329
+ return false;
330
+ }
331
+ }
332
+ async function deleteCleanupRows(db, storage, rows, now) {
333
+ if (rows.length === 0)
334
+ return { settled: 0, progressed: true };
335
+ const storageKeys = rows.map((row) => row.storageKey);
336
+ if (typeof storage.deleteObjects !== 'function') {
337
+ const error = codedError('The configured file storage cannot delete workspace objects', 'file_storage_delete_unsupported', 503);
338
+ return {
339
+ settled: 0,
340
+ progressed: await markCleanupFailure(db, storageKeys, error, now),
341
+ };
342
+ }
343
+ try {
344
+ await storage.deleteObjects({ storageKeys });
345
+ }
346
+ catch (err) {
347
+ return {
348
+ settled: 0,
349
+ progressed: await markCleanupFailure(db, storageKeys, err, now),
350
+ };
351
+ }
352
+ const settledKeys = rows
353
+ .filter((row) => row.deleteAfter.getTime() <= now.getTime())
354
+ .map((row) => row.storageKey);
355
+ const deferredKeys = rows
356
+ .filter((row) => row.deleteAfter.getTime() > now.getTime())
357
+ .map((row) => row.storageKey);
358
+ if (settledKeys.length > 0) {
359
+ await db.delete(fileCleanupQueue).where(inArray(fileCleanupQueue.storageKey, settledKeys));
360
+ }
361
+ if (deferredKeys.length > 0) {
362
+ await db
363
+ .update(fileCleanupQueue)
364
+ .set({
365
+ attempts: sql `${fileCleanupQueue.attempts} + 1`,
366
+ lastError: null,
367
+ processAfter: fileCleanupQueue.deleteAfter,
368
+ })
369
+ .where(inArray(fileCleanupQueue.storageKey, deferredKeys));
370
+ }
371
+ return { settled: settledKeys.length, progressed: true };
372
+ }
373
+ async function deleteQueuedWorkspaceObjects(db, storage, workspaceIds) {
374
+ if (workspaceIds.length === 0)
375
+ return;
376
+ const prefixConditions = workspaceIds.map((workspaceId) => like(fileCleanupQueue.storageKey, `${workspaceId}/%`));
377
+ const now = new Date();
378
+ for (;;) {
379
+ const rows = await db
380
+ .select({
381
+ storageKey: fileCleanupQueue.storageKey,
382
+ deleteAfter: fileCleanupQueue.deleteAfter,
383
+ })
384
+ .from(fileCleanupQueue)
385
+ .where(and(or(...prefixConditions), lte(fileCleanupQueue.processAfter, now)))
386
+ .orderBy(asc(fileCleanupQueue.processAfter), asc(fileCleanupQueue.storageKey))
387
+ .limit(MAX_FILE_CLEANUP_LIMIT);
388
+ if (rows.length === 0)
389
+ return;
390
+ const result = await deleteCleanupRows(db, storage, rows, now);
391
+ if (!result.progressed)
392
+ return;
393
+ }
394
+ }
395
+ /**
396
+ * Retry durable blob tombstones that are due for an immediate attempt, a
397
+ * storage-failure retry, or the final pass after the last upload capability
398
+ * expires. Hosts should run this from their maintenance schedule; the Node
399
+ * adapter does so every 15 seconds. Deletion is idempotent, making overlapping
400
+ * sweepers safe.
401
+ */
402
+ export async function drainFileCleanup(db, storage, options = {}) {
403
+ const now = options.now ?? new Date();
404
+ const requestedLimit = options.limit ?? DEFAULT_FILE_CLEANUP_LIMIT;
405
+ const limit = Number.isFinite(requestedLimit)
406
+ ? Math.max(1, Math.min(Math.trunc(requestedLimit), MAX_FILE_CLEANUP_LIMIT))
407
+ : DEFAULT_FILE_CLEANUP_LIMIT;
408
+ const rows = await db
409
+ .select({
410
+ storageKey: fileCleanupQueue.storageKey,
411
+ deleteAfter: fileCleanupQueue.deleteAfter,
412
+ })
413
+ .from(fileCleanupQueue)
414
+ .where(lte(fileCleanupQueue.processAfter, now))
415
+ .orderBy(asc(fileCleanupQueue.processAfter), asc(fileCleanupQueue.storageKey))
416
+ .limit(limit);
417
+ return (await deleteCleanupRows(db, storage, rows, now)).settled;
418
+ }
419
+ export async function deleteWorkspace(db, storage, workspaceId) {
420
+ await deleteWorkspaceBatch(db, storage, [workspaceId]);
231
421
  }
232
- export async function deleteWorkspace(db, workspaceId) {
233
- await db.delete(workspaces).where(eq(workspaces.id, workspaceId));
422
+ /**
423
+ * Delete a bounded batch of workspaces whose callers explicitly opted into an
424
+ * expiry deadline at creation. No inferred signal (name, age, agents, or
425
+ * messages) participates in this predicate.
426
+ */
427
+ export async function reapExpiredWorkspaces(db, storage, options = {}) {
428
+ const now = options.now ?? new Date();
429
+ // Always service prior durable cleanup work, even when no workspace reaches
430
+ // its expiry in this tick. Existing cron integrations therefore pick up the
431
+ // post-commit outbox without needing a second scheduler.
432
+ await drainFileCleanup(db, storage, { now });
433
+ const requestedLimit = options.limit ?? DEFAULT_WORKSPACE_REAP_LIMIT;
434
+ const limit = Number.isFinite(requestedLimit)
435
+ ? Math.max(1, Math.min(Math.trunc(requestedLimit), 90))
436
+ : DEFAULT_WORKSPACE_REAP_LIMIT;
437
+ const expired = await db
438
+ .select({ id: workspaces.id })
439
+ .from(workspaces)
440
+ .where(lte(workspaces.expiresAt, now))
441
+ .orderBy(asc(workspaces.expiresAt), asc(workspaces.id))
442
+ .limit(limit);
443
+ if (expired.length === 0)
444
+ return [];
445
+ const ids = expired.map((workspace) => workspace.id);
446
+ return deleteWorkspaceBatch(db, storage, ids);
234
447
  }
235
448
  //# sourceMappingURL=workspace.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/engine/workspace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/engine/workspace.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -22,9 +22,10 @@ export { handleNodeControlMessage } from './engine/node.js';
22
22
  export type { HandleNodeControlMessageArgs, NodeSocketLike } from './engine/node.js';
23
23
  export { enqueueEvent, claimDueEvents, completeEvent, failEvent, rescheduleEvent, sweepPendingEvents, cleanupOldEvents, } from './engine/eventQueue.js';
24
24
  export type { ClaimedEvent, SweptEvent } from './engine/eventQueue.js';
25
- export { pruneExpired, DEFAULT_DELIVERY_TTL_DAYS, DEFAULT_MESSAGE_LOG_TTL_DAYS, DEFAULT_WORKSPACE_EVENT_TTL_DAYS, } from './engine/retention.js';
25
+ export { pruneExpired, resolveEffectiveMessageRetention, DEFAULT_DELIVERY_TTL_DAYS, DEFAULT_MESSAGE_LOG_TTL_DAYS, DEFAULT_WORKSPACE_EVENT_TTL_DAYS, } from './engine/retention.js';
26
26
  export type { PruneOptions, PruneResult, RetentionDefaults } from './engine/retention.js';
27
27
  export type { WorkspaceRetentionSettings } from './db/schema.js';
28
+ export { reapExpiredWorkspaces, drainFileCleanup, DEFAULT_WORKSPACE_REAP_LIMIT, DEFAULT_FILE_CLEANUP_LIMIT, } from './engine/workspace.js';
28
29
  export { appendWorkspaceEvent, appendAndPublishWorkspaceEvent, listWorkspaceEvents, WORKSPACE_EVENT_LIST_DEFAULT_LIMIT, WORKSPACE_EVENT_LIST_MAX_LIMIT, } from './engine/workspaceEvents.js';
29
30
  export type { WorkspaceEventInput, WorkspaceEventRecord } from './engine/workspaceEvents.js';
30
31
  export { generateId, getSnowflakeGenerator, snowflakeIdLowerBound, SnowflakeGenerator, } from './engine/snowflake.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,EAAG,OAAgB,CAAC;AAG/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGpE,YAAY,EACV,UAAU,EACV,WAAW,EACX,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,WAAW,EACX,eAAe,EACf,WAAW,EACX,aAAa,EACb,UAAU,EACV,WAAW,EACX,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,KAAK,EACL,oBAAoB,EACpB,UAAU,EACV,WAAW,EACX,aAAa,EACb,cAAc,GACf,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,wBAAwB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE,OAAO,EAAE,KAAK,EAAE,WAAW,IAAI,aAAa,EAAE,MAAM,eAAe,CAAC;AACpE,YAAY,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AAGzC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAQ5D,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACjG,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAClG,YAAY,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EAAE,4BAA4B,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMrF,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAMvE,OAAO,EACL,YAAY,EACZ,yBAAyB,EACzB,4BAA4B,EAC5B,gCAAgC,GACjC,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1F,YAAY,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAKjE,OAAO,EACL,oBAAoB,EACpB,8BAA8B,EAC9B,mBAAmB,EACnB,kCAAkC,EAClC,8BAA8B,GAC/B,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAG7F,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -34,7 +34,12 @@ export { enqueueEvent, claimDueEvents, completeEvent, failEvent, rescheduleEvent
34
34
  // deliveries, message logs, and orphaned read receipts. The Node adapter runs
35
35
  // it on the outbox cleanup cadence; queue-backed deployments call it from a
36
36
  // scheduled handler.
37
- export { pruneExpired, DEFAULT_DELIVERY_TTL_DAYS, DEFAULT_MESSAGE_LOG_TTL_DAYS, DEFAULT_WORKSPACE_EVENT_TTL_DAYS, } from './engine/retention.js';
37
+ export { pruneExpired, resolveEffectiveMessageRetention, DEFAULT_DELIVERY_TTL_DAYS, DEFAULT_MESSAGE_LOG_TTL_DAYS, DEFAULT_WORKSPACE_EVENT_TTL_DAYS, } from './engine/retention.js';
38
+ // Whole-workspace expiry is opt-in at creation and uses only the stored,
39
+ // non-null deadline as its deletion predicate. Hosts may call this from cron;
40
+ // the Node adapter also runs it on its local maintenance interval. Blob cleanup
41
+ // is a durable post-commit outbox: hosts must drain it from the same schedule.
42
+ export { reapExpiredWorkspaces, drainFileCleanup, DEFAULT_WORKSPACE_REAP_LIMIT, DEFAULT_FILE_CLEANUP_LIMIT, } from './engine/workspace.js';
38
43
  // Durable workspace event log (observer plane): append + cursor reads over
39
44
  // `workspace_events`, and the shared append+stamp+publish helper used by every
40
45
  // workspace stream call site.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,OAAgB,CAAC;AAE/C,2DAA2D;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAiC3C,4DAA4D;AAC5D,OAAO,EAAE,wBAAwB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,yDAAyD;AACzD,OAAO,EAAE,KAAK,EAAE,WAAW,IAAI,aAAa,EAAE,MAAM,eAAe,CAAC;AAEpE,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AAEzC,+EAA+E;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,wEAAwE;AACxE,4EAA4E;AAC5E,gFAAgF;AAChF,8EAA8E;AAC9E,gFAAgF;AAChF,yCAAyC;AACzC,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACjG,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAElG,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAG5D,6EAA6E;AAC7E,4EAA4E;AAC5E,yEAAyE;AACzE,4CAA4C;AAC5C,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAGhC,yEAAyE;AACzE,8EAA8E;AAC9E,4EAA4E;AAC5E,qBAAqB;AACrB,OAAO,EACL,YAAY,EACZ,yBAAyB,EACzB,4BAA4B,EAC5B,gCAAgC,GACjC,MAAM,uBAAuB,CAAC;AAI/B,2EAA2E;AAC3E,+EAA+E;AAC/E,8BAA8B;AAC9B,OAAO,EACL,oBAAoB,EACpB,8BAA8B,EAC9B,mBAAmB,EACnB,kCAAkC,EAClC,8BAA8B,GAC/B,MAAM,6BAA6B,CAAC;AAGrC,iBAAiB;AACjB,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,OAAgB,CAAC;AAE/C,2DAA2D;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAiC3C,4DAA4D;AAC5D,OAAO,EAAE,wBAAwB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,yDAAyD;AACzD,OAAO,EAAE,KAAK,EAAE,WAAW,IAAI,aAAa,EAAE,MAAM,eAAe,CAAC;AAEpE,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AAEzC,+EAA+E;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,wEAAwE;AACxE,4EAA4E;AAC5E,gFAAgF;AAChF,8EAA8E;AAC9E,gFAAgF;AAChF,yCAAyC;AACzC,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACjG,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAElG,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAG5D,6EAA6E;AAC7E,4EAA4E;AAC5E,yEAAyE;AACzE,4CAA4C;AAC5C,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAGhC,yEAAyE;AACzE,8EAA8E;AAC9E,4EAA4E;AAC5E,qBAAqB;AACrB,OAAO,EACL,YAAY,EACZ,gCAAgC,EAChC,yBAAyB,EACzB,4BAA4B,EAC5B,gCAAgC,GACjC,MAAM,uBAAuB,CAAC;AAI/B,yEAAyE;AACzE,8EAA8E;AAC9E,gFAAgF;AAChF,+EAA+E;AAC/E,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAE/B,2EAA2E;AAC3E,+EAA+E;AAC/E,8BAA8B;AAC9B,OAAO,EACL,oBAAoB,EACpB,8BAA8B,EAC9B,mBAAmB,EACnB,kCAAkC,EAClC,8BAA8B,GAC/B,MAAM,6BAA6B,CAAC;AAGrC,iBAAiB;AACjB,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC"}
@@ -17,6 +17,8 @@ interface RunIdempotentOptions<T> {
17
17
  key?: string;
18
18
  status?: number;
19
19
  fingerprint?: string;
20
+ /** Prior fingerprint formats accepted only when replaying an existing record. */
21
+ compatibleFingerprints?: string[];
20
22
  ttlSeconds?: number;
21
23
  kv?: KeyValueStore;
22
24
  requireKv?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../../src/middleware/idempotency.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAcpD,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;IACR,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,KAAK,iBAAiB,GAAG;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,UAAU,oBAAoB,CAAC,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,EAAE,CAAC,EAAE,aAAa,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAgBD,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAwBrG;AAED,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,QAItF;AAED,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,qFAQ/D;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;oZAGzF;AAED,wBAAsB,aAAa,CAAC,CAAC,EACnC,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAoJ9B"}
1
+ {"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../../src/middleware/idempotency.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAcpD,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;IACR,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,KAAK,iBAAiB,GAAG;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,UAAU,oBAAoB,CAAC,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,EAAE,CAAC,EAAE,aAAa,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAwBD,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAwBrG;AAED,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,QAItF;AAED,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,qFAQ/D;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;oZAGzF;AAED,wBAAsB,aAAa,CAAC,CAAC,EACnC,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAqJ9B"}
@@ -3,6 +3,9 @@ import { jsonOk } from '../lib/httpResponse.js';
3
3
  const IDEMPOTENCY_TTL_SECONDS = 24 * 60 * 60;
4
4
  const IDEMPOTENCY_LOCK_TTL_SECONDS = 30;
5
5
  const IDEMPOTENCY_KEY_MAX_LENGTH = 255;
6
+ function fingerprintMatches(stored, current, compatible) {
7
+ return !stored || !current || stored === current || compatible.includes(stored);
8
+ }
6
9
  function idempotencyUnavailableError(cause) {
7
10
  const err = new Error('Idempotency storage is unavailable');
8
11
  Object.assign(err, { code: 'idempotency_unavailable', status: 503, cause });
@@ -50,7 +53,7 @@ export function jsonIdempotentOk(c, result) {
50
53
  return jsonOk(c, stripDeliveryInternals(result.data), result.status);
51
54
  }
52
55
  export async function runIdempotent(options) {
53
- const { workspaceId, actorId, scope, key, fingerprint, operation, afterOperation, status = 201, ttlSeconds = IDEMPOTENCY_TTL_SECONDS, kv, requireKv = false, } = options;
56
+ const { workspaceId, actorId, scope, key, fingerprint, compatibleFingerprints = [], operation, afterOperation, status = 201, ttlSeconds = IDEMPOTENCY_TTL_SECONDS, kv, requireKv = false, } = options;
54
57
  if (!key) {
55
58
  if (requireKv) {
56
59
  const err = new Error('Idempotency key is required');
@@ -76,7 +79,7 @@ export async function runIdempotent(options) {
76
79
  const existingRaw = await kvStore.get(kvKey);
77
80
  if (existingRaw) {
78
81
  const parsed = JSON.parse(existingRaw);
79
- if (fingerprint && parsed.fingerprint && parsed.fingerprint !== fingerprint) {
82
+ if (!fingerprintMatches(parsed.fingerprint, fingerprint, compatibleFingerprints)) {
80
83
  const err = new Error('Idempotency-Key was reused with a different request payload');
81
84
  Object.assign(err, { code: 'idempotency_key_reused', status: 409 });
82
85
  throw err;
@@ -95,7 +98,7 @@ export async function runIdempotent(options) {
95
98
  const concurrentRaw = await kvStore.get(kvKey);
96
99
  if (concurrentRaw) {
97
100
  const parsed = JSON.parse(concurrentRaw);
98
- if (fingerprint && parsed.fingerprint && parsed.fingerprint !== fingerprint) {
101
+ if (!fingerprintMatches(parsed.fingerprint, fingerprint, compatibleFingerprints)) {
99
102
  const err = new Error('Idempotency-Key was reused with a different request payload');
100
103
  Object.assign(err, { code: 'idempotency_key_reused', status: 409 });
101
104
  throw err;
@@ -118,7 +121,7 @@ export async function runIdempotent(options) {
118
121
  if (recheckRaw) {
119
122
  await kvStore.delete(lockKey);
120
123
  const parsed = JSON.parse(recheckRaw);
121
- if (fingerprint && parsed.fingerprint && parsed.fingerprint !== fingerprint) {
124
+ if (!fingerprintMatches(parsed.fingerprint, fingerprint, compatibleFingerprints)) {
122
125
  const err = new Error('Idempotency-Key was reused with a different request payload');
123
126
  Object.assign(err, { code: 'idempotency_key_reused', status: 409 });
124
127
  throw err;
@@ -1 +1 @@
1
- {"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../src/middleware/idempotency.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../src/middleware/idempotency.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,9 @@
3
3
  *
4
4
  * The database rows (the `files` table: pending → complete → deleted lifecycle)
5
5
  * are portable domain logic and stay in the engine. Only the blob backend is the
6
- * port: Cloudflare signs R2 (S3-compatible) URLs; the Node adapter stores blobs
7
- * on local disk and serves them through an engine-mounted download route using a
8
- * short-lived signed token.
6
+ * port: Cloudflare signs R2 (S3-compatible) URLs and deletes R2 objects; the
7
+ * Node adapter stores blobs on local disk, serves them through an engine-mounted
8
+ * download route using a short-lived signed token, and removes them from disk.
9
9
  */
10
10
  export interface FileStorage {
11
11
  /**
@@ -24,5 +24,14 @@ export interface FileStorage {
24
24
  createDownloadUrl(args: {
25
25
  storageKey: string;
26
26
  }): Promise<string>;
27
+ /**
28
+ * Permanently remove the supplied objects. Implementations must be
29
+ * idempotent and resolve only after the currently stored bytes are gone.
30
+ * The engine retains a durable tombstone through every issued PUT URL's
31
+ * expiry and calls this again afterward to remove any late upload.
32
+ */
33
+ deleteObjects?(args: {
34
+ storageKeys: string[];
35
+ }): Promise<void>;
27
36
  }
28
37
  //# sourceMappingURL=files.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/ports/files.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAEtD,wEAAwE;IACxE,iBAAiB,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAClE"}
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/ports/files.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAEtD,wEAAwE;IACxE,iBAAiB,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEjE;;;;;OAKG;IACH,aAAa,CAAC,CAAC,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE"}
@@ -65,6 +65,15 @@ export interface EngineConfig {
65
65
  appVersion?: string;
66
66
  appSemver?: string;
67
67
  sdkSemver?: string;
68
+ /**
69
+ * Effective deployment-wide retention fallback. Adapters must provide an
70
+ * explicit value (`null` means never prune); omission is reported as unknown
71
+ * so a hosted deployment can never accidentally advertise replay coverage.
72
+ * Per-workspace `workspaces.retention` overrides this value.
73
+ */
74
+ retention?: {
75
+ messageTtlDays?: number | null;
76
+ };
68
77
  /**
69
78
  * Master secret used to derive relayfile -> relaycast inbound HMAC secrets.
70
79
  * Hosted adapters wire this from their internal secret; self-host can omit it
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ports/index.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;AAE5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAqBxC,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;AAuBxC,eAAO,MAAM,aAAa,qDAAqB,CAAC"}