@workflow/core 4.1.0-beta.54 → 4.1.0-beta.56
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/private.d.ts.map +1 -1
- package/dist/private.js +43 -2
- package/dist/runtime/helpers.d.ts +21 -0
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +91 -4
- package/dist/runtime/step-handler.d.ts.map +1 -1
- package/dist/runtime/step-handler.js +53 -29
- package/dist/runtime.d.ts +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +160 -134
- package/dist/serialization-format.d.ts +117 -0
- package/dist/serialization-format.d.ts.map +1 -0
- package/dist/serialization-format.js +363 -0
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +67 -18
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +62 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/api-reference/create-hook.mdx +7 -0
- package/docs/api-reference/create-webhook.mdx +6 -0
- package/docs/api-reference/define-hook.mdx +6 -0
- package/docs/api-reference/fatal-error.mdx +6 -0
- package/docs/api-reference/fetch.mdx +6 -0
- package/docs/api-reference/get-step-metadata.mdx +4 -0
- package/docs/api-reference/get-workflow-metadata.mdx +4 -0
- package/docs/api-reference/get-writable.mdx +4 -0
- package/docs/api-reference/index.mdx +7 -0
- package/docs/api-reference/retryable-error.mdx +6 -0
- package/docs/api-reference/sleep.mdx +6 -0
- package/docs/foundations/common-patterns.mdx +7 -0
- package/docs/foundations/errors-and-retries.mdx +7 -0
- package/docs/foundations/hooks.mdx +8 -0
- package/docs/foundations/idempotency.mdx +6 -0
- package/docs/foundations/index.mdx +5 -0
- package/docs/foundations/serialization.mdx +6 -0
- package/docs/foundations/starting-workflows.mdx +6 -0
- package/docs/foundations/streaming.mdx +7 -0
- package/docs/foundations/workflows-and-steps.mdx +7 -0
- package/docs/how-it-works/code-transform.mdx +6 -0
- package/docs/how-it-works/event-sourcing.mdx +6 -0
- package/docs/how-it-works/framework-integrations.mdx +6 -0
- package/docs/how-it-works/understanding-directives.mdx +6 -0
- package/package.json +9 -10
- package/dist/observability.d.ts +0 -84
- package/dist/observability.d.ts.map +0 -1
- package/dist/observability.js +0 -360
package/dist/runtime.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { WorkflowRuntimeError } from '@workflow/errors';
|
|
1
|
+
import { WorkflowAPIError, WorkflowRuntimeError } from '@workflow/errors';
|
|
2
2
|
import { parseWorkflowName } from '@workflow/utils/parse-name';
|
|
3
3
|
import { SPEC_VERSION_CURRENT, WorkflowInvokePayloadSchema, } from '@workflow/world';
|
|
4
4
|
import { WorkflowSuspension } from './global.js';
|
|
5
5
|
import { runtimeLogger } from './logger.js';
|
|
6
|
-
import { getAllWorkflowRunEvents, getQueueOverhead, handleHealthCheckMessage, parseHealthCheckPayload, withHealthCheck, } from './runtime/helpers.js';
|
|
6
|
+
import { getAllWorkflowRunEvents, getQueueOverhead, getWorkflowQueueName, handleHealthCheckMessage, parseHealthCheckPayload, queueMessage, withHealthCheck, withThrottleRetry, } from './runtime/helpers.js';
|
|
7
7
|
import { handleSuspension } from './runtime/suspension-handler.js';
|
|
8
8
|
import { getWorld, getWorldHandlers } from './runtime/world.js';
|
|
9
9
|
import { remapErrorStack } from './source-map.js';
|
|
10
10
|
import * as Attribute from './telemetry/semantic-conventions.js';
|
|
11
|
-
import { linkToCurrentContext, trace, withTraceContext, withWorkflowBaggage, } from './telemetry.js';
|
|
12
|
-
import { getErrorName, getErrorStack } from './types.js';
|
|
11
|
+
import { linkToCurrentContext, serializeTraceCarrier, trace, withTraceContext, withWorkflowBaggage, } from './telemetry.js';
|
|
12
|
+
import { getErrorName, getErrorStack, normalizeUnknownError } from './types.js';
|
|
13
13
|
import { buildWorkflowSuspensionMessage } from './util.js';
|
|
14
14
|
import { runWorkflow } from './workflow.js';
|
|
15
15
|
export { WorkflowSuspension } from './global.js';
|
|
@@ -39,7 +39,7 @@ export function workflowEntrypoint(workflowCode) {
|
|
|
39
39
|
await handleHealthCheckMessage(healthCheck, 'workflow');
|
|
40
40
|
return;
|
|
41
41
|
}
|
|
42
|
-
const { runId, traceCarrier: traceContext, requestedAt, } = WorkflowInvokePayloadSchema.parse(message_);
|
|
42
|
+
const { runId, traceCarrier: traceContext, requestedAt, serverErrorRetryCount, } = WorkflowInvokePayloadSchema.parse(message_);
|
|
43
43
|
// Extract the workflow name from the topic name
|
|
44
44
|
const workflowName = metadata.queueName.slice('__wkf_workflow_'.length);
|
|
45
45
|
const spanLinks = await linkToCurrentContext();
|
|
@@ -64,148 +64,174 @@ export function workflowEntrypoint(workflowCode) {
|
|
|
64
64
|
...Attribute.WorkflowRunId(runId),
|
|
65
65
|
...Attribute.WorkflowTracePropagated(!!traceContext),
|
|
66
66
|
});
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
67
|
+
return await withThrottleRetry(async () => {
|
|
68
|
+
let workflowStartedAt = -1;
|
|
69
|
+
try {
|
|
70
|
+
let workflowRun = await world.runs.get(runId);
|
|
71
|
+
if (workflowRun.status === 'pending') {
|
|
72
|
+
// Transition run to 'running' via event (event-sourced architecture)
|
|
73
|
+
const result = await world.events.create(runId, {
|
|
74
|
+
eventType: 'run_started',
|
|
75
|
+
specVersion: SPEC_VERSION_CURRENT,
|
|
76
|
+
});
|
|
77
|
+
// Use the run entity from the event response (no extra get call needed)
|
|
78
|
+
if (!result.run) {
|
|
79
|
+
throw new WorkflowRuntimeError(`Event creation for 'run_started' did not return the run entity for run "${runId}"`);
|
|
80
|
+
}
|
|
81
|
+
workflowRun = result.run;
|
|
79
82
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
if (!workflowRun.startedAt) {
|
|
85
|
-
throw new WorkflowRuntimeError(`Workflow run "${runId}" has no "startedAt" timestamp`);
|
|
86
|
-
}
|
|
87
|
-
workflowStartedAt = +workflowRun.startedAt;
|
|
88
|
-
span?.setAttributes({
|
|
89
|
-
...Attribute.WorkflowRunStatus(workflowRun.status),
|
|
90
|
-
...Attribute.WorkflowStartedAt(workflowStartedAt),
|
|
91
|
-
});
|
|
92
|
-
if (workflowRun.status !== 'running') {
|
|
93
|
-
// Workflow has already completed or failed, so we can skip it
|
|
94
|
-
runtimeLogger.info('Workflow already completed or failed, skipping', {
|
|
95
|
-
workflowRunId: runId,
|
|
96
|
-
status: workflowRun.status,
|
|
97
|
-
});
|
|
98
|
-
// TODO: for `cancel`, we actually want to propagate a WorkflowCancelled event
|
|
99
|
-
// inside the workflow context so the user can gracefully exit. this is SIGTERM
|
|
100
|
-
// TODO: furthermore, there should be a timeout or a way to force cancel SIGKILL
|
|
101
|
-
// so that we actually exit here without replaying the workflow at all, in the case
|
|
102
|
-
// the replaying the workflow is itself failing.
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
// Load all events into memory before running
|
|
106
|
-
const events = await getAllWorkflowRunEvents(workflowRun.runId);
|
|
107
|
-
// Check for any elapsed waits and create wait_completed events
|
|
108
|
-
const now = Date.now();
|
|
109
|
-
// Pre-compute completed correlation IDs for O(n) lookup instead of O(n²)
|
|
110
|
-
const completedWaitIds = new Set(events
|
|
111
|
-
.filter((e) => e.eventType === 'wait_completed')
|
|
112
|
-
.map((e) => e.correlationId));
|
|
113
|
-
// Collect all waits that need completion
|
|
114
|
-
const waitsToComplete = events
|
|
115
|
-
.filter((e) => e.eventType === 'wait_created' &&
|
|
116
|
-
e.correlationId !== undefined &&
|
|
117
|
-
!completedWaitIds.has(e.correlationId) &&
|
|
118
|
-
now >= e.eventData.resumeAt.getTime())
|
|
119
|
-
.map((e) => ({
|
|
120
|
-
eventType: 'wait_completed',
|
|
121
|
-
specVersion: SPEC_VERSION_CURRENT,
|
|
122
|
-
correlationId: e.correlationId,
|
|
123
|
-
}));
|
|
124
|
-
// Create all wait_completed events
|
|
125
|
-
for (const waitEvent of waitsToComplete) {
|
|
126
|
-
const result = await world.events.create(runId, waitEvent);
|
|
127
|
-
// Add the event to the events array so the workflow can see it
|
|
128
|
-
events.push(result.event);
|
|
129
|
-
}
|
|
130
|
-
const result = await trace('workflow.replay', {}, async (replaySpan) => {
|
|
131
|
-
replaySpan?.setAttributes({
|
|
132
|
-
...Attribute.WorkflowEventsCount(events.length),
|
|
133
|
-
});
|
|
134
|
-
return await runWorkflow(workflowCode, workflowRun, events);
|
|
135
|
-
});
|
|
136
|
-
// Complete the workflow run via event (event-sourced architecture)
|
|
137
|
-
await world.events.create(runId, {
|
|
138
|
-
eventType: 'run_completed',
|
|
139
|
-
specVersion: SPEC_VERSION_CURRENT,
|
|
140
|
-
eventData: {
|
|
141
|
-
output: result,
|
|
142
|
-
},
|
|
143
|
-
});
|
|
144
|
-
span?.setAttributes({
|
|
145
|
-
...Attribute.WorkflowRunStatus('completed'),
|
|
146
|
-
...Attribute.WorkflowEventsCount(events.length),
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
catch (err) {
|
|
150
|
-
if (WorkflowSuspension.is(err)) {
|
|
151
|
-
const suspensionMessage = buildWorkflowSuspensionMessage(runId, err.stepCount, err.hookCount, err.waitCount);
|
|
152
|
-
if (suspensionMessage) {
|
|
153
|
-
runtimeLogger.debug(suspensionMessage);
|
|
83
|
+
// At this point, the workflow is "running" and `startedAt` should
|
|
84
|
+
// definitely be set.
|
|
85
|
+
if (!workflowRun.startedAt) {
|
|
86
|
+
throw new WorkflowRuntimeError(`Workflow run "${runId}" has no "startedAt" timestamp`);
|
|
154
87
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
workflowName,
|
|
160
|
-
workflowStartedAt,
|
|
161
|
-
span,
|
|
88
|
+
workflowStartedAt = +workflowRun.startedAt;
|
|
89
|
+
span?.setAttributes({
|
|
90
|
+
...Attribute.WorkflowRunStatus(workflowRun.status),
|
|
91
|
+
...Attribute.WorkflowStartedAt(workflowStartedAt),
|
|
162
92
|
});
|
|
163
|
-
if (
|
|
164
|
-
|
|
93
|
+
if (workflowRun.status !== 'running') {
|
|
94
|
+
// Workflow has already completed or failed, so we can skip it
|
|
95
|
+
runtimeLogger.info('Workflow already completed or failed, skipping', {
|
|
96
|
+
workflowRunId: runId,
|
|
97
|
+
status: workflowRun.status,
|
|
98
|
+
});
|
|
99
|
+
// TODO: for `cancel`, we actually want to propagate a WorkflowCancelled event
|
|
100
|
+
// inside the workflow context so the user can gracefully exit. this is SIGTERM
|
|
101
|
+
// TODO: furthermore, there should be a timeout or a way to force cancel SIGKILL
|
|
102
|
+
// so that we actually exit here without replaying the workflow at all, in the case
|
|
103
|
+
// the replaying the workflow is itself failing.
|
|
104
|
+
return;
|
|
165
105
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
//
|
|
169
|
-
|
|
170
|
-
//
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
106
|
+
// Load all events into memory before running
|
|
107
|
+
const events = await getAllWorkflowRunEvents(workflowRun.runId);
|
|
108
|
+
// Check for any elapsed waits and create wait_completed events
|
|
109
|
+
const now = Date.now();
|
|
110
|
+
// Pre-compute completed correlation IDs for O(n) lookup instead of O(n²)
|
|
111
|
+
const completedWaitIds = new Set(events
|
|
112
|
+
.filter((e) => e.eventType === 'wait_completed')
|
|
113
|
+
.map((e) => e.correlationId));
|
|
114
|
+
// Collect all waits that need completion
|
|
115
|
+
const waitsToComplete = events
|
|
116
|
+
.filter((e) => e.eventType === 'wait_created' &&
|
|
117
|
+
e.correlationId !== undefined &&
|
|
118
|
+
!completedWaitIds.has(e.correlationId) &&
|
|
119
|
+
now >= e.eventData.resumeAt.getTime())
|
|
120
|
+
.map((e) => ({
|
|
121
|
+
eventType: 'wait_completed',
|
|
122
|
+
specVersion: SPEC_VERSION_CURRENT,
|
|
123
|
+
correlationId: e.correlationId,
|
|
124
|
+
}));
|
|
125
|
+
// Create all wait_completed events
|
|
126
|
+
for (const waitEvent of waitsToComplete) {
|
|
127
|
+
const result = await world.events.create(runId, waitEvent);
|
|
128
|
+
// Add the event to the events array so the workflow can see it
|
|
129
|
+
events.push(result.event);
|
|
183
130
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
131
|
+
const result = await trace('workflow.replay', {}, async (replaySpan) => {
|
|
132
|
+
replaySpan?.setAttributes({
|
|
133
|
+
...Attribute.WorkflowEventsCount(events.length),
|
|
134
|
+
});
|
|
135
|
+
return await runWorkflow(workflowCode, workflowRun, events);
|
|
188
136
|
});
|
|
189
|
-
//
|
|
137
|
+
// Complete the workflow run via event (event-sourced architecture)
|
|
190
138
|
await world.events.create(runId, {
|
|
191
|
-
eventType: '
|
|
139
|
+
eventType: 'run_completed',
|
|
192
140
|
specVersion: SPEC_VERSION_CURRENT,
|
|
193
141
|
eventData: {
|
|
194
|
-
|
|
195
|
-
message: errorMessage,
|
|
196
|
-
stack: errorStack,
|
|
197
|
-
},
|
|
198
|
-
// TODO: include error codes when we define them
|
|
142
|
+
output: result,
|
|
199
143
|
},
|
|
200
144
|
});
|
|
201
145
|
span?.setAttributes({
|
|
202
|
-
...Attribute.WorkflowRunStatus('
|
|
203
|
-
...Attribute.
|
|
204
|
-
...Attribute.WorkflowErrorMessage(String(err)),
|
|
205
|
-
...Attribute.ErrorType(errorName),
|
|
146
|
+
...Attribute.WorkflowRunStatus('completed'),
|
|
147
|
+
...Attribute.WorkflowEventsCount(events.length),
|
|
206
148
|
});
|
|
207
149
|
}
|
|
208
|
-
|
|
150
|
+
catch (err) {
|
|
151
|
+
if (WorkflowSuspension.is(err)) {
|
|
152
|
+
const suspensionMessage = buildWorkflowSuspensionMessage(runId, err.stepCount, err.hookCount, err.waitCount);
|
|
153
|
+
if (suspensionMessage) {
|
|
154
|
+
runtimeLogger.debug(suspensionMessage);
|
|
155
|
+
}
|
|
156
|
+
const result = await handleSuspension({
|
|
157
|
+
suspension: err,
|
|
158
|
+
world,
|
|
159
|
+
runId,
|
|
160
|
+
workflowName,
|
|
161
|
+
workflowStartedAt,
|
|
162
|
+
span,
|
|
163
|
+
});
|
|
164
|
+
if (result.timeoutSeconds !== undefined) {
|
|
165
|
+
return { timeoutSeconds: result.timeoutSeconds };
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
// Retry server errors (5xx) with exponential backoff before failing the run
|
|
170
|
+
if (WorkflowAPIError.is(err) &&
|
|
171
|
+
err.status !== undefined &&
|
|
172
|
+
err.status >= 500) {
|
|
173
|
+
const retryCount = serverErrorRetryCount ?? 0;
|
|
174
|
+
const delaySecondSteps = [5, 30, 120]; // 5s, 30s, 120s
|
|
175
|
+
if (retryCount < delaySecondSteps.length) {
|
|
176
|
+
runtimeLogger.warn('Server error (5xx), re-enqueueing workflow with backoff', {
|
|
177
|
+
workflowRunId: runId,
|
|
178
|
+
retryCount,
|
|
179
|
+
delaySeconds: delaySecondSteps[retryCount],
|
|
180
|
+
error: err.message,
|
|
181
|
+
});
|
|
182
|
+
await queueMessage(world, getWorkflowQueueName(workflowName), {
|
|
183
|
+
runId,
|
|
184
|
+
serverErrorRetryCount: retryCount + 1,
|
|
185
|
+
traceCarrier: await serializeTraceCarrier(),
|
|
186
|
+
requestedAt: new Date(),
|
|
187
|
+
}, { delaySeconds: delaySecondSteps[retryCount] });
|
|
188
|
+
return; // Don't fail the run, retry later
|
|
189
|
+
}
|
|
190
|
+
// Fall through to run_failed after exhausting retries
|
|
191
|
+
}
|
|
192
|
+
// NOTE: this error could be an error thrown in user code, or could also be a WorkflowRuntimeError
|
|
193
|
+
// (for instance when the event log is corrupted, this is thrown by the event consumer). We could
|
|
194
|
+
// specially handle these if needed.
|
|
195
|
+
// Record exception for OTEL error tracking
|
|
196
|
+
if (err instanceof Error) {
|
|
197
|
+
span?.recordException?.(err);
|
|
198
|
+
}
|
|
199
|
+
const normalizedError = await normalizeUnknownError(err);
|
|
200
|
+
const errorName = normalizedError.name || getErrorName(err);
|
|
201
|
+
const errorMessage = normalizedError.message;
|
|
202
|
+
let errorStack = normalizedError.stack || getErrorStack(err);
|
|
203
|
+
// Remap error stack using source maps to show original source locations
|
|
204
|
+
if (errorStack) {
|
|
205
|
+
const parsedName = parseWorkflowName(workflowName);
|
|
206
|
+
const filename = parsedName?.moduleSpecifier || workflowName;
|
|
207
|
+
errorStack = remapErrorStack(errorStack, filename, workflowCode);
|
|
208
|
+
}
|
|
209
|
+
runtimeLogger.error('Error while running workflow', {
|
|
210
|
+
workflowRunId: runId,
|
|
211
|
+
errorName,
|
|
212
|
+
errorStack,
|
|
213
|
+
});
|
|
214
|
+
// Fail the workflow run via event (event-sourced architecture)
|
|
215
|
+
await world.events.create(runId, {
|
|
216
|
+
eventType: 'run_failed',
|
|
217
|
+
specVersion: SPEC_VERSION_CURRENT,
|
|
218
|
+
eventData: {
|
|
219
|
+
error: {
|
|
220
|
+
message: errorMessage,
|
|
221
|
+
stack: errorStack,
|
|
222
|
+
},
|
|
223
|
+
// TODO: include error codes when we define them
|
|
224
|
+
},
|
|
225
|
+
});
|
|
226
|
+
span?.setAttributes({
|
|
227
|
+
...Attribute.WorkflowRunStatus('failed'),
|
|
228
|
+
...Attribute.WorkflowErrorName(errorName),
|
|
229
|
+
...Attribute.WorkflowErrorMessage(errorMessage),
|
|
230
|
+
...Attribute.ErrorType(errorName),
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}); // End withThrottleRetry
|
|
209
235
|
}); // End trace
|
|
210
236
|
}); // End withWorkflowBaggage
|
|
211
237
|
}); // End withTraceContext
|
|
@@ -215,4 +241,4 @@ export function workflowEntrypoint(workflowCode) {
|
|
|
215
241
|
// this is a no-op placeholder as the client is
|
|
216
242
|
// expecting this to be present but we aren't actually using it
|
|
217
243
|
export function runStep() { }
|
|
218
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFFTCxvQkFBb0IsRUFDcEIsMkJBQTJCLEdBRTVCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2QixlQUFlLEdBQ2hCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssU0FBUyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pFLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsS0FBSyxFQUNMLGdCQUFnQixFQUNoQixtQkFBbUIsR0FDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakQsT0FBTyxFQUlMLFdBQVcsR0FDWixN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
|
|
244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFFTCxvQkFBb0IsRUFDcEIsMkJBQTJCLEdBRTVCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLHdCQUF3QixFQUN4Qix1QkFBdUIsRUFDdkIsWUFBWSxFQUNaLGVBQWUsRUFDZixpQkFBaUIsR0FDbEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxTQUFTLE1BQU0scUNBQXFDLENBQUM7QUFDakUsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsS0FBSyxFQUNMLGdCQUFnQixFQUNoQixtQkFBbUIsR0FDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FB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
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-safe serialization format utilities.
|
|
3
|
+
*
|
|
4
|
+
* This module contains the format prefix handling, generic hydrate/dehydrate
|
|
5
|
+
* dispatch, and shared types/classes used by all environments (runtime, web
|
|
6
|
+
* o11y, CLI o11y). It has NO Node.js dependencies.
|
|
7
|
+
*/
|
|
8
|
+
export declare const SerializationFormat: {
|
|
9
|
+
/** devalue stringify/parse with TextEncoder/TextDecoder */
|
|
10
|
+
readonly DEVALUE_V1: "devl";
|
|
11
|
+
};
|
|
12
|
+
export type SerializationFormatType = (typeof SerializationFormat)[keyof typeof SerializationFormat];
|
|
13
|
+
/**
|
|
14
|
+
* Encode a payload with a format prefix.
|
|
15
|
+
*/
|
|
16
|
+
export declare function encodeWithFormatPrefix(format: SerializationFormatType, payload: Uint8Array | unknown): Uint8Array | unknown;
|
|
17
|
+
/**
|
|
18
|
+
* Decode a format-prefixed payload.
|
|
19
|
+
*/
|
|
20
|
+
export declare function decodeFormatPrefix(data: Uint8Array | unknown): {
|
|
21
|
+
format: SerializationFormatType;
|
|
22
|
+
payload: Uint8Array;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* A map of type name → reviver function, used by devalue's `parse`/`unflatten`.
|
|
26
|
+
* Each environment (runtime, web, CLI) provides its own set.
|
|
27
|
+
*/
|
|
28
|
+
export type Revivers = Record<string, (value: any) => any>;
|
|
29
|
+
/**
|
|
30
|
+
* Hydrate (deserialize) a value that was stored in the database.
|
|
31
|
+
*
|
|
32
|
+
* Handles three data shapes:
|
|
33
|
+
* 1. `Uint8Array` with a format prefix (specVersion 2+) → decode prefix, parse
|
|
34
|
+
* 2. `Array` (legacy specVersion 1, "revived devalue") → unflatten
|
|
35
|
+
* 3. Other (already a plain JS value) → return as-is
|
|
36
|
+
*/
|
|
37
|
+
export declare function hydrateData(value: unknown, revivers: Revivers): unknown;
|
|
38
|
+
/** Marker for stream reference objects rendered as links in the UI */
|
|
39
|
+
export declare const STREAM_REF_TYPE = "__workflow_stream_ref__";
|
|
40
|
+
/** A stream reference for UI display */
|
|
41
|
+
export interface StreamRef {
|
|
42
|
+
__type: typeof STREAM_REF_TYPE;
|
|
43
|
+
streamId: string;
|
|
44
|
+
}
|
|
45
|
+
/** Marker for custom class instance references */
|
|
46
|
+
export declare const CLASS_INSTANCE_REF_TYPE = "__workflow_class_instance_ref__";
|
|
47
|
+
/**
|
|
48
|
+
* A class instance reference for o11y display.
|
|
49
|
+
*
|
|
50
|
+
* Browser-safe base class — no `util.inspect.custom`. Environment-specific
|
|
51
|
+
* rendering (CLI inspect, web component) is handled by each consumer.
|
|
52
|
+
*/
|
|
53
|
+
export declare class ClassInstanceRef {
|
|
54
|
+
readonly className: string;
|
|
55
|
+
readonly classId: string;
|
|
56
|
+
readonly data: unknown;
|
|
57
|
+
readonly __type = "__workflow_class_instance_ref__";
|
|
58
|
+
constructor(className: string, classId: string, data: unknown);
|
|
59
|
+
toJSON(): {
|
|
60
|
+
__type: string;
|
|
61
|
+
className: string;
|
|
62
|
+
classId: string;
|
|
63
|
+
data: unknown;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/** Check if a value is a ClassInstanceRef object */
|
|
67
|
+
export declare const isClassInstanceRef: (value: unknown) => value is ClassInstanceRef;
|
|
68
|
+
/** Check if a value is a stream ID string */
|
|
69
|
+
export declare const isStreamId: (value: unknown) => boolean;
|
|
70
|
+
/** Check if a value is a StreamRef object */
|
|
71
|
+
export declare const isStreamRef: (value: unknown) => value is StreamRef;
|
|
72
|
+
/**
|
|
73
|
+
* Convert a serialized stream value to a StreamRef for display.
|
|
74
|
+
*/
|
|
75
|
+
export declare const streamToStreamRef: (value: any) => StreamRef;
|
|
76
|
+
/** Convert a serialized step function to a display string */
|
|
77
|
+
export declare const serializedStepFunctionToString: (value: unknown) => string;
|
|
78
|
+
/** Extract the class name from a classId */
|
|
79
|
+
export declare const extractClassName: (classId: string) => string;
|
|
80
|
+
/** Convert a serialized class instance to a ClassInstanceRef for display */
|
|
81
|
+
export declare const serializedInstanceToRef: (value: {
|
|
82
|
+
classId: string;
|
|
83
|
+
data: unknown;
|
|
84
|
+
}) => ClassInstanceRef;
|
|
85
|
+
/** Convert a serialized class reference to a display string */
|
|
86
|
+
export declare const serializedClassToString: (value: {
|
|
87
|
+
classId: string;
|
|
88
|
+
}) => string;
|
|
89
|
+
/**
|
|
90
|
+
* Standard o11y revivers that override runtime-specific types with
|
|
91
|
+
* display-friendly values. Used by both web and CLI hydration.
|
|
92
|
+
*/
|
|
93
|
+
export declare const observabilityRevivers: Revivers;
|
|
94
|
+
/**
|
|
95
|
+
* Hydrate the serialized data fields of any resource for o11y display.
|
|
96
|
+
*
|
|
97
|
+
* Dispatches by resource type (step, hook, event, workflow) and calls
|
|
98
|
+
* `hydrateData` with the provided revivers for each data field.
|
|
99
|
+
*
|
|
100
|
+
* Each environment (web, CLI) provides its own revivers — this function
|
|
101
|
+
* only handles the dispatch logic and field mapping.
|
|
102
|
+
*/
|
|
103
|
+
export declare function hydrateResourceIO<T extends {
|
|
104
|
+
stepId?: string;
|
|
105
|
+
hookId?: string;
|
|
106
|
+
eventId?: string;
|
|
107
|
+
input?: any;
|
|
108
|
+
output?: any;
|
|
109
|
+
metadata?: any;
|
|
110
|
+
eventData?: any;
|
|
111
|
+
executionContext?: any;
|
|
112
|
+
}>(resource: T, revivers: Revivers): T;
|
|
113
|
+
/** Extract all stream IDs from a value (recursively traverses objects/arrays) */
|
|
114
|
+
export declare function extractStreamIds(obj: unknown): string[];
|
|
115
|
+
/** Truncate a string to a maximum length, adding ellipsis if needed */
|
|
116
|
+
export declare function truncateId(id: string, maxLength?: number): string;
|
|
117
|
+
//# sourceMappingURL=serialization-format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialization-format.d.ts","sourceRoot":"","sources":["../src/serialization-format.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,eAAO,MAAM,mBAAmB;IAC9B,2DAA2D;;CAEnD,CAAC;AAEX,MAAM,MAAM,uBAAuB,GACjC,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,OAAO,mBAAmB,CAAC,CAAC;AAQjE;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,uBAAuB,EAC/B,OAAO,EAAE,UAAU,GAAG,OAAO,GAC5B,UAAU,GAAG,OAAO,CAgBtB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG;IAC9D,MAAM,EAAE,uBAAuB,CAAC;IAChC,OAAO,EAAE,UAAU,CAAC;CACrB,CA0BA;AAMD;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;AAM3D;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAgBvE;AAQD,sEAAsE;AACtE,eAAO,MAAM,eAAe,4BAA4B,CAAC;AAEzD,wCAAwC;AACxC,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,OAAO,eAAe,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,kDAAkD;AAClD,eAAO,MAAM,uBAAuB,oCAAoC,CAAC;AAEzE;;;;;GAKG;AACH,qBAAa,gBAAgB;aAIT,SAAS,EAAE,MAAM;aACjB,OAAO,EAAE,MAAM;aACf,IAAI,EAAE,OAAO;IAL/B,QAAQ,CAAC,MAAM,qCAA2B;gBAGxB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,OAAO;IAG/B,MAAM,IAAI;QACR,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,OAAO,CAAC;KACf;CAQF;AAED,oDAAoD;AACpD,eAAO,MAAM,kBAAkB,GAC7B,OAAO,OAAO,KACb,KAAK,IAAI,gBAUX,CAAC;AAEF,6CAA6C;AAC7C,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,OAE3C,CAAC;AAEF,6CAA6C;AAC7C,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,SASrD,CAAC;AAMF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,GAAG,KAAG,SAa9C,CAAC;AAEF,6DAA6D;AAC7D,eAAO,MAAM,8BAA8B,GAAI,OAAO,OAAO,KAAG,MAO/D,CAAC;AAEF,4CAA4C;AAC5C,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,KAAG,MAIlD,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,uBAAuB,GAAI,OAAO;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf,KAAG,gBAMH,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,uBAAuB,GAAI,OAAO;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,KAAG,MAEpE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAOnC,CAAC;AAkHF;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,CAAC,SAAS;IACR,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,gBAAgB,CAAC,EAAE,GAAG,CAAC;CACxB,EACD,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,CAAC,CA8BpC;AAMD,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAmBvD;AAED,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,SAAK,GAAG,MAAM,CAG7D"}
|