@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.
Files changed (48) hide show
  1. package/dist/private.d.ts.map +1 -1
  2. package/dist/private.js +43 -2
  3. package/dist/runtime/helpers.d.ts +21 -0
  4. package/dist/runtime/helpers.d.ts.map +1 -1
  5. package/dist/runtime/helpers.js +91 -4
  6. package/dist/runtime/step-handler.d.ts.map +1 -1
  7. package/dist/runtime/step-handler.js +53 -29
  8. package/dist/runtime.d.ts +1 -1
  9. package/dist/runtime.d.ts.map +1 -1
  10. package/dist/runtime.js +160 -134
  11. package/dist/serialization-format.d.ts +117 -0
  12. package/dist/serialization-format.d.ts.map +1 -0
  13. package/dist/serialization-format.js +363 -0
  14. package/dist/serialization.d.ts.map +1 -1
  15. package/dist/serialization.js +67 -18
  16. package/dist/types.d.ts +11 -0
  17. package/dist/types.d.ts.map +1 -1
  18. package/dist/types.js +62 -1
  19. package/dist/version.d.ts +1 -1
  20. package/dist/version.js +1 -1
  21. package/docs/api-reference/create-hook.mdx +7 -0
  22. package/docs/api-reference/create-webhook.mdx +6 -0
  23. package/docs/api-reference/define-hook.mdx +6 -0
  24. package/docs/api-reference/fatal-error.mdx +6 -0
  25. package/docs/api-reference/fetch.mdx +6 -0
  26. package/docs/api-reference/get-step-metadata.mdx +4 -0
  27. package/docs/api-reference/get-workflow-metadata.mdx +4 -0
  28. package/docs/api-reference/get-writable.mdx +4 -0
  29. package/docs/api-reference/index.mdx +7 -0
  30. package/docs/api-reference/retryable-error.mdx +6 -0
  31. package/docs/api-reference/sleep.mdx +6 -0
  32. package/docs/foundations/common-patterns.mdx +7 -0
  33. package/docs/foundations/errors-and-retries.mdx +7 -0
  34. package/docs/foundations/hooks.mdx +8 -0
  35. package/docs/foundations/idempotency.mdx +6 -0
  36. package/docs/foundations/index.mdx +5 -0
  37. package/docs/foundations/serialization.mdx +6 -0
  38. package/docs/foundations/starting-workflows.mdx +6 -0
  39. package/docs/foundations/streaming.mdx +7 -0
  40. package/docs/foundations/workflows-and-steps.mdx +7 -0
  41. package/docs/how-it-works/code-transform.mdx +6 -0
  42. package/docs/how-it-works/event-sourcing.mdx +6 -0
  43. package/docs/how-it-works/framework-integrations.mdx +6 -0
  44. package/docs/how-it-works/understanding-directives.mdx +6 -0
  45. package/package.json +9 -10
  46. package/dist/observability.d.ts +0 -84
  47. package/dist/observability.d.ts.map +0 -1
  48. 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
- let workflowStartedAt = -1;
68
- try {
69
- let workflowRun = await world.runs.get(runId);
70
- if (workflowRun.status === 'pending') {
71
- // Transition run to 'running' via event (event-sourced architecture)
72
- const result = await world.events.create(runId, {
73
- eventType: 'run_started',
74
- specVersion: SPEC_VERSION_CURRENT,
75
- });
76
- // Use the run entity from the event response (no extra get call needed)
77
- if (!result.run) {
78
- throw new WorkflowRuntimeError(`Event creation for 'run_started' did not return the run entity for run "${runId}"`);
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
- workflowRun = result.run;
81
- }
82
- // At this point, the workflow is "running" and `startedAt` should
83
- // definitely be set.
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
- const result = await handleSuspension({
156
- suspension: err,
157
- world,
158
- runId,
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 (result.timeoutSeconds !== undefined) {
164
- return { timeoutSeconds: result.timeoutSeconds };
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
- else {
168
- // NOTE: this error could be an error thrown in user code, or could also be a WorkflowRuntimeError
169
- // (for instance when the event log is corrupted, this is thrown by the event consumer). We could
170
- // specially handle these if needed.
171
- // Record exception for OTEL error tracking
172
- if (err instanceof Error) {
173
- span?.recordException?.(err);
174
- }
175
- const errorName = getErrorName(err);
176
- const errorMessage = err instanceof Error ? err.message : String(err);
177
- let errorStack = getErrorStack(err);
178
- // Remap error stack using source maps to show original source locations
179
- if (errorStack) {
180
- const parsedName = parseWorkflowName(workflowName);
181
- const filename = parsedName?.moduleSpecifier || workflowName;
182
- errorStack = remapErrorStack(errorStack, filename, workflowCode);
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
- runtimeLogger.error('Error while running workflow', {
185
- workflowRunId: runId,
186
- errorName,
187
- errorStack,
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
- // Fail the workflow run via event (event-sourced architecture)
137
+ // Complete the workflow run via event (event-sourced architecture)
190
138
  await world.events.create(runId, {
191
- eventType: 'run_failed',
139
+ eventType: 'run_completed',
192
140
  specVersion: SPEC_VERSION_CURRENT,
193
141
  eventData: {
194
- error: {
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('failed'),
203
- ...Attribute.WorkflowErrorName(errorName),
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"}