@workflow/world-postgres 4.0.1-beta.2 → 4.1.0-beta.4

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 (48) hide show
  1. package/README.md +33 -0
  2. package/bin/setup.js +12 -0
  3. package/dist/boss.d.ts +15 -0
  4. package/dist/boss.d.ts.map +1 -0
  5. package/dist/boss.js +18 -0
  6. package/dist/boss.js.map +1 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +44 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/config.d.ts +6 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +2 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/drizzle/index.d.ts +6 -0
  16. package/dist/drizzle/index.d.ts.map +1 -0
  17. package/dist/drizzle/index.js +7 -0
  18. package/dist/drizzle/index.js.map +1 -0
  19. package/dist/drizzle/schema.d.ts +594 -0
  20. package/dist/drizzle/schema.d.ts.map +1 -0
  21. package/dist/drizzle/schema.js +89 -0
  22. package/dist/drizzle/schema.js.map +1 -0
  23. package/dist/index.d.ts +8 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +40 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/queue.d.ts +17 -0
  28. package/dist/queue.d.ts.map +1 -0
  29. package/dist/queue.js +103 -0
  30. package/dist/queue.js.map +1 -0
  31. package/dist/storage.d.ts +7 -0
  32. package/dist/storage.d.ts.map +1 -0
  33. package/dist/storage.js +369 -0
  34. package/dist/storage.js.map +1 -0
  35. package/dist/streamer.d.ts +5 -0
  36. package/dist/streamer.d.ts.map +1 -0
  37. package/dist/streamer.js +157 -0
  38. package/dist/streamer.js.map +1 -0
  39. package/dist/util.d.ts +6 -0
  40. package/dist/util.d.ts.map +1 -0
  41. package/dist/util.js +20 -0
  42. package/dist/util.js.map +1 -0
  43. package/dist/zod.d.ts +3 -0
  44. package/dist/zod.d.ts.map +1 -0
  45. package/dist/zod.js +10 -0
  46. package/dist/zod.js.map +1 -0
  47. package/package.json +23 -8
  48. package/src/drizzle/migrations/0000_redundant_smasher.sql +80 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/drizzle/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { World } from '@workflow/world';
2
+ import type { PostgresWorldConfig } from './config.js';
3
+ export declare function createWorld(config?: PostgresWorldConfig): World & {
4
+ start(): Promise<void>;
5
+ };
6
+ export type { PostgresWorldConfig } from './config.js';
7
+ export * from './drizzle/schema.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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;AAGD,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,cAAc,qBAAqB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,40 @@
1
+ import PgBoss from 'pg-boss';
2
+ import createPostgres from 'postgres';
3
+ import { createClient } from './drizzle/index.js';
4
+ import { createQueue } from './queue.js';
5
+ import { createEventsStorage, createHooksStorage, createRunsStorage, createStepsStorage, } from './storage.js';
6
+ import { createStreamer } from './streamer.js';
7
+ function createStorage(drizzle) {
8
+ return {
9
+ runs: createRunsStorage(drizzle),
10
+ events: createEventsStorage(drizzle),
11
+ hooks: createHooksStorage(drizzle),
12
+ steps: createStepsStorage(drizzle),
13
+ };
14
+ }
15
+ export function createWorld(config = {
16
+ connectionString: process.env.WORKFLOW_POSTGRES_URL ||
17
+ 'postgres://world:world@localhost:5432/world',
18
+ jobPrefix: process.env.WORKFLOW_POSTGRES_JOB_PREFIX,
19
+ queueConcurrency: parseInt(process.env.WORKFLOW_POSTGRES_WORKER_CONCURRENCY || '10', 10) ||
20
+ 10,
21
+ }) {
22
+ const boss = new PgBoss({
23
+ connectionString: config.connectionString,
24
+ });
25
+ const postgres = createPostgres(config.connectionString);
26
+ const drizzle = createClient(postgres);
27
+ const queue = createQueue(boss, config);
28
+ const storage = createStorage(drizzle);
29
+ const streamer = createStreamer(postgres, drizzle);
30
+ return {
31
+ ...storage,
32
+ ...streamer,
33
+ ...queue,
34
+ async start() {
35
+ await queue.start();
36
+ },
37
+ };
38
+ }
39
+ export * from './drizzle/schema.js';
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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;AAID,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type Queue } from '@workflow/world';
2
+ import type PgBoss from 'pg-boss';
3
+ import type { PostgresWorldConfig } from './config.js';
4
+ /**
5
+ * The Postgres queue works by creating two job types in pg-boss:
6
+ * - `workflow` for workflow jobs
7
+ * - `step` for step jobs
8
+ *
9
+ * When a message is queued, it is sent to pg-boss with the appropriate job type.
10
+ * When a job is processed, it is deserialized and then re-queued into the _embedded world_, showing that
11
+ * we can reuse the embedded world, mix and match worlds to build
12
+ * hybrid architectures, and even migrate between worlds.
13
+ */
14
+ export declare function createQueue(boss: PgBoss, config: PostgresWorldConfig): Queue & {
15
+ start(): Promise<void>;
16
+ };
17
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,KAAK,EAIX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAGlC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,mBAAmB,GAC1B,KAAK,GAAG;IAAE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAgGpC"}
package/dist/queue.js ADDED
@@ -0,0 +1,103 @@
1
+ import * as Stream from 'node:stream';
2
+ import { JsonTransport } from '@vercel/queue';
3
+ import { MessageId, QueuePayloadSchema, } from '@workflow/world';
4
+ import { createEmbeddedWorld } from '@workflow/world-local';
5
+ import { monotonicFactory } from 'ulid';
6
+ import { MessageData } from './boss.js';
7
+ /**
8
+ * The Postgres queue works by creating two job types in pg-boss:
9
+ * - `workflow` for workflow jobs
10
+ * - `step` for step jobs
11
+ *
12
+ * When a message is queued, it is sent to pg-boss with the appropriate job type.
13
+ * When a job is processed, it is deserialized and then re-queued into the _embedded world_, showing that
14
+ * we can reuse the embedded world, mix and match worlds to build
15
+ * hybrid architectures, and even migrate between worlds.
16
+ */
17
+ export function createQueue(boss, config) {
18
+ const port = process.env.PORT ? Number(process.env.PORT) : undefined;
19
+ const embeddedWorld = createEmbeddedWorld({ dataDir: undefined, port });
20
+ const transport = new JsonTransport();
21
+ const generateMessageId = monotonicFactory();
22
+ const prefix = config.jobPrefix || 'workflow_';
23
+ const Queues = {
24
+ __wkf_workflow_: `${prefix}flows`,
25
+ __wkf_step_: `${prefix}steps`,
26
+ };
27
+ const createQueueHandler = embeddedWorld.createQueueHandler;
28
+ const getDeploymentId = async () => {
29
+ return 'postgres';
30
+ };
31
+ const createdQueues = new Map();
32
+ function createQueue(name) {
33
+ let createdQueue = createdQueues.get(name);
34
+ if (!createdQueue) {
35
+ createdQueue = boss.createQueue(name);
36
+ createdQueues.set(name, createdQueue);
37
+ }
38
+ return createdQueue;
39
+ }
40
+ const queue = async (queue, message, opts) => {
41
+ await boss.start();
42
+ const [prefix, queueId] = parseQueueName(queue);
43
+ const jobName = Queues[prefix];
44
+ await createQueue(jobName);
45
+ const body = transport.serialize(message);
46
+ const messageId = MessageId.parse(`msg_${generateMessageId()}`);
47
+ await boss.send({
48
+ name: jobName,
49
+ options: {
50
+ singletonKey: opts?.idempotencyKey ?? messageId,
51
+ retryLimit: 3,
52
+ },
53
+ data: MessageData.encode({
54
+ id: queueId,
55
+ data: body,
56
+ attempt: 1,
57
+ messageId,
58
+ idempotencyKey: opts?.idempotencyKey,
59
+ }),
60
+ });
61
+ return { messageId };
62
+ };
63
+ async function setupListener(queue, jobName) {
64
+ await createQueue(jobName);
65
+ await Promise.all(Array.from({ length: config.queueConcurrency || 10 }, async () => {
66
+ await boss.work(jobName, work);
67
+ }));
68
+ async function work([job]) {
69
+ const messageData = MessageData.parse(job.data);
70
+ const bodyStream = Stream.Readable.toWeb(Stream.Readable.from([messageData.data]));
71
+ const body = await transport.deserialize(bodyStream);
72
+ const message = QueuePayloadSchema.parse(body);
73
+ const queueName = `${queue}${messageData.id}`;
74
+ await embeddedWorld.queue(queueName, message, {
75
+ idempotencyKey: messageData.idempotencyKey,
76
+ });
77
+ }
78
+ }
79
+ async function setupListeners() {
80
+ for (const [prefix, jobName] of Object.entries(Queues)) {
81
+ await setupListener(prefix, jobName);
82
+ }
83
+ }
84
+ return {
85
+ createQueueHandler,
86
+ getDeploymentId,
87
+ queue,
88
+ async start() {
89
+ boss = await boss.start();
90
+ await setupListeners();
91
+ },
92
+ };
93
+ }
94
+ const parseQueueName = (name) => {
95
+ const prefixes = ['__wkf_step_', '__wkf_workflow_'];
96
+ for (const prefix of prefixes) {
97
+ if (name.startsWith(prefix)) {
98
+ return [prefix, name.slice(prefix.length)];
99
+ }
100
+ }
101
+ throw new Error(`Invalid queue name: ${name}`);
102
+ };
103
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Storage } from '@workflow/world';
2
+ import { type Drizzle } from './drizzle/index.js';
3
+ export declare function createRunsStorage(drizzle: Drizzle): Storage['runs'];
4
+ export declare function createEventsStorage(drizzle: Drizzle): Storage['events'];
5
+ export declare function createHooksStorage(drizzle: Drizzle): Storage['hooks'];
6
+ export declare function createStepsStorage(drizzle: Drizzle): Storage['steps'];
7
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAKV,OAAO,EACR,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,oBAAoB,CAAC;AAI1D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAgJnE;AAMD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAmFvE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAkFrE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CA2GrE"}
@@ -0,0 +1,369 @@
1
+ import { WorkflowAPIError } from '@workflow/errors';
2
+ import { and, desc, eq, gt, lt, sql } from 'drizzle-orm';
3
+ import { monotonicFactory } from 'ulid';
4
+ import { Schema } from './drizzle/index.js';
5
+ import { compact } from './util.js';
6
+ export function createRunsStorage(drizzle) {
7
+ const ulid = monotonicFactory();
8
+ const { runs } = Schema;
9
+ const get = drizzle
10
+ .select()
11
+ .from(runs)
12
+ .where(eq(runs.runId, sql.placeholder('id')))
13
+ .limit(1)
14
+ .prepare('workflow_runs_get');
15
+ return {
16
+ async get(id) {
17
+ const [value] = await get.execute({ id });
18
+ if (!value) {
19
+ throw new WorkflowAPIError(`Run not found: ${id}`, { status: 404 });
20
+ }
21
+ return compact(value);
22
+ },
23
+ async cancel(id) {
24
+ // TODO: we might want to guard this for only specific statuses
25
+ const [value] = await drizzle
26
+ .update(Schema.runs)
27
+ .set({ status: 'cancelled', completedAt: sql `now()` })
28
+ .where(eq(runs.runId, id))
29
+ .returning();
30
+ if (!value) {
31
+ throw new WorkflowAPIError(`Run not found: ${id}`, { status: 404 });
32
+ }
33
+ return compact(value);
34
+ },
35
+ async pause(id) {
36
+ // TODO: we might want to guard this for only specific statuses
37
+ const [value] = await drizzle
38
+ .update(Schema.runs)
39
+ .set({ status: 'paused' })
40
+ .where(eq(runs.runId, id))
41
+ .returning();
42
+ if (!value) {
43
+ throw new WorkflowAPIError(`Run not found: ${id}`, { status: 404 });
44
+ }
45
+ return compact(value);
46
+ },
47
+ async resume(id) {
48
+ const [value] = await drizzle
49
+ .update(Schema.runs)
50
+ .set({ status: 'running' })
51
+ .where(and(eq(runs.runId, id), eq(runs.status, 'paused')))
52
+ .returning();
53
+ if (!value) {
54
+ throw new WorkflowAPIError(`Paused run not found: ${id}`, {
55
+ status: 404,
56
+ });
57
+ }
58
+ return compact(value);
59
+ },
60
+ async list(params) {
61
+ const limit = params?.pagination?.limit ?? 20;
62
+ const fromCursor = params?.pagination?.cursor;
63
+ const all = await drizzle
64
+ .select()
65
+ .from(runs)
66
+ .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))))
67
+ .orderBy(desc(runs.runId))
68
+ .limit(limit + 1);
69
+ const values = all.slice(0, limit);
70
+ const hasMore = all.length > limit;
71
+ return {
72
+ data: values.map(compact),
73
+ hasMore,
74
+ cursor: values.at(-1)?.runId ?? null,
75
+ };
76
+ },
77
+ async create(data) {
78
+ const runId = `wrun_${ulid()}`;
79
+ const [value] = await drizzle
80
+ .insert(runs)
81
+ .values({
82
+ runId,
83
+ input: data.input,
84
+ executionContext: data.executionContext,
85
+ deploymentId: data.deploymentId,
86
+ status: 'pending',
87
+ workflowName: data.workflowName,
88
+ })
89
+ .onConflictDoNothing()
90
+ .returning();
91
+ if (!value) {
92
+ throw new WorkflowAPIError(`Run ${runId} already exists`, {
93
+ status: 409,
94
+ });
95
+ }
96
+ return compact(value);
97
+ },
98
+ async update(id, data) {
99
+ // Fetch current run to check if startedAt is already set
100
+ const [currentRun] = await drizzle
101
+ .select()
102
+ .from(runs)
103
+ .where(eq(runs.runId, id))
104
+ .limit(1);
105
+ if (!currentRun) {
106
+ throw new WorkflowAPIError(`Run not found: ${id}`, { status: 404 });
107
+ }
108
+ const updates = {
109
+ ...data,
110
+ output: data.output,
111
+ };
112
+ // Only set startedAt the first time transitioning to 'running'
113
+ if (data.status === 'running' && !currentRun.startedAt) {
114
+ updates.startedAt = new Date();
115
+ }
116
+ if (data.status === 'completed' ||
117
+ data.status === 'failed' ||
118
+ data.status === 'cancelled') {
119
+ updates.completedAt = new Date();
120
+ }
121
+ const [value] = await drizzle
122
+ .update(runs)
123
+ .set(updates)
124
+ .where(eq(runs.runId, id))
125
+ .returning();
126
+ if (!value) {
127
+ throw new WorkflowAPIError(`Run not found: ${id}`, { status: 404 });
128
+ }
129
+ return compact(value);
130
+ },
131
+ };
132
+ }
133
+ function map(obj, fn) {
134
+ return obj ? fn(obj) : undefined;
135
+ }
136
+ export function createEventsStorage(drizzle) {
137
+ const ulid = monotonicFactory();
138
+ const { events } = Schema;
139
+ return {
140
+ async create(runId, data) {
141
+ const eventId = `wevt_${ulid()}`;
142
+ const [value] = await drizzle
143
+ .insert(events)
144
+ .values({
145
+ runId,
146
+ eventId,
147
+ correlationId: data.correlationId,
148
+ eventType: data.eventType,
149
+ eventData: 'eventData' in data ? data.eventData : undefined,
150
+ })
151
+ .returning({ createdAt: events.createdAt });
152
+ if (!value) {
153
+ throw new WorkflowAPIError(`Event ${eventId} could not be created`, {
154
+ status: 409,
155
+ });
156
+ }
157
+ return { ...data, ...value, runId, eventId };
158
+ },
159
+ async list(params) {
160
+ const limit = params?.pagination?.limit ?? 100;
161
+ const sortOrder = params.pagination?.sortOrder || 'asc';
162
+ const order = sortOrder === 'desc'
163
+ ? { by: desc(events.eventId), compare: lt }
164
+ : { by: events.eventId, compare: gt };
165
+ const all = await drizzle
166
+ .select()
167
+ .from(events)
168
+ .where(and(eq(events.runId, params.runId), map(params.pagination?.cursor, (c) => order.compare(events.eventId, c))))
169
+ .orderBy(order.by)
170
+ .limit(limit + 1);
171
+ const values = all.slice(0, limit);
172
+ return {
173
+ data: values.map(compact),
174
+ cursor: values.at(-1)?.eventId ?? null,
175
+ hasMore: all.length > limit,
176
+ };
177
+ },
178
+ async listByCorrelationId(params) {
179
+ const limit = params?.pagination?.limit ?? 100;
180
+ const sortOrder = params.pagination?.sortOrder || 'asc';
181
+ const order = sortOrder === 'desc'
182
+ ? { by: desc(events.eventId), compare: lt }
183
+ : { by: events.eventId, compare: gt };
184
+ const all = await drizzle
185
+ .select()
186
+ .from(events)
187
+ .where(and(eq(events.correlationId, params.correlationId), map(params.pagination?.cursor, (c) => order.compare(events.eventId, c))))
188
+ .orderBy(order.by)
189
+ .limit(limit + 1);
190
+ const values = all.slice(0, limit);
191
+ return {
192
+ data: values.map(compact),
193
+ cursor: values.at(-1)?.eventId ?? null,
194
+ hasMore: all.length > limit,
195
+ };
196
+ },
197
+ };
198
+ }
199
+ export function createHooksStorage(drizzle) {
200
+ const { hooks } = Schema;
201
+ const getByToken = drizzle
202
+ .select()
203
+ .from(hooks)
204
+ .where(eq(hooks.token, sql.placeholder('token')))
205
+ .limit(1)
206
+ .prepare('workflow_hooks_get_by_token');
207
+ return {
208
+ async get(hookId) {
209
+ const [value] = await drizzle
210
+ .select()
211
+ .from(hooks)
212
+ .where(eq(hooks.hookId, hookId))
213
+ .limit(1);
214
+ return compact(value);
215
+ },
216
+ async create(runId, data) {
217
+ const [value] = await drizzle
218
+ .insert(hooks)
219
+ .values({
220
+ runId,
221
+ hookId: data.hookId,
222
+ token: data.token,
223
+ ownerId: '', // TODO: get from context
224
+ projectId: '', // TODO: get from context
225
+ environment: '', // TODO: get from context
226
+ })
227
+ .onConflictDoNothing()
228
+ .returning();
229
+ if (!value) {
230
+ throw new WorkflowAPIError(`Hook ${data.hookId} already exists`, {
231
+ status: 409,
232
+ });
233
+ }
234
+ return compact(value);
235
+ },
236
+ async getByToken(token) {
237
+ const [value] = await getByToken.execute({ token });
238
+ if (!value) {
239
+ throw new WorkflowAPIError(`Hook not found for token: ${token}`, {
240
+ status: 404,
241
+ });
242
+ }
243
+ return compact(value);
244
+ },
245
+ async list(params) {
246
+ const limit = params?.pagination?.limit ?? 100;
247
+ const fromCursor = params?.pagination?.cursor;
248
+ const all = await drizzle
249
+ .select()
250
+ .from(hooks)
251
+ .where(and(map(params.runId, (id) => eq(hooks.runId, id)), map(fromCursor, (c) => lt(hooks.hookId, c))))
252
+ .orderBy(desc(hooks.hookId))
253
+ .limit(limit + 1);
254
+ const values = all.slice(0, limit);
255
+ const hasMore = all.length > limit;
256
+ return {
257
+ data: values.map(compact),
258
+ cursor: values.at(-1)?.hookId ?? null,
259
+ hasMore,
260
+ };
261
+ },
262
+ async dispose(hookId) {
263
+ const [value] = await drizzle
264
+ .delete(hooks)
265
+ .where(eq(hooks.hookId, hookId))
266
+ .returning();
267
+ if (!value) {
268
+ throw new WorkflowAPIError(`Hook not found: ${hookId}`, {
269
+ status: 404,
270
+ });
271
+ }
272
+ return compact(value);
273
+ },
274
+ };
275
+ }
276
+ export function createStepsStorage(drizzle) {
277
+ 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
+ return {
285
+ async create(runId, data) {
286
+ const [value] = await drizzle
287
+ .insert(steps)
288
+ .values({
289
+ runId,
290
+ stepId: data.stepId,
291
+ stepName: data.stepName,
292
+ input: data.input,
293
+ status: 'pending',
294
+ attempt: 1,
295
+ })
296
+ .onConflictDoNothing()
297
+ .returning();
298
+ if (!value) {
299
+ throw new WorkflowAPIError(`Step ${data.stepId} already exists`, {
300
+ status: 409,
301
+ });
302
+ }
303
+ return compact(value);
304
+ },
305
+ async get(runId, stepId) {
306
+ const [value] = await get.execute({ stepId, runId });
307
+ if (!value) {
308
+ throw new WorkflowAPIError(`Step not found: ${stepId}`, {
309
+ status: 404,
310
+ });
311
+ }
312
+ return compact(value);
313
+ },
314
+ async update(runId, stepId, data) {
315
+ // Fetch current step to check if startedAt is already set
316
+ const [currentStep] = await drizzle
317
+ .select()
318
+ .from(steps)
319
+ .where(and(eq(steps.stepId, stepId), eq(steps.runId, runId)))
320
+ .limit(1);
321
+ if (!currentStep) {
322
+ throw new WorkflowAPIError(`Step not found: ${stepId}`, {
323
+ status: 404,
324
+ });
325
+ }
326
+ const updates = {
327
+ ...data,
328
+ output: data.output,
329
+ };
330
+ const now = new Date();
331
+ // Only set startedAt the first time the step transitions to 'running'
332
+ if (data.status === 'running' && !currentStep.startedAt) {
333
+ updates.startedAt = now;
334
+ }
335
+ if (data.status === 'completed' || data.status === 'failed') {
336
+ updates.completedAt = now;
337
+ }
338
+ const [value] = await drizzle
339
+ .update(steps)
340
+ .set(updates)
341
+ .where(and(eq(steps.stepId, stepId), eq(steps.runId, runId)))
342
+ .returning();
343
+ if (!value) {
344
+ throw new WorkflowAPIError(`Step not found: ${stepId}`, {
345
+ status: 404,
346
+ });
347
+ }
348
+ return compact(value);
349
+ },
350
+ async list(params) {
351
+ const limit = params?.pagination?.limit ?? 20;
352
+ const fromCursor = params?.pagination?.cursor;
353
+ const all = await drizzle
354
+ .select()
355
+ .from(steps)
356
+ .where(and(eq(steps.runId, params.runId), map(fromCursor, (c) => lt(steps.stepId, c))))
357
+ .orderBy(desc(steps.stepId))
358
+ .limit(limit + 1);
359
+ const values = all.slice(0, limit);
360
+ const hasMore = all.length > limit;
361
+ return {
362
+ data: values.map(compact),
363
+ hasMore,
364
+ cursor: values.at(-1)?.stepId ?? null,
365
+ };
366
+ },
367
+ };
368
+ }
369
+ //# 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,5 @@
1
+ import type { Streamer } from '@workflow/world';
2
+ import type { Sql } from 'postgres';
3
+ import { type Drizzle } from './drizzle/index.js';
4
+ export declare function createStreamer(postgres: Sql, drizzle: Drizzle): Streamer;
5
+ //# sourceMappingURL=streamer.d.ts.map
@@ -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"}