@workflow/world-postgres 4.0.1-beta.2 → 4.1.0-beta.10
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/LICENSE.md +201 -21
- package/README.md +33 -0
- package/bin/setup.js +12 -0
- package/dist/boss.d.ts +15 -0
- package/dist/boss.d.ts.map +1 -0
- package/dist/boss.js +18 -0
- package/dist/boss.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +44 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -0
- package/dist/drizzle/index.d.ts +8 -0
- package/dist/drizzle/index.d.ts.map +1 -0
- package/dist/drizzle/index.js +7 -0
- package/dist/drizzle/index.js.map +1 -0
- package/dist/drizzle/schema.d.ts +843 -0
- package/dist/drizzle/schema.d.ts.map +1 -0
- package/dist/drizzle/schema.js +88 -0
- package/dist/drizzle/schema.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/queue.d.ts +17 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +103 -0
- package/dist/queue.js.map +1 -0
- package/dist/storage.d.ts +7 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +585 -0
- package/dist/storage.js.map +1 -0
- package/dist/streamer.d.ts +5 -0
- package/dist/streamer.d.ts.map +1 -0
- package/dist/streamer.js +157 -0
- package/dist/streamer.js.map +1 -0
- package/dist/util.d.ts +6 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +20 -0
- package/dist/util.js.map +1 -0
- package/dist/zod.d.ts +3 -0
- package/dist/zod.d.ts.map +1 -0
- package/dist/zod.js +10 -0
- package/dist/zod.js.map +1 -0
- package/package.json +32 -17
- package/src/drizzle/migrations/0000_cultured_the_anarchist.sql +84 -0
- package/src/drizzle/migrations/0001_update_error_schema.sql +7 -0
- package/src/drizzle/migrations/meta/0000_snapshot.json +499 -0
- package/src/drizzle/migrations/meta/_journal.json +13 -0
package/dist/storage.js
ADDED
|
@@ -0,0 +1,585 @@
|
|
|
1
|
+
import { WorkflowAPIError } from '@workflow/errors';
|
|
2
|
+
import { EventSchema, HookSchema, StepSchema, WorkflowRunSchema, } from '@workflow/world';
|
|
3
|
+
import { and, desc, eq, gt, lt, sql } from 'drizzle-orm';
|
|
4
|
+
import { monotonicFactory } from 'ulid';
|
|
5
|
+
import { Schema } from './drizzle/index.js';
|
|
6
|
+
import { compact } from './util.js';
|
|
7
|
+
/**
|
|
8
|
+
* Serialize a StructuredError object into a JSON string
|
|
9
|
+
*/
|
|
10
|
+
function serializeRunError(data) {
|
|
11
|
+
if (!data.error) {
|
|
12
|
+
return data;
|
|
13
|
+
}
|
|
14
|
+
const { error, ...rest } = data;
|
|
15
|
+
return {
|
|
16
|
+
...rest,
|
|
17
|
+
error: JSON.stringify({
|
|
18
|
+
message: error.message,
|
|
19
|
+
stack: error.stack,
|
|
20
|
+
code: error.code,
|
|
21
|
+
}),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Deserialize error JSON string (or legacy flat fields) into a StructuredError object
|
|
26
|
+
* Handles backwards compatibility:
|
|
27
|
+
* - If error is a JSON string with {message, stack, code} → parse into StructuredError
|
|
28
|
+
* - If error is a plain string → treat as error message
|
|
29
|
+
* - If errorStack/errorCode exist (legacy) → combine into StructuredError
|
|
30
|
+
*/
|
|
31
|
+
function deserializeRunError(run) {
|
|
32
|
+
const { error, errorStack, errorCode, ...rest } = run;
|
|
33
|
+
if (!error && !errorStack && !errorCode) {
|
|
34
|
+
return run;
|
|
35
|
+
}
|
|
36
|
+
// Try to parse as structured error JSON
|
|
37
|
+
if (error) {
|
|
38
|
+
try {
|
|
39
|
+
const parsed = JSON.parse(error);
|
|
40
|
+
if (typeof parsed === 'object' && parsed.message !== undefined) {
|
|
41
|
+
return {
|
|
42
|
+
...rest,
|
|
43
|
+
error: {
|
|
44
|
+
message: parsed.message,
|
|
45
|
+
stack: parsed.stack,
|
|
46
|
+
code: parsed.code,
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Not JSON, treat as plain string
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Backwards compatibility: handle legacy separate fields or plain string error
|
|
56
|
+
return {
|
|
57
|
+
...rest,
|
|
58
|
+
error: {
|
|
59
|
+
message: error || '',
|
|
60
|
+
stack: errorStack,
|
|
61
|
+
code: errorCode,
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Serialize a StructuredError object into a JSON string for steps
|
|
67
|
+
*/
|
|
68
|
+
function serializeStepError(data) {
|
|
69
|
+
if (!data.error) {
|
|
70
|
+
return data;
|
|
71
|
+
}
|
|
72
|
+
const { error, ...rest } = data;
|
|
73
|
+
return {
|
|
74
|
+
...rest,
|
|
75
|
+
error: JSON.stringify({
|
|
76
|
+
message: error.message,
|
|
77
|
+
stack: error.stack,
|
|
78
|
+
code: error.code,
|
|
79
|
+
}),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Deserialize error JSON string (or legacy flat fields) into a StructuredError object for steps
|
|
84
|
+
*/
|
|
85
|
+
function deserializeStepError(step) {
|
|
86
|
+
const { error, ...rest } = step;
|
|
87
|
+
if (!error) {
|
|
88
|
+
return step;
|
|
89
|
+
}
|
|
90
|
+
// Try to parse as structured error JSON
|
|
91
|
+
if (error) {
|
|
92
|
+
try {
|
|
93
|
+
const parsed = JSON.parse(error);
|
|
94
|
+
if (typeof parsed === 'object' && parsed.message !== undefined) {
|
|
95
|
+
return {
|
|
96
|
+
...rest,
|
|
97
|
+
error: {
|
|
98
|
+
message: parsed.message,
|
|
99
|
+
stack: parsed.stack,
|
|
100
|
+
code: parsed.code,
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
// Not JSON, treat as plain string
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Backwards compatibility: handle legacy separate fields or plain string error
|
|
110
|
+
return {
|
|
111
|
+
...rest,
|
|
112
|
+
error: {
|
|
113
|
+
message: error || '',
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
export function createRunsStorage(drizzle) {
|
|
118
|
+
const ulid = monotonicFactory();
|
|
119
|
+
const { runs } = Schema;
|
|
120
|
+
const get = drizzle
|
|
121
|
+
.select()
|
|
122
|
+
.from(runs)
|
|
123
|
+
.where(eq(runs.runId, sql.placeholder('id')))
|
|
124
|
+
.limit(1)
|
|
125
|
+
.prepare('workflow_runs_get');
|
|
126
|
+
return {
|
|
127
|
+
async get(id, params) {
|
|
128
|
+
const [value] = await get.execute({ id });
|
|
129
|
+
if (!value) {
|
|
130
|
+
throw new WorkflowAPIError(`Run not found: ${id}`, { status: 404 });
|
|
131
|
+
}
|
|
132
|
+
const deserialized = deserializeRunError(compact(value));
|
|
133
|
+
const parsed = WorkflowRunSchema.parse(deserialized);
|
|
134
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
135
|
+
return filterRunData(parsed, resolveData);
|
|
136
|
+
},
|
|
137
|
+
async cancel(id, params) {
|
|
138
|
+
// TODO: we might want to guard this for only specific statuses
|
|
139
|
+
const [value] = await drizzle
|
|
140
|
+
.update(Schema.runs)
|
|
141
|
+
.set({ status: 'cancelled', completedAt: sql `now()` })
|
|
142
|
+
.where(eq(runs.runId, id))
|
|
143
|
+
.returning();
|
|
144
|
+
if (!value) {
|
|
145
|
+
throw new WorkflowAPIError(`Run not found: ${id}`, { status: 404 });
|
|
146
|
+
}
|
|
147
|
+
// Clean up all hooks for this run when cancelling
|
|
148
|
+
await drizzle.delete(Schema.hooks).where(eq(Schema.hooks.runId, id));
|
|
149
|
+
const deserialized = deserializeRunError(compact(value));
|
|
150
|
+
const parsed = WorkflowRunSchema.parse(deserialized);
|
|
151
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
152
|
+
return filterRunData(parsed, resolveData);
|
|
153
|
+
},
|
|
154
|
+
async pause(id, params) {
|
|
155
|
+
// TODO: we might want to guard this for only specific statuses
|
|
156
|
+
const [value] = await drizzle
|
|
157
|
+
.update(Schema.runs)
|
|
158
|
+
.set({ status: 'paused' })
|
|
159
|
+
.where(eq(runs.runId, id))
|
|
160
|
+
.returning();
|
|
161
|
+
if (!value) {
|
|
162
|
+
throw new WorkflowAPIError(`Run not found: ${id}`, { status: 404 });
|
|
163
|
+
}
|
|
164
|
+
const deserialized = deserializeRunError(compact(value));
|
|
165
|
+
const parsed = WorkflowRunSchema.parse(deserialized);
|
|
166
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
167
|
+
return filterRunData(parsed, resolveData);
|
|
168
|
+
},
|
|
169
|
+
async resume(id, params) {
|
|
170
|
+
// Fetch current run to check if startedAt is already set
|
|
171
|
+
const [currentRun] = await drizzle
|
|
172
|
+
.select()
|
|
173
|
+
.from(runs)
|
|
174
|
+
.where(eq(runs.runId, id))
|
|
175
|
+
.limit(1);
|
|
176
|
+
if (!currentRun) {
|
|
177
|
+
throw new WorkflowAPIError(`Run not found: ${id}`, { status: 404 });
|
|
178
|
+
}
|
|
179
|
+
const updates = {
|
|
180
|
+
status: 'running',
|
|
181
|
+
};
|
|
182
|
+
// Only set startedAt the first time the run transitions to 'running'
|
|
183
|
+
if (!currentRun.startedAt) {
|
|
184
|
+
updates.startedAt = new Date();
|
|
185
|
+
}
|
|
186
|
+
const [value] = await drizzle
|
|
187
|
+
.update(Schema.runs)
|
|
188
|
+
.set(updates)
|
|
189
|
+
.where(and(eq(runs.runId, id), eq(runs.status, 'paused')))
|
|
190
|
+
.returning();
|
|
191
|
+
if (!value) {
|
|
192
|
+
throw new WorkflowAPIError(`Paused run not found: ${id}`, {
|
|
193
|
+
status: 404,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
const deserialized = deserializeRunError(compact(value));
|
|
197
|
+
const parsed = WorkflowRunSchema.parse(deserialized);
|
|
198
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
199
|
+
return filterRunData(parsed, resolveData);
|
|
200
|
+
},
|
|
201
|
+
async list(params) {
|
|
202
|
+
const limit = params?.pagination?.limit ?? 20;
|
|
203
|
+
const fromCursor = params?.pagination?.cursor;
|
|
204
|
+
const all = await drizzle
|
|
205
|
+
.select()
|
|
206
|
+
.from(runs)
|
|
207
|
+
.where(and(map(fromCursor, (c) => lt(runs.runId, c)), map(params?.workflowName, (wf) => eq(runs.workflowName, wf)), map(params?.status, (wf) => eq(runs.status, wf))))
|
|
208
|
+
.orderBy(desc(runs.runId))
|
|
209
|
+
.limit(limit + 1);
|
|
210
|
+
const values = all.slice(0, limit);
|
|
211
|
+
const hasMore = all.length > limit;
|
|
212
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
213
|
+
return {
|
|
214
|
+
data: values.map((v) => {
|
|
215
|
+
const deserialized = deserializeRunError(compact(v));
|
|
216
|
+
const parsed = WorkflowRunSchema.parse(deserialized);
|
|
217
|
+
return filterRunData(parsed, resolveData);
|
|
218
|
+
}),
|
|
219
|
+
hasMore,
|
|
220
|
+
cursor: values.at(-1)?.runId ?? null,
|
|
221
|
+
};
|
|
222
|
+
},
|
|
223
|
+
async create(data) {
|
|
224
|
+
const runId = `wrun_${ulid()}`;
|
|
225
|
+
const [value] = await drizzle
|
|
226
|
+
.insert(runs)
|
|
227
|
+
.values({
|
|
228
|
+
runId,
|
|
229
|
+
input: data.input,
|
|
230
|
+
executionContext: data.executionContext,
|
|
231
|
+
deploymentId: data.deploymentId,
|
|
232
|
+
status: 'pending',
|
|
233
|
+
workflowName: data.workflowName,
|
|
234
|
+
})
|
|
235
|
+
.onConflictDoNothing()
|
|
236
|
+
.returning();
|
|
237
|
+
if (!value) {
|
|
238
|
+
throw new WorkflowAPIError(`Run ${runId} already exists`, {
|
|
239
|
+
status: 409,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
return deserializeRunError(compact(value));
|
|
243
|
+
},
|
|
244
|
+
async update(id, data) {
|
|
245
|
+
// Fetch current run to check if startedAt is already set
|
|
246
|
+
const [currentRun] = await drizzle
|
|
247
|
+
.select()
|
|
248
|
+
.from(runs)
|
|
249
|
+
.where(eq(runs.runId, id))
|
|
250
|
+
.limit(1);
|
|
251
|
+
if (!currentRun) {
|
|
252
|
+
throw new WorkflowAPIError(`Run not found: ${id}`, { status: 404 });
|
|
253
|
+
}
|
|
254
|
+
// Serialize the error field if present
|
|
255
|
+
const serialized = serializeRunError(data);
|
|
256
|
+
const updates = {
|
|
257
|
+
...serialized,
|
|
258
|
+
output: data.output,
|
|
259
|
+
};
|
|
260
|
+
// Only set startedAt the first time transitioning to 'running'
|
|
261
|
+
if (data.status === 'running' && !currentRun.startedAt) {
|
|
262
|
+
updates.startedAt = new Date();
|
|
263
|
+
}
|
|
264
|
+
const isBecomingTerminal = data.status === 'completed' ||
|
|
265
|
+
data.status === 'failed' ||
|
|
266
|
+
data.status === 'cancelled';
|
|
267
|
+
if (isBecomingTerminal) {
|
|
268
|
+
updates.completedAt = new Date();
|
|
269
|
+
}
|
|
270
|
+
const [value] = await drizzle
|
|
271
|
+
.update(runs)
|
|
272
|
+
.set(updates)
|
|
273
|
+
.where(eq(runs.runId, id))
|
|
274
|
+
.returning();
|
|
275
|
+
if (!value) {
|
|
276
|
+
throw new WorkflowAPIError(`Run not found: ${id}`, { status: 404 });
|
|
277
|
+
}
|
|
278
|
+
// If transitioning to a terminal status, clean up all hooks for this run
|
|
279
|
+
if (isBecomingTerminal) {
|
|
280
|
+
await drizzle.delete(Schema.hooks).where(eq(Schema.hooks.runId, id));
|
|
281
|
+
}
|
|
282
|
+
return deserializeRunError(compact(value));
|
|
283
|
+
},
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
function map(obj, fn) {
|
|
287
|
+
return obj ? fn(obj) : undefined;
|
|
288
|
+
}
|
|
289
|
+
export function createEventsStorage(drizzle) {
|
|
290
|
+
const ulid = monotonicFactory();
|
|
291
|
+
const { events } = Schema;
|
|
292
|
+
return {
|
|
293
|
+
async create(runId, data, params) {
|
|
294
|
+
const eventId = `wevt_${ulid()}`;
|
|
295
|
+
const [value] = await drizzle
|
|
296
|
+
.insert(events)
|
|
297
|
+
.values({
|
|
298
|
+
runId,
|
|
299
|
+
eventId,
|
|
300
|
+
correlationId: data.correlationId,
|
|
301
|
+
eventType: data.eventType,
|
|
302
|
+
eventData: 'eventData' in data ? data.eventData : undefined,
|
|
303
|
+
})
|
|
304
|
+
.returning({ createdAt: events.createdAt });
|
|
305
|
+
if (!value) {
|
|
306
|
+
throw new WorkflowAPIError(`Event ${eventId} could not be created`, {
|
|
307
|
+
status: 409,
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
const result = { ...data, ...value, runId, eventId };
|
|
311
|
+
const parsed = EventSchema.parse(result);
|
|
312
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
313
|
+
return filterEventData(parsed, resolveData);
|
|
314
|
+
},
|
|
315
|
+
async list(params) {
|
|
316
|
+
const limit = params?.pagination?.limit ?? 100;
|
|
317
|
+
const sortOrder = params.pagination?.sortOrder || 'asc';
|
|
318
|
+
const order = sortOrder === 'desc'
|
|
319
|
+
? { by: desc(events.eventId), compare: lt }
|
|
320
|
+
: { by: events.eventId, compare: gt };
|
|
321
|
+
const all = await drizzle
|
|
322
|
+
.select()
|
|
323
|
+
.from(events)
|
|
324
|
+
.where(and(eq(events.runId, params.runId), map(params.pagination?.cursor, (c) => order.compare(events.eventId, c))))
|
|
325
|
+
.orderBy(order.by)
|
|
326
|
+
.limit(limit + 1);
|
|
327
|
+
const values = all.slice(0, limit);
|
|
328
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
329
|
+
return {
|
|
330
|
+
data: values.map((v) => {
|
|
331
|
+
const parsed = EventSchema.parse(compact(v));
|
|
332
|
+
return filterEventData(parsed, resolveData);
|
|
333
|
+
}),
|
|
334
|
+
cursor: values.at(-1)?.eventId ?? null,
|
|
335
|
+
hasMore: all.length > limit,
|
|
336
|
+
};
|
|
337
|
+
},
|
|
338
|
+
async listByCorrelationId(params) {
|
|
339
|
+
const limit = params?.pagination?.limit ?? 100;
|
|
340
|
+
const sortOrder = params.pagination?.sortOrder || 'asc';
|
|
341
|
+
const order = sortOrder === 'desc'
|
|
342
|
+
? { by: desc(events.eventId), compare: lt }
|
|
343
|
+
: { by: events.eventId, compare: gt };
|
|
344
|
+
const all = await drizzle
|
|
345
|
+
.select()
|
|
346
|
+
.from(events)
|
|
347
|
+
.where(and(eq(events.correlationId, params.correlationId), map(params.pagination?.cursor, (c) => order.compare(events.eventId, c))))
|
|
348
|
+
.orderBy(order.by)
|
|
349
|
+
.limit(limit + 1);
|
|
350
|
+
const values = all.slice(0, limit);
|
|
351
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
352
|
+
return {
|
|
353
|
+
data: values.map((v) => {
|
|
354
|
+
const parsed = EventSchema.parse(compact(v));
|
|
355
|
+
return filterEventData(parsed, resolveData);
|
|
356
|
+
}),
|
|
357
|
+
cursor: values.at(-1)?.eventId ?? null,
|
|
358
|
+
hasMore: all.length > limit,
|
|
359
|
+
};
|
|
360
|
+
},
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
export function createHooksStorage(drizzle) {
|
|
364
|
+
const { hooks } = Schema;
|
|
365
|
+
const getByToken = drizzle
|
|
366
|
+
.select()
|
|
367
|
+
.from(hooks)
|
|
368
|
+
.where(eq(hooks.token, sql.placeholder('token')))
|
|
369
|
+
.limit(1)
|
|
370
|
+
.prepare('workflow_hooks_get_by_token');
|
|
371
|
+
return {
|
|
372
|
+
async get(hookId, params) {
|
|
373
|
+
const [value] = await drizzle
|
|
374
|
+
.select()
|
|
375
|
+
.from(hooks)
|
|
376
|
+
.where(eq(hooks.hookId, hookId))
|
|
377
|
+
.limit(1);
|
|
378
|
+
const parsed = HookSchema.parse(compact(value));
|
|
379
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
380
|
+
return filterHookData(parsed, resolveData);
|
|
381
|
+
},
|
|
382
|
+
async create(runId, data, params) {
|
|
383
|
+
const [value] = await drizzle
|
|
384
|
+
.insert(hooks)
|
|
385
|
+
.values({
|
|
386
|
+
runId,
|
|
387
|
+
hookId: data.hookId,
|
|
388
|
+
token: data.token,
|
|
389
|
+
ownerId: '', // TODO: get from context
|
|
390
|
+
projectId: '', // TODO: get from context
|
|
391
|
+
environment: '', // TODO: get from context
|
|
392
|
+
})
|
|
393
|
+
.onConflictDoNothing()
|
|
394
|
+
.returning();
|
|
395
|
+
if (!value) {
|
|
396
|
+
throw new WorkflowAPIError(`Hook ${data.hookId} already exists`, {
|
|
397
|
+
status: 409,
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
const parsed = HookSchema.parse(compact(value));
|
|
401
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
402
|
+
return filterHookData(parsed, resolveData);
|
|
403
|
+
},
|
|
404
|
+
async getByToken(token, params) {
|
|
405
|
+
const [value] = await getByToken.execute({ token });
|
|
406
|
+
if (!value) {
|
|
407
|
+
throw new WorkflowAPIError(`Hook not found for token: ${token}`, {
|
|
408
|
+
status: 404,
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
const parsed = HookSchema.parse(compact(value));
|
|
412
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
413
|
+
return filterHookData(parsed, resolveData);
|
|
414
|
+
},
|
|
415
|
+
async list(params) {
|
|
416
|
+
const limit = params?.pagination?.limit ?? 100;
|
|
417
|
+
const fromCursor = params?.pagination?.cursor;
|
|
418
|
+
const all = await drizzle
|
|
419
|
+
.select()
|
|
420
|
+
.from(hooks)
|
|
421
|
+
.where(and(map(params.runId, (id) => eq(hooks.runId, id)), map(fromCursor, (c) => lt(hooks.hookId, c))))
|
|
422
|
+
.orderBy(desc(hooks.hookId))
|
|
423
|
+
.limit(limit + 1);
|
|
424
|
+
const values = all.slice(0, limit);
|
|
425
|
+
const hasMore = all.length > limit;
|
|
426
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
427
|
+
return {
|
|
428
|
+
data: values.map((v) => {
|
|
429
|
+
const parsed = HookSchema.parse(compact(v));
|
|
430
|
+
return filterHookData(parsed, resolveData);
|
|
431
|
+
}),
|
|
432
|
+
cursor: values.at(-1)?.hookId ?? null,
|
|
433
|
+
hasMore,
|
|
434
|
+
};
|
|
435
|
+
},
|
|
436
|
+
async dispose(hookId, params) {
|
|
437
|
+
const [value] = await drizzle
|
|
438
|
+
.delete(hooks)
|
|
439
|
+
.where(eq(hooks.hookId, hookId))
|
|
440
|
+
.returning();
|
|
441
|
+
if (!value) {
|
|
442
|
+
throw new WorkflowAPIError(`Hook not found: ${hookId}`, {
|
|
443
|
+
status: 404,
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
const parsed = HookSchema.parse(compact(value));
|
|
447
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
448
|
+
return filterHookData(parsed, resolveData);
|
|
449
|
+
},
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
export function createStepsStorage(drizzle) {
|
|
453
|
+
const { steps } = Schema;
|
|
454
|
+
return {
|
|
455
|
+
async create(runId, data) {
|
|
456
|
+
const [value] = await drizzle
|
|
457
|
+
.insert(steps)
|
|
458
|
+
.values({
|
|
459
|
+
runId,
|
|
460
|
+
stepId: data.stepId,
|
|
461
|
+
stepName: data.stepName,
|
|
462
|
+
input: data.input,
|
|
463
|
+
status: 'pending',
|
|
464
|
+
attempt: 1,
|
|
465
|
+
})
|
|
466
|
+
.onConflictDoNothing()
|
|
467
|
+
.returning();
|
|
468
|
+
if (!value) {
|
|
469
|
+
throw new WorkflowAPIError(`Step ${data.stepId} already exists`, {
|
|
470
|
+
status: 409,
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
return deserializeStepError(compact(value));
|
|
474
|
+
},
|
|
475
|
+
async get(runId, stepId, params) {
|
|
476
|
+
// If runId is not provided, query only by stepId
|
|
477
|
+
const whereClause = runId
|
|
478
|
+
? and(eq(steps.stepId, stepId), eq(steps.runId, runId))
|
|
479
|
+
: eq(steps.stepId, stepId);
|
|
480
|
+
const [value] = await drizzle
|
|
481
|
+
.select()
|
|
482
|
+
.from(steps)
|
|
483
|
+
.where(whereClause)
|
|
484
|
+
.limit(1);
|
|
485
|
+
if (!value) {
|
|
486
|
+
throw new WorkflowAPIError(`Step not found: ${stepId}`, {
|
|
487
|
+
status: 404,
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
const deserialized = deserializeStepError(compact(value));
|
|
491
|
+
const parsed = StepSchema.parse(deserialized);
|
|
492
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
493
|
+
return filterStepData(parsed, resolveData);
|
|
494
|
+
},
|
|
495
|
+
async update(runId, stepId, data) {
|
|
496
|
+
// Fetch current step to check if startedAt is already set
|
|
497
|
+
const [currentStep] = await drizzle
|
|
498
|
+
.select()
|
|
499
|
+
.from(steps)
|
|
500
|
+
.where(and(eq(steps.stepId, stepId), eq(steps.runId, runId)))
|
|
501
|
+
.limit(1);
|
|
502
|
+
if (!currentStep) {
|
|
503
|
+
throw new WorkflowAPIError(`Step not found: ${stepId}`, {
|
|
504
|
+
status: 404,
|
|
505
|
+
});
|
|
506
|
+
}
|
|
507
|
+
// Serialize the error field if present
|
|
508
|
+
const serialized = serializeStepError(data);
|
|
509
|
+
const updates = {
|
|
510
|
+
...serialized,
|
|
511
|
+
output: data.output,
|
|
512
|
+
};
|
|
513
|
+
const now = new Date();
|
|
514
|
+
// Only set startedAt the first time the step transitions to 'running'
|
|
515
|
+
if (data.status === 'running' && !currentStep.startedAt) {
|
|
516
|
+
updates.startedAt = now;
|
|
517
|
+
}
|
|
518
|
+
if (data.status === 'completed' || data.status === 'failed') {
|
|
519
|
+
updates.completedAt = now;
|
|
520
|
+
}
|
|
521
|
+
const [value] = await drizzle
|
|
522
|
+
.update(steps)
|
|
523
|
+
.set(updates)
|
|
524
|
+
.where(and(eq(steps.stepId, stepId), eq(steps.runId, runId)))
|
|
525
|
+
.returning();
|
|
526
|
+
if (!value) {
|
|
527
|
+
throw new WorkflowAPIError(`Step not found: ${stepId}`, {
|
|
528
|
+
status: 404,
|
|
529
|
+
});
|
|
530
|
+
}
|
|
531
|
+
return deserializeStepError(compact(value));
|
|
532
|
+
},
|
|
533
|
+
async list(params) {
|
|
534
|
+
const limit = params?.pagination?.limit ?? 20;
|
|
535
|
+
const fromCursor = params?.pagination?.cursor;
|
|
536
|
+
const all = await drizzle
|
|
537
|
+
.select()
|
|
538
|
+
.from(steps)
|
|
539
|
+
.where(and(eq(steps.runId, params.runId), map(fromCursor, (c) => lt(steps.stepId, c))))
|
|
540
|
+
.orderBy(desc(steps.stepId))
|
|
541
|
+
.limit(limit + 1);
|
|
542
|
+
const values = all.slice(0, limit);
|
|
543
|
+
const hasMore = all.length > limit;
|
|
544
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
545
|
+
return {
|
|
546
|
+
data: values.map((v) => {
|
|
547
|
+
const deserialized = deserializeStepError(compact(v));
|
|
548
|
+
const parsed = StepSchema.parse(deserialized);
|
|
549
|
+
return filterStepData(parsed, resolveData);
|
|
550
|
+
}),
|
|
551
|
+
hasMore,
|
|
552
|
+
cursor: values.at(-1)?.stepId ?? null,
|
|
553
|
+
};
|
|
554
|
+
},
|
|
555
|
+
};
|
|
556
|
+
}
|
|
557
|
+
function filterStepData(step, resolveData) {
|
|
558
|
+
if (resolveData === 'none') {
|
|
559
|
+
const { input: _, output: __, ...rest } = step;
|
|
560
|
+
return { input: [], output: undefined, ...rest };
|
|
561
|
+
}
|
|
562
|
+
return step;
|
|
563
|
+
}
|
|
564
|
+
function filterRunData(run, resolveData) {
|
|
565
|
+
if (resolveData === 'none') {
|
|
566
|
+
const { input: _, output: __, ...rest } = run;
|
|
567
|
+
return { input: [], output: undefined, ...rest };
|
|
568
|
+
}
|
|
569
|
+
return run;
|
|
570
|
+
}
|
|
571
|
+
function filterHookData(hook, resolveData) {
|
|
572
|
+
if (resolveData === 'none' && 'metadata' in hook) {
|
|
573
|
+
const { metadata: _, ...rest } = hook;
|
|
574
|
+
return { metadata: undefined, ...rest };
|
|
575
|
+
}
|
|
576
|
+
return hook;
|
|
577
|
+
}
|
|
578
|
+
function filterEventData(event, resolveData) {
|
|
579
|
+
if (resolveData === 'none' && 'eventData' in event) {
|
|
580
|
+
const { eventData: _, ...rest } = event;
|
|
581
|
+
return rest;
|
|
582
|
+
}
|
|
583
|
+
return event;
|
|
584
|
+
}
|
|
585
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamer.d.ts","sourceRoot":"","sources":["../src/streamer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAGpC,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,oBAAoB,CAAC;AAkC1D,wBAAgB,cAAc,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,QAAQ,CA6JxE"}
|