@workflow/world-postgres 4.0.1-beta.3 → 4.1.0-beta.11
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/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/drizzle/index.d.ts +3 -1
- package/dist/drizzle/index.d.ts.map +1 -1
- package/dist/drizzle/index.js.map +1 -1
- package/dist/drizzle/schema.d.ts +316 -55
- package/dist/drizzle/schema.d.ts.map +1 -1
- package/dist/drizzle/schema.js +8 -8
- package/dist/drizzle/schema.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +257 -41
- package/dist/storage.js.map +1 -1
- package/dist/streamer.d.ts.map +1 -1
- package/dist/streamer.js +6 -2
- package/dist/streamer.js.map +1 -1
- package/package.json +33 -18
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/drizzle/schema.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,iBAAiB,iMAG7B,CAAC;AAEF,eAAO,MAAM,UAAU,2KAGtB,CAAC;AAYF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC;AAEtC,eAAO,MAAM,IAAI
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/drizzle/schema.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,iBAAiB,iMAG7B,CAAC;AAEF,eAAO,MAAM,UAAU,2KAGtB,CAAC;AAYF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC;AAEtC,eAAO,MAAM,MAAM,oDAAuB,CAAC;AAE3C,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBhB,CAAC;AAEF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAclB,CAAC;AAEF,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBjB,CAAC;AAEF,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBjB,CAAC;AAQF,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYnB,CAAC"}
|
package/dist/drizzle/schema.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { StepStatusSchema, WorkflowRunStatusSchema, } from '@workflow/world';
|
|
2
|
-
import { boolean, customType, index, integer, jsonb, pgEnum,
|
|
2
|
+
import { boolean, customType, index, integer, jsonb, pgEnum, pgSchema, primaryKey, text, timestamp, varchar, } from 'drizzle-orm/pg-core';
|
|
3
3
|
function mustBeMoreThanOne(t) {
|
|
4
4
|
return t;
|
|
5
5
|
}
|
|
6
6
|
export const workflowRunStatus = pgEnum('status', mustBeMoreThanOne(WorkflowRunStatusSchema.options));
|
|
7
7
|
export const stepStatus = pgEnum('step_status', mustBeMoreThanOne(StepStatusSchema.options));
|
|
8
|
-
export const
|
|
8
|
+
export const schema = pgSchema('workflow');
|
|
9
|
+
export const runs = schema.table('workflow_runs', {
|
|
9
10
|
runId: varchar('id').primaryKey(),
|
|
10
11
|
output: jsonb('output').$type(),
|
|
11
12
|
deploymentId: varchar('deployment_id').notNull(),
|
|
@@ -14,7 +15,6 @@ export const runs = pgTable('workflow_runs', {
|
|
|
14
15
|
executionContext: jsonb('execution_context').$type(),
|
|
15
16
|
input: jsonb('input').$type().notNull(),
|
|
16
17
|
error: text('error'),
|
|
17
|
-
errorCode: varchar('error_code'),
|
|
18
18
|
createdAt: timestamp('created_at').defaultNow().notNull(),
|
|
19
19
|
updatedAt: timestamp('updated_at')
|
|
20
20
|
.defaultNow()
|
|
@@ -26,7 +26,7 @@ export const runs = pgTable('workflow_runs', {
|
|
|
26
26
|
workflowNameIdx: index().on(tb.workflowName),
|
|
27
27
|
statusIdx: index().on(tb.status),
|
|
28
28
|
}));
|
|
29
|
-
export const events =
|
|
29
|
+
export const events = schema.table('workflow_events', {
|
|
30
30
|
eventId: varchar('id').primaryKey(),
|
|
31
31
|
eventType: varchar('type').$type().notNull(),
|
|
32
32
|
correlationId: varchar('correlation_id'),
|
|
@@ -37,7 +37,7 @@ export const events = pgTable('workflow_events', {
|
|
|
37
37
|
runFk: index().on(tb.runId),
|
|
38
38
|
correlationIdFk: index().on(tb.correlationId),
|
|
39
39
|
}));
|
|
40
|
-
export const steps =
|
|
40
|
+
export const steps = schema.table('workflow_steps', {
|
|
41
41
|
runId: varchar('run_id').notNull(),
|
|
42
42
|
stepId: varchar('step_id').primaryKey(),
|
|
43
43
|
stepName: varchar('step_name').notNull(),
|
|
@@ -45,7 +45,6 @@ export const steps = pgTable('workflow_steps', {
|
|
|
45
45
|
input: jsonb('input').$type().notNull(),
|
|
46
46
|
output: jsonb('output').$type(),
|
|
47
47
|
error: text('error'),
|
|
48
|
-
errorCode: varchar('error_code'),
|
|
49
48
|
attempt: integer('attempt').notNull(),
|
|
50
49
|
startedAt: timestamp('started_at'),
|
|
51
50
|
completedAt: timestamp('completed_at'),
|
|
@@ -54,11 +53,12 @@ export const steps = pgTable('workflow_steps', {
|
|
|
54
53
|
.defaultNow()
|
|
55
54
|
.$onUpdateFn(() => new Date())
|
|
56
55
|
.notNull(),
|
|
56
|
+
retryAfter: timestamp('retry_after'),
|
|
57
57
|
}, (tb) => ({
|
|
58
58
|
runFk: index().on(tb.runId),
|
|
59
59
|
statusIdx: index().on(tb.status),
|
|
60
60
|
}));
|
|
61
|
-
export const hooks =
|
|
61
|
+
export const hooks = schema.table('workflow_hooks', {
|
|
62
62
|
runId: varchar('run_id').notNull(),
|
|
63
63
|
hookId: varchar('hook_id').primaryKey(),
|
|
64
64
|
token: varchar('token').notNull(),
|
|
@@ -76,7 +76,7 @@ const bytea = customType({
|
|
|
76
76
|
return 'bytea';
|
|
77
77
|
},
|
|
78
78
|
});
|
|
79
|
-
export const streams =
|
|
79
|
+
export const streams = schema.table('workflow_stream_chunks', {
|
|
80
80
|
chunkId: varchar('id').$type().notNull(),
|
|
81
81
|
streamId: varchar('stream_id').notNull(),
|
|
82
82
|
chunkData: bytea('data').notNull(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/drizzle/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,gBAAgB,EAEhB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,OAAO,EACP,UAAU,EACV,KAAK,EACL,OAAO,EACP,KAAK,EACL,MAAM,EACN,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/drizzle/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,4 +3,6 @@ import type { PostgresWorldConfig } from './config.js';
|
|
|
3
3
|
export declare function createWorld(config?: PostgresWorldConfig): World & {
|
|
4
4
|
start(): Promise<void>;
|
|
5
5
|
};
|
|
6
|
+
export type { PostgresWorldConfig } from './config.js';
|
|
7
|
+
export * from './drizzle/schema.js';
|
|
6
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAoBvD,wBAAgB,WAAW,CACzB,MAAM,GAAE,mBAQP,GACA,KAAK,GAAG;IAAE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAkBpC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAoBvD,wBAAgB,WAAW,CACzB,MAAM,GAAE,mBAQP,GACA,KAAK,GAAG;IAAE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAkBpC;AAGD,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,cAAc,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,cAAc,MAAM,UAAU,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAgB,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,SAAS,aAAa,CAAC,OAAgB;IACrC,OAAO;QACL,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC;QAChC,MAAM,EAAE,mBAAmB,CAAC,OAAO,CAAC;QACpC,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC;QAClC,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC;KACnC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,SAA8B;IAC5B,gBAAgB,EACd,OAAO,CAAC,GAAG,CAAC,qBAAqB;QACjC,6CAA6C;IAC/C,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B;IACnD,gBAAgB,EACd,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oCAAoC,IAAI,IAAI,EAAE,EAAE,CAAC;QACtE,EAAE;CACL;IAED,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC;QACtB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;KAC1C,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEnD,OAAO;QACL,GAAG,OAAO;QACV,GAAG,QAAQ;QACX,GAAG,KAAK;QACR,KAAK,CAAC,KAAK;YACT,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,cAAc,MAAM,UAAU,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAgB,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,SAAS,aAAa,CAAC,OAAgB;IACrC,OAAO;QACL,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC;QAChC,MAAM,EAAE,mBAAmB,CAAC,OAAO,CAAC;QACpC,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC;QAClC,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC;KACnC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,SAA8B;IAC5B,gBAAgB,EACd,OAAO,CAAC,GAAG,CAAC,qBAAqB;QACjC,6CAA6C;IAC/C,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B;IACnD,gBAAgB,EACd,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oCAAoC,IAAI,IAAI,EAAE,EAAE,CAAC;QACtE,EAAE;CACL;IAED,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC;QACtB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;KAC1C,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEnD,OAAO;QACL,GAAG,OAAO;QACV,GAAG,QAAQ;QACX,GAAG,KAAK;QACR,KAAK,CAAC,KAAK;YACT,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;KACF,CAAC;AACJ,CAAC;AAID,cAAc,qBAAqB,CAAC"}
|
package/dist/storage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAQV,OAAO,EAIR,MAAM,iBAAiB,CAAC;AASzB,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,oBAAoB,CAAC;AA4H1D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAoMnE;AAMD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CA8FvE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CA+FrE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAuHrE"}
|
package/dist/storage.js
CHANGED
|
@@ -1,8 +1,119 @@
|
|
|
1
1
|
import { WorkflowAPIError } from '@workflow/errors';
|
|
2
|
+
import { EventSchema, HookSchema, StepSchema, WorkflowRunSchema, } from '@workflow/world';
|
|
2
3
|
import { and, desc, eq, gt, lt, sql } from 'drizzle-orm';
|
|
3
4
|
import { monotonicFactory } from 'ulid';
|
|
4
5
|
import { Schema } from './drizzle/index.js';
|
|
5
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
|
+
}
|
|
6
117
|
export function createRunsStorage(drizzle) {
|
|
7
118
|
const ulid = monotonicFactory();
|
|
8
119
|
const { runs } = Schema;
|
|
@@ -13,14 +124,17 @@ export function createRunsStorage(drizzle) {
|
|
|
13
124
|
.limit(1)
|
|
14
125
|
.prepare('workflow_runs_get');
|
|
15
126
|
return {
|
|
16
|
-
async get(id) {
|
|
127
|
+
async get(id, params) {
|
|
17
128
|
const [value] = await get.execute({ id });
|
|
18
129
|
if (!value) {
|
|
19
130
|
throw new WorkflowAPIError(`Run not found: ${id}`, { status: 404 });
|
|
20
131
|
}
|
|
21
|
-
|
|
132
|
+
const deserialized = deserializeRunError(compact(value));
|
|
133
|
+
const parsed = WorkflowRunSchema.parse(deserialized);
|
|
134
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
135
|
+
return filterRunData(parsed, resolveData);
|
|
22
136
|
},
|
|
23
|
-
async cancel(id) {
|
|
137
|
+
async cancel(id, params) {
|
|
24
138
|
// TODO: we might want to guard this for only specific statuses
|
|
25
139
|
const [value] = await drizzle
|
|
26
140
|
.update(Schema.runs)
|
|
@@ -30,9 +144,14 @@ export function createRunsStorage(drizzle) {
|
|
|
30
144
|
if (!value) {
|
|
31
145
|
throw new WorkflowAPIError(`Run not found: ${id}`, { status: 404 });
|
|
32
146
|
}
|
|
33
|
-
|
|
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);
|
|
34
153
|
},
|
|
35
|
-
async pause(id) {
|
|
154
|
+
async pause(id, params) {
|
|
36
155
|
// TODO: we might want to guard this for only specific statuses
|
|
37
156
|
const [value] = await drizzle
|
|
38
157
|
.update(Schema.runs)
|
|
@@ -42,12 +161,31 @@ export function createRunsStorage(drizzle) {
|
|
|
42
161
|
if (!value) {
|
|
43
162
|
throw new WorkflowAPIError(`Run not found: ${id}`, { status: 404 });
|
|
44
163
|
}
|
|
45
|
-
|
|
164
|
+
const deserialized = deserializeRunError(compact(value));
|
|
165
|
+
const parsed = WorkflowRunSchema.parse(deserialized);
|
|
166
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
167
|
+
return filterRunData(parsed, resolveData);
|
|
46
168
|
},
|
|
47
|
-
async resume(id) {
|
|
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
|
+
}
|
|
48
186
|
const [value] = await drizzle
|
|
49
187
|
.update(Schema.runs)
|
|
50
|
-
.set(
|
|
188
|
+
.set(updates)
|
|
51
189
|
.where(and(eq(runs.runId, id), eq(runs.status, 'paused')))
|
|
52
190
|
.returning();
|
|
53
191
|
if (!value) {
|
|
@@ -55,7 +193,10 @@ export function createRunsStorage(drizzle) {
|
|
|
55
193
|
status: 404,
|
|
56
194
|
});
|
|
57
195
|
}
|
|
58
|
-
|
|
196
|
+
const deserialized = deserializeRunError(compact(value));
|
|
197
|
+
const parsed = WorkflowRunSchema.parse(deserialized);
|
|
198
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
199
|
+
return filterRunData(parsed, resolveData);
|
|
59
200
|
},
|
|
60
201
|
async list(params) {
|
|
61
202
|
const limit = params?.pagination?.limit ?? 20;
|
|
@@ -68,8 +209,13 @@ export function createRunsStorage(drizzle) {
|
|
|
68
209
|
.limit(limit + 1);
|
|
69
210
|
const values = all.slice(0, limit);
|
|
70
211
|
const hasMore = all.length > limit;
|
|
212
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
71
213
|
return {
|
|
72
|
-
data: values.map(
|
|
214
|
+
data: values.map((v) => {
|
|
215
|
+
const deserialized = deserializeRunError(compact(v));
|
|
216
|
+
const parsed = WorkflowRunSchema.parse(deserialized);
|
|
217
|
+
return filterRunData(parsed, resolveData);
|
|
218
|
+
}),
|
|
73
219
|
hasMore,
|
|
74
220
|
cursor: values.at(-1)?.runId ?? null,
|
|
75
221
|
};
|
|
@@ -93,7 +239,7 @@ export function createRunsStorage(drizzle) {
|
|
|
93
239
|
status: 409,
|
|
94
240
|
});
|
|
95
241
|
}
|
|
96
|
-
return compact(value);
|
|
242
|
+
return deserializeRunError(compact(value));
|
|
97
243
|
},
|
|
98
244
|
async update(id, data) {
|
|
99
245
|
// Fetch current run to check if startedAt is already set
|
|
@@ -105,17 +251,20 @@ export function createRunsStorage(drizzle) {
|
|
|
105
251
|
if (!currentRun) {
|
|
106
252
|
throw new WorkflowAPIError(`Run not found: ${id}`, { status: 404 });
|
|
107
253
|
}
|
|
254
|
+
// Serialize the error field if present
|
|
255
|
+
const serialized = serializeRunError(data);
|
|
108
256
|
const updates = {
|
|
109
|
-
...
|
|
257
|
+
...serialized,
|
|
110
258
|
output: data.output,
|
|
111
259
|
};
|
|
112
260
|
// Only set startedAt the first time transitioning to 'running'
|
|
113
261
|
if (data.status === 'running' && !currentRun.startedAt) {
|
|
114
262
|
updates.startedAt = new Date();
|
|
115
263
|
}
|
|
116
|
-
|
|
264
|
+
const isBecomingTerminal = data.status === 'completed' ||
|
|
117
265
|
data.status === 'failed' ||
|
|
118
|
-
data.status === 'cancelled'
|
|
266
|
+
data.status === 'cancelled';
|
|
267
|
+
if (isBecomingTerminal) {
|
|
119
268
|
updates.completedAt = new Date();
|
|
120
269
|
}
|
|
121
270
|
const [value] = await drizzle
|
|
@@ -126,7 +275,11 @@ export function createRunsStorage(drizzle) {
|
|
|
126
275
|
if (!value) {
|
|
127
276
|
throw new WorkflowAPIError(`Run not found: ${id}`, { status: 404 });
|
|
128
277
|
}
|
|
129
|
-
|
|
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));
|
|
130
283
|
},
|
|
131
284
|
};
|
|
132
285
|
}
|
|
@@ -137,7 +290,7 @@ export function createEventsStorage(drizzle) {
|
|
|
137
290
|
const ulid = monotonicFactory();
|
|
138
291
|
const { events } = Schema;
|
|
139
292
|
return {
|
|
140
|
-
async create(runId, data) {
|
|
293
|
+
async create(runId, data, params) {
|
|
141
294
|
const eventId = `wevt_${ulid()}`;
|
|
142
295
|
const [value] = await drizzle
|
|
143
296
|
.insert(events)
|
|
@@ -154,7 +307,10 @@ export function createEventsStorage(drizzle) {
|
|
|
154
307
|
status: 409,
|
|
155
308
|
});
|
|
156
309
|
}
|
|
157
|
-
|
|
310
|
+
const result = { ...data, ...value, runId, eventId };
|
|
311
|
+
const parsed = EventSchema.parse(result);
|
|
312
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
313
|
+
return filterEventData(parsed, resolveData);
|
|
158
314
|
},
|
|
159
315
|
async list(params) {
|
|
160
316
|
const limit = params?.pagination?.limit ?? 100;
|
|
@@ -169,8 +325,12 @@ export function createEventsStorage(drizzle) {
|
|
|
169
325
|
.orderBy(order.by)
|
|
170
326
|
.limit(limit + 1);
|
|
171
327
|
const values = all.slice(0, limit);
|
|
328
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
172
329
|
return {
|
|
173
|
-
data: values.map(
|
|
330
|
+
data: values.map((v) => {
|
|
331
|
+
const parsed = EventSchema.parse(compact(v));
|
|
332
|
+
return filterEventData(parsed, resolveData);
|
|
333
|
+
}),
|
|
174
334
|
cursor: values.at(-1)?.eventId ?? null,
|
|
175
335
|
hasMore: all.length > limit,
|
|
176
336
|
};
|
|
@@ -188,8 +348,12 @@ export function createEventsStorage(drizzle) {
|
|
|
188
348
|
.orderBy(order.by)
|
|
189
349
|
.limit(limit + 1);
|
|
190
350
|
const values = all.slice(0, limit);
|
|
351
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
191
352
|
return {
|
|
192
|
-
data: values.map(
|
|
353
|
+
data: values.map((v) => {
|
|
354
|
+
const parsed = EventSchema.parse(compact(v));
|
|
355
|
+
return filterEventData(parsed, resolveData);
|
|
356
|
+
}),
|
|
193
357
|
cursor: values.at(-1)?.eventId ?? null,
|
|
194
358
|
hasMore: all.length > limit,
|
|
195
359
|
};
|
|
@@ -205,15 +369,17 @@ export function createHooksStorage(drizzle) {
|
|
|
205
369
|
.limit(1)
|
|
206
370
|
.prepare('workflow_hooks_get_by_token');
|
|
207
371
|
return {
|
|
208
|
-
async get(hookId) {
|
|
372
|
+
async get(hookId, params) {
|
|
209
373
|
const [value] = await drizzle
|
|
210
374
|
.select()
|
|
211
375
|
.from(hooks)
|
|
212
376
|
.where(eq(hooks.hookId, hookId))
|
|
213
377
|
.limit(1);
|
|
214
|
-
|
|
378
|
+
const parsed = HookSchema.parse(compact(value));
|
|
379
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
380
|
+
return filterHookData(parsed, resolveData);
|
|
215
381
|
},
|
|
216
|
-
async create(runId, data) {
|
|
382
|
+
async create(runId, data, params) {
|
|
217
383
|
const [value] = await drizzle
|
|
218
384
|
.insert(hooks)
|
|
219
385
|
.values({
|
|
@@ -231,16 +397,20 @@ export function createHooksStorage(drizzle) {
|
|
|
231
397
|
status: 409,
|
|
232
398
|
});
|
|
233
399
|
}
|
|
234
|
-
|
|
400
|
+
const parsed = HookSchema.parse(compact(value));
|
|
401
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
402
|
+
return filterHookData(parsed, resolveData);
|
|
235
403
|
},
|
|
236
|
-
async getByToken(token) {
|
|
404
|
+
async getByToken(token, params) {
|
|
237
405
|
const [value] = await getByToken.execute({ token });
|
|
238
406
|
if (!value) {
|
|
239
407
|
throw new WorkflowAPIError(`Hook not found for token: ${token}`, {
|
|
240
408
|
status: 404,
|
|
241
409
|
});
|
|
242
410
|
}
|
|
243
|
-
|
|
411
|
+
const parsed = HookSchema.parse(compact(value));
|
|
412
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
413
|
+
return filterHookData(parsed, resolveData);
|
|
244
414
|
},
|
|
245
415
|
async list(params) {
|
|
246
416
|
const limit = params?.pagination?.limit ?? 100;
|
|
@@ -253,13 +423,17 @@ export function createHooksStorage(drizzle) {
|
|
|
253
423
|
.limit(limit + 1);
|
|
254
424
|
const values = all.slice(0, limit);
|
|
255
425
|
const hasMore = all.length > limit;
|
|
426
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
256
427
|
return {
|
|
257
|
-
data: values.map(
|
|
428
|
+
data: values.map((v) => {
|
|
429
|
+
const parsed = HookSchema.parse(compact(v));
|
|
430
|
+
return filterHookData(parsed, resolveData);
|
|
431
|
+
}),
|
|
258
432
|
cursor: values.at(-1)?.hookId ?? null,
|
|
259
433
|
hasMore,
|
|
260
434
|
};
|
|
261
435
|
},
|
|
262
|
-
async dispose(hookId) {
|
|
436
|
+
async dispose(hookId, params) {
|
|
263
437
|
const [value] = await drizzle
|
|
264
438
|
.delete(hooks)
|
|
265
439
|
.where(eq(hooks.hookId, hookId))
|
|
@@ -269,18 +443,14 @@ export function createHooksStorage(drizzle) {
|
|
|
269
443
|
status: 404,
|
|
270
444
|
});
|
|
271
445
|
}
|
|
272
|
-
|
|
446
|
+
const parsed = HookSchema.parse(compact(value));
|
|
447
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
448
|
+
return filterHookData(parsed, resolveData);
|
|
273
449
|
},
|
|
274
450
|
};
|
|
275
451
|
}
|
|
276
452
|
export function createStepsStorage(drizzle) {
|
|
277
453
|
const { steps } = Schema;
|
|
278
|
-
const get = drizzle
|
|
279
|
-
.select()
|
|
280
|
-
.from(steps)
|
|
281
|
-
.where(and(eq(steps.stepId, sql.placeholder('stepId')), eq(steps.runId, sql.placeholder('runId'))))
|
|
282
|
-
.limit(1)
|
|
283
|
-
.prepare('workflow_steps_get');
|
|
284
454
|
return {
|
|
285
455
|
async create(runId, data) {
|
|
286
456
|
const [value] = await drizzle
|
|
@@ -300,16 +470,27 @@ export function createStepsStorage(drizzle) {
|
|
|
300
470
|
status: 409,
|
|
301
471
|
});
|
|
302
472
|
}
|
|
303
|
-
return compact(value);
|
|
473
|
+
return deserializeStepError(compact(value));
|
|
304
474
|
},
|
|
305
|
-
async get(runId, stepId) {
|
|
306
|
-
|
|
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);
|
|
307
485
|
if (!value) {
|
|
308
486
|
throw new WorkflowAPIError(`Step not found: ${stepId}`, {
|
|
309
487
|
status: 404,
|
|
310
488
|
});
|
|
311
489
|
}
|
|
312
|
-
|
|
490
|
+
const deserialized = deserializeStepError(compact(value));
|
|
491
|
+
const parsed = StepSchema.parse(deserialized);
|
|
492
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
493
|
+
return filterStepData(parsed, resolveData);
|
|
313
494
|
},
|
|
314
495
|
async update(runId, stepId, data) {
|
|
315
496
|
// Fetch current step to check if startedAt is already set
|
|
@@ -323,8 +504,10 @@ export function createStepsStorage(drizzle) {
|
|
|
323
504
|
status: 404,
|
|
324
505
|
});
|
|
325
506
|
}
|
|
507
|
+
// Serialize the error field if present
|
|
508
|
+
const serialized = serializeStepError(data);
|
|
326
509
|
const updates = {
|
|
327
|
-
...
|
|
510
|
+
...serialized,
|
|
328
511
|
output: data.output,
|
|
329
512
|
};
|
|
330
513
|
const now = new Date();
|
|
@@ -345,7 +528,7 @@ export function createStepsStorage(drizzle) {
|
|
|
345
528
|
status: 404,
|
|
346
529
|
});
|
|
347
530
|
}
|
|
348
|
-
return compact(value);
|
|
531
|
+
return deserializeStepError(compact(value));
|
|
349
532
|
},
|
|
350
533
|
async list(params) {
|
|
351
534
|
const limit = params?.pagination?.limit ?? 20;
|
|
@@ -358,12 +541,45 @@ export function createStepsStorage(drizzle) {
|
|
|
358
541
|
.limit(limit + 1);
|
|
359
542
|
const values = all.slice(0, limit);
|
|
360
543
|
const hasMore = all.length > limit;
|
|
544
|
+
const resolveData = params?.resolveData ?? 'all';
|
|
361
545
|
return {
|
|
362
|
-
data: values.map(
|
|
546
|
+
data: values.map((v) => {
|
|
547
|
+
const deserialized = deserializeStepError(compact(v));
|
|
548
|
+
const parsed = StepSchema.parse(deserialized);
|
|
549
|
+
return filterStepData(parsed, resolveData);
|
|
550
|
+
}),
|
|
363
551
|
hasMore,
|
|
364
552
|
cursor: values.at(-1)?.stepId ?? null,
|
|
365
553
|
};
|
|
366
554
|
},
|
|
367
555
|
};
|
|
368
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
|
+
}
|
|
369
585
|
//# sourceMappingURL=storage.js.map
|