@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.
- package/dist/adapters/node/files.d.ts +3 -0
- package/dist/adapters/node/files.d.ts.map +1 -1
- package/dist/adapters/node/files.js +10 -1
- package/dist/adapters/node/files.js.map +1 -1
- package/dist/adapters/node/index.d.ts.map +1 -1
- package/dist/adapters/node/index.js +14 -1
- package/dist/adapters/node/index.js.map +1 -1
- package/dist/db/migrations/0036_workspace_expiry.sql +3 -0
- package/dist/db/migrations/0037_file_cleanup_outbox.sql +36 -0
- package/dist/db/migrations/0038_session_ref_lookup.sql +58 -0
- package/dist/db/schema.d.ts +269 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +47 -2
- package/dist/db/schema.js.map +1 -1
- package/dist/engine/delivery.d.ts.map +1 -1
- package/dist/engine/delivery.js +2 -0
- package/dist/engine/delivery.js.map +1 -1
- package/dist/engine/dm.d.ts.map +1 -1
- package/dist/engine/dm.js +15 -6
- package/dist/engine/dm.js.map +1 -1
- package/dist/engine/file.d.ts.map +1 -1
- package/dist/engine/file.js +5 -0
- package/dist/engine/file.js.map +1 -1
- package/dist/engine/groupDm.d.ts +3 -0
- package/dist/engine/groupDm.d.ts.map +1 -1
- package/dist/engine/groupDm.js +16 -1
- package/dist/engine/groupDm.js.map +1 -1
- package/dist/engine/inboundWebhook.d.ts.map +1 -1
- package/dist/engine/inboundWebhook.js +45 -19
- package/dist/engine/inboundWebhook.js.map +1 -1
- package/dist/engine/message.d.ts.map +1 -1
- package/dist/engine/message.js +8 -0
- package/dist/engine/message.js.map +1 -1
- package/dist/engine/messageMetadata.d.ts +2 -0
- package/dist/engine/messageMetadata.d.ts.map +1 -1
- package/dist/engine/messageMetadata.js +14 -0
- package/dist/engine/messageMetadata.js.map +1 -1
- package/dist/engine/retention.d.ts +16 -0
- package/dist/engine/retention.d.ts.map +1 -1
- package/dist/engine/retention.js +70 -0
- package/dist/engine/retention.js.map +1 -1
- package/dist/engine/sessionMessages.d.ts +28 -0
- package/dist/engine/sessionMessages.d.ts.map +1 -0
- package/dist/engine/sessionMessages.js +194 -0
- package/dist/engine/sessionMessages.js.map +1 -0
- package/dist/engine/thread.d.ts.map +1 -1
- package/dist/engine/thread.js +8 -0
- package/dist/engine/thread.js.map +1 -1
- package/dist/engine/workspace.d.ts +69 -3
- package/dist/engine/workspace.d.ts.map +1 -1
- package/dist/engine/workspace.js +234 -21
- package/dist/engine/workspace.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/middleware/idempotency.d.ts +2 -0
- package/dist/middleware/idempotency.d.ts.map +1 -1
- package/dist/middleware/idempotency.js +7 -4
- package/dist/middleware/idempotency.js.map +1 -1
- package/dist/ports/files.d.ts +12 -3
- package/dist/ports/files.d.ts.map +1 -1
- package/dist/ports/index.d.ts +9 -0
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/routes/groupDm.d.ts.map +1 -1
- package/dist/routes/groupDm.js +40 -5
- package/dist/routes/groupDm.js.map +1 -1
- package/dist/routes/message.d.ts.map +1 -1
- package/dist/routes/message.js +27 -3
- package/dist/routes/message.js.map +1 -1
- package/dist/routes/workspace.d.ts.map +1 -1
- package/dist/routes/workspace.js +38 -18
- package/dist/routes/workspace.js.map +1 -1
- package/package.json +3 -3
package/dist/engine/workspace.js
CHANGED
|
@@ -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
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
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
|
-
|
|
233
|
-
|
|
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":"AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEpF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAC;AAsBlE,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAC/C,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAC7C,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAClC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAErC,SAAS,UAAU,CAAC,MAAc;IAChC,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,sBAAsB,CAC7B,SAAyC,EACzC,MAAe;IAEf,OAAO;QACL,YAAY,EAAE,SAAS,CAAC,EAAE;QAC1B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,UAAU,EAAE,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE;QAC7C,UAAU,EAAE,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,IAAI;KACvD,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,WAAiC,EACjC,QAKC;IAED,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG,WAAW,CAAC;IACjD,MAAM,gBAAgB,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,OAAO,CACZ,gBAAgB;QAChB,gBAAgB,CAAC,EAAE,KAAK,QAAQ,CAAC,WAAW;QAC5C,gBAAgB,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;QACvC,gBAAgB,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU;QACnD,cAAc;QACd,cAAc,CAAC,EAAE,KAAK,QAAQ,CAAC,SAAS;QACxC,cAAc,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW;QACnD,cAAc,CAAC,IAAI,KAAK,SAAS,CAClC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,0BAA0B,CACvC,EAAM,EACN,QAKC;IAED,IAAI,CAAC;QACH,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACrD,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC3E,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;SACtE,CAAC,CAAC;QACH,MAAM,MAAM,GAAyB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QAClE,OAAO,uBAAuB,CAAC,MAAM,EAAE,QAAQ,CAAC;YAC9C,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;YACpC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,IAAI,OAAO,GAAY,KAAK,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAW,CAAC;IAEhC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,OAAO,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACzF,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClB,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YACtC,IACE,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC;gBAC/B,CAAC,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,EAC9F,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM;QACR,CAAC;QACD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,MAAM;QAEnD,MAAM,SAAS,GAAG,OAAiE,CAAC;QACpF,MAAM,IAAI,GAAG,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,MAAM,OAAO,GAAG,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,IACE,IAAI,KAAK,0BAA0B;YACnC,IAAI,KAAK,8BAA8B;YACvC,CACE,IAAI,KAAK,mBAAmB;gBAC5B,CAAC,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAC/F;YACD,CACE,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC;gBAC/B,CAAC,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAC/F,EACD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC;IAC5B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,EAAM,EACN,IAAY,EACZ,OAAgC;IAEhC,MAAM,uBAAuB,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,eAAe,CAAC;IACnG,MAAM,mBAAmB,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC;IACzF,MAAM,SAAS,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC;IAC/E,MAAM,sBAAsB,GAAG,mBAAmB,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvG,IAAI,uBAAuB,IAAI,sBAAsB,IAAI,uBAAuB,KAAK,sBAAsB,EAAE,CAAC;QAC5G,MAAM,UAAU,CAAC,qDAAqD,EAAE,4BAA4B,EAAE,GAAG,CAAC,CAAC;IAC7G,CAAC;IAED,MAAM,eAAe,GAAG,uBAAuB,IAAI,sBAAsB,CAAC;IAE1E,gFAAgF;IAChF,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE;aACxB,MAAM,EAAE;aACR,IAAI,CAAC,UAAU,CAAC;aAChB,KAAK,CAAC,GAAG,CACR,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,EACzB,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,eAAe,CAAC,EAC1C,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CACvE,CAAC,CAAC;QACL,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,sBAAsB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;YACxE,OAAO;gBACL,SAAS;gBACT,OAAO,EAAE,KAAK;gBACd,GAAG,SAAS;aACb,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,UAAU,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,WAAW,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;IAE5C,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAC9D,IAAI,WAAiC,CAAC;IACtC,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,YAAY,CAAC,KAAK,IAAI,EAAE;YAC1C,IAAI,CAAC;gBACH,OAAO,MAAM,eAAe,CAC1B,EAAE,EACF,CAAC,OAAO,EAAE,EAAE,CAAC;oBACX,OAAO;yBACJ,MAAM,CAAC,UAAU,CAAC;yBAClB,MAAM,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;yBACxD,SAAS,EAAE;oBACd,OAAO;yBACJ,MAAM,CAAC,QAAQ,CAAC;yBAChB,MAAM,CAAC;wBACN,EAAE,EAAE,SAAS;wBACb,WAAW;wBACX,IAAI,EAAE,SAAS;wBACf,KAAK,EAAE,oBAAoB;qBAC5B,CAAC;yBACD,SAAS,EAAE;iBACf,EACD,EAAE,aAAa,EAAE,IAAI,EAAE,CACA,CAAC;YAC5B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;oBAAE,MAAM,KAAK,CAAC;gBAEjD,mEAAmE;gBACnE,qEAAqE;gBACrE,MAAM,SAAS,GAAG,MAAM,0BAA0B,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;gBACjE,IAAI,SAAS,CAAC,MAAM,KAAK,OAAO;oBAAE,OAAO,SAAS,CAAC,KAAK,CAAC;gBACzD,IAAI,SAAS,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;oBACvC,MAAM,KAAK,GAAG,UAAU,CACtB,2CAA2C,EAC3C,+BAA+B,EAC/B,GAAG,CACJ,CAAC;oBACF,KAAK,CAAC,WAAW,GAAG;wBAClB,SAAS,EAAE,kBAAkB;wBAC7B,aAAa,EAAE,sBAAsB;qBACtC,CAAC;oBACF,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,MAAM,UAAU,CAAC,0CAA0C,EAAE,wBAAwB,EAAE,GAAG,CAAC,CAAC;YAC9F,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,0BAA0B,CAAC;YAAE,MAAM,KAAK,CAAC;QAChE,MAAM,SAAS,GAAG,MAAM,0BAA0B,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACjE,IAAI,SAAS,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YACjC,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,UAAU,CACtB,2CAA2C,EAC3C,+BAA+B,EAC/B,GAAG,CACJ,CAAC;YACF,KAAK,CAAC,WAAW,GAAG;gBAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,SAAS,EAAE,kBAAkB;gBAC7B,aAAa,EAAE,KAAK,CAAC,YAAY;aAClC,CAAC;YACF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,GAAG,WAAW,CAAC;IACpC,MAAM,gBAAgB,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAE1C,4EAA4E;IAC5E,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACzE,MAAM,UAAU,CAAC,0CAA0C,EAAE,wBAAwB,EAAE,GAAG,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,SAAS,GAAG,sBAAsB,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IACnE,OAAO;QACL,SAAS;QACT,OAAO,EAAE,IAAI;QACb,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EAAM,EAAE,IAAY;IAC3D,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE;SACzB,MAAM,CAAC;QACN,EAAE,EAAE,UAAU,CAAC,EAAE;QACjB,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,SAAS,EAAE,UAAU,CAAC,SAAS;KAChC,CAAC;SACD,IAAI,CAAC,UAAU,CAAC;SAChB,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACpC,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,OAAO;QACL,EAAE,EAAE,SAAS,CAAC,EAAE;QAChB,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,UAAU,EAAE,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE;KAC9C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,EAAM,EACN,WAAmB,EACnB,wBAAwC;IAExC,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IAC7F,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,IAAI,yBAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,yBAAyB,GAAG,MAAM,gCAAgC,CAChE,EAAE,EACF,WAAW,EACX,wBAAwB,CACzB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,yBAAyB,GAAG;YAC1B,MAAM,EAAE,SAAkB;YAC1B,gBAAgB,EAAE,IAAI;YACtB,cAAc,EAAE,IAAI;YACpB,MAAM,EAAE,SAAkB;YAC1B,MAAM,EAAE,sBAA+B;SACxC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,EAAE,EAAE,SAAS,CAAC,EAAE;QAChB,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,aAAa,EAAE,SAAS,CAAC,YAAY;QACrC,UAAU,EAAE,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE;QAC7C,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,mBAAmB,EAAE,EAAE,QAAQ,EAAE,yBAAyB,EAAE;QAC5D,UAAU,EAAE,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,IAAI;KACvD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,EAAM,EACN,WAAmB,EACnB,OAAyD,EACzD,wBAAwC;IAExC,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC9D,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS;QACrC,SAAS,CAAC,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAEjD,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,YAAY,CAAC,EAAE,EAAE,WAAW,EAAE,wBAAwB,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE;SACvB,MAAM,CAAC,UAAU,CAAC;SAClB,GAAG,CAAC,SAAS,CAAC;SACd,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;SACrC,SAAS,EAAE,CAAC;IAEf,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,OAAO,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,wBAAwB,CAAC,CAAC;AAChE,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,EAAM,EACN,OAAoB,EACpB,YAAsB;IAEtB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEzC,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;QAChD,MAAM,UAAU,CACd,6DAA6D,EAC7D,iCAAiC,EACjC,GAAG,CACJ,CAAC;IACJ,CAAC;IAED,uEAAuE;IACvE,6EAA6E;IAC7E,yEAAyE;IACzE,yEAAyE;IACzE,4EAA4E;IAC5E,yEAAyE;IACzE,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,GAAG,EAAE,CAAC,eAAe,CACtC,EAAE,EACF,CAAC,OAAO,EAAE,EAAE,CAAC;YACX,OAAO;iBACJ,MAAM,CAAC,eAAe,CAAC;iBACvB,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YAC5D,OAAO;iBACJ,MAAM,CAAC,UAAU,CAAC;iBAClB,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;SAC/C,EACD,EAAE,aAAa,EAAE,IAAI,EAAE,CACxB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,0BAA0B,CAAC;YAAE,MAAM,KAAK,CAAC;QAEhE,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,YAAY,GAAW,KAAK,CAAC,YAAY,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,EAAE;iBACvB,MAAM,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC;iBAC7B,IAAI,CAAC,UAAU,CAAC;iBAChB,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;YAC/C,SAAS,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,YAAY,GAAG,sBAAsB,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,UAAU,CACtB,2CAA2C,EAC3C,+BAA+B,EAC/B,GAAG,CACJ,CAAC;YACF,KAAK,CAAC,WAAW,GAAG;gBAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,SAAS,EAAE,kBAAkB;gBAC7B,aAAa,EAAE,YAAY;aAC5B,CAAC;YACF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,YAAY,CAAC;IAEhC,4EAA4E;IAC5E,4EAA4E;IAC5E,6EAA6E;IAC7E,yEAAyE;IACzE,0EAA0E;IAC1E,IAAI,CAAC;QACH,MAAM,4BAA4B,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;QACzE,2EAA2E;QAC3E,uEAAuE;IACzE,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAY;IACvC,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,EAAM,EACN,WAAqB,EACrB,GAAY,EACZ,GAAS;IAET,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,EAAE;aACL,MAAM,CAAC,gBAAgB,CAAC;aACxB,GAAG,CAAC;YACH,QAAQ,EAAE,GAAG,CAAA,GAAG,gBAAgB,CAAC,QAAQ,MAAM;YAC/C,SAAS,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;YACnD,YAAY,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,qBAAqB,CAAC;SAC9D,CAAC;aACD,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;QACvE,0EAA0E;QAC1E,sEAAsE;QACtE,kEAAkE;QAClE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,EAAM,EACN,OAAoB,EACpB,IAAsD,EACtD,GAAS;IAET,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACtD,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,UAAU,CACtB,6DAA6D,EAC7D,iCAAiC,EACjC,GAAG,CACJ,CAAC;QACF,OAAO;YACL,OAAO,EAAE,CAAC;YACV,UAAU,EAAE,MAAM,kBAAkB,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC;SAClE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,CAAC;YACV,UAAU,EAAE,MAAM,kBAAkB,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC;SAChE,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,IAAI;SACrB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;SAC3D,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAChC,MAAM,YAAY,GAAG,IAAI;SACtB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;SAC1D,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAChC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,EAAE;aACL,MAAM,CAAC,gBAAgB,CAAC;aACxB,GAAG,CAAC;YACH,QAAQ,EAAE,GAAG,CAAA,GAAG,gBAAgB,CAAC,QAAQ,MAAM;YAC/C,SAAS,EAAE,IAAI;YACf,YAAY,EAAE,gBAAgB,CAAC,WAAW;SAC3C,CAAC;aACD,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,4BAA4B,CACzC,EAAM,EACN,OAAoB,EACpB,YAAsB;IAEtB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACtC,MAAM,gBAAgB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CACxD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,SAAS,CAAC;QACR,MAAM,IAAI,GAAG,MAAM,EAAE;aAClB,MAAM,CAAC;YACN,UAAU,EAAE,gBAAgB,CAAC,UAAU;YACvC,WAAW,EAAE,gBAAgB,CAAC,WAAW;SAC1C,CAAC;aACD,IAAI,CAAC,gBAAgB,CAAC;aACtB,KAAK,CAAC,GAAG,CACR,EAAE,CAAC,GAAG,gBAAgB,CAAC,EACvB,GAAG,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,CAAC,CACxC,CAAC;aACD,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;aAC7E,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC9B,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,UAAU;YAAE,OAAO;IACjC,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAM,EACN,OAAoB,EACpB,UAA0C,EAAE;IAE5C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACtC,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,IAAI,0BAA0B,CAAC;IACnE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC3C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,sBAAsB,CAAC,CAAC;QAC3E,CAAC,CAAC,0BAA0B,CAAC;IAC/B,MAAM,IAAI,GAAG,MAAM,EAAE;SAClB,MAAM,CAAC;QACN,UAAU,EAAE,gBAAgB,CAAC,UAAU;QACvC,WAAW,EAAE,gBAAgB,CAAC,WAAW;KAC1C,CAAC;SACD,IAAI,CAAC,gBAAgB,CAAC;SACtB,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;SAC9C,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;SAC7E,KAAK,CAAC,KAAK,CAAC,CAAC;IAChB,OAAO,CAAC,MAAM,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,EAAM,EACN,OAAoB,EACpB,WAAmB;IAEnB,MAAM,oBAAoB,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,EAAM,EACN,OAAoB,EACpB,UAA0C,EAAE;IAE5C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACtC,4EAA4E;IAC5E,4EAA4E;IAC5E,yDAAyD;IACzD,MAAM,gBAAgB,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7C,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,IAAI,4BAA4B,CAAC;IACrE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC3C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC,4BAA4B,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,EAAE;SACrB,MAAM,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC;SAC7B,IAAI,CAAC,UAAU,CAAC;SAChB,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;SACrC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;SACtD,KAAK,CAAC,KAAK,CAAC,CAAC;IAEhB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACrD,OAAO,oBAAoB,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;AAChD,CAAC"}
|
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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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;
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAC7C,MAAM,4BAA4B,GAAG,EAAE,CAAC;AACxC,MAAM,0BAA0B,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../src/middleware/idempotency.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAC7C,MAAM,4BAA4B,GAAG,EAAE,CAAC;AACxC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAyCvC,SAAS,kBAAkB,CACzB,MAA0B,EAC1B,OAA2B,EAC3B,UAAoB;IAEpB,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,IAAI,MAAM,KAAK,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAe;IAClD,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC5D,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5E,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,WAAmB,EAAE,OAAe,EAAE,KAAa,EAAE,GAAW;IACtF,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9C,SAAS,CAAC,GAAG,CAAC;QACd,SAAS,CAAC,KAAK,CAAC;KACjB,CAAC,CAAC;IACH,OAAO,WAAW,WAAW,IAAI,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAA+B;IACjE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;IACtD,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,GAAG,0BAA0B,EAAE,CAAC;QAC5C,OAAO;YACL,KAAK,EAAE,2BAA2B,0BAA0B,sBAAsB;SACnF,CAAC;IACJ,CAAC;IAED,0DAA0D;IAC1D,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,KAAK,EAAE,4DAA4D;SACpE,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAI,CAAU,EAAE,MAA2B;IACrF,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,CAAC,CAAC,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAmB,IAAO;IAC9D,MAAM,EACJ,SAAS,EAAE,aAAa,EACxB,WAAW,EAAE,eAAe,EAC5B,oBAAoB,EAAE,eAAe,EACrC,GAAG,UAAU,EACd,GAAG,IAA6B,CAAC;IAClC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAmB,CAAU,EAAE,MAA2B;IACxF,4BAA4B,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC,CAAC,EAAE,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAA8B,CAAC,CAAC;AAC/F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAgC;IAEhC,MAAM,EACJ,WAAW,EACX,OAAO,EACP,KAAK,EACL,GAAG,EACH,WAAW,EACX,sBAAsB,GAAG,EAAE,EAC3B,SAAS,EACT,cAAc,EACd,MAAM,GAAG,GAAG,EACZ,UAAU,GAAG,uBAAuB,EACpC,EAAE,EACF,SAAS,GAAG,KAAK,GAClB,GAAG,OAAO,CAAC;IAEZ,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACtE,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC;QAC/B,IAAI,cAAc;YAAE,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAC/C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC3C,CAAC;IAED,IAAI,OAAO,GAAyB,EAAE,IAAI,IAAI,CAAC;IAC/C,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,IAAI,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,2BAA2B,EAAE,CAAC;IACtC,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACzD,OAAO,GAAG,GAAG,KAAK,OAAO,CAAC;QAE1B,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAA+B,CAAC;gBACrE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,sBAAsB,CAAC,EAAE,CAAC;oBACjF,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;oBACrF,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;oBACpE,MAAM,GAAG,CAAC;gBACZ,CAAC;gBAED,OAAO;oBACL,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM;oBAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,QAAQ,EAAE,IAAI;iBACf,CAAC;YACJ,CAAC;YAED,mFAAmF;YACnF,8EAA8E;YAC9E,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAChD,IAAI,YAAY,EAAE,CAAC;gBACjB,uEAAuE;gBACvE,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC/C,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAA+B,CAAC;oBACvE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,sBAAsB,CAAC,EAAE,CAAC;wBACjF,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;wBACrF,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;wBACpE,MAAM,GAAG,CAAC;oBACZ,CAAC;oBAED,OAAO;wBACL,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM;wBAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,QAAQ,EAAE,IAAI;qBACf,CAAC;gBACJ,CAAC;gBAED,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;gBACvF,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBACrE,MAAM,GAAG,CAAC;YACZ,CAAC;YAED,eAAe;YACf,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,aAAa,EAAE,4BAA4B,EAAE,CAAC,CAAC;YACjF,YAAY,GAAG,IAAI,CAAC;YAEpB,6EAA6E;YAC7E,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAA+B,CAAC;gBACpE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,sBAAsB,CAAC,EAAE,CAAC;oBACjF,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;oBACrF,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;oBACpE,MAAM,GAAG,CAAC;gBACZ,CAAC;gBACD,OAAO;oBACL,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM;oBAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,QAAQ,EAAE,IAAI;iBACf,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,KAAK,IAAI,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,CAAC,QAAQ,CAAE,GAAiC,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC1I,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,2BAA2B,CAAC,GAAG,CAAC,CAAC;YACzC,CAAC;YACD,iEAAiE;YACjE,OAAO,GAAG,IAAI,CAAC;YACf,KAAK,GAAG,IAAI,CAAC;YACb,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC;QAC/B,IAAI,cAAc;YAAE,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAE/C,IAAI,OAAO,IAAI,KAAK,IAAI,YAAY,EAAE,CAAC;YACrC,MAAM,MAAM,GAA+B;gBACzC,MAAM;gBACN,IAAI;gBACJ,WAAW;aACZ,CAAC;YACF,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAC;YAClF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,2BAA2B,CAAC,GAAG,CAAC,CAAC;gBACzC,CAAC;gBACD,yEAAyE;YAC3E,CAAC;oBAAS,CAAC;gBACT,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,CAAC;wBAAC,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,OAAO,IAAI,OAAO,IAAI,YAAY,EAAE,CAAC;YACvC,IAAI,CAAC;gBAAC,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
package/dist/ports/files.d.ts
CHANGED
|
@@ -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
|
|
7
|
-
* on local disk
|
|
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;
|
|
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"}
|
package/dist/ports/index.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|