@workflow/core 4.2.0-beta.69 → 4.2.0-beta.71

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/runtime.js CHANGED
@@ -4,12 +4,12 @@ import { SPEC_VERSION_CURRENT, WorkflowInvokePayloadSchema, } from '@workflow/wo
4
4
  import { importKey } from './encryption.js';
5
5
  import { WorkflowSuspension } from './global.js';
6
6
  import { runtimeLogger } from './logger.js';
7
- import { getAllWorkflowRunEvents, getQueueOverhead, getWorkflowQueueName, handleHealthCheckMessage, parseHealthCheckPayload, queueMessage, withHealthCheck, withThrottleRetry, } from './runtime/helpers.js';
7
+ import { getAllWorkflowRunEvents, getQueueOverhead, handleHealthCheckMessage, parseHealthCheckPayload, withHealthCheck, } from './runtime/helpers.js';
8
8
  import { handleSuspension } from './runtime/suspension-handler.js';
9
9
  import { getWorld, getWorldHandlers } from './runtime/world.js';
10
10
  import { remapErrorStack } from './source-map.js';
11
11
  import * as Attribute from './telemetry/semantic-conventions.js';
12
- import { linkToCurrentContext, serializeTraceCarrier, trace, withTraceContext, withWorkflowBaggage, } from './telemetry.js';
12
+ import { linkToCurrentContext, trace, withTraceContext, withWorkflowBaggage, } from './telemetry.js';
13
13
  import { getErrorName, getErrorStack, normalizeUnknownError } from './types.js';
14
14
  import { buildWorkflowSuspensionMessage } from './util.js';
15
15
  import { runWorkflow } from './workflow.js';
@@ -40,7 +40,8 @@ export function workflowEntrypoint(workflowCode) {
40
40
  await handleHealthCheckMessage(healthCheck, 'workflow');
41
41
  return;
42
42
  }
43
- const { runId, traceCarrier: traceContext, requestedAt, serverErrorRetryCount, } = WorkflowInvokePayloadSchema.parse(message_);
43
+ const { runId, traceCarrier: traceContext, requestedAt, } = WorkflowInvokePayloadSchema.parse(message_);
44
+ const { requestId } = metadata;
44
45
  // Extract the workflow name from the topic name
45
46
  const workflowName = metadata.queueName.slice('__wkf_workflow_'.length);
46
47
  const spanLinks = await linkToCurrentContext();
@@ -65,229 +66,249 @@ export function workflowEntrypoint(workflowCode) {
65
66
  ...Attribute.WorkflowRunId(runId),
66
67
  ...Attribute.WorkflowTracePropagated(!!traceContext),
67
68
  });
68
- return await withThrottleRetry(async () => {
69
- let workflowStartedAt = -1;
70
- let workflowRun = await world.runs.get(runId);
71
- try {
72
- if (workflowRun.status === 'pending') {
73
- // Transition run to 'running' via event (event-sourced architecture)
74
- const result = await world.events.create(runId, {
75
- eventType: 'run_started',
76
- specVersion: SPEC_VERSION_CURRENT,
77
- });
78
- // Use the run entity from the event response (no extra get call needed)
79
- if (!result.run) {
80
- throw new WorkflowRuntimeError(`Event creation for 'run_started' did not return the run entity for run "${runId}"`);
81
- }
82
- workflowRun = result.run;
83
- }
84
- // At this point, the workflow is "running" and `startedAt` should
85
- // definitely be set.
86
- if (!workflowRun.startedAt) {
87
- throw new WorkflowRuntimeError(`Workflow run "${runId}" has no "startedAt" timestamp`);
88
- }
89
- workflowStartedAt = +workflowRun.startedAt;
90
- span?.setAttributes({
91
- ...Attribute.WorkflowRunStatus(workflowRun.status),
92
- ...Attribute.WorkflowStartedAt(workflowStartedAt),
93
- });
94
- if (workflowRun.status !== 'running') {
95
- // Workflow has already completed or failed, so we can skip it
96
- runtimeLogger.info('Workflow already completed or failed, skipping', {
97
- workflowRunId: runId,
98
- status: workflowRun.status,
99
- });
100
- // TODO: for `cancel`, we actually want to propagate a WorkflowCancelled event
101
- // inside the workflow context so the user can gracefully exit. this is SIGTERM
102
- // TODO: furthermore, there should be a timeout or a way to force cancel SIGKILL
103
- // so that we actually exit here without replaying the workflow at all, in the case
104
- // the replaying the workflow is itself failing.
105
- return;
106
- }
107
- // Load all events into memory before running
108
- const events = await getAllWorkflowRunEvents(workflowRun.runId);
109
- // Check for any elapsed waits and create wait_completed events
110
- const now = Date.now();
111
- // Pre-compute completed correlation IDs for O(n) lookup instead of O(n²)
112
- const completedWaitIds = new Set(events
113
- .filter((e) => e.eventType === 'wait_completed')
114
- .map((e) => e.correlationId));
115
- // Collect all waits that need completion
116
- const waitsToComplete = events
117
- .filter((e) => e.eventType === 'wait_created' &&
118
- e.correlationId !== undefined &&
119
- !completedWaitIds.has(e.correlationId) &&
120
- now >= e.eventData.resumeAt.getTime())
121
- .map((e) => ({
122
- eventType: 'wait_completed',
69
+ let workflowStartedAt = -1;
70
+ let workflowRun = await world.runs.get(runId);
71
+ // --- Infrastructure: prepare the run state ---
72
+ // Network/server errors propagate to the queue handler for retry.
73
+ // WorkflowRuntimeError (data integrity issues) are fatal and
74
+ // produce run_failed since retrying won't fix them.
75
+ try {
76
+ if (workflowRun.status === 'pending') {
77
+ // Transition run to 'running' via event (event-sourced architecture)
78
+ const result = await world.events.create(runId, {
79
+ eventType: 'run_started',
123
80
  specVersion: SPEC_VERSION_CURRENT,
124
- correlationId: e.correlationId,
125
- }));
126
- // Create all wait_completed events
127
- for (const waitEvent of waitsToComplete) {
128
- try {
129
- const result = await world.events.create(runId, waitEvent);
130
- // Add the event to the events array so the workflow can see it
131
- events.push(result.event);
132
- }
133
- catch (err) {
134
- if (WorkflowAPIError.is(err) && err.status === 409) {
135
- runtimeLogger.info('Wait already completed, skipping', {
136
- workflowRunId: runId,
137
- correlationId: waitEvent.correlationId,
138
- });
139
- continue;
140
- }
141
- throw err;
142
- }
81
+ }, { requestId });
82
+ // Use the run entity from the event response (no extra get call needed)
83
+ if (!result.run) {
84
+ throw new WorkflowRuntimeError(`Event creation for 'run_started' did not return the run entity for run "${runId}"`);
143
85
  }
144
- const result = await trace('workflow.replay', {}, async (replaySpan) => {
145
- replaySpan?.setAttributes({
146
- ...Attribute.WorkflowEventsCount(events.length),
147
- });
148
- // Resolve the encryption key for this run's deployment
149
- const rawKey = await world.getEncryptionKeyForRun?.(workflowRun);
150
- const encryptionKey = rawKey
151
- ? await importKey(rawKey)
152
- : undefined;
153
- return await runWorkflow(workflowCode, workflowRun, events, encryptionKey);
154
- });
155
- // Complete the workflow run via event (event-sourced architecture)
86
+ workflowRun = result.run;
87
+ }
88
+ // At this point, the workflow is "running" and `startedAt` should
89
+ // definitely be set.
90
+ if (!workflowRun.startedAt) {
91
+ throw new WorkflowRuntimeError(`Workflow run "${runId}" has no "startedAt" timestamp`);
92
+ }
93
+ }
94
+ catch (err) {
95
+ // 409/410: run was concurrently completed/failed/cancelled
96
+ // between the GET and the run_started event creation
97
+ if (WorkflowAPIError.is(err) &&
98
+ (err.status === 409 || err.status === 410)) {
99
+ runtimeLogger.info('Run already finished during setup, skipping', { workflowRunId: runId, message: err.message });
100
+ return;
101
+ }
102
+ if (err instanceof WorkflowRuntimeError) {
103
+ runtimeLogger.error('Fatal runtime error during workflow setup', { workflowRunId: runId, error: err.message });
156
104
  try {
157
105
  await world.events.create(runId, {
158
- eventType: 'run_completed',
106
+ eventType: 'run_failed',
159
107
  specVersion: SPEC_VERSION_CURRENT,
160
108
  eventData: {
161
- output: result,
109
+ error: {
110
+ message: err.message,
111
+ stack: err.stack,
112
+ },
162
113
  },
163
- });
114
+ }, { requestId });
164
115
  }
165
- catch (err) {
166
- if (WorkflowAPIError.is(err) &&
167
- (err.status === 409 || err.status === 410)) {
168
- runtimeLogger.warn('Tried completing workflow run, but run has already finished.', {
169
- workflowRunId: runId,
170
- message: err.message,
171
- });
116
+ catch (failErr) {
117
+ if (WorkflowAPIError.is(failErr) &&
118
+ (failErr.status === 409 || failErr.status === 410)) {
172
119
  return;
173
120
  }
174
- else {
175
- throw err;
176
- }
121
+ throw failErr;
177
122
  }
178
- span?.setAttributes({
179
- ...Attribute.WorkflowRunStatus('completed'),
180
- ...Attribute.WorkflowEventsCount(events.length),
123
+ return;
124
+ }
125
+ throw err;
126
+ }
127
+ workflowStartedAt = +workflowRun.startedAt;
128
+ span?.setAttributes({
129
+ ...Attribute.WorkflowRunStatus(workflowRun.status),
130
+ ...Attribute.WorkflowStartedAt(workflowStartedAt),
131
+ });
132
+ if (workflowRun.status !== 'running') {
133
+ // Workflow has already completed or failed, so we can skip it
134
+ runtimeLogger.info('Workflow already completed or failed, skipping', {
135
+ workflowRunId: runId,
136
+ status: workflowRun.status,
137
+ });
138
+ // TODO: for `cancel`, we actually want to propagate a WorkflowCancelled event
139
+ // inside the workflow context so the user can gracefully exit. this is SIGTERM
140
+ // TODO: furthermore, there should be a timeout or a way to force cancel SIGKILL
141
+ // so that we actually exit here without replaying the workflow at all, in the case
142
+ // the replaying the workflow is itself failing.
143
+ return;
144
+ }
145
+ // Load all events into memory before running
146
+ const events = await getAllWorkflowRunEvents(workflowRun.runId);
147
+ // Check for any elapsed waits and create wait_completed events
148
+ const now = Date.now();
149
+ // Pre-compute completed correlation IDs for O(n) lookup instead of O(n²)
150
+ const completedWaitIds = new Set(events
151
+ .filter((e) => e.eventType === 'wait_completed')
152
+ .map((e) => e.correlationId));
153
+ // Collect all waits that need completion
154
+ const waitsToComplete = events
155
+ .filter((e) => e.eventType === 'wait_created' &&
156
+ e.correlationId !== undefined &&
157
+ !completedWaitIds.has(e.correlationId) &&
158
+ now >= e.eventData.resumeAt.getTime())
159
+ .map((e) => ({
160
+ eventType: 'wait_completed',
161
+ specVersion: SPEC_VERSION_CURRENT,
162
+ correlationId: e.correlationId,
163
+ }));
164
+ // Create all wait_completed events
165
+ for (const waitEvent of waitsToComplete) {
166
+ try {
167
+ const result = await world.events.create(runId, waitEvent, {
168
+ requestId,
181
169
  });
170
+ // Add the event to the events array so the workflow can see it
171
+ events.push(result.event);
182
172
  }
183
173
  catch (err) {
184
- if (WorkflowSuspension.is(err)) {
185
- const suspensionMessage = buildWorkflowSuspensionMessage(runId, err.stepCount, err.hookCount, err.waitCount);
186
- if (suspensionMessage) {
187
- runtimeLogger.debug(suspensionMessage);
188
- }
189
- const result = await handleSuspension({
190
- suspension: err,
191
- world,
192
- run: workflowRun,
193
- span,
174
+ if (WorkflowAPIError.is(err) && err.status === 409) {
175
+ runtimeLogger.info('Wait already completed, skipping', {
176
+ workflowRunId: runId,
177
+ correlationId: waitEvent.correlationId,
194
178
  });
195
- if (result.timeoutSeconds !== undefined) {
196
- return { timeoutSeconds: result.timeoutSeconds };
197
- }
179
+ continue;
198
180
  }
199
- else {
200
- // Retry server errors (5xx) with exponential backoff before failing the run
201
- if (WorkflowAPIError.is(err) &&
202
- err.status !== undefined &&
203
- err.status >= 500) {
204
- const retryCount = serverErrorRetryCount ?? 0;
205
- const delaySecondSteps = [5, 30, 120]; // 5s, 30s, 120s
206
- if (retryCount < delaySecondSteps.length) {
207
- runtimeLogger.warn('Server error (5xx), re-enqueueing workflow with backoff', {
208
- workflowRunId: runId,
209
- retryCount,
210
- delaySeconds: delaySecondSteps[retryCount],
211
- error: err.message,
212
- });
213
- await queueMessage(world, getWorkflowQueueName(workflowName), {
214
- runId,
215
- serverErrorRetryCount: retryCount + 1,
216
- traceCarrier: await serializeTraceCarrier(),
217
- requestedAt: new Date(),
218
- }, { delaySeconds: delaySecondSteps[retryCount] });
219
- return; // Don't fail the run, retry later
220
- }
221
- // Fall through to run_failed after exhausting retries
222
- }
223
- else if (WorkflowAPIError.is(err) &&
224
- err.status === 429) {
225
- // Throw to let withThrottleRetry handle it
226
- throw err;
227
- }
228
- // NOTE: this error could be an error thrown in user code, or could also be a WorkflowRuntimeError
229
- // (for instance when the event log is corrupted, this is thrown by the event consumer). We could
230
- // specially handle these if needed.
231
- // Record exception for OTEL error tracking
232
- if (err instanceof Error) {
233
- span?.recordException?.(err);
234
- }
235
- const normalizedError = await normalizeUnknownError(err);
236
- const errorName = normalizedError.name || getErrorName(err);
237
- const errorMessage = normalizedError.message;
238
- let errorStack = normalizedError.stack || getErrorStack(err);
239
- // Remap error stack using source maps to show original source locations
240
- if (errorStack) {
241
- const parsedName = parseWorkflowName(workflowName);
242
- const filename = parsedName?.moduleSpecifier || workflowName;
243
- errorStack = remapErrorStack(errorStack, filename, workflowCode);
244
- }
245
- runtimeLogger.error('Error while running workflow', {
181
+ throw err;
182
+ }
183
+ }
184
+ // Resolve the encryption key for this run's deployment
185
+ const rawKey = await world.getEncryptionKeyForRun?.(workflowRun);
186
+ const encryptionKey = rawKey
187
+ ? await importKey(rawKey)
188
+ : undefined;
189
+ // --- User code execution ---
190
+ // Only errors from runWorkflow() (user workflow code) should
191
+ // produce run_failed. Infrastructure errors (network, server)
192
+ // must propagate to the queue handler for automatic retry.
193
+ let workflowResult;
194
+ try {
195
+ workflowResult = await trace('workflow.replay', {}, async (replaySpan) => {
196
+ replaySpan?.setAttributes({
197
+ ...Attribute.WorkflowEventsCount(events.length),
198
+ });
199
+ return await runWorkflow(workflowCode, workflowRun, events, encryptionKey);
200
+ });
201
+ }
202
+ catch (err) {
203
+ // WorkflowSuspension is normal control flow not an error
204
+ if (WorkflowSuspension.is(err)) {
205
+ const suspensionMessage = buildWorkflowSuspensionMessage(runId, err.stepCount, err.hookCount, err.waitCount);
206
+ if (suspensionMessage) {
207
+ runtimeLogger.debug(suspensionMessage);
208
+ }
209
+ const result = await handleSuspension({
210
+ suspension: err,
211
+ world,
212
+ run: workflowRun,
213
+ span,
214
+ requestId,
215
+ });
216
+ if (result.timeoutSeconds !== undefined) {
217
+ return { timeoutSeconds: result.timeoutSeconds };
218
+ }
219
+ // Suspension handled, no further work needed
220
+ return;
221
+ }
222
+ // This is a user code error or a WorkflowRuntimeError
223
+ // (e.g., corrupted event log). Fail the workflow run.
224
+ // Record exception for OTEL error tracking
225
+ if (err instanceof Error) {
226
+ span?.recordException?.(err);
227
+ }
228
+ const normalizedError = await normalizeUnknownError(err);
229
+ const errorName = normalizedError.name || getErrorName(err);
230
+ const errorMessage = normalizedError.message;
231
+ let errorStack = normalizedError.stack || getErrorStack(err);
232
+ // Remap error stack using source maps to show original source locations
233
+ if (errorStack) {
234
+ const parsedName = parseWorkflowName(workflowName);
235
+ const filename = parsedName?.moduleSpecifier || workflowName;
236
+ errorStack = remapErrorStack(errorStack, filename, workflowCode);
237
+ }
238
+ runtimeLogger.error('Error while running workflow', {
239
+ workflowRunId: runId,
240
+ errorName,
241
+ errorStack,
242
+ });
243
+ // Fail the workflow run via event (event-sourced architecture)
244
+ try {
245
+ await world.events.create(runId, {
246
+ eventType: 'run_failed',
247
+ specVersion: SPEC_VERSION_CURRENT,
248
+ eventData: {
249
+ error: {
250
+ message: errorMessage,
251
+ stack: errorStack,
252
+ },
253
+ // TODO: include error codes when we define them
254
+ },
255
+ }, { requestId });
256
+ }
257
+ catch (failErr) {
258
+ if (WorkflowAPIError.is(failErr) &&
259
+ (failErr.status === 409 || failErr.status === 410)) {
260
+ runtimeLogger.info('Tried failing workflow run, but run has already finished.', {
246
261
  workflowRunId: runId,
247
- errorName,
248
- errorStack,
262
+ message: failErr.message,
249
263
  });
250
- // Fail the workflow run via event (event-sourced architecture)
251
- try {
252
- await world.events.create(runId, {
253
- eventType: 'run_failed',
254
- specVersion: SPEC_VERSION_CURRENT,
255
- eventData: {
256
- error: {
257
- message: errorMessage,
258
- stack: errorStack,
259
- },
260
- // TODO: include error codes when we define them
261
- },
262
- });
263
- }
264
- catch (err) {
265
- if (WorkflowAPIError.is(err) &&
266
- (err.status === 409 || err.status === 410)) {
267
- runtimeLogger.warn('Tried failing workflow run, but run has already finished.', {
268
- workflowRunId: runId,
269
- message: err.message,
270
- });
271
- span?.setAttributes({
272
- ...Attribute.WorkflowErrorName(errorName),
273
- ...Attribute.WorkflowErrorMessage(errorMessage),
274
- ...Attribute.ErrorType(errorName),
275
- });
276
- return;
277
- }
278
- else {
279
- throw err;
280
- }
281
- }
282
264
  span?.setAttributes({
283
- ...Attribute.WorkflowRunStatus('failed'),
284
265
  ...Attribute.WorkflowErrorName(errorName),
285
266
  ...Attribute.WorkflowErrorMessage(errorMessage),
286
267
  ...Attribute.ErrorType(errorName),
287
268
  });
269
+ return;
288
270
  }
271
+ else {
272
+ throw failErr;
273
+ }
274
+ }
275
+ span?.setAttributes({
276
+ ...Attribute.WorkflowRunStatus('failed'),
277
+ ...Attribute.WorkflowErrorName(errorName),
278
+ ...Attribute.WorkflowErrorMessage(errorMessage),
279
+ ...Attribute.ErrorType(errorName),
280
+ });
281
+ return;
282
+ }
283
+ // --- Infrastructure: complete the run ---
284
+ // This is outside the user-code try/catch so that failures
285
+ // here (e.g., network errors) propagate to the queue handler.
286
+ try {
287
+ await world.events.create(runId, {
288
+ eventType: 'run_completed',
289
+ specVersion: SPEC_VERSION_CURRENT,
290
+ eventData: {
291
+ output: workflowResult,
292
+ },
293
+ }, { requestId });
294
+ }
295
+ catch (err) {
296
+ if (WorkflowAPIError.is(err) &&
297
+ (err.status === 409 || err.status === 410)) {
298
+ runtimeLogger.info('Tried completing workflow run, but run has already finished.', {
299
+ workflowRunId: runId,
300
+ message: err.message,
301
+ });
302
+ return;
289
303
  }
290
- }); // End withThrottleRetry
304
+ else {
305
+ throw err;
306
+ }
307
+ }
308
+ span?.setAttributes({
309
+ ...Attribute.WorkflowRunStatus('completed'),
310
+ ...Attribute.WorkflowEventsCount(events.length),
311
+ });
291
312
  }); // End trace
292
313
  }); // End withWorkflowBaggage
293
314
  }); // End withTraceContext
@@ -297,4 +318,4 @@ export function workflowEntrypoint(workflowCode) {
297
318
  // this is a no-op placeholder as the client is
298
319
  // expecting this to be present but we aren't actually using it
299
320
  export function runStep() { }
300
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFFTCxvQkFBb0IsRUFDcEIsMkJBQTJCLEdBRTVCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsdUJBQXVCLEVBQ3ZCLFlBQVksRUFDWixlQUFlLEVBQ2YsaUJBQWlCLEdBQ2xCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssU0FBUyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pFLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLEtBQUssRUFDTCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEdBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sV0FBVyxD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
321
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFFTCxvQkFBb0IsRUFDcEIsMkJBQTJCLEdBRTVCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsZ0JBQWdCLEVBQ2hCLHdCQUF3QixFQUN4Qix1QkFBdUIsRUFDdkIsZUFBZSxHQUNoQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEQsT0FBTyxLQUFLLFNBQVMsTUFBTSxxQ0FBcUMsQ0FBQztBQUNqRSxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLEtBQUssRUFDTCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEdBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFH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
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const version = "4.2.0-beta.69";
1
+ export declare const version = "4.2.0-beta.71";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // Generated by genversion.
2
- export const version = '4.2.0-beta.69';
2
+ export const version = '4.2.0-beta.71';
3
3
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQjtBQUMzQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFBIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAkEjD,wBAAsB,WAAW,CAC/B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,KAAK,EAAE,EACf,aAAa,EAAE,SAAS,GAAG,SAAS,GACnC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,CAwqB/B"}
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAkEjD,wBAAsB,WAAW,CAC/B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,KAAK,EAAE,EACf,aAAa,EAAE,SAAS,GAAG,SAAS,GACnC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,CAurB/B"}