@workflow/core 4.1.0-beta.60 → 4.1.0-beta.62

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/workflow.js CHANGED
@@ -6,7 +6,8 @@ import { parseWorkflowName } from '@workflow/utils/parse-name';
6
6
  import * as nanoid from 'nanoid';
7
7
  import { monotonicFactory } from 'ulid';
8
8
  import { EventConsumerResult, EventsConsumer } from './events-consumer.js';
9
- import { ENOTSUP } from './global.js';
9
+ import { ENOTSUP, WorkflowSuspension } from './global.js';
10
+ import { runtimeLogger } from './logger.js';
10
11
  import { dehydrateWorkflowReturnValue, hydrateWorkflowArguments, } from './serialization.js';
11
12
  import { createUseStep } from './step.js';
12
13
  import { BODY_INIT_SYMBOL, STABLE_ULID, WORKFLOW_CREATE_HOOK, WORKFLOW_GET_STREAM_ID, WORKFLOW_SLEEP, WORKFLOW_USE_STEP, } from './symbols.js';
@@ -17,6 +18,33 @@ import { createContext } from './vm/index.js';
17
18
  import { WORKFLOW_CONTEXT_SYMBOL } from './workflow/get-workflow-metadata.js';
18
19
  import { createCreateHook } from './workflow/hook.js';
19
20
  import { createSleep } from './workflow/sleep.js';
21
+ /**
22
+ * Logs a warning when a workflow run completes or fails with uncommitted
23
+ * operations still in the invocations queue. This typically indicates the
24
+ * user forgot to `await` a step, hook, or sleep call.
25
+ */
26
+ function warnPendingQueueItems(runId, pendingQueue, outcome) {
27
+ // Filter out hooks that are either already created (alive, waiting for payloads)
28
+ // or explicitly disposed — both are benign since the backend auto-disposes
29
+ // all hooks when a run reaches a terminal state
30
+ const items = [...pendingQueue.values()].filter((item) => !(item.type === 'hook' && (item.hasCreatedEvent || item.disposed)));
31
+ if (items.length === 0)
32
+ return;
33
+ const details = items.map((item) => {
34
+ switch (item.type) {
35
+ case 'step':
36
+ return `step "${item.stepName}"`;
37
+ case 'hook':
38
+ return `hook "${item.token}"`;
39
+ case 'wait':
40
+ return 'sleep';
41
+ default:
42
+ return `unknown (${item.type})`;
43
+ }
44
+ });
45
+ runtimeLogger.warn(`Workflow run ${outcome} with ${items.length} uncommitted operation(s): ${details.join(', ')}. ` +
46
+ 'Did you forget to `await` a step, hook, or sleep call?', { workflowRunId: runId });
47
+ }
20
48
  export async function runWorkflow(workflowCode, workflowRun, events, encryptionKey) {
21
49
  return trace(`workflow.run ${workflowRun.workflowName}`, async (span) => {
22
50
  span?.setAttributes({
@@ -515,15 +543,26 @@ export async function runWorkflow(workflowCode, workflowRun, events, encryptionK
515
543
  ...Attribute.WorkflowArgumentsCount(args.length),
516
544
  });
517
545
  // Invoke user workflow
518
- const result = await Promise.race([
519
- workflowFn(...args),
520
- workflowDiscontinuation.promise,
521
- ]);
522
- const dehydrated = await dehydrateWorkflowReturnValue(result, workflowRun.runId, encryptionKey, vmGlobalThis);
523
- span?.setAttributes({
524
- ...Attribute.WorkflowResultType(typeof result),
525
- });
526
- return dehydrated;
546
+ try {
547
+ const result = await Promise.race([
548
+ workflowFn(...args),
549
+ workflowDiscontinuation.promise,
550
+ ]);
551
+ const dehydrated = await dehydrateWorkflowReturnValue(result, workflowRun.runId, encryptionKey, vmGlobalThis);
552
+ span?.setAttributes({
553
+ ...Attribute.WorkflowResultType(typeof result),
554
+ });
555
+ warnPendingQueueItems(workflowRun.runId, workflowContext.invocationsQueue, 'completed');
556
+ return dehydrated;
557
+ }
558
+ catch (err) {
559
+ // Let WorkflowSuspension propagate — handled separately by the runtime
560
+ if (WorkflowSuspension.is(err)) {
561
+ throw err;
562
+ }
563
+ warnPendingQueueItems(workflowRun.runId, workflowContext.invocationsQueue, 'failed');
564
+ throw err;
565
+ }
527
566
  });
528
567
  }
529
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvd29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUvRCxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdEMsT0FBTyxFQUNMLDRCQUE0QixFQUM1Qix3QkFBd0IsR0FDekIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLG9CQUFvQixFQUNwQixzQkFBc0IsRUFDdEIsY0FBYyxFQUNkLGlCQUFpQixHQUNsQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEtBQUssU0FBUyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQy9CLFlBQW9CLEVBQ3BCLFdBQXdCLEVBQ3hCLE1BQWUsRUFDZixhQUFvQztJQUVwQyxPQUFPLEtBQUssQ0FBQyxnQkFBZ0IsV0FBVyxDQUFDLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUN0RSxJQUFJLEVBQUUsYUFBYSxDQUFDO1lBQ2xCLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDO1lBQ25ELEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzdDLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDbEQsR0FBRyxTQUFTLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUNoRCxDQUFDLENBQUM7UUFFSCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQ2IsaUJBQWlCLFdBQVcsQ0FBQyxLQUFLLG9EQUFvRCxDQUN2RixDQUFDO1FBQ0osQ0FBQztRQUVELG9FQUFvRTtRQUNwRSx3Q0FBd0M7UUFDeEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxPQUFPLEVBQUUsQ0FBQztRQUU3QixNQUFNLEVBQ0osT0FBTyxFQUNQLFVBQVUsRUFBRSxZQUFZLEVBQ3hCLGVBQWUsR0FDaEIsR0FBRyxhQUFhLENBQUM7WUFDaEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxLQUFLO1lBQ3ZCLGNBQWMsRUFBRSxDQUFDLFNBQVM7U0FDM0IsQ0FBQyxDQUFDO1FBRUgsTUFBTSx1QkFBdUIsR0FBRyxhQUFhLEVBQVEsQ0FBQztRQUV0RCxNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDaEUsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQzFFLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUNqRSxDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsTUFBTSxFQUFFO1lBQ2hELGlCQUFpQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzNCLHVCQUF1QixDQUFDLE1BQU0sQ0FDNUIsSUFBSSxvQkFBb0IsQ0FDdEIsNENBQTRDLEtBQUssQ0FBQyxTQUFTLG1CQUFtQixLQUFLLENBQUMsYUFBYSxhQUFhLEtBQUssQ0FBQyxPQUFPLG9EQUFvRCxFQUMvSyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsbUJBQW1CLEVBQUUsQ0FDMUMsQ0FDRixDQUFDO1lBQ0osQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sZUFBZSxHQUFnQztZQUNuRCxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7WUFDeEIsYUFBYTtZQUNiLFVBQVUsRUFBRSxZQUFZO1lBQ3hCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO1lBQy9DLGNBQWM7WUFDZCxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3BDLGNBQWM7WUFDZCxnQkFBZ0IsRUFBRSxJQUFJLEdBQUcsRUFBRTtTQUM1QixDQUFDO1FBRUYsd0VBQXdFO1FBQ3hFLGVBQWUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDakQsTUFBTSxTQUFTLEdBQUcsS0FBSyxFQUFFLFNBQVMsQ0FBQztZQUNuQyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNkLGVBQWUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlCLENBQUM7WUFDRCwyREFBMkQ7WUFDM0QsT0FBTyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCx3RUFBd0U7UUFDeEUseUVBQXlFO1FBQ3pFLDZCQUE2QjtRQUM3QixlQUFlLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2pELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxPQUFPLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztZQUN6QyxDQUFDO1lBRUQsa0RBQWtEO1lBQ2xELElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxhQUFhLEVBQUUsQ0FBQztnQkFDdEMsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7WUFDdEMsQ0FBQztZQUVELGtEQUFrRDtZQUNsRCxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssYUFBYSxFQUFFLENBQUM7Z0JBQ3RDLE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO1lBQ3RDLENBQUM7WUFFRCxPQUFPLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvQyxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNyRCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFM0MsOEVBQThFO1FBQzlFLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUMxQyw4RUFBOEU7UUFDOUUsWUFBWSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQ2hELDhFQUE4RTtRQUM5RSxZQUFZLENBQUMsY0FBYyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLDhFQUE4RTtRQUM5RSxZQUFZLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLFNBQWtCLEVBQUUsRUFBRSxDQUM1RCxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRXZELDRFQUE0RTtRQUM1RSxpREFBaUQ7UUFDakQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVO1lBQ2hDLENBQUMsQ0FBQyxXQUFXLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFO1lBQ3JDLENBQUMsQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1FBRXZDLG1GQUFtRjtRQUNuRixNQUFNLEdBQUcsR0FBcUI7WUFDNUIsYUFBYSxFQUFFLFdBQVcsQ0FBQyxLQUFLO1lBQ2hDLGlCQUFpQixFQUFFLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNwRCxHQUFHO1NBQ0osQ0FBQztRQUVGLDhFQUE4RTtRQUM5RSxZQUFZLENBQUMsdUJBQXVCLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDNUMsOEVBQThFO1FBQzlFLFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7UUFFakMsa0VBQWtFO1FBQ2xFLHFFQUFxRTtRQUNyRSxZQUFZLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRTtZQUN4QixNQUFNLElBQUksWUFBWSxDQUFDLEtBQUssQ0FDMUIsd0tBQXdLLFdBQVcsQ0FBQywwQkFBMEIsRUFBRSxDQUNqTixDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRUYsOERBQThEO1FBQzlELHFFQUFxRTtRQUNyRSw0REFBNEQ7UUFDNUQsTUFBTSxtQkFBbUIsR0FDdkIsZ0tBQWdLLENBQUM7UUFFbEssWUFBb0IsQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFO1lBQ3RDLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIsRUFBRTtnQkFDbEQsSUFBSSxFQUFFLFdBQVcsQ0FBQyw2QkFBNkI7YUFDaEQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBQ0QsWUFBb0IsQ0FBQyxXQUFXLEdBQUcsR0FBRyxFQUFFO1lBQ3ZDLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIsRUFBRTtnQkFDbEQsSUFBSSxFQUFFLFdBQVcsQ0FBQyw2QkFBNkI7YUFDaEQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBQ0QsWUFBb0IsQ0FBQyxZQUFZLEdBQUcsR0FBRyxFQUFFO1lBQ3hDLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIsRUFBRTtnQkFDbEQsSUFBSSxFQUFFLFdBQVcsQ0FBQyw2QkFBNkI7YUFDaEQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBQ0QsWUFBb0IsQ0FBQyxhQUFhLEdBQUcsR0FBRyxFQUFFO1lBQ3pDLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIsRUFBRTtnQkFDbEQsSUFBSSxFQUFFLFdBQVcsQ0FBQyw2QkFBNkI7YUFDaEQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBQ0QsWUFBb0IsQ0FBQyxZQUFZLEdBQUcsR0FBRyxFQUFFO1lBQ3hDLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIsRUFBRTtnQkFDbEQsSUFBSSxFQUFFLFdBQVcsQ0FBQyw2QkFBNkI7YUFDaEQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBQ0QsWUFBb0IsQ0FBQyxjQUFjLEdBQUcsR0FBRyxFQUFFO1lBQzFDLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIsRUFBRTtnQkFDbEQsSUFBSSxFQUFFLFdBQVcsQ0FBQyw2QkFBNkI7YUFDaEQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsMEVBQTBFO1FBQzFFLGtFQUFrRTtRQUNsRSxNQUFNLE9BQU87WUFDWCxLQUFLLENBQStCO1lBQ3BDLFdBQVcsQ0FBcUM7WUFDaEQsV0FBVyxDQUFxQztZQUNoRCxPQUFPLENBQVc7WUFDbEIsU0FBUyxDQUFVO1lBQ25CLE1BQU0sQ0FBVTtZQUNoQixJQUFJLENBQThCO1lBQ2xDLFFBQVEsQ0FBa0M7WUFDMUMsUUFBUSxDQUFVO1lBQ2xCLGNBQWMsQ0FBd0M7WUFDdEQsR0FBRyxDQUFVO1lBQ2IsU0FBUyxDQUFXO1lBQ3BCLE1BQU0sQ0FBZTtZQUNyQixNQUFNLENBQVU7WUFDaEIsSUFBSSxDQUE4QjtZQUVsQyxZQUFZLEtBQVUsRUFBRSxJQUFrQjtnQkFDeEMsbUJBQW1CO2dCQUNuQixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLFlBQVksWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUNuRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2hDLHNCQUFzQjtvQkFDdEIsSUFBSSxDQUFDO3dCQUNILElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQzt3QkFDaEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUM7b0JBQ3ZCLENBQUM7b0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQzt3QkFDZixNQUFNLElBQUksU0FBUyxDQUFDLDRCQUE0QixTQUFTLEVBQUUsRUFBRTs0QkFDM0QsS0FBSzt5QkFDTixDQUFDLENBQUM7b0JBQ0wsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sbURBQW1EO29CQUNuRCxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDVixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7d0JBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDdkQsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO3dCQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7d0JBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQzt3QkFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO3dCQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7d0JBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQzt3QkFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO3dCQUMzQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7d0JBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQzt3QkFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO3dCQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7d0JBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQzt3QkFDckMsT0FBTztvQkFDVCxDQUFDO29CQUNELDZFQUE2RTtvQkFDN0Usb0RBQW9EO29CQUNwRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7b0JBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDdkQsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO29CQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztvQkFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO29CQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7b0JBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO29CQUMzQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztvQkFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO29CQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7b0JBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztnQkFDdkMsQ0FBQztnQkFFRCx5Q0FBeUM7Z0JBQ3pDLGFBQWE7Z0JBQ2IsSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDMUMsQ0FBQztxQkFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDM0MsNENBQTRDO29CQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDdEIsQ0FBQztnQkFFRCxjQUFjO2dCQUNkLElBQUksSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO29CQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3hELENBQUM7cUJBQU0sSUFDTCxPQUFPLEtBQUssS0FBSyxRQUFRO29CQUN6QixLQUFLLFlBQVksWUFBWSxDQUFDLEdBQUcsRUFDakMsQ0FBQztvQkFDRCw2Q0FBNkM7b0JBQzdDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzVDLENBQUM7Z0JBRUQsb0RBQW9EO2dCQUNwRCxJQUFJLElBQUksRUFBRSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDeEIsQ0FBQztxQkFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7Z0JBQ3JCLENBQUM7Z0JBRUQsSUFBSSxJQUFJLEVBQUUsV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ3RDLENBQUM7cUJBQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ2hELElBQUksQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDO2dCQUNuQyxDQUFDO2dCQUVELG9FQUFvRTtnQkFDcEUsSUFBSyxJQUFZLEVBQUUsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUN2QyxJQUFJLENBQUMsS0FBSyxHQUFJLElBQVksQ0FBQyxLQUFLLENBQUM7Z0JBQ25DLENBQUM7cUJBQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQzFDLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO2dCQUN6QixDQUFDO2dCQUVELElBQUksSUFBSSxFQUFFLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUNoQyxDQUFDO3FCQUFNLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUM3QyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztnQkFDM0IsQ0FBQztnQkFFRCxJQUFJLElBQUksRUFBRSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDaEMsQ0FBQztxQkFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDN0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUM7Z0JBQ2pDLENBQUM7Z0JBRUQsSUFBSSxJQUFJLEVBQUUsY0FBYyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUN2QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQzVDLENBQUM7cUJBQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxjQUFjLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ25ELElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO2dCQUMzQixDQUFDO2dCQUVELElBQUksSUFBSSxFQUFFLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNsQyxDQUFDO3FCQUFNLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUM5QyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsQ0FBQztnQkFFRCxJQUFJLElBQUksRUFBRSxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDbEMsQ0FBQztxQkFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDL0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLENBQUM7Z0JBRUQsSUFBSSxJQUFJLEVBQUUsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUMvQixzQ0FBc0M7b0JBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDNUIsQ0FBQztxQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUN4QixzQ0FBc0M7b0JBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7Z0JBQ25DLENBQUM7Z0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Z0JBQ3ZCLENBQUM7Z0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7Z0JBQ2hDLENBQUM7Z0JBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxFQUFFLElBQUksQ0FBQztnQkFFeEIsbURBQW1EO2dCQUNuRCxJQUNFLElBQUksS0FBSyxJQUFJO29CQUNiLElBQUksS0FBSyxTQUFTO29CQUNsQixDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLEVBQ2pELENBQUM7b0JBQ0QsTUFBTSxJQUFJLFNBQVMsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO2dCQUN4RSxDQUFDO2dCQUVELGdEQUFnRDtnQkFDaEQsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDeEMsK0RBQStEO29CQUMvRCxzREFBc0Q7b0JBQ3RELElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRTt3QkFDL0QsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFOzRCQUNsQixLQUFLLEVBQUUsSUFBSTs0QkFDWCxRQUFRLEVBQUUsS0FBSzt5QkFDaEI7cUJBQ0YsQ0FBQyxDQUFDO2dCQUNMLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDbkIsQ0FBQztZQUNILENBQUM7WUFFRCxLQUFLO2dCQUNILE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztZQUVELElBQUksUUFBUTtnQkFDVixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFFRCx3QkFBd0I7WUFDeEIsSUFBSSxDQUF1QjtZQUMzQixRQUFRLENBQTJCO1lBRW5DLEtBQUssQ0FBQyxXQUFXO2dCQUNmLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlCLENBQUM7WUFFRCxLQUFLLENBQUMsS0FBSztnQkFDVCxPQUFPLElBQUksVUFBVSxDQUFDLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUVELEtBQUssQ0FBQyxJQUFJO2dCQUNSLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZCLENBQUM7WUFFRCxLQUFLLENBQUMsSUFBSTtnQkFDUixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixDQUFDO1NBQ0Y7UUFDRCxZQUFZLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUUvQixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQWEseUJBQXlCLENBQUMsQ0FBQztRQUMvRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQWdCLHlCQUF5QixDQUFDLENBQUM7UUFDbEUsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUM1QixpQ0FBaUMsQ0FDbEMsQ0FBQztRQUNGLE1BQU0sUUFBUTtZQUNaLElBQUksQ0FBK0I7WUFDbkMsR0FBRyxDQUFVO1lBQ2IsTUFBTSxDQUFVO1lBQ2hCLFVBQVUsQ0FBVTtZQUNwQixJQUFJLENBQXFDO1lBQ3pDLE9BQU8sQ0FBVztZQUNsQixVQUFVLENBQVc7WUFFckIsWUFBWSxJQUFVLEVBQUUsSUFBbUI7Z0JBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLE1BQU0sSUFBSSxHQUFHLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNkLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUV4Qix5REFBeUQ7Z0JBQ3pELCtFQUErRTtnQkFDL0UsSUFDRSxJQUFJLEtBQUssSUFBSTtvQkFDYixJQUFJLEtBQUssU0FBUztvQkFDbEIsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUNuRSxDQUFDO29CQUNELE1BQU0sSUFBSSxTQUFTLENBQ2pCLHNEQUFzRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQ3BFLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxnREFBZ0Q7Z0JBQ2hELElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ3hDLCtEQUErRDtvQkFDL0Qsc0RBQXNEO29CQUN0RCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUU7d0JBQy9ELENBQUMsZ0JBQWdCLENBQUMsRUFBRTs0QkFDbEIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsUUFBUSxFQUFFLEtBQUs7eUJBQ2hCO3FCQUNGLENBQUMsQ0FBQztnQkFDTCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ25CLENBQUM7WUFDSCxDQUFDO1lBRUQsd0JBQXdCO1lBQ3hCLEtBQUssQ0FBa0I7WUFDdkIsSUFBSSxDQUFrQztZQUN0QyxRQUFRLENBQXNDO1lBRTlDLElBQUksRUFBRTtnQkFDSixPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1lBQ2pELENBQUM7WUFFRCxJQUFJLFFBQVE7Z0JBQ1YsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQsS0FBSyxDQUFDLFdBQVc7Z0JBQ2YsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsQ0FBQztZQUVELEtBQUssQ0FBQyxLQUFLO2dCQUNULE9BQU8sSUFBSSxVQUFVLENBQUMsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBRUQsS0FBSyxDQUFDLElBQUk7Z0JBQ1IsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsQ0FBQztZQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBUyxFQUFFLElBQW1CO2dCQUN4QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO29CQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUNsRCxDQUFDO2dCQUNELE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNsRCxDQUFDO1lBRUQsS0FBSyxDQUFDLElBQUk7Z0JBQ1IsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsQ0FBQztZQUVELE1BQU0sQ0FBQyxLQUFLO2dCQUNWLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztZQUVELE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBaUIsRUFBRSxTQUFpQixHQUFHO2dCQUNyRCxrRUFBa0U7Z0JBQ2xFLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDaEQsTUFBTSxJQUFJLFVBQVUsQ0FDbEIsaUNBQWlDLE1BQU0sMkNBQTJDLENBQ25GLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCx1Q0FBdUM7Z0JBQ3ZDLE1BQU0sT0FBTyxHQUFHLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFFckMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ25ELFFBQVEsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO2dCQUN6QixRQUFRLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztnQkFDekIsUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7Z0JBQzNCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixRQUFRLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztnQkFDMUIsUUFBUSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7Z0JBQ2xCLFFBQVEsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUU1QixPQUFPLFFBQVEsQ0FBQztZQUNsQixDQUFDO1NBQ0Y7UUFDRCxZQUFZLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUVqQyxNQUFNLGNBQWM7WUFDbEI7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1lBRUQsSUFBSSxNQUFNO2dCQUNSLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELE1BQU07Z0JBQ0osT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1lBRUQsU0FBUztnQkFDUCxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFFRCxXQUFXO2dCQUNULE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztZQUVELE1BQU07Z0JBQ0osT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1lBRUQsR0FBRztnQkFDRCxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFFRCxNQUFNO2dCQUNKLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztZQUVELE1BQU0sQ0FBQyxJQUFJO2dCQUNULE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztZQUVELENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztnQkFDcEIsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1NBQ0Y7UUFDRCxZQUFZLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUU3QyxNQUFNLGNBQWM7WUFDbEI7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1lBRUQsSUFBSSxNQUFNO2dCQUNSLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELEtBQUs7Z0JBQ0gsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1lBRUQsS0FBSztnQkFDSCxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFFRCxTQUFTO2dCQUNQLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztTQUNGO1FBQ0QsWUFBWSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFFN0MsTUFBTSxlQUFlO1lBQ25CLFFBQVEsQ0FBK0I7WUFDdkMsUUFBUSxDQUErQjtZQUV2QztnQkFDRSxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7U0FDRjtRQUNELFlBQVksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBRS9DLHNFQUFzRTtRQUN0RSxnREFBZ0Q7UUFDaEQsWUFBWSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBRTFDLHFEQUFxRDtRQUNyRCxNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUNyRSw4RUFBOEU7UUFDOUUsWUFBWSxDQUFDLHNCQUFzQixDQUFDLEdBQUksVUFBa0IsQ0FDeEQsc0JBQXNCLENBQ3ZCLENBQUM7UUFFRix5REFBeUQ7UUFDekQscUVBQXFFO1FBQ3JFLDhFQUE4RTtRQUM5RSxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0QsTUFBTSxRQUFRLEdBQUcsVUFBVSxFQUFFLGVBQWUsSUFBSSxXQUFXLENBQUMsWUFBWSxDQUFDO1FBRXpFLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FDN0IsR0FBRyxZQUFZLHlDQUF5QyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUNuRyxPQUFPLEVBQ1AsRUFBRSxRQUFRLEVBQUUsQ0FDYixDQUFDO1FBRUYsSUFBSSxPQUFPLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksY0FBYyxDQUN0QixZQUFZLElBQUksQ0FBQyxTQUFTLENBQ3hCLFdBQVcsQ0FBQyxZQUFZLENBQ3pCLGlDQUFpQyxPQUFPLFVBQVUsV0FBVyxDQUMvRCxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sd0JBQXdCLENBQ3pDLFdBQVcsQ0FBQyxLQUFLLEVBQ2pCLFdBQVcsQ0FBQyxLQUFLLEVBQ2pCLGFBQWEsRUFDYixZQUFZLENBQ2IsQ0FBQztRQUVGLElBQUksRUFBRSxhQUFhLENBQUM7WUFDbEIsR0FBRyxTQUFTLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNqRCxDQUFDLENBQUM7UUFFSCx1QkFBdUI7UUFDdkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNuQix1QkFBdUIsQ0FBQyxPQUFPO1NBQ2hDLENBQUMsQ0FBQztRQUVILE1BQU0sVUFBVSxHQUFHLE1BQU0sNEJBQTRCLENBQ25ELE1BQU0sRUFDTixXQUFXLENBQUMsS0FBSyxFQUNqQixhQUFhLEVBQ2IsWUFBWSxDQUNiLENBQUM7UUFFRixJQUFJLEVBQUUsYUFBYSxDQUFDO1lBQ2xCLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sTUFBTSxDQUFDO1NBQy9DLENBQUMsQ0FBQztRQUVILE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyJ9
568
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvd29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUvRCxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTNFLE9BQU8sRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU1QyxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLHdCQUF3QixHQUN6QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QixjQUFjLEVBQ2QsaUJBQWlCLEdBQ2xCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sS0FBSyxTQUFTLE1BQU0scUNBQXFDLENBQUM7QUFDakUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVB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
@@ -19,7 +19,8 @@ import { createHook } from "workflow"
19
19
 
20
20
  export async function hookWorkflow() {
21
21
  "use workflow";
22
- const hook = createHook(); // [!code highlight]
22
+ // `using` automatically disposes the hook when it goes out of scope
23
+ using hook = createHook(); // [!code highlight]
23
24
  const result = await hook; // Suspends the workflow until the hook is resumed
24
25
  }
25
26
  ```
@@ -68,7 +69,7 @@ The returned `Hook` object also implements `AsyncIterable<T>`, which allows you
68
69
 
69
70
  ### Basic Usage
70
71
 
71
- When creating a hook, you can specify a payload type to be used for automatic type safety.
72
+ When creating a hook, you can specify a payload type for automatic type safety:
72
73
 
73
74
  ```typescript lineNumbers
74
75
  import { createHook } from "workflow"
@@ -76,7 +77,7 @@ import { createHook } from "workflow"
76
77
  export async function approvalWorkflow() {
77
78
  "use workflow";
78
79
 
79
- const hook = createHook<{ approved: boolean; comment: string }>(); // [!code highlight]
80
+ using hook = createHook<{ approved: boolean; comment: string }>(); // [!code highlight]
80
81
  console.log("Send approval to token:", hook.token);
81
82
 
82
83
  const result = await hook;
@@ -98,7 +99,7 @@ export async function slackBotWorkflow(channelId: string) {
98
99
  "use workflow";
99
100
 
100
101
  // Token constructed from channel ID
101
- const hook = createHook<SlackMessage>({ // [!code highlight]
102
+ using hook = createHook<SlackMessage>({ // [!code highlight]
102
103
  token: `slack_webhook:${channelId}`, // [!code highlight]
103
104
  }); // [!code highlight]
104
105
 
@@ -121,7 +122,7 @@ import { createHook } from "workflow"
121
122
  export async function collectHookWorkflow() {
122
123
  "use workflow";
123
124
 
124
- const hook = createHook<{ message: string; done?: boolean }>();
125
+ using hook = createHook<{ message: string; done?: boolean }>();
125
126
 
126
127
  const payloads = [];
127
128
  for await (const payload of hook) { // [!code highlight]
@@ -134,6 +135,61 @@ export async function collectHookWorkflow() {
134
135
  }
135
136
  ```
136
137
 
138
+ ### Disposing Hooks Early
139
+
140
+ You can dispose a hook early to release its token for reuse by another workflow. This is useful for handoff patterns where one workflow needs to transfer a hook token to another workflow while still running.
141
+
142
+ ```typescript lineNumbers
143
+ import { createHook } from "workflow"
144
+
145
+ export async function handoffWorkflow(channelId: string) {
146
+ "use workflow";
147
+
148
+ const hook = createHook<{ message: string; handoff?: boolean }>({
149
+ token: `channel:${channelId}`
150
+ });
151
+
152
+ for await (const payload of hook) {
153
+ console.log("Received:", payload.message);
154
+
155
+ if (payload.handoff) {
156
+ hook.dispose(); // [!code highlight] Release the token for another workflow
157
+ break;
158
+ }
159
+ }
160
+
161
+ // Continue with other work while another workflow uses the token
162
+ }
163
+ ```
164
+
165
+ After calling `dispose()`, the hook will no longer receive events and its token becomes available for other workflows to use.
166
+
167
+ ### Automatic Disposal with `using`
168
+
169
+ Hooks implement the [TC39 Explicit Resource Management](https://github.com/tc39/proposal-explicit-resource-management) proposal, allowing automatic disposal with the `using` keyword:
170
+
171
+ ```typescript lineNumbers
172
+ import { createHook } from "workflow"
173
+
174
+ export async function scopedHookWorkflow(channelId: string) {
175
+ "use workflow";
176
+
177
+ {
178
+ using hook = createHook<{ message: string }>({ // [!code highlight]
179
+ token: `channel:${channelId}`
180
+ });
181
+
182
+ const payload = await hook;
183
+ console.log("Received:", payload.message);
184
+ } // hook is automatically disposed here // [!code highlight]
185
+
186
+ // Token is now available for other workflows to use
187
+ console.log("Hook disposed, continuing with other work...");
188
+ }
189
+ ```
190
+
191
+ This is equivalent to manually calling `dispose()` but ensures the hook is always cleaned up, even if an error occurs.
192
+
137
193
  ## Related Functions
138
194
 
139
195
  - [`defineHook()`](/docs/api-reference/workflow/define-hook) - Type-safe hook helper
@@ -18,7 +18,8 @@ import { createWebhook } from "workflow"
18
18
 
19
19
  export async function webhookWorkflow() {
20
20
  "use workflow";
21
- const webhook = createWebhook(); // [!code highlight]
21
+ // `using` automatically disposes the webhook when it goes out of scope
22
+ using webhook = createWebhook(); // [!code highlight]
22
23
  console.log("Webhook URL:", webhook.url);
23
24
 
24
25
  const request = await webhook; // Suspends until HTTP request received
@@ -66,7 +67,7 @@ import { createWebhook } from "workflow"
66
67
  export async function basicWebhookWorkflow() {
67
68
  "use workflow";
68
69
 
69
- const webhook = createWebhook(); // [!code highlight]
70
+ using webhook = createWebhook(); // [!code highlight]
70
71
  console.log("Send requests to:", webhook.url);
71
72
 
72
73
  const request = await webhook;
@@ -99,7 +100,7 @@ async function sendResponse(request: RequestWithResponse) { // [!code highlight]
99
100
  export async function respondingWebhookWorkflow() {
100
101
  "use workflow";
101
102
 
102
- const webhook = createWebhook();
103
+ using webhook = createWebhook();
103
104
  console.log("Webhook URL:", webhook.url);
104
105
 
105
106
  const request = await webhook;
@@ -124,7 +125,7 @@ async function processData(data: any) {
124
125
  Tokens are used to identify a specific webhook. You can customize the token to be more specific to a use case.
125
126
 
126
127
  ```typescript lineNumbers
127
- import { type RequestWithResponse } from "workflow"
128
+ import { createWebhook, type RequestWithResponse } from "workflow"
128
129
 
129
130
  async function sendAck(request: RequestWithResponse) {
130
131
  "use step";
@@ -139,7 +140,7 @@ export async function githubWebhookWorkflow(repoName: string) {
139
140
  "use workflow";
140
141
 
141
142
  // Use a deterministic token based on the repository
142
- const webhook = createWebhook({ // [!code highlight]
143
+ using webhook = createWebhook({ // [!code highlight]
143
144
  token: `github_webhook:${repoName}`, // [!code highlight]
144
145
  }); // [!code highlight]
145
146
 
@@ -189,7 +190,7 @@ async function sendStopResponse(request: RequestWithResponse) {
189
190
  export async function slackCommandWorkflow(channelId: string) {
190
191
  "use workflow";
191
192
 
192
- const webhook = createWebhook({
193
+ using webhook = createWebhook({
193
194
  token: `slack_command:${channelId}`,
194
195
  });
195
196
 
@@ -33,8 +33,7 @@ import { createHook } from "workflow";
33
33
  export async function approvalWorkflow() {
34
34
  "use workflow";
35
35
 
36
- // Create a hook that expects an approval payload
37
- const hook = createHook<{ approved: boolean; comment: string }>();
36
+ using hook = createHook<{ approved: boolean; comment: string }>();
38
37
 
39
38
  console.log("Waiting for approval...");
40
39
  console.log("Send approval to token:", hook.token);
@@ -44,16 +43,18 @@ export async function approvalWorkflow() {
44
43
 
45
44
  if (result.approved) {
46
45
  console.log("Approved with comment:", result.comment);
47
- // Continue with approved workflow...
48
46
  } else {
49
47
  console.log("Rejected:", result.comment);
50
- // Handle rejection...
51
48
  }
52
49
  }
53
50
  ```
54
51
 
55
52
  The workflow will pause at `await hook` until external code sends data to resume it.
56
53
 
54
+ <Callout type="info">
55
+ We recommend using the `using` keyword which implements the [TC39 Explicit Resource Management](https://github.com/tc39/proposal-explicit-resource-management) proposal for automatic cleanup.
56
+ </Callout>
57
+
57
58
  <Callout type="info">
58
59
  See the full API reference for [`createHook()`](/docs/api-reference/workflow/create-hook) for all available options.
59
60
  </Callout>
@@ -97,7 +98,7 @@ export async function slackChannelBot(channelId: string) {
97
98
  "use workflow";
98
99
 
99
100
  // Use channel ID in the token so Slack webhooks can find this workflow
100
- const hook = createHook<SlackMessage>({
101
+ using hook = createHook<SlackMessage>({
101
102
  token: `slack_messages:${channelId}`
102
103
  });
103
104
 
@@ -148,7 +149,7 @@ import { createHook } from "workflow";
148
149
  export async function dataCollectionWorkflow() {
149
150
  "use workflow";
150
151
 
151
- const hook = createHook<{ value: number; done?: boolean }>();
152
+ using hook = createHook<{ value: number; done?: boolean }>();
152
153
 
153
154
  const values: number[] = [];
154
155
 
@@ -168,6 +169,48 @@ export async function dataCollectionWorkflow() {
168
169
 
169
170
  Each time you call `resumeHook()` with the same token, the loop receives another value.
170
171
 
172
+ ### Disposing Hooks Early
173
+
174
+ When a workflow ends, hooks are automatically disposed. However, you may want to release a hook token early so another workflow can use it while your workflow continues running. Use a block scope with `using` to control when disposal happens:
175
+
176
+ ```typescript lineNumbers
177
+ import { createHook } from "workflow";
178
+
179
+ export async function handoffWorkflow(channelId: string) {
180
+ "use workflow";
181
+
182
+ {
183
+ using hook = createHook<{ message: string; handoff?: boolean }>({
184
+ token: `channel:${channelId}`
185
+ });
186
+
187
+ for await (const payload of hook) {
188
+ console.log("Received:", payload.message);
189
+
190
+ if (payload.handoff) {
191
+ break;
192
+ }
193
+ }
194
+ } // Hook token released here
195
+
196
+ // Token is now available for another workflow
197
+ console.log("Continuing with other work...");
198
+ }
199
+ ```
200
+
201
+ You can also manually dispose using the `dispose()` method:
202
+
203
+ {/* @skip-typecheck: incomplete code sample */}
204
+ ```typescript lineNumbers
205
+ const hook = createHook<{ message: string }>({ token: `channel:${channelId}` });
206
+ const payload = await hook;
207
+ hook.dispose(); // Manually release the token
208
+ ```
209
+
210
+ <Callout type="info">
211
+ After disposal, the hook will no longer receive events and the async iterator will stop yielding values.
212
+ </Callout>
213
+
171
214
  ## Understanding Webhooks
172
215
 
173
216
  While hooks are powerful, they require you to manually handle HTTP requests and route them to workflows. **Webhooks** solve this by providing a higher-level abstraction built on top of hooks that:
@@ -184,7 +227,7 @@ See the full API reference for [`createWebhook()`](/docs/api-reference/workflow/
184
227
 
185
228
  ### Creating Your First Webhook
186
229
 
187
- Here's a simple webhook that receives HTTP requests:
230
+ Here's a simple webhook that receives HTTP requests. Like hooks, webhooks support the `using` keyword for automatic cleanup:
188
231
 
189
232
  ```typescript lineNumbers
190
233
  import { createWebhook } from "workflow";
@@ -192,7 +235,7 @@ import { createWebhook } from "workflow";
192
235
  export async function webhookWorkflow() {
193
236
  "use workflow";
194
237
 
195
- const webhook = createWebhook();
238
+ using webhook = createWebhook();
196
239
 
197
240
  // The webhook is automatically available at this URL
198
241
  console.log("Send HTTP requests to:", webhook.url);
@@ -203,7 +246,6 @@ export async function webhookWorkflow() {
203
246
 
204
247
  console.log("Received request:", request.method, request.url);
205
248
 
206
- // Access the request body
207
249
  const data = await request.json();
208
250
  console.log("Data:", data);
209
251
  }
@@ -225,7 +267,7 @@ import { createWebhook } from "workflow";
225
267
  export async function webhookWithStaticResponse() {
226
268
  "use workflow";
227
269
 
228
- const webhook = createWebhook({
270
+ using webhook = createWebhook({
229
271
  respondWith: Response.json({
230
272
  success: true, message: "Webhook received"
231
273
  }),
@@ -234,7 +276,6 @@ export async function webhookWithStaticResponse() {
234
276
  const request = await webhook;
235
277
 
236
278
  // The response was already sent automatically
237
- // Continue processing the request asynchronously
238
279
  const data = await request.json();
239
280
  await processData(data);
240
281
  }
@@ -271,7 +312,7 @@ export async function webhookWithDynamicResponse() {
271
312
  "use workflow";
272
313
 
273
314
  // Set respondWith to "manual" to handle responses yourself
274
- const webhook = createWebhook({ respondWith: "manual" });
315
+ using webhook = createWebhook({ respondWith: "manual" });
275
316
 
276
317
  const request = await webhook;
277
318
  const data = await request.json();
@@ -312,7 +353,7 @@ async function respondToSlack(request: RequestWithResponse, text: string) {
312
353
  export async function slackCommandWorkflow(channelId: string) {
313
354
  "use workflow";
314
355
 
315
- const webhook = createWebhook({
356
+ using webhook = createWebhook({
316
357
  token: `slack_command:${channelId}`,
317
358
  respondWith: "manual"
318
359
  });
@@ -392,7 +433,7 @@ const approvalHook = defineHook({ // [!code highlight]
392
433
  export async function documentApprovalWorkflow(documentId: string) {
393
434
  "use workflow";
394
435
 
395
- const hook = approvalHook.create({
436
+ using hook = approvalHook.create({
396
437
  token: `approval:${documentId}`
397
438
  });
398
439
 
@@ -441,7 +482,7 @@ Both hooks and webhooks support iteration, making them perfect for long-running
441
482
 
442
483
  {/* @skip-typecheck: incomplete code sample */}
443
484
  ```typescript
444
- const hook = createHook<Event>();
485
+ using hook = createHook<Event>();
445
486
 
446
487
  for await (const event of hook) {
447
488
  await processEvent(event);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workflow/core",
3
- "version": "4.1.0-beta.60",
3
+ "version": "4.1.0-beta.62",
4
4
  "description": "Core runtime and engine for Workflow DevKit",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -71,24 +71,24 @@
71
71
  "./_workflow": "./dist/workflow/index.js"
72
72
  },
73
73
  "dependencies": {
74
- "@aws-sdk/credential-provider-web-identity": "3.609.0",
74
+ "@aws-sdk/credential-provider-web-identity": "3.972.13",
75
75
  "@jridgewell/trace-mapping": "0.3.31",
76
76
  "@standard-schema/spec": "1.0.0",
77
77
  "@types/ms": "2.1.0",
78
- "@vercel/functions": "^3.1.4",
78
+ "@vercel/functions": "^3.4.3",
79
79
  "debug": "4.4.3",
80
- "devalue": "5.6.0",
80
+ "devalue": "5.6.3",
81
81
  "ms": "2.1.3",
82
82
  "nanoid": "5.1.6",
83
83
  "seedrandom": "3.0.5",
84
84
  "ulid": "3.0.1",
85
- "zod": "4.1.11",
86
- "@workflow/errors": "4.1.0-beta.16",
85
+ "zod": "4.3.6",
86
+ "@workflow/errors": "4.1.0-beta.17",
87
87
  "@workflow/serde": "4.1.0-beta.2",
88
- "@workflow/utils": "4.1.0-beta.12",
89
- "@workflow/world": "4.1.0-beta.6",
90
- "@workflow/world-local": "4.1.0-beta.34",
91
- "@workflow/world-vercel": "4.1.0-beta.34"
88
+ "@workflow/utils": "4.1.0-beta.13",
89
+ "@workflow/world": "4.1.0-beta.8",
90
+ "@workflow/world-local": "4.1.0-beta.36",
91
+ "@workflow/world-vercel": "4.1.0-beta.36"
92
92
  },
93
93
  "devDependencies": {
94
94
  "@opentelemetry/api": "1.9.0",