@rivet-dev/vercel-world 0.0.0-http-body-streaming.064e07d
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/.turbo/turbo-build.log +4 -0
- package/README.md +31 -0
- package/dist/actors/coordinator.d.ts +114 -0
- package/dist/actors/coordinator.d.ts.map +1 -0
- package/dist/actors/coordinator.js +232 -0
- package/dist/actors/coordinator.js.map +1 -0
- package/dist/actors/db.d.ts +8 -0
- package/dist/actors/db.d.ts.map +1 -0
- package/dist/actors/db.js +282 -0
- package/dist/actors/db.js.map +1 -0
- package/dist/actors/dispatcher.d.ts +84 -0
- package/dist/actors/dispatcher.d.ts.map +1 -0
- package/dist/actors/dispatcher.js +498 -0
- package/dist/actors/dispatcher.js.map +1 -0
- package/dist/actors/hook-token.d.ts +26 -0
- package/dist/actors/hook-token.d.ts.map +1 -0
- package/dist/actors/hook-token.js +151 -0
- package/dist/actors/hook-token.js.map +1 -0
- package/dist/actors/shared.d.ts +366 -0
- package/dist/actors/shared.d.ts.map +1 -0
- package/dist/actors/shared.js +112 -0
- package/dist/actors/shared.js.map +1 -0
- package/dist/actors/streams.d.ts +26 -0
- package/dist/actors/streams.d.ts.map +1 -0
- package/dist/actors/streams.js +127 -0
- package/dist/actors/streams.js.map +1 -0
- package/dist/actors/workflow-run.d.ts +891 -0
- package/dist/actors/workflow-run.d.ts.map +1 -0
- package/dist/actors/workflow-run.js +872 -0
- package/dist/actors/workflow-run.js.map +1 -0
- package/dist/actors.d.ts +2244 -0
- package/dist/actors.d.ts.map +1 -0
- package/dist/actors.js +16 -0
- package/dist/actors.js.map +1 -0
- package/dist/codec.d.ts +4 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +27 -0
- package/dist/codec.js.map +1 -0
- package/dist/index.d.ts +843 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +567 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime.d.ts +2 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +24 -0
- package/dist/runtime.js.map +1 -0
- package/package.json +51 -0
- package/scripts/conformance/run.ts +278 -0
- package/scripts/integration/run.ts +935 -0
- package/src/actors/coordinator.ts +360 -0
- package/src/actors/db.ts +291 -0
- package/src/actors/dispatcher.ts +787 -0
- package/src/actors/hook-token.ts +239 -0
- package/src/actors/shared.ts +153 -0
- package/src/actors/streams.ts +215 -0
- package/src/actors/workflow-run.ts +1477 -0
- package/src/actors.ts +18 -0
- package/src/codec.ts +28 -0
- package/src/index.ts +788 -0
- package/src/runtime.ts +29 -0
- package/tests/conformance.test.ts +8 -0
- package/tests/helpers/db.ts +62 -0
- package/tests/helpers/dispatcher-driver.ts +71 -0
- package/tests/helpers/harness.ts +161 -0
- package/tests/integration/crash-restart.test.ts +145 -0
- package/tests/integration/dispatcher-loop.test.ts +144 -0
- package/tests/integration/hook-token.test.ts +160 -0
- package/tests/integration/hooks.test.ts +123 -0
- package/tests/integration/streams.test.ts +178 -0
- package/tests/integration/workflow-events.test.ts +326 -0
- package/tests/setup.ts +10 -0
- package/tests/unit/codec.test.ts +73 -0
- package/tests/unit/coordinator-record.test.ts +177 -0
- package/tests/unit/db-migrations.test.ts +65 -0
- package/tests/unit/dispatcher-queue.test.ts +274 -0
- package/tests/unit/logging.test.ts +49 -0
- package/tests/unit/readiness.test.ts +102 -0
- package/tests/unit/transaction.test.ts +76 -0
- package/tsconfig.build.json +13 -0
- package/tsconfig.json +12 -0
- package/vitest.config.ts +32 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { actor } from "rivetkit";
|
|
2
|
+
import { hookTokenDb } from "./db.js";
|
|
3
|
+
import { one } from "./shared.js";
|
|
4
|
+
export const PENDING_RESERVATION_TTL_MS = 60_000;
|
|
5
|
+
function assertTokenKey(c, token) {
|
|
6
|
+
if (String(c.key[0] ?? "") !== token) {
|
|
7
|
+
throw new Error("hookToken actor key must match token");
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
async function readState(c) {
|
|
11
|
+
const row = await one(c, `SELECT generation, run_id, hook_id, status, created_at, updated_at, expires_at
|
|
12
|
+
FROM hook_token_state WHERE singleton = 1`);
|
|
13
|
+
if (!row)
|
|
14
|
+
throw new Error("hookToken state is missing");
|
|
15
|
+
return {
|
|
16
|
+
generation: Number(row.generation),
|
|
17
|
+
runId: row.run_id == null ? undefined : String(row.run_id),
|
|
18
|
+
hookId: row.hook_id == null ? undefined : String(row.hook_id),
|
|
19
|
+
status: String(row.status),
|
|
20
|
+
createdAt: row.created_at == null ? undefined : Number(row.created_at),
|
|
21
|
+
updatedAt: Number(row.updated_at),
|
|
22
|
+
expiresAt: row.expires_at == null ? undefined : Number(row.expires_at),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
async function verifyPendingOwner(c, token, state) {
|
|
26
|
+
if (state.status !== "pending" ||
|
|
27
|
+
state.runId == null ||
|
|
28
|
+
state.hookId == null) {
|
|
29
|
+
return state.status === "confirmed" ? state : null;
|
|
30
|
+
}
|
|
31
|
+
let ownsHook;
|
|
32
|
+
try {
|
|
33
|
+
ownsHook = await c
|
|
34
|
+
.client()
|
|
35
|
+
.workflowRun.getOrCreate([state.runId])
|
|
36
|
+
.ownsHook(state.hookId, token);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// Canonical ownership could not be checked. A pending reservation must
|
|
40
|
+
// never become externally visible or be stolen on an inconclusive result.
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const now = Date.now();
|
|
44
|
+
if (ownsHook) {
|
|
45
|
+
await c.db.execute(`UPDATE hook_token_state
|
|
46
|
+
SET status = 'confirmed', updated_at = ?, expires_at = NULL
|
|
47
|
+
WHERE singleton = 1 AND generation = ? AND run_id = ? AND hook_id = ?
|
|
48
|
+
AND status = 'pending'`, now, state.generation, state.runId, state.hookId);
|
|
49
|
+
const current = await readState(c);
|
|
50
|
+
return current.generation === state.generation &&
|
|
51
|
+
current.status === "confirmed" &&
|
|
52
|
+
current.runId === state.runId &&
|
|
53
|
+
current.hookId === state.hookId
|
|
54
|
+
? current
|
|
55
|
+
: null;
|
|
56
|
+
}
|
|
57
|
+
if ((state.expiresAt ?? Number.POSITIVE_INFINITY) > now)
|
|
58
|
+
return null;
|
|
59
|
+
await c.db.execute(`UPDATE hook_token_state
|
|
60
|
+
SET generation = generation + 1, run_id = NULL, hook_id = NULL,
|
|
61
|
+
status = 'empty', created_at = NULL, updated_at = ?, expires_at = NULL
|
|
62
|
+
WHERE singleton = 1 AND generation = ? AND run_id = ? AND hook_id = ?
|
|
63
|
+
AND status = 'pending'`, now, state.generation, state.runId, state.hookId);
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
export const hookToken = actor({
|
|
67
|
+
db: hookTokenDb,
|
|
68
|
+
actions: {
|
|
69
|
+
reserve: async (c, token, runId, hookId) => {
|
|
70
|
+
const ctx = c;
|
|
71
|
+
assertTokenKey(ctx, token);
|
|
72
|
+
let state = await readState(ctx);
|
|
73
|
+
if (state.status === "pending" &&
|
|
74
|
+
(state.runId !== runId || state.hookId !== hookId) &&
|
|
75
|
+
(state.expiresAt ?? Number.POSITIVE_INFINITY) <= Date.now()) {
|
|
76
|
+
await verifyPendingOwner(ctx, token, state);
|
|
77
|
+
state = await readState(ctx);
|
|
78
|
+
}
|
|
79
|
+
if (state.status !== "empty" &&
|
|
80
|
+
state.runId === runId &&
|
|
81
|
+
state.hookId === hookId) {
|
|
82
|
+
return { ok: true, generation: state.generation };
|
|
83
|
+
}
|
|
84
|
+
if (state.status !== "empty") {
|
|
85
|
+
return {
|
|
86
|
+
ok: false,
|
|
87
|
+
generation: state.generation,
|
|
88
|
+
runId: state.runId,
|
|
89
|
+
hookId: state.hookId,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
const now = Date.now();
|
|
93
|
+
await ctx.db.execute(`UPDATE hook_token_state
|
|
94
|
+
SET generation = generation + 1, run_id = ?, hook_id = ?,
|
|
95
|
+
status = 'pending', created_at = ?, updated_at = ?, expires_at = ?
|
|
96
|
+
WHERE singleton = 1 AND status = 'empty'`, runId, hookId, now, now, now + PENDING_RESERVATION_TTL_MS);
|
|
97
|
+
const reserved = await readState(ctx);
|
|
98
|
+
return {
|
|
99
|
+
ok: reserved.status === "pending" &&
|
|
100
|
+
reserved.runId === runId &&
|
|
101
|
+
reserved.hookId === hookId,
|
|
102
|
+
generation: reserved.generation,
|
|
103
|
+
};
|
|
104
|
+
},
|
|
105
|
+
confirm: async (c, token, generation, runId, hookId) => {
|
|
106
|
+
const ctx = c;
|
|
107
|
+
assertTokenKey(ctx, token);
|
|
108
|
+
await ctx.db.execute(`UPDATE hook_token_state
|
|
109
|
+
SET status = 'confirmed', updated_at = ?, expires_at = NULL
|
|
110
|
+
WHERE singleton = 1 AND generation = ? AND run_id = ? AND hook_id = ?
|
|
111
|
+
AND status IN ('pending', 'confirmed')`, Date.now(), generation, runId, hookId);
|
|
112
|
+
const state = await readState(ctx);
|
|
113
|
+
return {
|
|
114
|
+
ok: state.generation === generation &&
|
|
115
|
+
state.status === "confirmed" &&
|
|
116
|
+
state.runId === runId &&
|
|
117
|
+
state.hookId === hookId,
|
|
118
|
+
};
|
|
119
|
+
},
|
|
120
|
+
get: async (c, token) => {
|
|
121
|
+
const ctx = c;
|
|
122
|
+
assertTokenKey(ctx, token);
|
|
123
|
+
let state = await readState(ctx);
|
|
124
|
+
if (state.status === "pending") {
|
|
125
|
+
await verifyPendingOwner(ctx, token, state);
|
|
126
|
+
state = await readState(ctx);
|
|
127
|
+
}
|
|
128
|
+
if (state.status !== "confirmed")
|
|
129
|
+
return null;
|
|
130
|
+
return {
|
|
131
|
+
runId: state.runId,
|
|
132
|
+
hookId: state.hookId,
|
|
133
|
+
generation: state.generation,
|
|
134
|
+
};
|
|
135
|
+
},
|
|
136
|
+
release: async (c, token, generation, runId, hookId) => {
|
|
137
|
+
const ctx = c;
|
|
138
|
+
assertTokenKey(ctx, token);
|
|
139
|
+
await ctx.db.execute(`UPDATE hook_token_state
|
|
140
|
+
SET generation = generation + 1, run_id = NULL, hook_id = NULL,
|
|
141
|
+
status = 'empty', created_at = NULL, updated_at = ?, expires_at = NULL
|
|
142
|
+
WHERE singleton = 1 AND generation = ? AND run_id = ?
|
|
143
|
+
AND (? IS NULL OR hook_id = ?) AND status IN ('pending', 'confirmed')`, Date.now(), generation, runId, hookId ?? null, hookId ?? null);
|
|
144
|
+
const state = await readState(ctx);
|
|
145
|
+
return {
|
|
146
|
+
ok: state.status === "empty" && state.generation >= generation + 1,
|
|
147
|
+
};
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
//# sourceMappingURL=hook-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-token.js","sourceRoot":"","sources":["../../src/actors/hook-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AA0BjD,SAAS,cAAc,CAAC,CAA8B,EAAE,KAAa;IACpE,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACzD,CAAC;AACF,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,CAAiC;IACzD,MAAM,GAAG,GAAG,MAAM,GAAG,CACpB,CAAC,EACD;6CAC2C,CAC3C,CAAC;IACF,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACxD,OAAO;QACN,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;QAClC,KAAK,EAAE,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;QAC1D,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;QAC7D,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAA2B;QACpD,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;QACtE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;QACjC,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;KACtE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAChC,CAAmB,EACnB,KAAa,EACb,KAAmB;IAEnB,IACC,KAAK,CAAC,MAAM,KAAK,SAAS;QAC1B,KAAK,CAAC,KAAK,IAAI,IAAI;QACnB,KAAK,CAAC,MAAM,IAAI,IAAI,EACnB,CAAC;QACF,OAAO,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,CAAC;IAED,IAAI,QAAiB,CAAC;IACtB,IAAI,CAAC;QACJ,QAAQ,GAAG,MAAM,CAAC;aAChB,MAAM,EAAO;aACb,WAAW,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACtC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACR,uEAAuE;QACvE,0EAA0E;QAC1E,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,QAAQ,EAAE,CAAC;QACd,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CACjB;;;6BAG0B,EAC1B,GAAG,EACH,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,MAAM,CACZ,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC;QACnC,OAAO,OAAO,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU;YAC7C,OAAO,CAAC,MAAM,KAAK,WAAW;YAC9B,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK;YAC7B,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;YAC/B,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,IAAI,CAAC;IACT,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,MAAM,CAAC,iBAAiB,CAAC,GAAG,GAAG;QAAE,OAAO,IAAI,CAAC;IACrE,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CACjB;;;;4BAI0B,EAC1B,GAAG,EACH,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,MAAM,CACZ,CAAC;IACF,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;IAC9B,EAAE,EAAE,WAAW;IACf,OAAO,EAAE;QACR,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAa,EAAE,KAAa,EAAE,MAAc,EAAE,EAAE;YAClE,MAAM,GAAG,GAAG,CAAgC,CAAC;YAC7C,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3B,IAAI,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;YACjC,IACC,KAAK,CAAC,MAAM,KAAK,SAAS;gBAC1B,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC;gBAClD,CAAC,KAAK,CAAC,SAAS,IAAI,MAAM,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,EAC1D,CAAC;gBACF,MAAM,kBAAkB,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBAC5C,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;YACD,IACC,KAAK,CAAC,MAAM,KAAK,OAAO;gBACxB,KAAK,CAAC,KAAK,KAAK,KAAK;gBACrB,KAAK,CAAC,MAAM,KAAK,MAAM,EACtB,CAAC;gBACF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;YACnD,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC9B,OAAO;oBACN,EAAE,EAAE,KAAK;oBACT,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;iBACpB,CAAC;YACH,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,GAAG,CAAC,EAAE,CAAC,OAAO,CACnB;;;8CAG0C,EAC1C,KAAK,EACL,MAAM,EACN,GAAG,EACH,GAAG,EACH,GAAG,GAAG,0BAA0B,CAChC,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;YACtC,OAAO;gBACN,EAAE,EACD,QAAQ,CAAC,MAAM,KAAK,SAAS;oBAC7B,QAAQ,CAAC,KAAK,KAAK,KAAK;oBACxB,QAAQ,CAAC,MAAM,KAAK,MAAM;gBAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU;aAC/B,CAAC;QACH,CAAC;QACD,OAAO,EAAE,KAAK,EACb,CAAC,EACD,KAAa,EACb,UAAkB,EAClB,KAAa,EACb,MAAc,EACb,EAAE;YACH,MAAM,GAAG,GAAG,CAAgC,CAAC;YAC7C,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3B,MAAM,GAAG,CAAC,EAAE,CAAC,OAAO,CACnB;;;8CAG0C,EAC1C,IAAI,CAAC,GAAG,EAAE,EACV,UAAU,EACV,KAAK,EACL,MAAM,CACN,CAAC;YACF,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;YACnC,OAAO;gBACN,EAAE,EACD,KAAK,CAAC,UAAU,KAAK,UAAU;oBAC/B,KAAK,CAAC,MAAM,KAAK,WAAW;oBAC5B,KAAK,CAAC,KAAK,KAAK,KAAK;oBACrB,KAAK,CAAC,MAAM,KAAK,MAAM;aACxB,CAAC;QACH,CAAC;QACD,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAa,EAAE,EAAE;YAC/B,MAAM,GAAG,GAAG,CAAgC,CAAC;YAC7C,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3B,IAAI,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,kBAAkB,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBAC5C,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW;gBAAE,OAAO,IAAI,CAAC;YAC9C,OAAO;gBACN,KAAK,EAAE,KAAK,CAAC,KAAe;gBAC5B,MAAM,EAAE,KAAK,CAAC,MAAgB;gBAC9B,UAAU,EAAE,KAAK,CAAC,UAAU;aAC5B,CAAC;QACH,CAAC;QACD,OAAO,EAAE,KAAK,EACb,CAAC,EACD,KAAa,EACb,UAAkB,EAClB,KAAa,EACb,MAAe,EACd,EAAE;YACH,MAAM,GAAG,GAAG,CAAgC,CAAC;YAC7C,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3B,MAAM,GAAG,CAAC,EAAE,CAAC,OAAO,CACnB;;;;6EAIyE,EACzE,IAAI,CAAC,GAAG,EAAE,EACV,UAAU,EACV,KAAK,EACL,MAAM,IAAI,IAAI,EACd,MAAM,IAAI,IAAI,CACd,CAAC;YACF,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;YACnC,OAAO;gBACN,EAAE,EACD,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,KAAK,CAAC,UAAU,IAAI,UAAU,GAAG,CAAC;aAC/D,CAAC;QACH,CAAC;KACD;CACD,CAAC,CAAC"}
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
import { type Wait } from "@workflow/world";
|
|
2
|
+
export type Db = {
|
|
3
|
+
execute(sql: string, ...args: unknown[]): Promise<Record<string, unknown>[]>;
|
|
4
|
+
transaction<T>(callback: (tx: Db) => Promise<T> | T): Promise<T>;
|
|
5
|
+
};
|
|
6
|
+
export type Ctx = {
|
|
7
|
+
db: Db;
|
|
8
|
+
};
|
|
9
|
+
export declare function withActorTransaction<T>(c: Ctx, fn: (tx: Ctx) => Promise<T>): Promise<T>;
|
|
10
|
+
export declare function toDate(value: unknown): Date | undefined;
|
|
11
|
+
export declare function toMs(value: unknown): number | null;
|
|
12
|
+
export declare function rowToRun(row: Record<string, unknown>): {
|
|
13
|
+
runId: string;
|
|
14
|
+
deploymentId: string;
|
|
15
|
+
workflowName: string;
|
|
16
|
+
attributes: Record<string, string>;
|
|
17
|
+
createdAt: Date;
|
|
18
|
+
updatedAt: Date;
|
|
19
|
+
status: "pending" | "running";
|
|
20
|
+
specVersion?: number | undefined;
|
|
21
|
+
executionContext?: Record<string, any> | undefined;
|
|
22
|
+
input?: unknown;
|
|
23
|
+
errorCode?: string | undefined;
|
|
24
|
+
expiredAt?: Date | undefined;
|
|
25
|
+
startedAt?: Date | undefined;
|
|
26
|
+
output?: undefined;
|
|
27
|
+
error?: undefined;
|
|
28
|
+
completedAt?: undefined;
|
|
29
|
+
} | {
|
|
30
|
+
runId: string;
|
|
31
|
+
deploymentId: string;
|
|
32
|
+
workflowName: string;
|
|
33
|
+
attributes: Record<string, string>;
|
|
34
|
+
createdAt: Date;
|
|
35
|
+
updatedAt: Date;
|
|
36
|
+
status: "cancelled";
|
|
37
|
+
completedAt: Date;
|
|
38
|
+
specVersion?: number | undefined;
|
|
39
|
+
executionContext?: Record<string, any> | undefined;
|
|
40
|
+
input?: unknown;
|
|
41
|
+
errorCode?: string | undefined;
|
|
42
|
+
expiredAt?: Date | undefined;
|
|
43
|
+
startedAt?: Date | undefined;
|
|
44
|
+
output?: undefined;
|
|
45
|
+
error?: undefined;
|
|
46
|
+
} | {
|
|
47
|
+
runId: string;
|
|
48
|
+
deploymentId: string;
|
|
49
|
+
workflowName: string;
|
|
50
|
+
attributes: Record<string, string>;
|
|
51
|
+
createdAt: Date;
|
|
52
|
+
updatedAt: Date;
|
|
53
|
+
status: "completed";
|
|
54
|
+
output: unknown;
|
|
55
|
+
completedAt: Date;
|
|
56
|
+
specVersion?: number | undefined;
|
|
57
|
+
executionContext?: Record<string, any> | undefined;
|
|
58
|
+
input?: unknown;
|
|
59
|
+
errorCode?: string | undefined;
|
|
60
|
+
expiredAt?: Date | undefined;
|
|
61
|
+
startedAt?: Date | undefined;
|
|
62
|
+
error?: undefined;
|
|
63
|
+
} | {
|
|
64
|
+
runId: string;
|
|
65
|
+
deploymentId: string;
|
|
66
|
+
workflowName: string;
|
|
67
|
+
attributes: Record<string, string>;
|
|
68
|
+
createdAt: Date;
|
|
69
|
+
updatedAt: Date;
|
|
70
|
+
status: "failed";
|
|
71
|
+
error: unknown;
|
|
72
|
+
completedAt: Date;
|
|
73
|
+
specVersion?: number | undefined;
|
|
74
|
+
executionContext?: Record<string, any> | undefined;
|
|
75
|
+
input?: unknown;
|
|
76
|
+
errorCode?: string | undefined;
|
|
77
|
+
expiredAt?: Date | undefined;
|
|
78
|
+
startedAt?: Date | undefined;
|
|
79
|
+
output?: undefined;
|
|
80
|
+
};
|
|
81
|
+
export declare function rowToEvent(row: Record<string, unknown>): ({
|
|
82
|
+
eventType: "run_created";
|
|
83
|
+
eventData: {
|
|
84
|
+
deploymentId: string;
|
|
85
|
+
workflowName: string;
|
|
86
|
+
input: unknown;
|
|
87
|
+
executionContext?: Record<string, any> | undefined;
|
|
88
|
+
attributes?: Record<string, string> | undefined;
|
|
89
|
+
allowReservedAttributes?: true | undefined;
|
|
90
|
+
};
|
|
91
|
+
correlationId?: string | undefined;
|
|
92
|
+
specVersion?: number | undefined;
|
|
93
|
+
} | {
|
|
94
|
+
eventType: "run_started";
|
|
95
|
+
correlationId?: string | undefined;
|
|
96
|
+
specVersion?: number | undefined;
|
|
97
|
+
eventData?: {
|
|
98
|
+
input?: unknown;
|
|
99
|
+
deploymentId?: string | undefined;
|
|
100
|
+
workflowName?: string | undefined;
|
|
101
|
+
executionContext?: Record<string, any> | undefined;
|
|
102
|
+
attributes?: Record<string, string> | undefined;
|
|
103
|
+
allowReservedAttributes?: true | undefined;
|
|
104
|
+
} | undefined;
|
|
105
|
+
} | {
|
|
106
|
+
eventType: "run_completed";
|
|
107
|
+
eventData: {
|
|
108
|
+
output?: unknown;
|
|
109
|
+
};
|
|
110
|
+
correlationId?: string | undefined;
|
|
111
|
+
specVersion?: number | undefined;
|
|
112
|
+
} | {
|
|
113
|
+
eventType: "run_failed";
|
|
114
|
+
eventData: {
|
|
115
|
+
error: unknown;
|
|
116
|
+
errorCode?: string | undefined;
|
|
117
|
+
};
|
|
118
|
+
correlationId?: string | undefined;
|
|
119
|
+
specVersion?: number | undefined;
|
|
120
|
+
} | {
|
|
121
|
+
eventType: "run_cancelled";
|
|
122
|
+
correlationId?: string | undefined;
|
|
123
|
+
specVersion?: number | undefined;
|
|
124
|
+
eventData?: {
|
|
125
|
+
cancelReason?: string | undefined;
|
|
126
|
+
} | undefined;
|
|
127
|
+
} | {
|
|
128
|
+
eventType: "attr_set";
|
|
129
|
+
eventData: {
|
|
130
|
+
changes: {
|
|
131
|
+
key: string;
|
|
132
|
+
value: string | null;
|
|
133
|
+
}[];
|
|
134
|
+
writer: {
|
|
135
|
+
type: "workflow";
|
|
136
|
+
} | {
|
|
137
|
+
type: "step";
|
|
138
|
+
stepId: string;
|
|
139
|
+
attempt: number;
|
|
140
|
+
};
|
|
141
|
+
allowReservedAttributes?: true | undefined;
|
|
142
|
+
};
|
|
143
|
+
specVersion?: number | undefined;
|
|
144
|
+
correlationId?: string | undefined;
|
|
145
|
+
} | {
|
|
146
|
+
eventType: "step_created";
|
|
147
|
+
correlationId: string;
|
|
148
|
+
eventData: {
|
|
149
|
+
stepName: string;
|
|
150
|
+
input: unknown;
|
|
151
|
+
workflowName?: string | undefined;
|
|
152
|
+
};
|
|
153
|
+
specVersion?: number | undefined;
|
|
154
|
+
} | {
|
|
155
|
+
eventType: "step_completed";
|
|
156
|
+
correlationId: string;
|
|
157
|
+
eventData: {
|
|
158
|
+
result: unknown;
|
|
159
|
+
ttfs?: number | undefined;
|
|
160
|
+
stso?: number | undefined;
|
|
161
|
+
stepCount?: number | undefined;
|
|
162
|
+
eventCount?: number | undefined;
|
|
163
|
+
rsfs?: number | undefined;
|
|
164
|
+
finalSchedulingReplay?: number | undefined;
|
|
165
|
+
optimizations?: string[] | undefined;
|
|
166
|
+
stepName?: string | undefined;
|
|
167
|
+
workflowName?: string | undefined;
|
|
168
|
+
};
|
|
169
|
+
specVersion?: number | undefined;
|
|
170
|
+
} | {
|
|
171
|
+
eventType: "step_failed";
|
|
172
|
+
correlationId: string;
|
|
173
|
+
eventData: {
|
|
174
|
+
error: unknown;
|
|
175
|
+
ttfs?: number | undefined;
|
|
176
|
+
stso?: number | undefined;
|
|
177
|
+
stepCount?: number | undefined;
|
|
178
|
+
eventCount?: number | undefined;
|
|
179
|
+
rsfs?: number | undefined;
|
|
180
|
+
finalSchedulingReplay?: number | undefined;
|
|
181
|
+
optimizations?: string[] | undefined;
|
|
182
|
+
stepName?: string | undefined;
|
|
183
|
+
};
|
|
184
|
+
specVersion?: number | undefined;
|
|
185
|
+
} | {
|
|
186
|
+
eventType: "step_retrying";
|
|
187
|
+
correlationId: string;
|
|
188
|
+
eventData: {
|
|
189
|
+
error: unknown;
|
|
190
|
+
stepName?: string | undefined;
|
|
191
|
+
retryAfter?: Date | undefined;
|
|
192
|
+
};
|
|
193
|
+
specVersion?: number | undefined;
|
|
194
|
+
} | {
|
|
195
|
+
eventType: "step_started";
|
|
196
|
+
correlationId: string;
|
|
197
|
+
specVersion?: number | undefined;
|
|
198
|
+
eventData?: {
|
|
199
|
+
stepName?: string | undefined;
|
|
200
|
+
attempt?: number | undefined;
|
|
201
|
+
workflowName?: string | undefined;
|
|
202
|
+
input?: unknown;
|
|
203
|
+
ownerMessageId?: string | undefined;
|
|
204
|
+
} | undefined;
|
|
205
|
+
} | {
|
|
206
|
+
eventType: "hook_created";
|
|
207
|
+
correlationId: string;
|
|
208
|
+
eventData: {
|
|
209
|
+
token: string;
|
|
210
|
+
metadata?: unknown;
|
|
211
|
+
isWebhook?: boolean | undefined;
|
|
212
|
+
isSystem?: boolean | undefined;
|
|
213
|
+
};
|
|
214
|
+
specVersion?: number | undefined;
|
|
215
|
+
} | {
|
|
216
|
+
eventType: "hook_received";
|
|
217
|
+
correlationId: string;
|
|
218
|
+
eventData: {
|
|
219
|
+
payload: unknown;
|
|
220
|
+
token?: string | undefined;
|
|
221
|
+
};
|
|
222
|
+
specVersion?: number | undefined;
|
|
223
|
+
} | {
|
|
224
|
+
eventType: "hook_disposed";
|
|
225
|
+
correlationId: string;
|
|
226
|
+
specVersion?: number | undefined;
|
|
227
|
+
eventData?: {
|
|
228
|
+
token?: string | undefined;
|
|
229
|
+
} | undefined;
|
|
230
|
+
} | {
|
|
231
|
+
eventType: "hook_conflict";
|
|
232
|
+
correlationId: string;
|
|
233
|
+
eventData: {
|
|
234
|
+
token: string;
|
|
235
|
+
conflictingRunId?: string | undefined;
|
|
236
|
+
};
|
|
237
|
+
specVersion?: number | undefined;
|
|
238
|
+
} | {
|
|
239
|
+
eventType: "wait_created";
|
|
240
|
+
correlationId: string;
|
|
241
|
+
eventData: {
|
|
242
|
+
resumeAt: Date;
|
|
243
|
+
};
|
|
244
|
+
specVersion?: number | undefined;
|
|
245
|
+
} | {
|
|
246
|
+
eventType: "wait_completed";
|
|
247
|
+
correlationId: string;
|
|
248
|
+
specVersion?: number | undefined;
|
|
249
|
+
eventData?: {
|
|
250
|
+
resumeAt?: Date | undefined;
|
|
251
|
+
} | undefined;
|
|
252
|
+
}) & {
|
|
253
|
+
runId: string;
|
|
254
|
+
eventId: string;
|
|
255
|
+
createdAt: Date;
|
|
256
|
+
occurredAt?: Date | undefined;
|
|
257
|
+
specVersion?: number | undefined;
|
|
258
|
+
};
|
|
259
|
+
export declare function rowToStep(row: Record<string, unknown>): {
|
|
260
|
+
runId: string;
|
|
261
|
+
stepId: string;
|
|
262
|
+
stepName: string;
|
|
263
|
+
status: "pending" | "running" | "cancelled" | "completed" | "failed";
|
|
264
|
+
attempt: number;
|
|
265
|
+
createdAt: Date;
|
|
266
|
+
updatedAt: Date;
|
|
267
|
+
input?: unknown;
|
|
268
|
+
output?: unknown;
|
|
269
|
+
error?: unknown;
|
|
270
|
+
startedAt?: Date | undefined;
|
|
271
|
+
completedAt?: Date | undefined;
|
|
272
|
+
retryAfter?: Date | undefined;
|
|
273
|
+
specVersion?: number | undefined;
|
|
274
|
+
};
|
|
275
|
+
export declare function rowToHook(row: Record<string, unknown>): {
|
|
276
|
+
runId: string;
|
|
277
|
+
hookId: string;
|
|
278
|
+
token: string;
|
|
279
|
+
ownerId: string;
|
|
280
|
+
projectId: string;
|
|
281
|
+
environment: string;
|
|
282
|
+
createdAt: Date;
|
|
283
|
+
metadata?: unknown;
|
|
284
|
+
specVersion?: number | undefined;
|
|
285
|
+
isWebhook?: boolean | undefined;
|
|
286
|
+
isSystem?: boolean | undefined;
|
|
287
|
+
};
|
|
288
|
+
export declare function rowToWait(row: Record<string, unknown>): Wait;
|
|
289
|
+
export declare function filterData<T extends {
|
|
290
|
+
input?: unknown;
|
|
291
|
+
output?: unknown;
|
|
292
|
+
}>(value: T, resolveData?: string): T;
|
|
293
|
+
export declare function filterHookData<T extends {
|
|
294
|
+
metadata?: unknown;
|
|
295
|
+
}>(value: T, resolveData?: string): T;
|
|
296
|
+
export declare function one(c: Ctx, sql: string, ...args: unknown[]): Promise<Record<string, unknown>>;
|
|
297
|
+
export declare function requireRun(c: Ctx, runId: string): Promise<{
|
|
298
|
+
runId: string;
|
|
299
|
+
deploymentId: string;
|
|
300
|
+
workflowName: string;
|
|
301
|
+
attributes: Record<string, string>;
|
|
302
|
+
createdAt: Date;
|
|
303
|
+
updatedAt: Date;
|
|
304
|
+
status: "pending" | "running";
|
|
305
|
+
specVersion?: number | undefined;
|
|
306
|
+
executionContext?: Record<string, any> | undefined;
|
|
307
|
+
input?: unknown;
|
|
308
|
+
errorCode?: string | undefined;
|
|
309
|
+
expiredAt?: Date | undefined;
|
|
310
|
+
startedAt?: Date | undefined;
|
|
311
|
+
output?: undefined;
|
|
312
|
+
error?: undefined;
|
|
313
|
+
completedAt?: undefined;
|
|
314
|
+
} | {
|
|
315
|
+
runId: string;
|
|
316
|
+
deploymentId: string;
|
|
317
|
+
workflowName: string;
|
|
318
|
+
attributes: Record<string, string>;
|
|
319
|
+
createdAt: Date;
|
|
320
|
+
updatedAt: Date;
|
|
321
|
+
status: "cancelled";
|
|
322
|
+
completedAt: Date;
|
|
323
|
+
specVersion?: number | undefined;
|
|
324
|
+
executionContext?: Record<string, any> | undefined;
|
|
325
|
+
input?: unknown;
|
|
326
|
+
errorCode?: string | undefined;
|
|
327
|
+
expiredAt?: Date | undefined;
|
|
328
|
+
startedAt?: Date | undefined;
|
|
329
|
+
output?: undefined;
|
|
330
|
+
error?: undefined;
|
|
331
|
+
} | {
|
|
332
|
+
runId: string;
|
|
333
|
+
deploymentId: string;
|
|
334
|
+
workflowName: string;
|
|
335
|
+
attributes: Record<string, string>;
|
|
336
|
+
createdAt: Date;
|
|
337
|
+
updatedAt: Date;
|
|
338
|
+
status: "completed";
|
|
339
|
+
output: unknown;
|
|
340
|
+
completedAt: Date;
|
|
341
|
+
specVersion?: number | undefined;
|
|
342
|
+
executionContext?: Record<string, any> | undefined;
|
|
343
|
+
input?: unknown;
|
|
344
|
+
errorCode?: string | undefined;
|
|
345
|
+
expiredAt?: Date | undefined;
|
|
346
|
+
startedAt?: Date | undefined;
|
|
347
|
+
error?: undefined;
|
|
348
|
+
} | {
|
|
349
|
+
runId: string;
|
|
350
|
+
deploymentId: string;
|
|
351
|
+
workflowName: string;
|
|
352
|
+
attributes: Record<string, string>;
|
|
353
|
+
createdAt: Date;
|
|
354
|
+
updatedAt: Date;
|
|
355
|
+
status: "failed";
|
|
356
|
+
error: unknown;
|
|
357
|
+
completedAt: Date;
|
|
358
|
+
specVersion?: number | undefined;
|
|
359
|
+
executionContext?: Record<string, any> | undefined;
|
|
360
|
+
input?: unknown;
|
|
361
|
+
errorCode?: string | undefined;
|
|
362
|
+
expiredAt?: Date | undefined;
|
|
363
|
+
startedAt?: Date | undefined;
|
|
364
|
+
output?: undefined;
|
|
365
|
+
}>;
|
|
366
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/actors/shared.ts"],"names":[],"mappings":"AACA,OAAO,EAMN,KAAK,IAAI,EACT,MAAM,iBAAiB,CAAC;AAGzB,MAAM,MAAM,EAAE,GAAG;IAChB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7E,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACjE,CAAC;AAEF,MAAM,MAAM,GAAG,GAAG;IAAE,EAAE,EAAE,EAAE,CAAA;CAAE,CAAC;AAE7B,wBAAsB,oBAAoB,CAAC,CAAC,EAC3C,CAAC,EAAE,GAAG,EACN,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,GACzB,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAEvD;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAIlD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqBpD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAatD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;EAoBrD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;EAkBrD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAW5D;AAED,wBAAgB,UAAU,CAAC,CAAC,SAAS;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,EACzE,KAAK,EAAE,CAAC,EACR,WAAW,CAAC,EAAE,MAAM,KAIpB;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,EAC9D,KAAK,EAAE,CAAC,EACR,WAAW,CAAC,EAAE,MAAM,KAIpB;AAED,wBAAsB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,oCAEhE;AAED,wBAAsB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAIrD"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { WorkflowRunNotFoundError } from "@workflow/errors";
|
|
2
|
+
import { EventSchema, HookSchema, StepSchema, WorkflowRunSchema, } from "@workflow/world";
|
|
3
|
+
import { compact, decodeValue } from "../codec.js";
|
|
4
|
+
export async function withActorTransaction(c, fn) {
|
|
5
|
+
return c.db.transaction((db) => fn({ db }));
|
|
6
|
+
}
|
|
7
|
+
export function toDate(value) {
|
|
8
|
+
return value == null ? undefined : new Date(Number(value));
|
|
9
|
+
}
|
|
10
|
+
export function toMs(value) {
|
|
11
|
+
if (value == null)
|
|
12
|
+
return null;
|
|
13
|
+
if (value instanceof Date)
|
|
14
|
+
return value.getTime();
|
|
15
|
+
return new Date(value).getTime();
|
|
16
|
+
}
|
|
17
|
+
export function rowToRun(row) {
|
|
18
|
+
return WorkflowRunSchema.parse(compact({
|
|
19
|
+
runId: row.run_id,
|
|
20
|
+
status: row.status,
|
|
21
|
+
deploymentId: row.deployment_id,
|
|
22
|
+
workflowName: row.workflow_name,
|
|
23
|
+
specVersion: row.spec_version == null ? undefined : Number(row.spec_version),
|
|
24
|
+
executionContext: decodeValue(row.execution_context),
|
|
25
|
+
attributes: decodeValue(row.attributes) ?? {},
|
|
26
|
+
input: decodeValue(row.input),
|
|
27
|
+
output: decodeValue(row.output),
|
|
28
|
+
error: decodeValue(row.error),
|
|
29
|
+
expiredAt: toDate(row.expired_at),
|
|
30
|
+
startedAt: toDate(row.started_at),
|
|
31
|
+
completedAt: toDate(row.completed_at),
|
|
32
|
+
createdAt: toDate(row.created_at),
|
|
33
|
+
updatedAt: toDate(row.updated_at),
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
export function rowToEvent(row) {
|
|
37
|
+
return EventSchema.parse(compact({
|
|
38
|
+
runId: row.run_id,
|
|
39
|
+
eventId: row.event_id,
|
|
40
|
+
eventType: row.event_type,
|
|
41
|
+
correlationId: row.correlation_id,
|
|
42
|
+
eventData: decodeValue(row.event_data),
|
|
43
|
+
specVersion: row.spec_version == null ? undefined : Number(row.spec_version),
|
|
44
|
+
createdAt: toDate(row.created_at),
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
export function rowToStep(row) {
|
|
48
|
+
return StepSchema.parse(compact({
|
|
49
|
+
runId: row.run_id,
|
|
50
|
+
stepId: row.step_id,
|
|
51
|
+
stepName: row.step_name,
|
|
52
|
+
status: row.status,
|
|
53
|
+
input: decodeValue(row.input),
|
|
54
|
+
output: decodeValue(row.output),
|
|
55
|
+
error: decodeValue(row.error),
|
|
56
|
+
attempt: Number(row.attempt),
|
|
57
|
+
startedAt: toDate(row.started_at),
|
|
58
|
+
completedAt: toDate(row.completed_at),
|
|
59
|
+
createdAt: toDate(row.created_at),
|
|
60
|
+
updatedAt: toDate(row.updated_at),
|
|
61
|
+
retryAfter: toDate(row.retry_after),
|
|
62
|
+
specVersion: row.spec_version == null ? undefined : Number(row.spec_version),
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
export function rowToHook(row) {
|
|
66
|
+
const parsed = HookSchema.parse(compact({
|
|
67
|
+
runId: row.run_id,
|
|
68
|
+
hookId: row.hook_id,
|
|
69
|
+
token: row.token,
|
|
70
|
+
ownerId: row.owner_id,
|
|
71
|
+
projectId: row.project_id,
|
|
72
|
+
environment: row.environment,
|
|
73
|
+
metadata: decodeValue(row.metadata),
|
|
74
|
+
createdAt: toDate(row.created_at),
|
|
75
|
+
specVersion: row.spec_version == null ? undefined : Number(row.spec_version),
|
|
76
|
+
isWebhook: row.is_webhook == null ? undefined : Boolean(row.is_webhook),
|
|
77
|
+
}));
|
|
78
|
+
parsed.isWebhook ??= true;
|
|
79
|
+
return parsed;
|
|
80
|
+
}
|
|
81
|
+
export function rowToWait(row) {
|
|
82
|
+
return compact({
|
|
83
|
+
waitId: row.wait_id,
|
|
84
|
+
runId: row.run_id,
|
|
85
|
+
status: row.status,
|
|
86
|
+
resumeAt: toDate(row.resume_at),
|
|
87
|
+
completedAt: toDate(row.completed_at),
|
|
88
|
+
createdAt: toDate(row.created_at),
|
|
89
|
+
updatedAt: toDate(row.updated_at),
|
|
90
|
+
specVersion: row.spec_version == null ? undefined : Number(row.spec_version),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
export function filterData(value, resolveData) {
|
|
94
|
+
if (resolveData !== "none")
|
|
95
|
+
return value;
|
|
96
|
+
return { ...value, input: undefined, output: undefined };
|
|
97
|
+
}
|
|
98
|
+
export function filterHookData(value, resolveData) {
|
|
99
|
+
if (resolveData !== "none")
|
|
100
|
+
return value;
|
|
101
|
+
return { ...value, metadata: undefined };
|
|
102
|
+
}
|
|
103
|
+
export async function one(c, sql, ...args) {
|
|
104
|
+
return (await c.db.execute(sql, ...args))[0];
|
|
105
|
+
}
|
|
106
|
+
export async function requireRun(c, runId) {
|
|
107
|
+
const row = await one(c, "SELECT * FROM workflow_runs WHERE run_id = ?", runId);
|
|
108
|
+
if (!row)
|
|
109
|
+
throw new WorkflowRunNotFoundError(runId);
|
|
110
|
+
return rowToRun(row);
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/actors/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACN,WAAW,EACX,UAAU,EACV,UAAU,EACV,iBAAiB,GAGjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AASnD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,CAAM,EACN,EAA2B;IAE3B,OAAO,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAc;IACpC,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,KAAc;IAClC,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;IAClD,OAAO,IAAI,IAAI,CAAC,KAAwB,CAAC,CAAC,OAAO,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAA4B;IACpD,OAAO,iBAAiB,CAAC,KAAK,CAC7B,OAAO,CAAC;QACP,KAAK,EAAE,GAAG,CAAC,MAAM;QACjB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,YAAY,EAAE,GAAG,CAAC,aAAa;QAC/B,YAAY,EAAE,GAAG,CAAC,aAAa;QAC/B,WAAW,EACV,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;QAChE,gBAAgB,EAAE,WAAW,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACpD,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE;QAC7C,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QAC7B,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;QAC/B,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;QACjC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;QACjC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;QACrC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;QACjC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;KACjC,CAAC,CACF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAA4B;IACtD,OAAO,WAAW,CAAC,KAAK,CACvB,OAAO,CAAC;QACP,KAAK,EAAE,GAAG,CAAC,MAAM;QACjB,OAAO,EAAE,GAAG,CAAC,QAAQ;QACrB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,aAAa,EAAE,GAAG,CAAC,cAAc;QACjC,SAAS,EAAE,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;QACtC,WAAW,EACV,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;QAChE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;KACjC,CAAC,CACF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAA4B;IACrD,OAAO,UAAU,CAAC,KAAK,CACtB,OAAO,CAAC;QACP,KAAK,EAAE,GAAG,CAAC,MAAM;QACjB,MAAM,EAAE,GAAG,CAAC,OAAO;QACnB,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QAC7B,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;QAC/B,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QAC7B,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;QAC5B,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;QACjC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;QACrC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;QACjC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;QACjC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;QACnC,WAAW,EACV,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;KAChE,CAAC,CACF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAA4B;IACrD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAC9B,OAAO,CAAC;QACP,KAAK,EAAE,GAAG,CAAC,MAAM;QACjB,MAAM,EAAE,GAAG,CAAC,OAAO;QACnB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,OAAO,EAAE,GAAG,CAAC,QAAQ;QACrB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;QACjC,WAAW,EACV,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;QAChE,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;KACvE,CAAC,CACF,CAAC;IACF,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC;IAC1B,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAA4B;IACrD,OAAO,OAAO,CAAC;QACd,MAAM,EAAE,GAAG,CAAC,OAAO;QACnB,KAAK,EAAE,GAAG,CAAC,MAAM;QACjB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;QAC/B,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;QACrC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;QACjC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;QACjC,WAAW,EAAE,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;KAC5E,CAAS,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,UAAU,CACzB,KAAQ,EACR,WAAoB;IAEpB,IAAI,WAAW,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACzC,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,cAAc,CAC7B,KAAQ,EACR,WAAoB;IAEpB,IAAI,WAAW,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACzC,OAAO,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,CAAM,EAAE,GAAW,EAAE,GAAG,IAAe;IAChE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,CAAM,EAAE,KAAa;IACrD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,8CAA8C,EAAE,KAAK,CAAC,CAAC;IAChF,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,wBAAwB,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { StreamChunksResponse, StreamInfoResponse } from "@workflow/world";
|
|
2
|
+
import { type Type } from "rivetkit";
|
|
3
|
+
import { type Ctx } from "./shared.js";
|
|
4
|
+
export declare const STREAM_TTL_MS: number;
|
|
5
|
+
export declare const streamAppended: Type<{
|
|
6
|
+
streamId: string;
|
|
7
|
+
runId: string;
|
|
8
|
+
chunkId: string;
|
|
9
|
+
eof: boolean;
|
|
10
|
+
}>;
|
|
11
|
+
type StreamContext = Ctx & {
|
|
12
|
+
key: readonly string[];
|
|
13
|
+
broadcast(name: "streamAppended", value: unknown): void;
|
|
14
|
+
};
|
|
15
|
+
export declare function writeStream(c: StreamContext, streamId: string, runId: string, chunkBase64: string, eof: boolean): Promise<{
|
|
16
|
+
chunkId: string;
|
|
17
|
+
}>;
|
|
18
|
+
export declare function getStreamChunks(c: StreamContext, streamId: string, runId: string, startIndex?: number, limit?: number): Promise<StreamChunksResponse>;
|
|
19
|
+
export declare function getStreamInfo(c: StreamContext, streamId: string, runId: string): Promise<StreamInfoResponse>;
|
|
20
|
+
export declare function listStreams(c: StreamContext, runId: string): Promise<string[]>;
|
|
21
|
+
export declare function cleanupExpiredStreams(c: Ctx): Promise<void>;
|
|
22
|
+
export declare function expireClosedStreamForTesting(c: StreamContext, streamId: string, runId: string): Promise<{
|
|
23
|
+
deletedChunks: number;
|
|
24
|
+
}>;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=streams.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streams.d.ts","sourceRoot":"","sources":["../../src/actors/streams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAS,KAAK,IAAI,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAwB,KAAK,GAAG,EAAE,MAAM,aAAa,CAAC;AAO7D,eAAO,MAAM,aAAa,QAIzB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;CACb,CAAW,CAAC;AAEb,KAAK,aAAa,GAAG,GAAG,GAAG;IAC1B,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CACxD,CAAC;AA4CF,wBAAsB,WAAW,CAChC,CAAC,EAAE,aAAa,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,OAAO;;GAsCZ;AAED,wBAAsB,eAAe,CACpC,CAAC,EAAE,aAAa,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,UAAU,SAAI,EACd,KAAK,SAAM,GACT,OAAO,CAAC,oBAAoB,CAAC,CAiC/B;AAED,wBAAsB,aAAa,CAClC,CAAC,EAAE,aAAa,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACX,OAAO,CAAC,kBAAkB,CAAC,CAY7B;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,qBAOhE;AAED,wBAAsB,qBAAqB,CAAC,CAAC,EAAE,GAAG,iBAcjD;AAED,wBAAsB,4BAA4B,CACjD,CAAC,EAAE,aAAa,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM;;GAYb"}
|