@workflow/core 4.1.0-beta.52 → 4.1.0-beta.54
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/dist/class-serialization.d.ts +5 -4
- package/dist/class-serialization.d.ts.map +1 -1
- package/dist/class-serialization.js +7 -16
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +1 -9
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +10 -1
- package/dist/observability.d.ts.map +1 -1
- package/dist/observability.js +6 -5
- package/dist/private.d.ts +3 -1
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +4 -2
- package/dist/runtime/helpers.d.ts +9 -1
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +64 -24
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +4 -3
- package/dist/runtime/runs.d.ts +49 -0
- package/dist/runtime/runs.d.ts.map +1 -0
- package/dist/runtime/runs.js +156 -0
- package/dist/runtime/start.d.ts.map +1 -1
- package/dist/runtime/start.js +18 -11
- package/dist/runtime/step-handler.d.ts.map +1 -1
- package/dist/runtime/step-handler.js +230 -119
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +39 -5
- package/dist/runtime.d.ts +2 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +153 -129
- package/dist/serialization.d.ts +7 -11
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +150 -63
- package/dist/telemetry/semantic-conventions.d.ts +81 -5
- package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
- package/dist/telemetry/semantic-conventions.js +56 -8
- package/dist/telemetry.d.ts +25 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +48 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/workflow.js +3 -3
- package/package.json +39 -10
- package/runtime.d.ts +1 -0
- package/runtime.js +1 -0
|
@@ -3,14 +3,14 @@ import { FatalError, RetryableError, WorkflowAPIError, WorkflowRuntimeError, } f
|
|
|
3
3
|
import { pluralize } from '@workflow/utils';
|
|
4
4
|
import { getPort } from '@workflow/utils/get-port';
|
|
5
5
|
import { SPEC_VERSION_CURRENT, StepInvokePayloadSchema } from '@workflow/world';
|
|
6
|
-
import { runtimeLogger } from '../logger.js';
|
|
6
|
+
import { runtimeLogger, stepLogger } from '../logger.js';
|
|
7
7
|
import { getStepFunction } from '../private.js';
|
|
8
8
|
import { dehydrateStepReturnValue, hydrateStepArguments, } from '../serialization.js';
|
|
9
9
|
import { contextStorage } from '../step/context-storage.js';
|
|
10
10
|
import * as Attribute from '../telemetry/semantic-conventions.js';
|
|
11
11
|
import { getSpanKind, linkToCurrentContext, serializeTraceCarrier, trace, withTraceContext, } from '../telemetry.js';
|
|
12
12
|
import { getErrorName, getErrorStack } from '../types.js';
|
|
13
|
-
import { getQueueOverhead, handleHealthCheckMessage, parseHealthCheckPayload, queueMessage, withHealthCheck, } from './helpers.js';
|
|
13
|
+
import { getQueueOverhead, getWorkflowQueueName, handleHealthCheckMessage, parseHealthCheckPayload, queueMessage, withHealthCheck, } from './helpers.js';
|
|
14
14
|
import { getWorld, getWorldHandlers } from './world.js';
|
|
15
15
|
const DEFAULT_STEP_MAX_RETRIES = 3;
|
|
16
16
|
const stepHandler = getWorldHandlers().createQueueHandler('__wkf_step_', async (message_, metadata) => {
|
|
@@ -30,14 +30,20 @@ const stepHandler = getWorldHandlers().createQueueHandler('__wkf_step_', async (
|
|
|
30
30
|
// Extract the step name from the topic name
|
|
31
31
|
const stepName = metadata.queueName.slice('__wkf_step_'.length);
|
|
32
32
|
const world = getWorld();
|
|
33
|
-
//
|
|
34
|
-
const port = await
|
|
35
|
-
|
|
33
|
+
// Resolve local async values concurrently before entering the trace span
|
|
34
|
+
const [port, spanKind] = await Promise.all([
|
|
35
|
+
getPort(),
|
|
36
|
+
getSpanKind('CONSUMER'),
|
|
37
|
+
]);
|
|
38
|
+
return trace(`STEP ${stepName}`, { kind: spanKind, links: spanLinks }, async (span) => {
|
|
36
39
|
span?.setAttributes({
|
|
37
40
|
...Attribute.StepName(stepName),
|
|
38
41
|
...Attribute.StepAttempt(metadata.attempt),
|
|
39
|
-
|
|
40
|
-
...Attribute.
|
|
42
|
+
// Standard OTEL messaging conventions
|
|
43
|
+
...Attribute.MessagingSystem('vercel-queue'),
|
|
44
|
+
...Attribute.MessagingDestinationName(metadata.queueName),
|
|
45
|
+
...Attribute.MessagingMessageId(metadata.messageId),
|
|
46
|
+
...Attribute.MessagingOperationType('process'),
|
|
41
47
|
...getQueueOverhead({ requestedAt }),
|
|
42
48
|
});
|
|
43
49
|
const stepFn = getStepFunction(stepName);
|
|
@@ -55,7 +61,87 @@ const stepHandler = getWorldHandlers().createQueueHandler('__wkf_step_', async (
|
|
|
55
61
|
...Attribute.StepMaxRetries(maxRetries),
|
|
56
62
|
...Attribute.StepTracePropagated(!!traceContext),
|
|
57
63
|
});
|
|
58
|
-
|
|
64
|
+
// step_started validates state and returns the step entity, so no separate
|
|
65
|
+
// world.steps.get() call is needed. The server checks:
|
|
66
|
+
// - Step not in terminal state (returns 409)
|
|
67
|
+
// - retryAfter timestamp reached (returns 425 with Retry-After header)
|
|
68
|
+
// - Workflow still active (returns 410 if completed)
|
|
69
|
+
let step;
|
|
70
|
+
try {
|
|
71
|
+
const startResult = await world.events.create(workflowRunId, {
|
|
72
|
+
eventType: 'step_started',
|
|
73
|
+
specVersion: SPEC_VERSION_CURRENT,
|
|
74
|
+
correlationId: stepId,
|
|
75
|
+
});
|
|
76
|
+
if (!startResult.step) {
|
|
77
|
+
throw new WorkflowRuntimeError(`step_started event for "${stepId}" did not return step entity`);
|
|
78
|
+
}
|
|
79
|
+
step = startResult.step;
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
if (WorkflowAPIError.is(err)) {
|
|
83
|
+
// 410 Gone: Workflow has already completed
|
|
84
|
+
if (err.status === 410) {
|
|
85
|
+
console.warn(`Workflow run "${workflowRunId}" has already completed, skipping step "${stepId}": ${err.message}`);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
// 409 Conflict: Step in terminal state (completed/failed/cancelled)
|
|
89
|
+
// Re-enqueue the workflow to continue processing
|
|
90
|
+
if (err.status === 409) {
|
|
91
|
+
runtimeLogger.debug('Step in terminal state, re-enqueuing workflow', {
|
|
92
|
+
stepName,
|
|
93
|
+
stepId,
|
|
94
|
+
workflowRunId,
|
|
95
|
+
error: err.message,
|
|
96
|
+
});
|
|
97
|
+
span?.setAttributes({
|
|
98
|
+
...Attribute.StepSkipped(true),
|
|
99
|
+
// Use 'completed' as a representative terminal state for the skip reason
|
|
100
|
+
...Attribute.StepSkipReason('completed'),
|
|
101
|
+
});
|
|
102
|
+
// Add span event for step skip
|
|
103
|
+
span?.addEvent?.('step.skipped', {
|
|
104
|
+
'skip.reason': 'terminal_state',
|
|
105
|
+
'step.name': stepName,
|
|
106
|
+
'step.id': stepId,
|
|
107
|
+
});
|
|
108
|
+
await queueMessage(world, `__wkf_workflow_${workflowName}`, {
|
|
109
|
+
runId: workflowRunId,
|
|
110
|
+
traceCarrier: await serializeTraceCarrier(),
|
|
111
|
+
requestedAt: new Date(),
|
|
112
|
+
});
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
// 425 Too Early: retryAfter timestamp not reached yet
|
|
116
|
+
// Return timeout to queue so it retries later
|
|
117
|
+
if (err.status === 425) {
|
|
118
|
+
// Parse retryAfter from error response meta
|
|
119
|
+
const retryAfterStr = err.meta?.retryAfter;
|
|
120
|
+
const retryAfter = retryAfterStr
|
|
121
|
+
? new Date(retryAfterStr)
|
|
122
|
+
: new Date(Date.now() + 1000);
|
|
123
|
+
const timeoutSeconds = Math.max(1, Math.ceil((retryAfter.getTime() - Date.now()) / 1000));
|
|
124
|
+
span?.setAttributes({
|
|
125
|
+
...Attribute.StepRetryTimeoutSeconds(timeoutSeconds),
|
|
126
|
+
});
|
|
127
|
+
// Add span event for delayed retry
|
|
128
|
+
span?.addEvent?.('step.delayed', {
|
|
129
|
+
'delay.reason': 'retry_after_not_reached',
|
|
130
|
+
'delay.timeout_seconds': timeoutSeconds,
|
|
131
|
+
'delay.retry_after': retryAfter.toISOString(),
|
|
132
|
+
});
|
|
133
|
+
runtimeLogger.debug('Step retryAfter timestamp not yet reached', {
|
|
134
|
+
stepName,
|
|
135
|
+
stepId,
|
|
136
|
+
retryAfter,
|
|
137
|
+
timeoutSeconds,
|
|
138
|
+
});
|
|
139
|
+
return { timeoutSeconds };
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Re-throw other errors
|
|
143
|
+
throw err;
|
|
144
|
+
}
|
|
59
145
|
runtimeLogger.debug('Step execution details', {
|
|
60
146
|
stepName,
|
|
61
147
|
stepId: step.stepId,
|
|
@@ -65,35 +151,20 @@ const stepHandler = getWorldHandlers().createQueueHandler('__wkf_step_', async (
|
|
|
65
151
|
span?.setAttributes({
|
|
66
152
|
...Attribute.StepStatus(step.status),
|
|
67
153
|
});
|
|
68
|
-
// Check if the step has a `retryAfter` timestamp that hasn't been reached yet
|
|
69
|
-
const now = Date.now();
|
|
70
|
-
if (step.retryAfter && step.retryAfter.getTime() > now) {
|
|
71
|
-
const timeoutSeconds = Math.ceil((step.retryAfter.getTime() - now) / 1000);
|
|
72
|
-
span?.setAttributes({
|
|
73
|
-
...Attribute.StepRetryTimeoutSeconds(timeoutSeconds),
|
|
74
|
-
});
|
|
75
|
-
runtimeLogger.debug('Step retryAfter timestamp not yet reached', {
|
|
76
|
-
stepName,
|
|
77
|
-
stepId: step.stepId,
|
|
78
|
-
retryAfter: step.retryAfter,
|
|
79
|
-
timeoutSeconds,
|
|
80
|
-
});
|
|
81
|
-
return { timeoutSeconds };
|
|
82
|
-
}
|
|
83
154
|
let result;
|
|
84
|
-
// Check max retries
|
|
155
|
+
// Check max retries AFTER step_started (attempt was just incremented)
|
|
85
156
|
// step.attempt tracks how many times step_started has been called.
|
|
86
|
-
// If step.attempt >= maxRetries, we've already tried maxRetries times.
|
|
87
|
-
// This handles edge cases where the step handler is invoked after max retries have been exceeded
|
|
88
|
-
// (e.g., when the step repeatedly times out or fails before reaching the catch handler).
|
|
89
|
-
// Without this check, the step would retry forever.
|
|
90
157
|
// Note: maxRetries is the number of RETRIES after the first attempt, so total attempts = maxRetries + 1
|
|
91
158
|
// Use > here (not >=) because this guards against re-invocation AFTER all attempts are used.
|
|
92
159
|
// The post-failure check uses >= to decide whether to retry after a failure.
|
|
93
160
|
if (step.attempt > maxRetries + 1) {
|
|
94
161
|
const retryCount = step.attempt - 1;
|
|
95
162
|
const errorMessage = `Step "${stepName}" exceeded max retries (${retryCount} ${pluralize('retry', 'retries', retryCount)})`;
|
|
96
|
-
|
|
163
|
+
stepLogger.error('Step exceeded max retries', {
|
|
164
|
+
workflowRunId,
|
|
165
|
+
stepName,
|
|
166
|
+
retryCount,
|
|
167
|
+
});
|
|
97
168
|
// Fail the step via event (event-sourced architecture)
|
|
98
169
|
await world.events.create(workflowRunId, {
|
|
99
170
|
eventType: 'step_failed',
|
|
@@ -109,133 +180,150 @@ const stepHandler = getWorldHandlers().createQueueHandler('__wkf_step_', async (
|
|
|
109
180
|
...Attribute.StepRetryExhausted(true),
|
|
110
181
|
});
|
|
111
182
|
// Re-invoke the workflow to handle the failed step
|
|
112
|
-
await queueMessage(world,
|
|
183
|
+
await queueMessage(world, getWorkflowQueueName(workflowName), {
|
|
113
184
|
runId: workflowRunId,
|
|
114
185
|
traceCarrier: await serializeTraceCarrier(),
|
|
115
186
|
requestedAt: new Date(),
|
|
187
|
+
}, {
|
|
188
|
+
headers: { 'x-workflow-run-id': workflowRunId },
|
|
116
189
|
});
|
|
117
190
|
return;
|
|
118
191
|
}
|
|
119
192
|
try {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
// a) pending - initial state, or state set on re-try
|
|
123
|
-
// b) running - if a step fails mid-execution, like a function timeout
|
|
124
|
-
// otherwise, the step has been invoked erroneously
|
|
125
|
-
console.error(`[Workflows] "${workflowRunId}" - Step invoked erroneously, expected status "pending" or "running", got "${step.status}" instead, skipping execution`);
|
|
126
|
-
span?.setAttributes({
|
|
127
|
-
...Attribute.StepSkipped(true),
|
|
128
|
-
...Attribute.StepSkipReason(step.status),
|
|
129
|
-
});
|
|
130
|
-
// There's a chance that a step terminates correctly, but the underlying process
|
|
131
|
-
// fails or gets killed before the stepEntrypoint has a chance to re-enqueue the run.
|
|
132
|
-
// The queue lease expires and stepEntrypoint again, which leads us here, so
|
|
133
|
-
// we optimistically re-enqueue the workflow if the step is in a terminal state,
|
|
134
|
-
// under the assumption that this edge case happened.
|
|
135
|
-
// Until we move to atomic entity/event updates (World V2), there _could_ be an edge case
|
|
136
|
-
// where the we execute this code based on the `step` entity status, but the runtime
|
|
137
|
-
// failed to create the `step_completed` event (due to failing between step and event update),
|
|
138
|
-
// in which case, this might lead to an infinite loop.
|
|
139
|
-
// https://vercel.slack.com/archives/C09125LC4AX/p1765313809066679
|
|
140
|
-
const isTerminalStep = [
|
|
141
|
-
'completed',
|
|
142
|
-
'failed',
|
|
143
|
-
'cancelled',
|
|
144
|
-
].includes(step.status);
|
|
145
|
-
if (isTerminalStep) {
|
|
146
|
-
await queueMessage(world, `__wkf_workflow_${workflowName}`, {
|
|
147
|
-
runId: workflowRunId,
|
|
148
|
-
traceCarrier: await serializeTraceCarrier(),
|
|
149
|
-
requestedAt: new Date(),
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
// Start the step via event (event-sourced architecture)
|
|
155
|
-
// step_started increments the attempt counter in the World implementation
|
|
156
|
-
const startResult = await world.events.create(workflowRunId, {
|
|
157
|
-
eventType: 'step_started',
|
|
158
|
-
specVersion: SPEC_VERSION_CURRENT,
|
|
159
|
-
correlationId: stepId,
|
|
160
|
-
});
|
|
161
|
-
// Use the step entity from the event response (no extra get call needed)
|
|
162
|
-
if (!startResult.step) {
|
|
163
|
-
throw new WorkflowRuntimeError(`step_started event for "${stepId}" did not return step entity`);
|
|
164
|
-
}
|
|
165
|
-
step = startResult.step;
|
|
193
|
+
// step_started already validated the step is in valid state (pending/running)
|
|
194
|
+
// and returned the updated step entity with incremented attempt
|
|
166
195
|
// step.attempt is now the current attempt number (after increment)
|
|
167
196
|
const attempt = step.attempt;
|
|
168
197
|
if (!step.startedAt) {
|
|
169
198
|
throw new WorkflowRuntimeError(`Step "${stepId}" has no "startedAt" timestamp`);
|
|
170
199
|
}
|
|
200
|
+
// Capture startedAt for use in async callback (TypeScript narrowing doesn't persist)
|
|
201
|
+
const stepStartedAt = step.startedAt;
|
|
171
202
|
// Hydrate the step input arguments, closure variables, and thisVal
|
|
203
|
+
// NOTE: This captures only the synchronous portion of hydration. Any async
|
|
204
|
+
// operations (e.g., stream loading) are added to `ops` and executed later
|
|
205
|
+
// via Promise.all(ops) - their timing is not included in this measurement.
|
|
172
206
|
const ops = [];
|
|
173
|
-
const hydratedInput =
|
|
207
|
+
const hydratedInput = await trace('step.hydrate', {}, async (hydrateSpan) => {
|
|
208
|
+
const startTime = Date.now();
|
|
209
|
+
const result = hydrateStepArguments(step.input, ops, workflowRunId);
|
|
210
|
+
const durationMs = Date.now() - startTime;
|
|
211
|
+
hydrateSpan?.setAttributes({
|
|
212
|
+
...Attribute.StepArgumentsCount(result.args.length),
|
|
213
|
+
...Attribute.QueueDeserializeTimeMs(durationMs),
|
|
214
|
+
});
|
|
215
|
+
return result;
|
|
216
|
+
});
|
|
174
217
|
const args = hydratedInput.args;
|
|
175
218
|
const thisVal = hydratedInput.thisVal ?? null;
|
|
219
|
+
// Execute the step function with tracing
|
|
220
|
+
const executionStartTime = Date.now();
|
|
221
|
+
result = await trace('step.execute', {}, async () => {
|
|
222
|
+
return await contextStorage.run({
|
|
223
|
+
stepMetadata: {
|
|
224
|
+
stepId,
|
|
225
|
+
stepStartedAt: new Date(+stepStartedAt),
|
|
226
|
+
attempt,
|
|
227
|
+
},
|
|
228
|
+
workflowMetadata: {
|
|
229
|
+
workflowRunId,
|
|
230
|
+
workflowStartedAt: new Date(+workflowStartedAt),
|
|
231
|
+
// TODO: there should be a getUrl method on the world interface itself. This
|
|
232
|
+
// solution only works for vercel + local worlds.
|
|
233
|
+
url: process.env.VERCEL_URL
|
|
234
|
+
? `https://${process.env.VERCEL_URL}`
|
|
235
|
+
: `http://localhost:${port ?? 3000}`,
|
|
236
|
+
},
|
|
237
|
+
ops,
|
|
238
|
+
closureVars: hydratedInput.closureVars,
|
|
239
|
+
}, () => stepFn.apply(thisVal, args));
|
|
240
|
+
});
|
|
241
|
+
const executionTimeMs = Date.now() - executionStartTime;
|
|
176
242
|
span?.setAttributes({
|
|
177
|
-
...Attribute.
|
|
243
|
+
...Attribute.QueueExecutionTimeMs(executionTimeMs),
|
|
178
244
|
});
|
|
179
|
-
result = await contextStorage.run({
|
|
180
|
-
stepMetadata: {
|
|
181
|
-
stepId,
|
|
182
|
-
stepStartedAt: new Date(+step.startedAt),
|
|
183
|
-
attempt,
|
|
184
|
-
},
|
|
185
|
-
workflowMetadata: {
|
|
186
|
-
workflowRunId,
|
|
187
|
-
workflowStartedAt: new Date(+workflowStartedAt),
|
|
188
|
-
// TODO: there should be a getUrl method on the world interface itself. This
|
|
189
|
-
// solution only works for vercel + local worlds.
|
|
190
|
-
url: process.env.VERCEL_URL
|
|
191
|
-
? `https://${process.env.VERCEL_URL}`
|
|
192
|
-
: `http://localhost:${port ?? 3000}`,
|
|
193
|
-
},
|
|
194
|
-
ops,
|
|
195
|
-
closureVars: hydratedInput.closureVars,
|
|
196
|
-
}, () => stepFn.apply(thisVal, args));
|
|
197
245
|
// NOTE: None of the code from this point is guaranteed to run
|
|
198
246
|
// Since the step might fail or cause a function timeout and the process might be SIGKILL'd
|
|
199
247
|
// The workflow runtime must be resilient to the below code not executing on a failed step
|
|
200
|
-
result =
|
|
248
|
+
result = await trace('step.dehydrate', {}, async (dehydrateSpan) => {
|
|
249
|
+
const startTime = Date.now();
|
|
250
|
+
const dehydrated = dehydrateStepReturnValue(result, ops, workflowRunId);
|
|
251
|
+
const durationMs = Date.now() - startTime;
|
|
252
|
+
dehydrateSpan?.setAttributes({
|
|
253
|
+
...Attribute.QueueSerializeTimeMs(durationMs),
|
|
254
|
+
...Attribute.StepResultType(typeof dehydrated),
|
|
255
|
+
});
|
|
256
|
+
return dehydrated;
|
|
257
|
+
});
|
|
201
258
|
waitUntil(Promise.all(ops).catch((err) => {
|
|
202
259
|
// Ignore expected client disconnect errors (e.g., browser refresh during streaming)
|
|
203
260
|
const isAbortError = err?.name === 'AbortError' || err?.name === 'ResponseAborted';
|
|
204
261
|
if (!isAbortError)
|
|
205
262
|
throw err;
|
|
206
263
|
}));
|
|
207
|
-
//
|
|
208
|
-
//
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
264
|
+
// Run step_completed and trace serialization concurrently;
|
|
265
|
+
// the trace carrier is used in the final queueMessage call below
|
|
266
|
+
const [, traceCarrier] = await Promise.all([
|
|
267
|
+
world.events.create(workflowRunId, {
|
|
268
|
+
eventType: 'step_completed',
|
|
269
|
+
specVersion: SPEC_VERSION_CURRENT,
|
|
270
|
+
correlationId: stepId,
|
|
271
|
+
eventData: {
|
|
272
|
+
result: result,
|
|
273
|
+
},
|
|
274
|
+
}),
|
|
275
|
+
serializeTraceCarrier(),
|
|
276
|
+
]);
|
|
218
277
|
span?.setAttributes({
|
|
219
278
|
...Attribute.StepStatus('completed'),
|
|
220
279
|
...Attribute.StepResultType(typeof result),
|
|
221
280
|
});
|
|
281
|
+
// Queue the workflow continuation with the concurrently-resolved trace carrier
|
|
282
|
+
await queueMessage(world, `__wkf_workflow_${workflowName}`, {
|
|
283
|
+
runId: workflowRunId,
|
|
284
|
+
traceCarrier,
|
|
285
|
+
requestedAt: new Date(),
|
|
286
|
+
});
|
|
287
|
+
return;
|
|
222
288
|
}
|
|
223
289
|
catch (err) {
|
|
290
|
+
// Record exception for OTEL error tracking
|
|
291
|
+
if (err instanceof Error) {
|
|
292
|
+
span?.recordException?.(err);
|
|
293
|
+
}
|
|
294
|
+
// Determine error category and retryability
|
|
295
|
+
const isFatal = FatalError.is(err);
|
|
296
|
+
const isRetryable = RetryableError.is(err);
|
|
297
|
+
const errorCategory = isFatal
|
|
298
|
+
? 'fatal'
|
|
299
|
+
: isRetryable
|
|
300
|
+
? 'retryable'
|
|
301
|
+
: 'transient';
|
|
224
302
|
span?.setAttributes({
|
|
225
303
|
...Attribute.StepErrorName(getErrorName(err)),
|
|
226
304
|
...Attribute.StepErrorMessage(String(err)),
|
|
305
|
+
...Attribute.ErrorType(getErrorName(err)),
|
|
306
|
+
...Attribute.ErrorCategory(errorCategory),
|
|
307
|
+
...Attribute.ErrorRetryable(!isFatal),
|
|
227
308
|
});
|
|
228
309
|
if (WorkflowAPIError.is(err)) {
|
|
229
310
|
if (err.status === 410) {
|
|
230
311
|
// Workflow has already completed, so no-op
|
|
231
|
-
|
|
312
|
+
stepLogger.info('Workflow run already completed, skipping step', {
|
|
313
|
+
workflowRunId,
|
|
314
|
+
stepId,
|
|
315
|
+
message: err.message,
|
|
316
|
+
});
|
|
232
317
|
return;
|
|
233
318
|
}
|
|
234
319
|
}
|
|
235
|
-
if (
|
|
320
|
+
if (isFatal) {
|
|
236
321
|
const errorStack = getErrorStack(err);
|
|
237
|
-
|
|
238
|
-
|
|
322
|
+
stepLogger.error('Encountered FatalError while executing step, bubbling up to parent workflow', {
|
|
323
|
+
workflowRunId,
|
|
324
|
+
stepName,
|
|
325
|
+
errorStack,
|
|
326
|
+
});
|
|
239
327
|
// Fail the step via event (event-sourced architecture)
|
|
240
328
|
await world.events.create(workflowRunId, {
|
|
241
329
|
eventType: 'step_failed',
|
|
@@ -263,9 +351,14 @@ const stepHandler = getWorldHandlers().createQueueHandler('__wkf_step_', async (
|
|
|
263
351
|
if (currentAttempt >= maxRetries + 1) {
|
|
264
352
|
// Max retries reached
|
|
265
353
|
const errorStack = getErrorStack(err);
|
|
266
|
-
const stackLines = errorStack.split('\n').slice(0, 4);
|
|
267
354
|
const retryCount = step.attempt - 1;
|
|
268
|
-
|
|
355
|
+
stepLogger.error('Max retries reached, bubbling error to parent workflow', {
|
|
356
|
+
workflowRunId,
|
|
357
|
+
stepName,
|
|
358
|
+
attempt: step.attempt,
|
|
359
|
+
retryCount,
|
|
360
|
+
errorStack,
|
|
361
|
+
});
|
|
269
362
|
const errorMessage = `Step "${stepName}" failed after ${maxRetries} ${pluralize('retry', 'retries', maxRetries)}: ${String(err)}`;
|
|
270
363
|
// Fail the step via event (event-sourced architecture)
|
|
271
364
|
await world.events.create(workflowRunId, {
|
|
@@ -285,11 +378,21 @@ const stepHandler = getWorldHandlers().createQueueHandler('__wkf_step_', async (
|
|
|
285
378
|
else {
|
|
286
379
|
// Not at max retries yet - log as a retryable error
|
|
287
380
|
if (RetryableError.is(err)) {
|
|
288
|
-
|
|
381
|
+
stepLogger.warn('Encountered RetryableError, step will be retried', {
|
|
382
|
+
workflowRunId,
|
|
383
|
+
stepName,
|
|
384
|
+
attempt: currentAttempt,
|
|
385
|
+
message: err.message,
|
|
386
|
+
});
|
|
289
387
|
}
|
|
290
388
|
else {
|
|
291
|
-
const
|
|
292
|
-
|
|
389
|
+
const errorStack = getErrorStack(err);
|
|
390
|
+
stepLogger.warn('Encountered Error, step will be retried', {
|
|
391
|
+
workflowRunId,
|
|
392
|
+
stepName,
|
|
393
|
+
attempt: currentAttempt,
|
|
394
|
+
errorStack,
|
|
395
|
+
});
|
|
293
396
|
}
|
|
294
397
|
// Set step to pending for retry via event (event-sourced architecture)
|
|
295
398
|
// step_retrying records the error and sets status to pending
|
|
@@ -313,16 +416,24 @@ const stepHandler = getWorldHandlers().createQueueHandler('__wkf_step_', async (
|
|
|
313
416
|
...Attribute.StepRetryTimeoutSeconds(timeoutSeconds),
|
|
314
417
|
...Attribute.StepRetryWillRetry(true),
|
|
315
418
|
});
|
|
419
|
+
// Add span event for retry scheduling
|
|
420
|
+
span?.addEvent?.('retry.scheduled', {
|
|
421
|
+
'retry.timeout_seconds': timeoutSeconds,
|
|
422
|
+
'retry.attempt': currentAttempt,
|
|
423
|
+
'retry.max_retries': maxRetries,
|
|
424
|
+
});
|
|
316
425
|
// It's a retryable error - so have the queue keep the message visible
|
|
317
426
|
// so that it gets retried.
|
|
318
427
|
return { timeoutSeconds };
|
|
319
428
|
}
|
|
320
429
|
}
|
|
321
430
|
}
|
|
322
|
-
await queueMessage(world,
|
|
431
|
+
await queueMessage(world, getWorkflowQueueName(workflowName), {
|
|
323
432
|
runId: workflowRunId,
|
|
324
433
|
traceCarrier: await serializeTraceCarrier(),
|
|
325
434
|
requestedAt: new Date(),
|
|
435
|
+
}, {
|
|
436
|
+
headers: { 'x-workflow-run-id': workflowRunId },
|
|
326
437
|
});
|
|
327
438
|
});
|
|
328
439
|
});
|
|
@@ -334,4 +445,4 @@ const stepHandler = getWorldHandlers().createQueueHandler('__wkf_step_', async (
|
|
|
334
445
|
*/
|
|
335
446
|
export const stepEntrypoint =
|
|
336
447
|
/* @__PURE__ */ withHealthCheck(stepHandler);
|
|
337
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvc3RlcC1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQ0wsVUFBVSxFQUNWLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsb0JBQW9CLEdBQ3JCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixvQkFBb0IsR0FDckIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxLQUFLLFNBQVMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsV0FBVyxFQUNYLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsS0FBSyxFQUNMLGdCQUFnQixHQUNqQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFELE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2QixZQUFZLEVBQ1osZUFBZSxHQUNoQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FB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
|
|
448
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvc3RlcC1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQ0wsVUFBVSxFQUNWLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsb0JBQW9CLEdBQ3JCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsb0JBQW9CLEdBQ3JCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sS0FBSyxTQUFTLE1BQU0sc0NBQXNDLENBQUM7QUFDbEUsT0FBTyxFQUNMLFdBQVcsRUFDWCxvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLEtBQUssRUFDTCxnQkFBZ0IsR0FDakIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxRCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsdUJBQXVCLEVBQ3ZCLFlBQVksRUFDWixlQUFlLEdBQ2hCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxRQUFRLEVBQUUsZ0JBQWdC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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suspension-handler.d.ts","sourceRoot":"","sources":["../../src/runtime/suspension-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAG/C,OAAO,EAIL,KAAK,KAAK,EACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAIV,kBAAkB,EACnB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"suspension-handler.d.ts","sourceRoot":"","sources":["../../src/runtime/suspension-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAG/C,OAAO,EAIL,KAAK,KAAK,EACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAIV,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAwBtB,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAED,MAAM,WAAW,uBAAuB;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,UAAU,EACV,KAAK,EACL,KAAK,EACL,YAAY,EACZ,iBAAiB,EACjB,IAAI,GACL,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA+N5D"}
|