@tanstack/workflow-runtime 0.0.1
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/README.md +22 -0
- package/dist/define-runtime.cjs +50 -0
- package/dist/define-runtime.cjs.map +1 -0
- package/dist/define-runtime.d.cts +16 -0
- package/dist/define-runtime.d.ts +16 -0
- package/dist/define-runtime.js +48 -0
- package/dist/define-runtime.js.map +1 -0
- package/dist/in-memory-store.cjs +457 -0
- package/dist/in-memory-store.cjs.map +1 -0
- package/dist/in-memory-store.d.cts +8 -0
- package/dist/in-memory-store.d.ts +8 -0
- package/dist/in-memory-store.js +457 -0
- package/dist/in-memory-store.js.map +1 -0
- package/dist/index.cjs +14 -0
- package/dist/index.d.cts +7 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +7 -0
- package/dist/run-store-adapter.cjs +30 -0
- package/dist/run-store-adapter.cjs.map +1 -0
- package/dist/run-store-adapter.d.cts +7 -0
- package/dist/run-store-adapter.d.ts +7 -0
- package/dist/run-store-adapter.js +29 -0
- package/dist/run-store-adapter.js.map +1 -0
- package/dist/runtime-driver.cjs +334 -0
- package/dist/runtime-driver.cjs.map +1 -0
- package/dist/runtime-driver.d.cts +12 -0
- package/dist/runtime-driver.d.ts +12 -0
- package/dist/runtime-driver.js +334 -0
- package/dist/runtime-driver.js.map +1 -0
- package/dist/schedule-materializer.cjs +156 -0
- package/dist/schedule-materializer.cjs.map +1 -0
- package/dist/schedule-materializer.d.cts +28 -0
- package/dist/schedule-materializer.d.ts +28 -0
- package/dist/schedule-materializer.js +155 -0
- package/dist/schedule-materializer.js.map +1 -0
- package/dist/types.cjs +0 -0
- package/dist/types.d.cts +375 -0
- package/dist/types.d.ts +375 -0
- package/dist/types.js +1 -0
- package/package.json +60 -0
- package/src/define-runtime.ts +46 -0
- package/src/in-memory-store.ts +607 -0
- package/src/index.ts +74 -0
- package/src/run-store-adapter.ts +49 -0
- package/src/runtime-driver.ts +536 -0
- package/src/schedule-materializer.ts +272 -0
- package/src/types.ts +462 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
//#region src/schedule-materializer.ts
|
|
2
|
+
const DEFAULT_CRON_LOOKBACK_MS = 768 * 60 * 60 * 1e3;
|
|
3
|
+
async function materializeWorkflowSchedules(runtime, options = {}) {
|
|
4
|
+
const now = options.now ?? Date.now();
|
|
5
|
+
const cronLookbackMs = options.cronLookbackMs ?? DEFAULT_CRON_LOOKBACK_MS;
|
|
6
|
+
const materialized = [];
|
|
7
|
+
if (!Number.isFinite(cronLookbackMs) || cronLookbackMs < 0) throw new Error("Workflow cron lookback must be a non-negative number.");
|
|
8
|
+
for (const [workflowId, registration] of Object.entries(runtime.workflows)) {
|
|
9
|
+
const schedules = registration.schedules ?? [];
|
|
10
|
+
for (let index = 0; index < schedules.length; index++) {
|
|
11
|
+
const definition = schedules[index];
|
|
12
|
+
const scheduleId = getScheduleId(workflowId, definition, index);
|
|
13
|
+
if (definition.enabled === false) {
|
|
14
|
+
await runtime.store.upsertSchedule({
|
|
15
|
+
scheduleId,
|
|
16
|
+
workflowId,
|
|
17
|
+
workflowVersion: registration.version,
|
|
18
|
+
schedule: definition.schedule,
|
|
19
|
+
overlapPolicy: definition.overlapPolicy ?? "skip",
|
|
20
|
+
input: void 0,
|
|
21
|
+
nextFireAt: void 0,
|
|
22
|
+
enabled: false,
|
|
23
|
+
now
|
|
24
|
+
});
|
|
25
|
+
materialized.push({
|
|
26
|
+
kind: "disabled",
|
|
27
|
+
workflowId,
|
|
28
|
+
scheduleId,
|
|
29
|
+
schedule: definition.schedule
|
|
30
|
+
});
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
const fireAt = getDueFireAt(definition.schedule, now, cronLookbackMs);
|
|
34
|
+
if (fireAt === void 0) {
|
|
35
|
+
materialized.push({
|
|
36
|
+
kind: "not-due",
|
|
37
|
+
workflowId,
|
|
38
|
+
scheduleId,
|
|
39
|
+
schedule: definition.schedule
|
|
40
|
+
});
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
await runtime.store.upsertSchedule({
|
|
44
|
+
scheduleId,
|
|
45
|
+
workflowId,
|
|
46
|
+
workflowVersion: registration.version,
|
|
47
|
+
schedule: definition.schedule,
|
|
48
|
+
overlapPolicy: definition.overlapPolicy ?? "skip",
|
|
49
|
+
input: await resolveScheduleInput(definition.input),
|
|
50
|
+
nextFireAt: fireAt,
|
|
51
|
+
enabled: true,
|
|
52
|
+
now
|
|
53
|
+
});
|
|
54
|
+
materialized.push({
|
|
55
|
+
kind: "materialized",
|
|
56
|
+
workflowId,
|
|
57
|
+
scheduleId,
|
|
58
|
+
fireAt,
|
|
59
|
+
schedule: definition.schedule
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return materialized;
|
|
64
|
+
}
|
|
65
|
+
function getScheduleId(workflowId, definition, index) {
|
|
66
|
+
return definition.id ?? `${workflowId}:${index}`;
|
|
67
|
+
}
|
|
68
|
+
async function resolveScheduleInput(input) {
|
|
69
|
+
return typeof input === "function" ? await input() : input;
|
|
70
|
+
}
|
|
71
|
+
function getDueFireAt(schedule, now, cronLookbackMs) {
|
|
72
|
+
if (schedule.kind === "interval") {
|
|
73
|
+
if (!Number.isFinite(schedule.everyMs) || schedule.everyMs <= 0) throw new Error("Interval workflow schedules must use a positive everyMs.");
|
|
74
|
+
return Math.floor(now / schedule.everyMs) * schedule.everyMs;
|
|
75
|
+
}
|
|
76
|
+
return getPreviousCronFireAt(schedule, now, cronLookbackMs);
|
|
77
|
+
}
|
|
78
|
+
function getPreviousCronFireAt(schedule, now, lookbackMs) {
|
|
79
|
+
if (schedule.timezone && schedule.timezone !== "UTC") throw new Error(`Workflow cron schedules are materialized in UTC. Received timezone "${schedule.timezone}".`);
|
|
80
|
+
const cron = parseCronExpression(schedule.expression);
|
|
81
|
+
const start = floorToMinute(now);
|
|
82
|
+
const end = start - lookbackMs;
|
|
83
|
+
for (let timestamp = start; timestamp >= end; timestamp -= 6e4) if (matchesCron(cron, new Date(timestamp))) return timestamp;
|
|
84
|
+
}
|
|
85
|
+
function parseCronExpression(expression) {
|
|
86
|
+
const fields = expression.trim().split(/\s+/);
|
|
87
|
+
if (fields.length !== 5) throw new Error(`Workflow cron schedules must use five fields. Received "${expression}".`);
|
|
88
|
+
return {
|
|
89
|
+
minute: parseCronField(fields[0], 0, 59),
|
|
90
|
+
hour: parseCronField(fields[1], 0, 23),
|
|
91
|
+
dayOfMonth: parseCronField(fields[2], 1, 31),
|
|
92
|
+
month: parseCronField(fields[3], 1, 12),
|
|
93
|
+
dayOfWeek: parseCronField(fields[4], 0, 7, normalizeDayOfWeek)
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function parseCronField(field, min, max, normalize = (value) => value) {
|
|
97
|
+
const values = /* @__PURE__ */ new Set();
|
|
98
|
+
const parts = field.split(",");
|
|
99
|
+
for (const part of parts) {
|
|
100
|
+
const [rangePart, stepPart] = part.split("/");
|
|
101
|
+
const step = stepPart === void 0 ? 1 : Number(stepPart);
|
|
102
|
+
if (!Number.isInteger(step) || step <= 0) throw new Error(`Invalid cron step "${part}".`);
|
|
103
|
+
const range = parseCronRange(rangePart, min, max);
|
|
104
|
+
for (let value = range.start; value <= range.end; value += step) values.add(normalize(value));
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
wildcard: field === "*",
|
|
108
|
+
values
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function parseCronRange(range, min, max) {
|
|
112
|
+
if (range === "*") return {
|
|
113
|
+
start: min,
|
|
114
|
+
end: max
|
|
115
|
+
};
|
|
116
|
+
const bounds = range.split("-");
|
|
117
|
+
if (bounds.length === 1) {
|
|
118
|
+
const value = parseCronNumber(bounds[0], min, max);
|
|
119
|
+
return {
|
|
120
|
+
start: value,
|
|
121
|
+
end: value
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
if (bounds.length === 2) {
|
|
125
|
+
const start = parseCronNumber(bounds[0], min, max);
|
|
126
|
+
const end = parseCronNumber(bounds[1], min, max);
|
|
127
|
+
if (end < start) throw new Error(`Invalid cron range "${range}".`);
|
|
128
|
+
return {
|
|
129
|
+
start,
|
|
130
|
+
end
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
throw new Error(`Invalid cron range "${range}".`);
|
|
134
|
+
}
|
|
135
|
+
function parseCronNumber(value, min, max) {
|
|
136
|
+
const parsed = Number(value);
|
|
137
|
+
if (!Number.isInteger(parsed) || parsed < min || parsed > max) throw new Error(`Invalid cron value "${value}".`);
|
|
138
|
+
return parsed;
|
|
139
|
+
}
|
|
140
|
+
function normalizeDayOfWeek(value) {
|
|
141
|
+
return value === 7 ? 0 : value;
|
|
142
|
+
}
|
|
143
|
+
function matchesCron(cron, date) {
|
|
144
|
+
const dayOfMonthMatches = cron.dayOfMonth.values.has(date.getUTCDate());
|
|
145
|
+
const dayOfWeekMatches = cron.dayOfWeek.values.has(date.getUTCDay());
|
|
146
|
+
const dayMatches = !cron.dayOfMonth.wildcard && !cron.dayOfWeek.wildcard ? dayOfMonthMatches || dayOfWeekMatches : dayOfMonthMatches && dayOfWeekMatches;
|
|
147
|
+
return cron.minute.values.has(date.getUTCMinutes()) && cron.hour.values.has(date.getUTCHours()) && dayMatches && cron.month.values.has(date.getUTCMonth() + 1);
|
|
148
|
+
}
|
|
149
|
+
function floorToMinute(timestamp) {
|
|
150
|
+
return Math.floor(timestamp / 6e4) * 6e4;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
//#endregion
|
|
154
|
+
export { materializeWorkflowSchedules };
|
|
155
|
+
//# sourceMappingURL=schedule-materializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule-materializer.js","names":[],"sources":["../src/schedule-materializer.ts"],"sourcesContent":["import type {\n ScheduleId,\n WorkflowRegistrationMap,\n WorkflowRuntimeDefinition,\n WorkflowScheduleDefinition,\n WorkflowScheduleSpec,\n} from './types'\n\nconst DEFAULT_CRON_LOOKBACK_MS = 32 * 24 * 60 * 60 * 1000\n\nexport interface MaterializeWorkflowSchedulesOptions {\n now?: number\n cronLookbackMs?: number\n}\n\nexport type MaterializedWorkflowSchedule =\n | {\n kind: 'materialized'\n workflowId: string\n scheduleId: ScheduleId\n fireAt: number\n schedule: WorkflowScheduleSpec\n }\n | {\n kind: 'disabled'\n workflowId: string\n scheduleId: ScheduleId\n schedule: WorkflowScheduleSpec\n }\n | {\n kind: 'not-due'\n workflowId: string\n scheduleId: ScheduleId\n schedule: WorkflowScheduleSpec\n }\n\nexport async function materializeWorkflowSchedules<\n TWorkflows extends WorkflowRegistrationMap,\n>(\n runtime: WorkflowRuntimeDefinition<TWorkflows>,\n options: MaterializeWorkflowSchedulesOptions = {},\n): Promise<Array<MaterializedWorkflowSchedule>> {\n const now = options.now ?? Date.now()\n const cronLookbackMs = options.cronLookbackMs ?? DEFAULT_CRON_LOOKBACK_MS\n const materialized: Array<MaterializedWorkflowSchedule> = []\n\n if (!Number.isFinite(cronLookbackMs) || cronLookbackMs < 0) {\n throw new Error('Workflow cron lookback must be a non-negative number.')\n }\n\n for (const [workflowId, registration] of Object.entries(runtime.workflows)) {\n const schedules = registration.schedules ?? []\n for (let index = 0; index < schedules.length; index++) {\n const definition = schedules[index]!\n const scheduleId = getScheduleId(workflowId, definition, index)\n\n if (definition.enabled === false) {\n await runtime.store.upsertSchedule({\n scheduleId,\n workflowId,\n workflowVersion: registration.version,\n schedule: definition.schedule,\n overlapPolicy: definition.overlapPolicy ?? 'skip',\n input: undefined,\n nextFireAt: undefined,\n enabled: false,\n now,\n })\n materialized.push({\n kind: 'disabled',\n workflowId,\n scheduleId,\n schedule: definition.schedule,\n })\n continue\n }\n\n const fireAt = getDueFireAt(definition.schedule, now, cronLookbackMs)\n if (fireAt === undefined) {\n materialized.push({\n kind: 'not-due',\n workflowId,\n scheduleId,\n schedule: definition.schedule,\n })\n continue\n }\n\n await runtime.store.upsertSchedule({\n scheduleId,\n workflowId,\n workflowVersion: registration.version,\n schedule: definition.schedule,\n overlapPolicy: definition.overlapPolicy ?? 'skip',\n input: await resolveScheduleInput(definition.input),\n nextFireAt: fireAt,\n enabled: true,\n now,\n })\n materialized.push({\n kind: 'materialized',\n workflowId,\n scheduleId,\n fireAt,\n schedule: definition.schedule,\n })\n }\n }\n\n return materialized\n}\n\nfunction getScheduleId(\n workflowId: string,\n definition: WorkflowScheduleDefinition,\n index: number,\n): ScheduleId {\n return definition.id ?? `${workflowId}:${index}`\n}\n\nasync function resolveScheduleInput(\n input: WorkflowScheduleDefinition['input'],\n) {\n return typeof input === 'function' ? await input() : input\n}\n\nfunction getDueFireAt(\n schedule: WorkflowScheduleSpec,\n now: number,\n cronLookbackMs: number,\n) {\n if (schedule.kind === 'interval') {\n if (!Number.isFinite(schedule.everyMs) || schedule.everyMs <= 0) {\n throw new Error(\n 'Interval workflow schedules must use a positive everyMs.',\n )\n }\n return Math.floor(now / schedule.everyMs) * schedule.everyMs\n }\n\n return getPreviousCronFireAt(schedule, now, cronLookbackMs)\n}\n\nfunction getPreviousCronFireAt(\n schedule: Extract<WorkflowScheduleSpec, { kind: 'cron' }>,\n now: number,\n lookbackMs: number,\n) {\n if (schedule.timezone && schedule.timezone !== 'UTC') {\n throw new Error(\n `Workflow cron schedules are materialized in UTC. Received timezone \"${schedule.timezone}\".`,\n )\n }\n\n const cron = parseCronExpression(schedule.expression)\n const start = floorToMinute(now)\n const end = start - lookbackMs\n\n for (let timestamp = start; timestamp >= end; timestamp -= 60_000) {\n if (matchesCron(cron, new Date(timestamp))) return timestamp\n }\n\n return undefined\n}\n\ninterface ParsedCronExpression {\n minute: ParsedCronField\n hour: ParsedCronField\n dayOfMonth: ParsedCronField\n month: ParsedCronField\n dayOfWeek: ParsedCronField\n}\n\ninterface ParsedCronField {\n wildcard: boolean\n values: ReadonlySet<number>\n}\n\nfunction parseCronExpression(expression: string): ParsedCronExpression {\n const fields = expression.trim().split(/\\s+/)\n if (fields.length !== 5) {\n throw new Error(\n `Workflow cron schedules must use five fields. Received \"${expression}\".`,\n )\n }\n\n return {\n minute: parseCronField(fields[0]!, 0, 59),\n hour: parseCronField(fields[1]!, 0, 23),\n dayOfMonth: parseCronField(fields[2]!, 1, 31),\n month: parseCronField(fields[3]!, 1, 12),\n dayOfWeek: parseCronField(fields[4]!, 0, 7, normalizeDayOfWeek),\n }\n}\n\nfunction parseCronField(\n field: string,\n min: number,\n max: number,\n normalize: (value: number) => number = (value) => value,\n): ParsedCronField {\n const values = new Set<number>()\n const parts = field.split(',')\n\n for (const part of parts) {\n const [rangePart, stepPart] = part.split('/')\n const step = stepPart === undefined ? 1 : Number(stepPart)\n if (!Number.isInteger(step) || step <= 0) {\n throw new Error(`Invalid cron step \"${part}\".`)\n }\n\n const range = parseCronRange(rangePart!, min, max)\n for (let value = range.start; value <= range.end; value += step) {\n values.add(normalize(value))\n }\n }\n\n return {\n wildcard: field === '*',\n values,\n }\n}\n\nfunction parseCronRange(range: string, min: number, max: number) {\n if (range === '*') return { start: min, end: max }\n\n const bounds = range.split('-')\n if (bounds.length === 1) {\n const value = parseCronNumber(bounds[0]!, min, max)\n return { start: value, end: value }\n }\n if (bounds.length === 2) {\n const start = parseCronNumber(bounds[0]!, min, max)\n const end = parseCronNumber(bounds[1]!, min, max)\n if (end < start) throw new Error(`Invalid cron range \"${range}\".`)\n return { start, end }\n }\n\n throw new Error(`Invalid cron range \"${range}\".`)\n}\n\nfunction parseCronNumber(value: string, min: number, max: number) {\n const parsed = Number(value)\n if (!Number.isInteger(parsed) || parsed < min || parsed > max) {\n throw new Error(`Invalid cron value \"${value}\".`)\n }\n return parsed\n}\n\nfunction normalizeDayOfWeek(value: number) {\n return value === 7 ? 0 : value\n}\n\nfunction matchesCron(cron: ParsedCronExpression, date: Date) {\n const dayOfMonthMatches = cron.dayOfMonth.values.has(date.getUTCDate())\n const dayOfWeekMatches = cron.dayOfWeek.values.has(date.getUTCDay())\n const dayMatches =\n !cron.dayOfMonth.wildcard && !cron.dayOfWeek.wildcard\n ? dayOfMonthMatches || dayOfWeekMatches\n : dayOfMonthMatches && dayOfWeekMatches\n\n return (\n cron.minute.values.has(date.getUTCMinutes()) &&\n cron.hour.values.has(date.getUTCHours()) &&\n dayMatches &&\n cron.month.values.has(date.getUTCMonth() + 1)\n )\n}\n\nfunction floorToMinute(timestamp: number) {\n return Math.floor(timestamp / 60_000) * 60_000\n}\n"],"mappings":"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"}
|
package/dist/types.cjs
ADDED
|
File without changes
|
package/dist/types.d.cts
ADDED
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
import { AnyWorkflowDefinition, ApprovalResult, DeleteReason, RunState, RunStatus, RunStore, SerializedError, SignalDelivery, WorkflowEvent } from "@tanstack/workflow-core";
|
|
2
|
+
|
|
3
|
+
//#region src/types.d.ts
|
|
4
|
+
type WorkflowId = string;
|
|
5
|
+
type WorkflowVersion = string;
|
|
6
|
+
type RunId = string;
|
|
7
|
+
type ScheduleId = string;
|
|
8
|
+
type ScheduleBucketId = string;
|
|
9
|
+
type LeaseOwner = string;
|
|
10
|
+
type WorkflowExecutionStatus = RunStatus | 'queued';
|
|
11
|
+
interface WorkflowLease {
|
|
12
|
+
owner: LeaseOwner;
|
|
13
|
+
expiresAt: number;
|
|
14
|
+
}
|
|
15
|
+
interface WorkflowExecution {
|
|
16
|
+
runId: RunId;
|
|
17
|
+
workflowId: WorkflowId;
|
|
18
|
+
workflowVersion?: WorkflowVersion;
|
|
19
|
+
status: WorkflowExecutionStatus;
|
|
20
|
+
input: unknown;
|
|
21
|
+
output?: unknown;
|
|
22
|
+
error?: SerializedError;
|
|
23
|
+
waitingFor?: RunState['waitingFor'];
|
|
24
|
+
pendingApproval?: RunState['pendingApproval'];
|
|
25
|
+
wakeAt?: number;
|
|
26
|
+
lease?: WorkflowLease;
|
|
27
|
+
createdAt: number;
|
|
28
|
+
updatedAt: number;
|
|
29
|
+
}
|
|
30
|
+
interface StoredWorkflowEvent {
|
|
31
|
+
runId: RunId;
|
|
32
|
+
eventIndex: number;
|
|
33
|
+
eventType: WorkflowEvent['type'];
|
|
34
|
+
stepId?: string;
|
|
35
|
+
event: WorkflowEvent;
|
|
36
|
+
createdAt: number;
|
|
37
|
+
}
|
|
38
|
+
interface LoadedExecution {
|
|
39
|
+
run: WorkflowExecution;
|
|
40
|
+
events: ReadonlyArray<StoredWorkflowEvent>;
|
|
41
|
+
}
|
|
42
|
+
interface CreateRunArgs {
|
|
43
|
+
runId: RunId;
|
|
44
|
+
workflowId: WorkflowId;
|
|
45
|
+
workflowVersion?: WorkflowVersion;
|
|
46
|
+
input: unknown;
|
|
47
|
+
now: number;
|
|
48
|
+
}
|
|
49
|
+
type CreateRunResult = {
|
|
50
|
+
kind: 'created';
|
|
51
|
+
run: WorkflowExecution;
|
|
52
|
+
} | {
|
|
53
|
+
kind: 'existing';
|
|
54
|
+
run: WorkflowExecution;
|
|
55
|
+
};
|
|
56
|
+
interface ReadEventsArgs {
|
|
57
|
+
runId: RunId;
|
|
58
|
+
fromIndex?: number;
|
|
59
|
+
}
|
|
60
|
+
interface AppendEventsArgs {
|
|
61
|
+
runId: RunId;
|
|
62
|
+
expectedNextIndex: number;
|
|
63
|
+
events: ReadonlyArray<WorkflowEvent>;
|
|
64
|
+
}
|
|
65
|
+
interface AppendEventsResult {
|
|
66
|
+
nextIndex: number;
|
|
67
|
+
}
|
|
68
|
+
interface ClaimRunArgs {
|
|
69
|
+
runId: RunId;
|
|
70
|
+
leaseOwner: LeaseOwner;
|
|
71
|
+
leaseMs: number;
|
|
72
|
+
now: number;
|
|
73
|
+
}
|
|
74
|
+
type ClaimRunResult = {
|
|
75
|
+
kind: 'claimed';
|
|
76
|
+
run: WorkflowExecution;
|
|
77
|
+
} | {
|
|
78
|
+
kind: 'not-found';
|
|
79
|
+
} | {
|
|
80
|
+
kind: 'not-claimable';
|
|
81
|
+
run: WorkflowExecution;
|
|
82
|
+
};
|
|
83
|
+
interface HeartbeatRunLeaseArgs {
|
|
84
|
+
runId: RunId;
|
|
85
|
+
leaseOwner: LeaseOwner;
|
|
86
|
+
leaseMs: number;
|
|
87
|
+
now: number;
|
|
88
|
+
}
|
|
89
|
+
interface ReleaseRunLeaseArgs {
|
|
90
|
+
runId: RunId;
|
|
91
|
+
leaseOwner: LeaseOwner;
|
|
92
|
+
}
|
|
93
|
+
interface MarkRunPausedArgs {
|
|
94
|
+
runId: RunId;
|
|
95
|
+
waitingFor?: RunState['waitingFor'];
|
|
96
|
+
pendingApproval?: RunState['pendingApproval'];
|
|
97
|
+
wakeAt?: number;
|
|
98
|
+
now: number;
|
|
99
|
+
}
|
|
100
|
+
interface MarkRunFinishedArgs {
|
|
101
|
+
runId: RunId;
|
|
102
|
+
output: unknown;
|
|
103
|
+
now: number;
|
|
104
|
+
}
|
|
105
|
+
interface MarkRunErroredArgs {
|
|
106
|
+
runId: RunId;
|
|
107
|
+
error: SerializedError;
|
|
108
|
+
code: string;
|
|
109
|
+
now: number;
|
|
110
|
+
}
|
|
111
|
+
interface ScheduleTimerArgs {
|
|
112
|
+
runId: RunId;
|
|
113
|
+
workflowId: WorkflowId;
|
|
114
|
+
workflowVersion?: WorkflowVersion;
|
|
115
|
+
wakeAt: number;
|
|
116
|
+
signalId: string;
|
|
117
|
+
now: number;
|
|
118
|
+
}
|
|
119
|
+
interface ClaimDueTimersArgs {
|
|
120
|
+
now: number;
|
|
121
|
+
limit: number;
|
|
122
|
+
leaseOwner: LeaseOwner;
|
|
123
|
+
leaseMs: number;
|
|
124
|
+
}
|
|
125
|
+
interface TimerWakeup {
|
|
126
|
+
runId: RunId;
|
|
127
|
+
workflowId: WorkflowId;
|
|
128
|
+
workflowVersion?: WorkflowVersion;
|
|
129
|
+
wakeAt: number;
|
|
130
|
+
signalId: string;
|
|
131
|
+
}
|
|
132
|
+
interface DeliverSignalArgs<TPayload = unknown> {
|
|
133
|
+
runId: RunId;
|
|
134
|
+
delivery: SignalDelivery<TPayload>;
|
|
135
|
+
now: number;
|
|
136
|
+
}
|
|
137
|
+
type DeliverSignalResult = {
|
|
138
|
+
kind: 'delivered';
|
|
139
|
+
run: WorkflowExecution;
|
|
140
|
+
} | {
|
|
141
|
+
kind: 'duplicate';
|
|
142
|
+
run: WorkflowExecution;
|
|
143
|
+
} | {
|
|
144
|
+
kind: 'not-waiting';
|
|
145
|
+
run: WorkflowExecution;
|
|
146
|
+
} | {
|
|
147
|
+
kind: 'not-found';
|
|
148
|
+
};
|
|
149
|
+
interface DeliverApprovalArgs {
|
|
150
|
+
runId: RunId;
|
|
151
|
+
approval: ApprovalResult;
|
|
152
|
+
now: number;
|
|
153
|
+
}
|
|
154
|
+
type DeliverApprovalResult = {
|
|
155
|
+
kind: 'delivered';
|
|
156
|
+
run: WorkflowExecution;
|
|
157
|
+
} | {
|
|
158
|
+
kind: 'duplicate';
|
|
159
|
+
run: WorkflowExecution;
|
|
160
|
+
} | {
|
|
161
|
+
kind: 'not-waiting';
|
|
162
|
+
run: WorkflowExecution;
|
|
163
|
+
} | {
|
|
164
|
+
kind: 'not-found';
|
|
165
|
+
};
|
|
166
|
+
type WorkflowOverlapPolicy = 'skip' | 'allow' | 'buffer-one' | 'cancel-previous' | 'terminate-previous';
|
|
167
|
+
type WorkflowScheduleSpec = {
|
|
168
|
+
kind: 'cron';
|
|
169
|
+
expression: string;
|
|
170
|
+
timezone?: string;
|
|
171
|
+
} | {
|
|
172
|
+
kind: 'interval';
|
|
173
|
+
everyMs: number;
|
|
174
|
+
timezone?: string;
|
|
175
|
+
};
|
|
176
|
+
interface WorkflowScheduleDefinition {
|
|
177
|
+
id?: ScheduleId;
|
|
178
|
+
schedule: WorkflowScheduleSpec;
|
|
179
|
+
overlapPolicy?: WorkflowOverlapPolicy;
|
|
180
|
+
input?: unknown | (() => unknown | Promise<unknown>);
|
|
181
|
+
enabled?: boolean;
|
|
182
|
+
}
|
|
183
|
+
interface UpsertScheduleArgs {
|
|
184
|
+
scheduleId: ScheduleId;
|
|
185
|
+
workflowId: WorkflowId;
|
|
186
|
+
workflowVersion?: WorkflowVersion;
|
|
187
|
+
schedule: WorkflowScheduleSpec;
|
|
188
|
+
overlapPolicy: WorkflowOverlapPolicy;
|
|
189
|
+
input?: unknown;
|
|
190
|
+
nextFireAt?: number;
|
|
191
|
+
enabled: boolean;
|
|
192
|
+
now: number;
|
|
193
|
+
}
|
|
194
|
+
interface ClaimDueScheduleBucketsArgs {
|
|
195
|
+
now: number;
|
|
196
|
+
limit: number;
|
|
197
|
+
leaseOwner: LeaseOwner;
|
|
198
|
+
leaseMs: number;
|
|
199
|
+
}
|
|
200
|
+
interface ScheduleBucket {
|
|
201
|
+
scheduleId: ScheduleId;
|
|
202
|
+
bucketId: ScheduleBucketId;
|
|
203
|
+
workflowId: WorkflowId;
|
|
204
|
+
workflowVersion?: WorkflowVersion;
|
|
205
|
+
runId: RunId;
|
|
206
|
+
fireAt: number;
|
|
207
|
+
input: unknown;
|
|
208
|
+
overlapPolicy: WorkflowOverlapPolicy;
|
|
209
|
+
}
|
|
210
|
+
interface MarkScheduleBucketStartedArgs {
|
|
211
|
+
scheduleId: ScheduleId;
|
|
212
|
+
bucketId: ScheduleBucketId;
|
|
213
|
+
runId: RunId;
|
|
214
|
+
now: number;
|
|
215
|
+
}
|
|
216
|
+
interface ClaimStaleRunsArgs {
|
|
217
|
+
now: number;
|
|
218
|
+
limit: number;
|
|
219
|
+
leaseOwner: LeaseOwner;
|
|
220
|
+
leaseMs: number;
|
|
221
|
+
}
|
|
222
|
+
interface RunClaim {
|
|
223
|
+
run: WorkflowExecution;
|
|
224
|
+
lease: WorkflowLease;
|
|
225
|
+
}
|
|
226
|
+
interface ListRunsArgs {
|
|
227
|
+
workflowId?: WorkflowId;
|
|
228
|
+
status?: WorkflowExecutionStatus;
|
|
229
|
+
limit: number;
|
|
230
|
+
cursor?: string;
|
|
231
|
+
}
|
|
232
|
+
interface RunSummary {
|
|
233
|
+
runId: RunId;
|
|
234
|
+
workflowId: WorkflowId;
|
|
235
|
+
workflowVersion?: WorkflowVersion;
|
|
236
|
+
status: WorkflowExecutionStatus;
|
|
237
|
+
waitingFor?: RunState['waitingFor'];
|
|
238
|
+
pendingApproval?: RunState['pendingApproval'];
|
|
239
|
+
wakeAt?: number;
|
|
240
|
+
createdAt: number;
|
|
241
|
+
updatedAt: number;
|
|
242
|
+
}
|
|
243
|
+
interface RunTimeline {
|
|
244
|
+
run: WorkflowExecution;
|
|
245
|
+
events: ReadonlyArray<StoredWorkflowEvent>;
|
|
246
|
+
}
|
|
247
|
+
interface SaveRunStateArgs {
|
|
248
|
+
state: RunState;
|
|
249
|
+
}
|
|
250
|
+
interface WorkflowRunStoreAdapterStore {
|
|
251
|
+
loadRunState: (runId: RunId) => Promise<RunState | undefined>;
|
|
252
|
+
saveRunState: (args: SaveRunStateArgs) => Promise<void>;
|
|
253
|
+
deleteRun: (runId: RunId, reason: DeleteReason) => Promise<void>;
|
|
254
|
+
appendEvents: (args: AppendEventsArgs) => Promise<AppendEventsResult>;
|
|
255
|
+
readEvents: (args: ReadEventsArgs) => Promise<ReadonlyArray<StoredWorkflowEvent>>;
|
|
256
|
+
subscribeEvents?: (runId: RunId, fromIndex: number, onEvent: (event: WorkflowEvent, index: number) => void) => () => void;
|
|
257
|
+
}
|
|
258
|
+
type WorkflowRunStoreAdapter = RunStore;
|
|
259
|
+
interface WorkflowExecutionStore extends WorkflowRunStoreAdapterStore {
|
|
260
|
+
createRun: (args: CreateRunArgs) => Promise<CreateRunResult>;
|
|
261
|
+
loadRun: (runId: RunId) => Promise<WorkflowExecution | undefined>;
|
|
262
|
+
loadExecution: (runId: RunId) => Promise<LoadedExecution | undefined>;
|
|
263
|
+
claimRun: (args: ClaimRunArgs) => Promise<ClaimRunResult>;
|
|
264
|
+
heartbeatRunLease: (args: HeartbeatRunLeaseArgs) => Promise<void>;
|
|
265
|
+
releaseRunLease: (args: ReleaseRunLeaseArgs) => Promise<void>;
|
|
266
|
+
markRunPaused: (args: MarkRunPausedArgs) => Promise<void>;
|
|
267
|
+
markRunFinished: (args: MarkRunFinishedArgs) => Promise<void>;
|
|
268
|
+
markRunErrored: (args: MarkRunErroredArgs) => Promise<void>;
|
|
269
|
+
scheduleTimer: (args: ScheduleTimerArgs) => Promise<void>;
|
|
270
|
+
claimDueTimers: (args: ClaimDueTimersArgs) => Promise<ReadonlyArray<TimerWakeup>>;
|
|
271
|
+
deliverSignal: <TPayload = unknown>(args: DeliverSignalArgs<TPayload>) => Promise<DeliverSignalResult>;
|
|
272
|
+
deliverApproval: (args: DeliverApprovalArgs) => Promise<DeliverApprovalResult>;
|
|
273
|
+
upsertSchedule: (args: UpsertScheduleArgs) => Promise<void>;
|
|
274
|
+
claimDueScheduleBuckets: (args: ClaimDueScheduleBucketsArgs) => Promise<ReadonlyArray<ScheduleBucket>>;
|
|
275
|
+
markScheduleBucketStarted: (args: MarkScheduleBucketStartedArgs) => Promise<void>;
|
|
276
|
+
claimStaleRuns: (args: ClaimStaleRunsArgs) => Promise<ReadonlyArray<RunClaim>>;
|
|
277
|
+
listRuns: (args: ListRunsArgs) => Promise<ReadonlyArray<RunSummary>>;
|
|
278
|
+
getRunTimeline: (runId: RunId) => Promise<RunTimeline | undefined>;
|
|
279
|
+
}
|
|
280
|
+
type WorkflowLoaderResult<TWorkflow extends AnyWorkflowDefinition = AnyWorkflowDefinition> = TWorkflow | {
|
|
281
|
+
default: TWorkflow;
|
|
282
|
+
} | {
|
|
283
|
+
workflow: TWorkflow;
|
|
284
|
+
};
|
|
285
|
+
type WorkflowLoader<TWorkflow extends AnyWorkflowDefinition = AnyWorkflowDefinition> = () => Promise<WorkflowLoaderResult<TWorkflow>>;
|
|
286
|
+
interface WorkflowRegistration<TWorkflow extends AnyWorkflowDefinition = AnyWorkflowDefinition> {
|
|
287
|
+
load: WorkflowLoader<TWorkflow>;
|
|
288
|
+
version?: WorkflowVersion;
|
|
289
|
+
previousVersions?: Record<WorkflowVersion, WorkflowLoader>;
|
|
290
|
+
schedules?: ReadonlyArray<WorkflowScheduleDefinition>;
|
|
291
|
+
}
|
|
292
|
+
type WorkflowRegistrationMap = Record<string, WorkflowRegistration>;
|
|
293
|
+
interface WorkflowRuntimeConfig<TWorkflows extends WorkflowRegistrationMap = WorkflowRegistrationMap> {
|
|
294
|
+
workflows: TWorkflows;
|
|
295
|
+
store: WorkflowExecutionStore;
|
|
296
|
+
defaultLeaseMs?: number;
|
|
297
|
+
}
|
|
298
|
+
interface WorkflowRuntimeDefinition<TWorkflows extends WorkflowRegistrationMap = WorkflowRegistrationMap> extends WorkflowRuntimeConfig<TWorkflows> {
|
|
299
|
+
__kind: 'workflow-runtime';
|
|
300
|
+
startRun: (args: WorkflowRuntimeStartRunArgs) => Promise<WorkflowRuntimeRunResult>;
|
|
301
|
+
deliverSignal: <TPayload = unknown>(args: WorkflowRuntimeDeliverSignalArgs<TPayload>) => Promise<WorkflowRuntimeRunResult>;
|
|
302
|
+
deliverApproval: (args: WorkflowRuntimeDeliverApprovalArgs) => Promise<WorkflowRuntimeRunResult>;
|
|
303
|
+
sweep: (args?: WorkflowRuntimeSweepArgs) => Promise<WorkflowRuntimeSweepResult>;
|
|
304
|
+
}
|
|
305
|
+
interface WorkflowRuntimeStartRunArgs {
|
|
306
|
+
workflowId: WorkflowId;
|
|
307
|
+
runId: RunId;
|
|
308
|
+
input: unknown;
|
|
309
|
+
now?: number;
|
|
310
|
+
leaseOwner?: LeaseOwner;
|
|
311
|
+
leaseMs?: number;
|
|
312
|
+
threadId?: string;
|
|
313
|
+
includeEvents?: boolean;
|
|
314
|
+
maxEvents?: number;
|
|
315
|
+
}
|
|
316
|
+
interface WorkflowRuntimeDeliverSignalArgs<TPayload = unknown> {
|
|
317
|
+
runId: RunId;
|
|
318
|
+
signalId: string;
|
|
319
|
+
name: string;
|
|
320
|
+
payload: TPayload;
|
|
321
|
+
now?: number;
|
|
322
|
+
leaseOwner?: LeaseOwner;
|
|
323
|
+
leaseMs?: number;
|
|
324
|
+
threadId?: string;
|
|
325
|
+
includeEvents?: boolean;
|
|
326
|
+
maxEvents?: number;
|
|
327
|
+
}
|
|
328
|
+
interface WorkflowRuntimeDeliverApprovalArgs {
|
|
329
|
+
runId: RunId;
|
|
330
|
+
approval: ApprovalResult;
|
|
331
|
+
now?: number;
|
|
332
|
+
leaseOwner?: LeaseOwner;
|
|
333
|
+
leaseMs?: number;
|
|
334
|
+
threadId?: string;
|
|
335
|
+
includeEvents?: boolean;
|
|
336
|
+
maxEvents?: number;
|
|
337
|
+
}
|
|
338
|
+
type WorkflowRuntimeRunResultKind = 'completed' | 'paused' | 'errored' | 'running' | 'not-found' | 'not-claimable' | 'not-waiting' | 'duplicate';
|
|
339
|
+
interface WorkflowRuntimeRunResult {
|
|
340
|
+
kind: WorkflowRuntimeRunResultKind;
|
|
341
|
+
runId: RunId;
|
|
342
|
+
workflowId?: WorkflowId;
|
|
343
|
+
run?: WorkflowExecution;
|
|
344
|
+
events: ReadonlyArray<WorkflowEvent>;
|
|
345
|
+
eventCount: number;
|
|
346
|
+
eventsTruncated?: boolean;
|
|
347
|
+
}
|
|
348
|
+
interface WorkflowRuntimeSweepArgs {
|
|
349
|
+
now?: number;
|
|
350
|
+
limit?: number;
|
|
351
|
+
maxScheduledRuns?: number;
|
|
352
|
+
maxTimers?: number;
|
|
353
|
+
maxDurationMs?: number;
|
|
354
|
+
leaseOwner?: LeaseOwner;
|
|
355
|
+
leaseMs?: number;
|
|
356
|
+
includeEvents?: boolean;
|
|
357
|
+
maxEvents?: number;
|
|
358
|
+
}
|
|
359
|
+
interface WorkflowRuntimeSweepResult {
|
|
360
|
+
scheduled: ReadonlyArray<WorkflowRuntimeRunResult>;
|
|
361
|
+
timers: ReadonlyArray<WorkflowRuntimeRunResult>;
|
|
362
|
+
summary: WorkflowRuntimeSweepSummary;
|
|
363
|
+
deadlineReached: boolean;
|
|
364
|
+
remainingMayExist: boolean;
|
|
365
|
+
}
|
|
366
|
+
type WorkflowRuntimeRunKindCounts = Partial<Record<WorkflowRuntimeRunResultKind, number>>;
|
|
367
|
+
interface WorkflowRuntimeSweepSummary {
|
|
368
|
+
scheduled: WorkflowRuntimeRunKindCounts;
|
|
369
|
+
timers: WorkflowRuntimeRunKindCounts;
|
|
370
|
+
eventCount: number;
|
|
371
|
+
returnedEventCount: number;
|
|
372
|
+
}
|
|
373
|
+
//#endregion
|
|
374
|
+
export { AppendEventsArgs, AppendEventsResult, ClaimDueScheduleBucketsArgs, ClaimDueTimersArgs, ClaimRunArgs, ClaimRunResult, ClaimStaleRunsArgs, CreateRunArgs, CreateRunResult, DeliverApprovalArgs, DeliverApprovalResult, DeliverSignalArgs, DeliverSignalResult, HeartbeatRunLeaseArgs, LeaseOwner, ListRunsArgs, LoadedExecution, MarkRunErroredArgs, MarkRunFinishedArgs, MarkRunPausedArgs, MarkScheduleBucketStartedArgs, ReadEventsArgs, ReleaseRunLeaseArgs, RunClaim, RunId, RunSummary, RunTimeline, SaveRunStateArgs, ScheduleBucket, ScheduleBucketId, ScheduleId, ScheduleTimerArgs, StoredWorkflowEvent, TimerWakeup, UpsertScheduleArgs, WorkflowExecution, WorkflowExecutionStatus, WorkflowExecutionStore, WorkflowId, WorkflowLease, WorkflowLoader, WorkflowLoaderResult, WorkflowOverlapPolicy, WorkflowRegistration, WorkflowRegistrationMap, WorkflowRunStoreAdapter, WorkflowRunStoreAdapterStore, WorkflowRuntimeConfig, WorkflowRuntimeDefinition, WorkflowRuntimeDeliverApprovalArgs, WorkflowRuntimeDeliverSignalArgs, WorkflowRuntimeRunKindCounts, WorkflowRuntimeRunResult, WorkflowRuntimeRunResultKind, WorkflowRuntimeStartRunArgs, WorkflowRuntimeSweepArgs, WorkflowRuntimeSweepResult, WorkflowRuntimeSweepSummary, WorkflowScheduleDefinition, WorkflowScheduleSpec, WorkflowVersion };
|
|
375
|
+
//# sourceMappingURL=types.d.cts.map
|