@workflow/world-local 4.0.1-beta.6 → 4.1.0-beta.28

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 (65) hide show
  1. package/dist/config.d.ts +15 -4
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +35 -9
  4. package/dist/config.js.map +1 -1
  5. package/dist/fs.d.ts +13 -0
  6. package/dist/fs.d.ts.map +1 -1
  7. package/dist/fs.js +109 -14
  8. package/dist/fs.js.map +1 -1
  9. package/dist/index.d.ts +10 -7
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +21 -9
  12. package/dist/index.js.map +1 -1
  13. package/dist/init.d.ts +91 -0
  14. package/dist/init.d.ts.map +1 -0
  15. package/dist/init.js +263 -0
  16. package/dist/init.js.map +1 -0
  17. package/dist/queue.d.ts +2 -1
  18. package/dist/queue.d.ts.map +1 -1
  19. package/dist/queue.js +83 -40
  20. package/dist/queue.js.map +1 -1
  21. package/dist/storage/events-storage.d.ts +7 -0
  22. package/dist/storage/events-storage.d.ts.map +1 -0
  23. package/dist/storage/events-storage.js +527 -0
  24. package/dist/storage/events-storage.js.map +1 -0
  25. package/dist/storage/filters.d.ts +26 -0
  26. package/dist/storage/filters.d.ts.map +1 -0
  27. package/dist/storage/filters.js +43 -0
  28. package/dist/storage/filters.js.map +1 -0
  29. package/dist/storage/helpers.d.ts +14 -0
  30. package/dist/storage/helpers.d.ts.map +1 -0
  31. package/dist/storage/helpers.js +34 -0
  32. package/dist/storage/helpers.js.map +1 -0
  33. package/dist/storage/hooks-storage.d.ts +12 -0
  34. package/dist/storage/hooks-storage.d.ts.map +1 -0
  35. package/dist/storage/hooks-storage.js +89 -0
  36. package/dist/storage/hooks-storage.js.map +1 -0
  37. package/dist/storage/index.d.ts +10 -0
  38. package/dist/storage/index.d.ts.map +1 -0
  39. package/dist/storage/index.js +20 -0
  40. package/dist/storage/index.js.map +1 -0
  41. package/dist/storage/legacy.d.ts +13 -0
  42. package/dist/storage/legacy.d.ts.map +1 -0
  43. package/dist/storage/legacy.js +73 -0
  44. package/dist/storage/legacy.js.map +1 -0
  45. package/dist/storage/runs-storage.d.ts +7 -0
  46. package/dist/storage/runs-storage.d.ts.map +1 -0
  47. package/dist/storage/runs-storage.js +59 -0
  48. package/dist/storage/runs-storage.js.map +1 -0
  49. package/dist/storage/steps-storage.d.ts +7 -0
  50. package/dist/storage/steps-storage.d.ts.map +1 -0
  51. package/dist/storage/steps-storage.js +58 -0
  52. package/dist/storage/steps-storage.js.map +1 -0
  53. package/dist/storage.d.ts +9 -2
  54. package/dist/storage.d.ts.map +1 -1
  55. package/dist/storage.js +10 -421
  56. package/dist/storage.js.map +1 -1
  57. package/dist/streamer.d.ts +1 -1
  58. package/dist/streamer.d.ts.map +1 -1
  59. package/dist/streamer.js +103 -20
  60. package/dist/streamer.js.map +1 -1
  61. package/dist/test-helpers.d.ts +43 -0
  62. package/dist/test-helpers.d.ts.map +1 -0
  63. package/dist/test-helpers.js +89 -0
  64. package/dist/test-helpers.js.map +1 -0
  65. package/package.json +10 -9
@@ -0,0 +1,527 @@
1
+ import path from 'node:path';
2
+ import { RunNotSupportedError, WorkflowAPIError } from '@workflow/errors';
3
+ import { EventSchema, HookSchema, isLegacySpecVersion, requiresNewerWorld, SPEC_VERSION_CURRENT, StepSchema, WorkflowRunSchema, } from '@workflow/world';
4
+ import { DEFAULT_RESOLVE_DATA_OPTION } from '../config.js';
5
+ import { deleteJSON, listJSONFiles, paginatedFileSystemQuery, readJSON, writeJSON, } from '../fs.js';
6
+ import { filterEventData } from './filters.js';
7
+ import { getObjectCreatedAt, monotonicUlid } from './helpers.js';
8
+ import { deleteAllHooksForRun } from './hooks-storage.js';
9
+ import { handleLegacyEvent } from './legacy.js';
10
+ /**
11
+ * Creates the events storage implementation using the filesystem.
12
+ * Implements the Storage['events'] interface with create, list, and listByCorrelationId operations.
13
+ */
14
+ export function createEventsStorage(basedir) {
15
+ return {
16
+ async create(runId, data, params) {
17
+ const eventId = `evnt_${monotonicUlid()}`;
18
+ const now = new Date();
19
+ // For run_created events, generate runId server-side if null or empty
20
+ let effectiveRunId;
21
+ if (data.eventType === 'run_created' && (!runId || runId === '')) {
22
+ effectiveRunId = `wrun_${monotonicUlid()}`;
23
+ }
24
+ else if (!runId) {
25
+ throw new Error('runId is required for non-run_created events');
26
+ }
27
+ else {
28
+ effectiveRunId = runId;
29
+ }
30
+ // specVersion is always sent by the runtime, but we provide a fallback for safety
31
+ const effectiveSpecVersion = data.specVersion ?? SPEC_VERSION_CURRENT;
32
+ // Helper to check if run is in terminal state
33
+ const isRunTerminal = (status) => ['completed', 'failed', 'cancelled'].includes(status);
34
+ // Helper to check if step is in terminal state
35
+ const isStepTerminal = (status) => ['completed', 'failed'].includes(status);
36
+ // Get current run state for validation (if not creating a new run)
37
+ // Skip run validation for step_completed and step_retrying - they only operate
38
+ // on running steps, and running steps are always allowed to modify regardless
39
+ // of run state. This optimization saves filesystem reads per step event.
40
+ let currentRun = null;
41
+ const skipRunValidationEvents = ['step_completed', 'step_retrying'];
42
+ if (data.eventType !== 'run_created' &&
43
+ !skipRunValidationEvents.includes(data.eventType)) {
44
+ const runPath = path.join(basedir, 'runs', `${effectiveRunId}.json`);
45
+ currentRun = await readJSON(runPath, WorkflowRunSchema);
46
+ }
47
+ // ============================================================
48
+ // VERSION COMPATIBILITY: Check run spec version
49
+ // ============================================================
50
+ // For events that have fetched the run, check version compatibility.
51
+ // Skip for run_created (no existing run) and runtime events (step_completed, step_retrying).
52
+ if (currentRun) {
53
+ // Check if run requires a newer world version
54
+ if (requiresNewerWorld(currentRun.specVersion)) {
55
+ throw new RunNotSupportedError(currentRun.specVersion, SPEC_VERSION_CURRENT);
56
+ }
57
+ // Route to legacy handler for pre-event-sourcing runs
58
+ if (isLegacySpecVersion(currentRun.specVersion)) {
59
+ return handleLegacyEvent(basedir, effectiveRunId, data, currentRun, params);
60
+ }
61
+ }
62
+ // ============================================================
63
+ // VALIDATION: Terminal state and event ordering checks
64
+ // ============================================================
65
+ // Run terminal state validation
66
+ if (currentRun && isRunTerminal(currentRun.status)) {
67
+ const runTerminalEvents = [
68
+ 'run_started',
69
+ 'run_completed',
70
+ 'run_failed',
71
+ ];
72
+ // Idempotent operation: run_cancelled on already cancelled run is allowed
73
+ if (data.eventType === 'run_cancelled' &&
74
+ currentRun.status === 'cancelled') {
75
+ // Return existing state (idempotent)
76
+ const event = {
77
+ ...data,
78
+ runId: effectiveRunId,
79
+ eventId,
80
+ createdAt: now,
81
+ specVersion: effectiveSpecVersion,
82
+ };
83
+ const compositeKey = `${effectiveRunId}-${eventId}`;
84
+ const eventPath = path.join(basedir, 'events', `${compositeKey}.json`);
85
+ await writeJSON(eventPath, event);
86
+ const resolveData = params?.resolveData ?? DEFAULT_RESOLVE_DATA_OPTION;
87
+ return {
88
+ event: filterEventData(event, resolveData),
89
+ run: currentRun,
90
+ };
91
+ }
92
+ // Run state transitions are not allowed on terminal runs
93
+ if (runTerminalEvents.includes(data.eventType) ||
94
+ data.eventType === 'run_cancelled') {
95
+ throw new WorkflowAPIError(`Cannot transition run from terminal state "${currentRun.status}"`, { status: 410 });
96
+ }
97
+ // Creating new entities on terminal runs is not allowed
98
+ if (data.eventType === 'step_created' ||
99
+ data.eventType === 'hook_created') {
100
+ throw new WorkflowAPIError(`Cannot create new entities on run in terminal state "${currentRun.status}"`, { status: 410 });
101
+ }
102
+ }
103
+ // Step-related event validation (ordering and terminal state)
104
+ // Store existingStep so we can reuse it later (avoid double read)
105
+ let validatedStep = null;
106
+ const stepEvents = [
107
+ 'step_started',
108
+ 'step_completed',
109
+ 'step_failed',
110
+ 'step_retrying',
111
+ ];
112
+ if (stepEvents.includes(data.eventType) && data.correlationId) {
113
+ const stepCompositeKey = `${effectiveRunId}-${data.correlationId}`;
114
+ const stepPath = path.join(basedir, 'steps', `${stepCompositeKey}.json`);
115
+ validatedStep = await readJSON(stepPath, StepSchema);
116
+ // Event ordering: step must exist before these events
117
+ if (!validatedStep) {
118
+ throw new WorkflowAPIError(`Step "${data.correlationId}" not found`, {
119
+ status: 404,
120
+ });
121
+ }
122
+ // Step terminal state validation
123
+ if (isStepTerminal(validatedStep.status)) {
124
+ throw new WorkflowAPIError(`Cannot modify step in terminal state "${validatedStep.status}"`, { status: 410 });
125
+ }
126
+ // On terminal runs: only allow completing/failing in-progress steps
127
+ if (currentRun && isRunTerminal(currentRun.status)) {
128
+ if (validatedStep.status !== 'running') {
129
+ throw new WorkflowAPIError(`Cannot modify non-running step on run in terminal state "${currentRun.status}"`, { status: 410 });
130
+ }
131
+ }
132
+ }
133
+ // Hook-related event validation (ordering)
134
+ const hookEventsRequiringExistence = ['hook_disposed', 'hook_received'];
135
+ if (hookEventsRequiringExistence.includes(data.eventType) &&
136
+ data.correlationId) {
137
+ const hookPath = path.join(basedir, 'hooks', `${data.correlationId}.json`);
138
+ const existingHook = await readJSON(hookPath, HookSchema);
139
+ if (!existingHook) {
140
+ throw new WorkflowAPIError(`Hook "${data.correlationId}" not found`, {
141
+ status: 404,
142
+ });
143
+ }
144
+ }
145
+ const event = {
146
+ ...data,
147
+ runId: effectiveRunId,
148
+ eventId,
149
+ createdAt: now,
150
+ specVersion: effectiveSpecVersion,
151
+ };
152
+ // Track entity created/updated for EventResult
153
+ let run;
154
+ let step;
155
+ let hook;
156
+ // Create/update entity based on event type (event-sourced architecture)
157
+ // Run lifecycle events
158
+ if (data.eventType === 'run_created' && 'eventData' in data) {
159
+ const runData = data.eventData;
160
+ run = {
161
+ runId: effectiveRunId,
162
+ deploymentId: runData.deploymentId,
163
+ status: 'pending',
164
+ workflowName: runData.workflowName,
165
+ // Propagate specVersion from the event to the run entity
166
+ specVersion: effectiveSpecVersion,
167
+ executionContext: runData.executionContext,
168
+ input: runData.input,
169
+ output: undefined,
170
+ error: undefined,
171
+ startedAt: undefined,
172
+ completedAt: undefined,
173
+ createdAt: now,
174
+ updatedAt: now,
175
+ };
176
+ const runPath = path.join(basedir, 'runs', `${effectiveRunId}.json`);
177
+ await writeJSON(runPath, run);
178
+ }
179
+ else if (data.eventType === 'run_started') {
180
+ // Reuse currentRun from validation (already read above)
181
+ if (currentRun) {
182
+ const runPath = path.join(basedir, 'runs', `${effectiveRunId}.json`);
183
+ run = {
184
+ runId: currentRun.runId,
185
+ deploymentId: currentRun.deploymentId,
186
+ workflowName: currentRun.workflowName,
187
+ specVersion: currentRun.specVersion,
188
+ executionContext: currentRun.executionContext,
189
+ input: currentRun.input,
190
+ createdAt: currentRun.createdAt,
191
+ expiredAt: currentRun.expiredAt,
192
+ status: 'running',
193
+ output: undefined,
194
+ error: undefined,
195
+ completedAt: undefined,
196
+ startedAt: currentRun.startedAt ?? now,
197
+ updatedAt: now,
198
+ };
199
+ await writeJSON(runPath, run, { overwrite: true });
200
+ }
201
+ }
202
+ else if (data.eventType === 'run_completed' && 'eventData' in data) {
203
+ const completedData = data.eventData;
204
+ // Reuse currentRun from validation (already read above)
205
+ if (currentRun) {
206
+ const runPath = path.join(basedir, 'runs', `${effectiveRunId}.json`);
207
+ run = {
208
+ runId: currentRun.runId,
209
+ deploymentId: currentRun.deploymentId,
210
+ workflowName: currentRun.workflowName,
211
+ specVersion: currentRun.specVersion,
212
+ executionContext: currentRun.executionContext,
213
+ input: currentRun.input,
214
+ createdAt: currentRun.createdAt,
215
+ expiredAt: currentRun.expiredAt,
216
+ startedAt: currentRun.startedAt,
217
+ status: 'completed',
218
+ output: completedData.output,
219
+ error: undefined,
220
+ completedAt: now,
221
+ updatedAt: now,
222
+ };
223
+ await writeJSON(runPath, run, { overwrite: true });
224
+ await deleteAllHooksForRun(basedir, effectiveRunId);
225
+ }
226
+ }
227
+ else if (data.eventType === 'run_failed' && 'eventData' in data) {
228
+ const failedData = data.eventData;
229
+ // Reuse currentRun from validation (already read above)
230
+ if (currentRun) {
231
+ const runPath = path.join(basedir, 'runs', `${effectiveRunId}.json`);
232
+ run = {
233
+ runId: currentRun.runId,
234
+ deploymentId: currentRun.deploymentId,
235
+ workflowName: currentRun.workflowName,
236
+ specVersion: currentRun.specVersion,
237
+ executionContext: currentRun.executionContext,
238
+ input: currentRun.input,
239
+ createdAt: currentRun.createdAt,
240
+ expiredAt: currentRun.expiredAt,
241
+ startedAt: currentRun.startedAt,
242
+ status: 'failed',
243
+ output: undefined,
244
+ error: {
245
+ message: typeof failedData.error === 'string'
246
+ ? failedData.error
247
+ : (failedData.error?.message ?? 'Unknown error'),
248
+ stack: failedData.error?.stack,
249
+ code: failedData.errorCode,
250
+ },
251
+ completedAt: now,
252
+ updatedAt: now,
253
+ };
254
+ await writeJSON(runPath, run, { overwrite: true });
255
+ await deleteAllHooksForRun(basedir, effectiveRunId);
256
+ }
257
+ }
258
+ else if (data.eventType === 'run_cancelled') {
259
+ // Reuse currentRun from validation (already read above)
260
+ if (currentRun) {
261
+ const runPath = path.join(basedir, 'runs', `${effectiveRunId}.json`);
262
+ run = {
263
+ runId: currentRun.runId,
264
+ deploymentId: currentRun.deploymentId,
265
+ workflowName: currentRun.workflowName,
266
+ specVersion: currentRun.specVersion,
267
+ executionContext: currentRun.executionContext,
268
+ input: currentRun.input,
269
+ createdAt: currentRun.createdAt,
270
+ expiredAt: currentRun.expiredAt,
271
+ startedAt: currentRun.startedAt,
272
+ status: 'cancelled',
273
+ output: undefined,
274
+ error: undefined,
275
+ completedAt: now,
276
+ updatedAt: now,
277
+ };
278
+ await writeJSON(runPath, run, { overwrite: true });
279
+ await deleteAllHooksForRun(basedir, effectiveRunId);
280
+ }
281
+ }
282
+ else if (
283
+ // Step lifecycle events
284
+ data.eventType === 'step_created' &&
285
+ 'eventData' in data) {
286
+ // step_created: Creates step entity with status 'pending', attempt=0, createdAt set
287
+ const stepData = data.eventData;
288
+ step = {
289
+ runId: effectiveRunId,
290
+ stepId: data.correlationId,
291
+ stepName: stepData.stepName,
292
+ status: 'pending',
293
+ input: stepData.input,
294
+ output: undefined,
295
+ error: undefined,
296
+ attempt: 0,
297
+ startedAt: undefined,
298
+ completedAt: undefined,
299
+ createdAt: now,
300
+ updatedAt: now,
301
+ // Propagate specVersion from the event to the step entity
302
+ specVersion: effectiveSpecVersion,
303
+ };
304
+ const stepCompositeKey = `${effectiveRunId}-${data.correlationId}`;
305
+ const stepPath = path.join(basedir, 'steps', `${stepCompositeKey}.json`);
306
+ await writeJSON(stepPath, step);
307
+ }
308
+ else if (data.eventType === 'step_started') {
309
+ // step_started: Increments attempt, sets status to 'running'
310
+ // Sets startedAt only on the first start (not updated on retries)
311
+ // Reuse validatedStep from validation (already read above)
312
+ if (validatedStep) {
313
+ const stepCompositeKey = `${effectiveRunId}-${data.correlationId}`;
314
+ const stepPath = path.join(basedir, 'steps', `${stepCompositeKey}.json`);
315
+ step = {
316
+ ...validatedStep,
317
+ status: 'running',
318
+ // Only set startedAt on the first start
319
+ startedAt: validatedStep.startedAt ?? now,
320
+ // Increment attempt counter on every start
321
+ attempt: validatedStep.attempt + 1,
322
+ updatedAt: now,
323
+ };
324
+ await writeJSON(stepPath, step, { overwrite: true });
325
+ }
326
+ }
327
+ else if (data.eventType === 'step_completed' && 'eventData' in data) {
328
+ // step_completed: Terminal state with output
329
+ // Reuse validatedStep from validation (already read above)
330
+ const completedData = data.eventData;
331
+ if (validatedStep) {
332
+ const stepCompositeKey = `${effectiveRunId}-${data.correlationId}`;
333
+ const stepPath = path.join(basedir, 'steps', `${stepCompositeKey}.json`);
334
+ step = {
335
+ ...validatedStep,
336
+ status: 'completed',
337
+ output: completedData.result,
338
+ completedAt: now,
339
+ updatedAt: now,
340
+ };
341
+ await writeJSON(stepPath, step, { overwrite: true });
342
+ }
343
+ }
344
+ else if (data.eventType === 'step_failed' && 'eventData' in data) {
345
+ // step_failed: Terminal state with error
346
+ // Reuse validatedStep from validation (already read above)
347
+ const failedData = data.eventData;
348
+ if (validatedStep) {
349
+ const stepCompositeKey = `${effectiveRunId}-${data.correlationId}`;
350
+ const stepPath = path.join(basedir, 'steps', `${stepCompositeKey}.json`);
351
+ const error = {
352
+ message: typeof failedData.error === 'string'
353
+ ? failedData.error
354
+ : (failedData.error?.message ?? 'Unknown error'),
355
+ stack: failedData.stack,
356
+ };
357
+ step = {
358
+ ...validatedStep,
359
+ status: 'failed',
360
+ error,
361
+ completedAt: now,
362
+ updatedAt: now,
363
+ };
364
+ await writeJSON(stepPath, step, { overwrite: true });
365
+ }
366
+ }
367
+ else if (data.eventType === 'step_retrying' && 'eventData' in data) {
368
+ // step_retrying: Sets status back to 'pending', records error
369
+ // Reuse validatedStep from validation (already read above)
370
+ const retryData = data.eventData;
371
+ if (validatedStep) {
372
+ const stepCompositeKey = `${effectiveRunId}-${data.correlationId}`;
373
+ const stepPath = path.join(basedir, 'steps', `${stepCompositeKey}.json`);
374
+ step = {
375
+ ...validatedStep,
376
+ status: 'pending',
377
+ error: {
378
+ message: typeof retryData.error === 'string'
379
+ ? retryData.error
380
+ : (retryData.error?.message ?? 'Unknown error'),
381
+ stack: retryData.stack,
382
+ },
383
+ retryAfter: retryData.retryAfter,
384
+ updatedAt: now,
385
+ };
386
+ await writeJSON(stepPath, step, { overwrite: true });
387
+ }
388
+ }
389
+ else if (
390
+ // Hook lifecycle events
391
+ data.eventType === 'hook_created' &&
392
+ 'eventData' in data) {
393
+ const hookData = data.eventData;
394
+ // Check for duplicate token before creating hook
395
+ const hooksDir = path.join(basedir, 'hooks');
396
+ const hookFiles = await listJSONFiles(hooksDir);
397
+ let hasConflict = false;
398
+ for (const file of hookFiles) {
399
+ const existingHookPath = path.join(hooksDir, `${file}.json`);
400
+ const existingHook = await readJSON(existingHookPath, HookSchema);
401
+ if (existingHook && existingHook.token === hookData.token) {
402
+ hasConflict = true;
403
+ break;
404
+ }
405
+ }
406
+ if (hasConflict) {
407
+ // Create hook_conflict event instead of hook_created
408
+ // This allows the workflow to continue and fail gracefully when the hook is awaited
409
+ const conflictEvent = {
410
+ eventType: 'hook_conflict',
411
+ correlationId: data.correlationId,
412
+ eventData: {
413
+ token: hookData.token,
414
+ },
415
+ runId: effectiveRunId,
416
+ eventId,
417
+ createdAt: now,
418
+ specVersion: effectiveSpecVersion,
419
+ };
420
+ // Store the conflict event
421
+ const compositeKey = `${effectiveRunId}-${eventId}`;
422
+ const eventPath = path.join(basedir, 'events', `${compositeKey}.json`);
423
+ await writeJSON(eventPath, conflictEvent);
424
+ const resolveData = params?.resolveData ?? DEFAULT_RESOLVE_DATA_OPTION;
425
+ const filteredEvent = filterEventData(conflictEvent, resolveData);
426
+ // Return EventResult with conflict event (no hook entity created)
427
+ return {
428
+ event: filteredEvent,
429
+ run,
430
+ step,
431
+ hook: undefined,
432
+ };
433
+ }
434
+ hook = {
435
+ runId: effectiveRunId,
436
+ hookId: data.correlationId,
437
+ token: hookData.token,
438
+ metadata: hookData.metadata,
439
+ ownerId: 'local-owner',
440
+ projectId: 'local-project',
441
+ environment: 'local',
442
+ createdAt: now,
443
+ // Propagate specVersion from the event to the hook entity
444
+ specVersion: effectiveSpecVersion,
445
+ };
446
+ const hookPath = path.join(basedir, 'hooks', `${data.correlationId}.json`);
447
+ await writeJSON(hookPath, hook);
448
+ }
449
+ else if (data.eventType === 'hook_disposed') {
450
+ // Delete the hook when disposed
451
+ const hookPath = path.join(basedir, 'hooks', `${data.correlationId}.json`);
452
+ await deleteJSON(hookPath);
453
+ }
454
+ // Note: hook_received events are stored in the event log but don't
455
+ // modify the Hook entity (which doesn't have a payload field)
456
+ // Store event using composite key {runId}-{eventId}
457
+ const compositeKey = `${effectiveRunId}-${eventId}`;
458
+ const eventPath = path.join(basedir, 'events', `${compositeKey}.json`);
459
+ await writeJSON(eventPath, event);
460
+ const resolveData = params?.resolveData ?? DEFAULT_RESOLVE_DATA_OPTION;
461
+ const filteredEvent = filterEventData(event, resolveData);
462
+ // Return EventResult with event and any created/updated entity
463
+ return {
464
+ event: filteredEvent,
465
+ run,
466
+ step,
467
+ hook,
468
+ };
469
+ },
470
+ async list(params) {
471
+ const { runId } = params;
472
+ const resolveData = params.resolveData ?? DEFAULT_RESOLVE_DATA_OPTION;
473
+ const result = await paginatedFileSystemQuery({
474
+ directory: path.join(basedir, 'events'),
475
+ schema: EventSchema,
476
+ filePrefix: `${runId}-`,
477
+ // Events in chronological order (oldest first) by default,
478
+ // different from the default for other list calls.
479
+ sortOrder: params.pagination?.sortOrder ?? 'asc',
480
+ limit: params.pagination?.limit,
481
+ cursor: params.pagination?.cursor,
482
+ getCreatedAt: getObjectCreatedAt('evnt'),
483
+ getId: (event) => event.eventId,
484
+ });
485
+ // If resolveData is "none", remove eventData from events
486
+ if (resolveData === 'none') {
487
+ return {
488
+ ...result,
489
+ data: result.data.map((event) => {
490
+ const { eventData: _eventData, ...rest } = event;
491
+ return rest;
492
+ }),
493
+ };
494
+ }
495
+ return result;
496
+ },
497
+ async listByCorrelationId(params) {
498
+ const correlationId = params.correlationId;
499
+ const resolveData = params.resolveData ?? DEFAULT_RESOLVE_DATA_OPTION;
500
+ const result = await paginatedFileSystemQuery({
501
+ directory: path.join(basedir, 'events'),
502
+ schema: EventSchema,
503
+ // No filePrefix - search all events
504
+ filter: (event) => event.correlationId === correlationId,
505
+ // Events in chronological order (oldest first) by default,
506
+ // different from the default for other list calls.
507
+ sortOrder: params.pagination?.sortOrder ?? 'asc',
508
+ limit: params.pagination?.limit,
509
+ cursor: params.pagination?.cursor,
510
+ getCreatedAt: getObjectCreatedAt('evnt'),
511
+ getId: (event) => event.eventId,
512
+ });
513
+ // If resolveData is "none", remove eventData from events
514
+ if (resolveData === 'none') {
515
+ return {
516
+ ...result,
517
+ data: result.data.map((event) => {
518
+ const { eventData: _eventData, ...rest } = event;
519
+ return rest;
520
+ }),
521
+ };
522
+ }
523
+ return result;
524
+ },
525
+ };
526
+ }
527
+ //# sourceMappingURL=events-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-storage.js","sourceRoot":"","sources":["../../src/storage/events-storage.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAU1E,OAAO,EACL,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,UAAU,EACV,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EACL,UAAU,EACV,aAAa,EACb,wBAAwB,EACxB,QAAQ,EACR,SAAS,GACV,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM;YAC9B,MAAM,OAAO,GAAG,QAAQ,aAAa,EAAE,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YAEvB,sEAAsE;YACtE,IAAI,cAAsB,CAAC;YAC3B,IAAI,IAAI,CAAC,SAAS,KAAK,aAAa,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC,EAAE,CAAC;gBACjE,cAAc,GAAG,QAAQ,aAAa,EAAE,EAAE,CAAC;YAC7C,CAAC;iBAAM,IAAI,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAClE,CAAC;iBAAM,CAAC;gBACN,cAAc,GAAG,KAAK,CAAC;YACzB,CAAC;YAED,kFAAkF;YAClF,MAAM,oBAAoB,GAAG,IAAI,CAAC,WAAW,IAAI,oBAAoB,CAAC;YAEtE,8CAA8C;YAC9C,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,EAAE,CACvC,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAExD,+CAA+C;YAC/C,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,EAAE,CACxC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAE3C,mEAAmE;YACnE,+EAA+E;YAC/E,8EAA8E;YAC9E,yEAAyE;YACzE,IAAI,UAAU,GAAuB,IAAI,CAAC;YAC1C,MAAM,uBAAuB,GAAG,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;YACpE,IACE,IAAI,CAAC,SAAS,KAAK,aAAa;gBAChC,CAAC,uBAAuB,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EACjD,CAAC;gBACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,cAAc,OAAO,CAAC,CAAC;gBACrE,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;YAC1D,CAAC;YAED,+DAA+D;YAC/D,gDAAgD;YAChD,+DAA+D;YAC/D,qEAAqE;YACrE,6FAA6F;YAC7F,IAAI,UAAU,EAAE,CAAC;gBACf,8CAA8C;gBAC9C,IAAI,kBAAkB,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC/C,MAAM,IAAI,oBAAoB,CAC5B,UAAU,CAAC,WAAY,EACvB,oBAAoB,CACrB,CAAC;gBACJ,CAAC;gBAED,sDAAsD;gBACtD,IAAI,mBAAmB,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;oBAChD,OAAO,iBAAiB,CACtB,OAAO,EACP,cAAc,EACd,IAAI,EACJ,UAAU,EACV,MAAM,CACP,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,+DAA+D;YAC/D,uDAAuD;YACvD,+DAA+D;YAE/D,gCAAgC;YAChC,IAAI,UAAU,IAAI,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnD,MAAM,iBAAiB,GAAG;oBACxB,aAAa;oBACb,eAAe;oBACf,YAAY;iBACb,CAAC;gBAEF,0EAA0E;gBAC1E,IACE,IAAI,CAAC,SAAS,KAAK,eAAe;oBAClC,UAAU,CAAC,MAAM,KAAK,WAAW,EACjC,CAAC;oBACD,qCAAqC;oBACrC,MAAM,KAAK,GAAU;wBACnB,GAAG,IAAI;wBACP,KAAK,EAAE,cAAc;wBACrB,OAAO;wBACP,SAAS,EAAE,GAAG;wBACd,WAAW,EAAE,oBAAoB;qBAClC,CAAC;oBACF,MAAM,YAAY,GAAG,GAAG,cAAc,IAAI,OAAO,EAAE,CAAC;oBACpD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CACzB,OAAO,EACP,QAAQ,EACR,GAAG,YAAY,OAAO,CACvB,CAAC;oBACF,MAAM,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;oBAClC,MAAM,WAAW,GACf,MAAM,EAAE,WAAW,IAAI,2BAA2B,CAAC;oBACrD,OAAO;wBACL,KAAK,EAAE,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC;wBAC1C,GAAG,EAAE,UAAU;qBAChB,CAAC;gBACJ,CAAC;gBAED,yDAAyD;gBACzD,IACE,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;oBAC1C,IAAI,CAAC,SAAS,KAAK,eAAe,EAClC,CAAC;oBACD,MAAM,IAAI,gBAAgB,CACxB,8CAA8C,UAAU,CAAC,MAAM,GAAG,EAClE,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;gBACJ,CAAC;gBAED,wDAAwD;gBACxD,IACE,IAAI,CAAC,SAAS,KAAK,cAAc;oBACjC,IAAI,CAAC,SAAS,KAAK,cAAc,EACjC,CAAC;oBACD,MAAM,IAAI,gBAAgB,CACxB,wDAAwD,UAAU,CAAC,MAAM,GAAG,EAC5E,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,8DAA8D;YAC9D,kEAAkE;YAClE,IAAI,aAAa,GAAgB,IAAI,CAAC;YACtC,MAAM,UAAU,GAAG;gBACjB,cAAc;gBACd,gBAAgB;gBAChB,aAAa;gBACb,eAAe;aAChB,CAAC;YACF,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC9D,MAAM,gBAAgB,GAAG,GAAG,cAAc,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,OAAO,EACP,OAAO,EACP,GAAG,gBAAgB,OAAO,CAC3B,CAAC;gBACF,aAAa,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAErD,sDAAsD;gBACtD,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,MAAM,IAAI,gBAAgB,CAAC,SAAS,IAAI,CAAC,aAAa,aAAa,EAAE;wBACnE,MAAM,EAAE,GAAG;qBACZ,CAAC,CAAC;gBACL,CAAC;gBAED,iCAAiC;gBACjC,IAAI,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzC,MAAM,IAAI,gBAAgB,CACxB,yCAAyC,aAAa,CAAC,MAAM,GAAG,EAChE,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;gBACJ,CAAC;gBAED,oEAAoE;gBACpE,IAAI,UAAU,IAAI,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBACnD,IAAI,aAAa,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;wBACvC,MAAM,IAAI,gBAAgB,CACxB,4DAA4D,UAAU,CAAC,MAAM,GAAG,EAChF,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAED,2CAA2C;YAC3C,MAAM,4BAA4B,GAAG,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;YACxE,IACE,4BAA4B,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;gBACrD,IAAI,CAAC,aAAa,EAClB,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,OAAO,EACP,OAAO,EACP,GAAG,IAAI,CAAC,aAAa,OAAO,CAC7B,CAAC;gBACF,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAE1D,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,MAAM,IAAI,gBAAgB,CAAC,SAAS,IAAI,CAAC,aAAa,aAAa,EAAE;wBACnE,MAAM,EAAE,GAAG;qBACZ,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,MAAM,KAAK,GAAU;gBACnB,GAAG,IAAI;gBACP,KAAK,EAAE,cAAc;gBACrB,OAAO;gBACP,SAAS,EAAE,GAAG;gBACd,WAAW,EAAE,oBAAoB;aAClC,CAAC;YAEF,+CAA+C;YAC/C,IAAI,GAA4B,CAAC;YACjC,IAAI,IAAsB,CAAC;YAC3B,IAAI,IAAsB,CAAC;YAE3B,wEAAwE;YACxE,uBAAuB;YACvB,IAAI,IAAI,CAAC,SAAS,KAAK,aAAa,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;gBAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,SAKpB,CAAC;gBACF,GAAG,GAAG;oBACJ,KAAK,EAAE,cAAc;oBACrB,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,MAAM,EAAE,SAAS;oBACjB,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,yDAAyD;oBACzD,WAAW,EAAE,oBAAoB;oBACjC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;oBAC1C,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,MAAM,EAAE,SAAS;oBACjB,KAAK,EAAE,SAAS;oBAChB,SAAS,EAAE,SAAS;oBACpB,WAAW,EAAE,SAAS;oBACtB,SAAS,EAAE,GAAG;oBACd,SAAS,EAAE,GAAG;iBACf,CAAC;gBACF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,cAAc,OAAO,CAAC,CAAC;gBACrE,MAAM,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAChC,CAAC;iBAAM,IAAI,IAAI,CAAC,SAAS,KAAK,aAAa,EAAE,CAAC;gBAC5C,wDAAwD;gBACxD,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,cAAc,OAAO,CAAC,CAAC;oBACrE,GAAG,GAAG;wBACJ,KAAK,EAAE,UAAU,CAAC,KAAK;wBACvB,YAAY,EAAE,UAAU,CAAC,YAAY;wBACrC,YAAY,EAAE,UAAU,CAAC,YAAY;wBACrC,WAAW,EAAE,UAAU,CAAC,WAAW;wBACnC,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;wBAC7C,KAAK,EAAE,UAAU,CAAC,KAAK;wBACvB,SAAS,EAAE,UAAU,CAAC,SAAS;wBAC/B,SAAS,EAAE,UAAU,CAAC,SAAS;wBAC/B,MAAM,EAAE,SAAS;wBACjB,MAAM,EAAE,SAAS;wBACjB,KAAK,EAAE,SAAS;wBAChB,WAAW,EAAE,SAAS;wBACtB,SAAS,EAAE,UAAU,CAAC,SAAS,IAAI,GAAG;wBACtC,SAAS,EAAE,GAAG;qBACf,CAAC;oBACF,MAAM,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,SAAS,KAAK,eAAe,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;gBACrE,MAAM,aAAa,GAAG,IAAI,CAAC,SAA6B,CAAC;gBACzD,wDAAwD;gBACxD,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,cAAc,OAAO,CAAC,CAAC;oBACrE,GAAG,GAAG;wBACJ,KAAK,EAAE,UAAU,CAAC,KAAK;wBACvB,YAAY,EAAE,UAAU,CAAC,YAAY;wBACrC,YAAY,EAAE,UAAU,CAAC,YAAY;wBACrC,WAAW,EAAE,UAAU,CAAC,WAAW;wBACnC,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;wBAC7C,KAAK,EAAE,UAAU,CAAC,KAAK;wBACvB,SAAS,EAAE,UAAU,CAAC,SAAS;wBAC/B,SAAS,EAAE,UAAU,CAAC,SAAS;wBAC/B,SAAS,EAAE,UAAU,CAAC,SAAS;wBAC/B,MAAM,EAAE,WAAW;wBACnB,MAAM,EAAE,aAAa,CAAC,MAAM;wBAC5B,KAAK,EAAE,SAAS;wBAChB,WAAW,EAAE,GAAG;wBAChB,SAAS,EAAE,GAAG;qBACf,CAAC;oBACF,MAAM,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACnD,MAAM,oBAAoB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,SAAS,KAAK,YAAY,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;gBAClE,MAAM,UAAU,GAAG,IAAI,CAAC,SAGvB,CAAC;gBACF,wDAAwD;gBACxD,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,cAAc,OAAO,CAAC,CAAC;oBACrE,GAAG,GAAG;wBACJ,KAAK,EAAE,UAAU,CAAC,KAAK;wBACvB,YAAY,EAAE,UAAU,CAAC,YAAY;wBACrC,YAAY,EAAE,UAAU,CAAC,YAAY;wBACrC,WAAW,EAAE,UAAU,CAAC,WAAW;wBACnC,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;wBAC7C,KAAK,EAAE,UAAU,CAAC,KAAK;wBACvB,SAAS,EAAE,UAAU,CAAC,SAAS;wBAC/B,SAAS,EAAE,UAAU,CAAC,SAAS;wBAC/B,SAAS,EAAE,UAAU,CAAC,SAAS;wBAC/B,MAAM,EAAE,QAAQ;wBAChB,MAAM,EAAE,SAAS;wBACjB,KAAK,EAAE;4BACL,OAAO,EACL,OAAO,UAAU,CAAC,KAAK,KAAK,QAAQ;gCAClC,CAAC,CAAC,UAAU,CAAC,KAAK;gCAClB,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,IAAI,eAAe,CAAC;4BACpD,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK;4BAC9B,IAAI,EAAE,UAAU,CAAC,SAAS;yBAC3B;wBACD,WAAW,EAAE,GAAG;wBAChB,SAAS,EAAE,GAAG;qBACf,CAAC;oBACF,MAAM,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACnD,MAAM,oBAAoB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,SAAS,KAAK,eAAe,EAAE,CAAC;gBAC9C,wDAAwD;gBACxD,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,cAAc,OAAO,CAAC,CAAC;oBACrE,GAAG,GAAG;wBACJ,KAAK,EAAE,UAAU,CAAC,KAAK;wBACvB,YAAY,EAAE,UAAU,CAAC,YAAY;wBACrC,YAAY,EAAE,UAAU,CAAC,YAAY;wBACrC,WAAW,EAAE,UAAU,CAAC,WAAW;wBACnC,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;wBAC7C,KAAK,EAAE,UAAU,CAAC,KAAK;wBACvB,SAAS,EAAE,UAAU,CAAC,SAAS;wBAC/B,SAAS,EAAE,UAAU,CAAC,SAAS;wBAC/B,SAAS,EAAE,UAAU,CAAC,SAAS;wBAC/B,MAAM,EAAE,WAAW;wBACnB,MAAM,EAAE,SAAS;wBACjB,KAAK,EAAE,SAAS;wBAChB,WAAW,EAAE,GAAG;wBAChB,SAAS,EAAE,GAAG;qBACf,CAAC;oBACF,MAAM,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACnD,MAAM,oBAAoB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;iBAAM;YACL,wBAAwB;YACxB,IAAI,CAAC,SAAS,KAAK,cAAc;gBACjC,WAAW,IAAI,IAAI,EACnB,CAAC;gBACD,oFAAoF;gBACpF,MAAM,QAAQ,GAAG,IAAI,CAAC,SAGrB,CAAC;gBACF,IAAI,GAAG;oBACL,KAAK,EAAE,cAAc;oBACrB,MAAM,EAAE,IAAI,CAAC,aAAa;oBAC1B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,MAAM,EAAE,SAAS;oBACjB,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,MAAM,EAAE,SAAS;oBACjB,KAAK,EAAE,SAAS;oBAChB,OAAO,EAAE,CAAC;oBACV,SAAS,EAAE,SAAS;oBACpB,WAAW,EAAE,SAAS;oBACtB,SAAS,EAAE,GAAG;oBACd,SAAS,EAAE,GAAG;oBACd,0DAA0D;oBAC1D,WAAW,EAAE,oBAAoB;iBAClC,CAAC;gBACF,MAAM,gBAAgB,GAAG,GAAG,cAAc,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,OAAO,EACP,OAAO,EACP,GAAG,gBAAgB,OAAO,CAC3B,CAAC;gBACF,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAClC,CAAC;iBAAM,IAAI,IAAI,CAAC,SAAS,KAAK,cAAc,EAAE,CAAC;gBAC7C,6DAA6D;gBAC7D,kEAAkE;gBAClE,2DAA2D;gBAC3D,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,gBAAgB,GAAG,GAAG,cAAc,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,OAAO,EACP,OAAO,EACP,GAAG,gBAAgB,OAAO,CAC3B,CAAC;oBACF,IAAI,GAAG;wBACL,GAAG,aAAa;wBAChB,MAAM,EAAE,SAAS;wBACjB,wCAAwC;wBACxC,SAAS,EAAE,aAAa,CAAC,SAAS,IAAI,GAAG;wBACzC,2CAA2C;wBAC3C,OAAO,EAAE,aAAa,CAAC,OAAO,GAAG,CAAC;wBAClC,SAAS,EAAE,GAAG;qBACf,CAAC;oBACF,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAgB,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;gBACtE,6CAA6C;gBAC7C,2DAA2D;gBAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,SAA4B,CAAC;gBACxD,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,gBAAgB,GAAG,GAAG,cAAc,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,OAAO,EACP,OAAO,EACP,GAAG,gBAAgB,OAAO,CAC3B,CAAC;oBACF,IAAI,GAAG;wBACL,GAAG,aAAa;wBAChB,MAAM,EAAE,WAAW;wBACnB,MAAM,EAAE,aAAa,CAAC,MAAM;wBAC5B,WAAW,EAAE,GAAG;wBAChB,SAAS,EAAE,GAAG;qBACf,CAAC;oBACF,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,SAAS,KAAK,aAAa,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;gBACnE,yCAAyC;gBACzC,2DAA2D;gBAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,SAGvB,CAAC;gBACF,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,gBAAgB,GAAG,GAAG,cAAc,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,OAAO,EACP,OAAO,EACP,GAAG,gBAAgB,OAAO,CAC3B,CAAC;oBACF,MAAM,KAAK,GAAG;wBACZ,OAAO,EACL,OAAO,UAAU,CAAC,KAAK,KAAK,QAAQ;4BAClC,CAAC,CAAC,UAAU,CAAC,KAAK;4BAClB,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,IAAI,eAAe,CAAC;wBACpD,KAAK,EAAE,UAAU,CAAC,KAAK;qBACxB,CAAC;oBACF,IAAI,GAAG;wBACL,GAAG,aAAa;wBAChB,MAAM,EAAE,QAAQ;wBAChB,KAAK;wBACL,WAAW,EAAE,GAAG;wBAChB,SAAS,EAAE,GAAG;qBACf,CAAC;oBACF,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,SAAS,KAAK,eAAe,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;gBACrE,8DAA8D;gBAC9D,2DAA2D;gBAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,SAItB,CAAC;gBACF,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,gBAAgB,GAAG,GAAG,cAAc,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,OAAO,EACP,OAAO,EACP,GAAG,gBAAgB,OAAO,CAC3B,CAAC;oBACF,IAAI,GAAG;wBACL,GAAG,aAAa;wBAChB,MAAM,EAAE,SAAS;wBACjB,KAAK,EAAE;4BACL,OAAO,EACL,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ;gCACjC,CAAC,CAAC,SAAS,CAAC,KAAK;gCACjB,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,IAAI,eAAe,CAAC;4BACnD,KAAK,EAAE,SAAS,CAAC,KAAK;yBACvB;wBACD,UAAU,EAAE,SAAS,CAAC,UAAU;wBAChC,SAAS,EAAE,GAAG;qBACf,CAAC;oBACF,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;iBAAM;YACL,wBAAwB;YACxB,IAAI,CAAC,SAAS,KAAK,cAAc;gBACjC,WAAW,IAAI,IAAI,EACnB,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAGrB,CAAC;gBAEF,iDAAiD;gBACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC7C,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAChD,IAAI,WAAW,GAAG,KAAK,CAAC;gBACxB,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;oBAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;oBAC7D,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;oBAClE,IAAI,YAAY,IAAI,YAAY,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;wBAC1D,WAAW,GAAG,IAAI,CAAC;wBACnB,MAAM;oBACR,CAAC;gBACH,CAAC;gBAED,IAAI,WAAW,EAAE,CAAC;oBAChB,qDAAqD;oBACrD,oFAAoF;oBACpF,MAAM,aAAa,GAAU;wBAC3B,SAAS,EAAE,eAAe;wBAC1B,aAAa,EAAE,IAAI,CAAC,aAAa;wBACjC,SAAS,EAAE;4BACT,KAAK,EAAE,QAAQ,CAAC,KAAK;yBACtB;wBACD,KAAK,EAAE,cAAc;wBACrB,OAAO;wBACP,SAAS,EAAE,GAAG;wBACd,WAAW,EAAE,oBAAoB;qBAClC,CAAC;oBAEF,2BAA2B;oBAC3B,MAAM,YAAY,GAAG,GAAG,cAAc,IAAI,OAAO,EAAE,CAAC;oBACpD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CACzB,OAAO,EACP,QAAQ,EACR,GAAG,YAAY,OAAO,CACvB,CAAC;oBACF,MAAM,SAAS,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;oBAE1C,MAAM,WAAW,GACf,MAAM,EAAE,WAAW,IAAI,2BAA2B,CAAC;oBACrD,MAAM,aAAa,GAAG,eAAe,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;oBAElE,kEAAkE;oBAClE,OAAO;wBACL,KAAK,EAAE,aAAa;wBACpB,GAAG;wBACH,IAAI;wBACJ,IAAI,EAAE,SAAS;qBAChB,CAAC;gBACJ,CAAC;gBAED,IAAI,GAAG;oBACL,KAAK,EAAE,cAAc;oBACrB,MAAM,EAAE,IAAI,CAAC,aAAa;oBAC1B,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,OAAO,EAAE,aAAa;oBACtB,SAAS,EAAE,eAAe;oBAC1B,WAAW,EAAE,OAAO;oBACpB,SAAS,EAAE,GAAG;oBACd,0DAA0D;oBAC1D,WAAW,EAAE,oBAAoB;iBAClC,CAAC;gBACF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,OAAO,EACP,OAAO,EACP,GAAG,IAAI,CAAC,aAAa,OAAO,CAC7B,CAAC;gBACF,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAClC,CAAC;iBAAM,IAAI,IAAI,CAAC,SAAS,KAAK,eAAe,EAAE,CAAC;gBAC9C,gCAAgC;gBAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,OAAO,EACP,OAAO,EACP,GAAG,IAAI,CAAC,aAAa,OAAO,CAC7B,CAAC;gBACF,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;YACD,mEAAmE;YACnE,8DAA8D;YAE9D,oDAAoD;YACpD,MAAM,YAAY,GAAG,GAAG,cAAc,IAAI,OAAO,EAAE,CAAC;YACpD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,YAAY,OAAO,CAAC,CAAC;YACvE,MAAM,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAElC,MAAM,WAAW,GAAG,MAAM,EAAE,WAAW,IAAI,2BAA2B,CAAC;YACvE,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAE1D,+DAA+D;YAC/D,OAAO;gBACL,KAAK,EAAE,aAAa;gBACpB,GAAG;gBACH,IAAI;gBACJ,IAAI;aACL,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,MAAM;YACf,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;YACzB,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,2BAA2B,CAAC;YACtE,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC;gBAC5C,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;gBACvC,MAAM,EAAE,WAAW;gBACnB,UAAU,EAAE,GAAG,KAAK,GAAG;gBACvB,2DAA2D;gBAC3D,mDAAmD;gBACnD,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,IAAI,KAAK;gBAChD,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK;gBAC/B,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM;gBACjC,YAAY,EAAE,kBAAkB,CAAC,MAAM,CAAC;gBACxC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO;aAChC,CAAC,CAAC;YAEH,yDAAyD;YACzD,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;gBAC3B,OAAO;oBACL,GAAG,MAAM;oBACT,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;wBAC9B,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,KAAY,CAAC;wBACxD,OAAO,IAAI,CAAC;oBACd,CAAC,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,KAAK,CAAC,mBAAmB,CAAC,MAAM;YAC9B,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;YAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,2BAA2B,CAAC;YACtE,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC;gBAC5C,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;gBACvC,MAAM,EAAE,WAAW;gBACnB,oCAAoC;gBACpC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,KAAK,aAAa;gBACxD,2DAA2D;gBAC3D,mDAAmD;gBACnD,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,IAAI,KAAK;gBAChD,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK;gBAC/B,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM;gBACjC,YAAY,EAAE,kBAAkB,CAAC,MAAM,CAAC;gBACxC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO;aAChC,CAAC,CAAC;YAEH,yDAAyD;YACzD,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;gBAC3B,OAAO;oBACL,GAAG,MAAM;oBACT,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;wBAC9B,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,KAAY,CAAC;wBACxD,OAAO,IAAI,CAAC;oBACd,CAAC,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { Event, Hook, Step, StepWithoutData, WorkflowRun, WorkflowRunWithoutData } from '@workflow/world';
2
+ /**
3
+ * Filter run data based on resolveData setting.
4
+ * When resolveData is 'none', strips input/output to reduce payload size.
5
+ */
6
+ export declare function filterRunData(run: WorkflowRun, resolveData: 'none'): WorkflowRunWithoutData;
7
+ export declare function filterRunData(run: WorkflowRun, resolveData: 'all'): WorkflowRun;
8
+ export declare function filterRunData(run: WorkflowRun, resolveData: 'none' | 'all'): WorkflowRun | WorkflowRunWithoutData;
9
+ /**
10
+ * Filter step data based on resolveData setting.
11
+ * When resolveData is 'none', strips input/output to reduce payload size.
12
+ */
13
+ export declare function filterStepData(step: Step, resolveData: 'none'): StepWithoutData;
14
+ export declare function filterStepData(step: Step, resolveData: 'all'): Step;
15
+ export declare function filterStepData(step: Step, resolveData: 'none' | 'all'): Step | StepWithoutData;
16
+ /**
17
+ * Filter event data based on resolveData setting.
18
+ * When resolveData is 'none', strips eventData to reduce payload size.
19
+ */
20
+ export declare function filterEventData(event: Event, resolveData: 'none' | 'all'): Event;
21
+ /**
22
+ * Filter hook data based on resolveData setting.
23
+ * When resolveData is 'none', strips metadata to reduce payload size.
24
+ */
25
+ export declare function filterHookData(hook: Hook, resolveData: 'none' | 'all'): Hook;
26
+ //# sourceMappingURL=filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/storage/filters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,eAAe,EACf,WAAW,EACX,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAEzB;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,WAAW,EAChB,WAAW,EAAE,MAAM,GAClB,sBAAsB,CAAC;AAC1B,wBAAgB,aAAa,CAC3B,GAAG,EAAE,WAAW,EAChB,WAAW,EAAE,KAAK,GACjB,WAAW,CAAC;AACf,wBAAgB,aAAa,CAC3B,GAAG,EAAE,WAAW,EAChB,WAAW,EAAE,MAAM,GAAG,KAAK,GAC1B,WAAW,GAAG,sBAAsB,CAAC;AAexC;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,MAAM,GAClB,eAAe,CAAC;AACnB,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,GAAG,IAAI,CAAC;AACrE,wBAAgB,cAAc,CAC5B,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,MAAM,GAAG,KAAK,GAC1B,IAAI,GAAG,eAAe,CAAC;AAe1B;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,MAAM,GAAG,KAAK,GAC1B,KAAK,CAMP;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAM5E"}
@@ -0,0 +1,43 @@
1
+ export function filterRunData(run, resolveData) {
2
+ if (resolveData === 'none') {
3
+ return {
4
+ ...run,
5
+ input: undefined,
6
+ output: undefined,
7
+ };
8
+ }
9
+ return run;
10
+ }
11
+ export function filterStepData(step, resolveData) {
12
+ if (resolveData === 'none') {
13
+ return {
14
+ ...step,
15
+ input: undefined,
16
+ output: undefined,
17
+ };
18
+ }
19
+ return step;
20
+ }
21
+ /**
22
+ * Filter event data based on resolveData setting.
23
+ * When resolveData is 'none', strips eventData to reduce payload size.
24
+ */
25
+ export function filterEventData(event, resolveData) {
26
+ if (resolveData === 'none') {
27
+ const { eventData: _eventData, ...rest } = event;
28
+ return rest;
29
+ }
30
+ return event;
31
+ }
32
+ /**
33
+ * Filter hook data based on resolveData setting.
34
+ * When resolveData is 'none', strips metadata to reduce payload size.
35
+ */
36
+ export function filterHookData(hook, resolveData) {
37
+ if (resolveData === 'none') {
38
+ const { metadata: _metadata, ...rest } = hook;
39
+ return rest;
40
+ }
41
+ return hook;
42
+ }
43
+ //# sourceMappingURL=filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.js","sourceRoot":"","sources":["../../src/storage/filters.ts"],"names":[],"mappings":"AAyBA,MAAM,UAAU,aAAa,CAC3B,GAAgB,EAChB,WAA2B;IAE3B,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3B,OAAO;YACL,GAAG,GAAG;YACN,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,SAAS;SACQ,CAAC;IAC9B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAeD,MAAM,UAAU,cAAc,CAC5B,IAAU,EACV,WAA2B;IAE3B,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3B,OAAO;YACL,GAAG,IAAI;YACP,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,SAAS;SACC,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAY,EACZ,WAA2B;IAE3B,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,KAAY,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAU,EAAE,WAA2B;IACpE,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,IAAW,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Create a monotonic ULID factory that ensures ULIDs are always increasing
3
+ * even when generated within the same millisecond.
4
+ */
5
+ export declare const monotonicUlid: import("ulid").ULIDFactory;
6
+ /**
7
+ * Creates a function to extract createdAt date from a filename based on ULID.
8
+ * Used for efficient pagination without reading file contents.
9
+ *
10
+ * @param idPrefix - The prefix to strip from filenames (e.g., 'wrun', 'evnt', 'step')
11
+ * @returns A function that extracts Date from filename, or null if not extractable
12
+ */
13
+ export declare const getObjectCreatedAt: (idPrefix: string) => (filename: string) => Date | null;
14
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/storage/helpers.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,aAAa,4BAAwC,CAAC;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAC5B,UAAU,MAAM,MAChB,UAAU,MAAM,KAAG,IAAI,GAAG,IAqB1B,CAAC"}