@workflow/core 4.1.0-beta.63 → 4.2.0-beta.64
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/create-hook.d.ts +19 -1
- package/dist/create-hook.d.ts.map +1 -1
- package/dist/create-hook.js +1 -1
- package/dist/events-consumer.d.ts +14 -3
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +35 -14
- package/dist/global.d.ts +1 -0
- package/dist/global.d.ts.map +1 -1
- package/dist/global.js +1 -1
- package/dist/private.d.ts +8 -0
- package/dist/private.d.ts.map +1 -1
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +9 -2
- package/dist/runtime/run.d.ts +13 -0
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +28 -4
- package/dist/runtime/step-handler.d.ts.map +1 -1
- package/dist/runtime/step-handler.js +2 -1
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +2 -1
- package/dist/serialization-format.d.ts +35 -4
- package/dist/serialization-format.d.ts.map +1 -1
- package/dist/serialization-format.js +62 -5
- package/dist/serialization.d.ts +95 -51
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +239 -104
- package/dist/step/context-storage.d.ts +2 -0
- package/dist/step/context-storage.d.ts.map +1 -1
- package/dist/step/context-storage.js +1 -1
- package/dist/step/writable-stream.d.ts.map +1 -1
- package/dist/step/writable-stream.js +2 -2
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +18 -17
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/workflow/create-hook.js +6 -3
- package/dist/workflow/hook.d.ts.map +1 -1
- package/dist/workflow/hook.js +49 -31
- package/dist/workflow/sleep.d.ts.map +1 -1
- package/dist/workflow/sleep.js +10 -9
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +24 -3
- package/docs/api-reference/create-hook.mdx +1 -1
- package/docs/api-reference/create-webhook.mdx +13 -80
- package/docs/foundations/hooks.mdx +19 -34
- package/package.json +5 -5
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
import type { CryptoKey } from '../encryption.js';
|
|
2
3
|
import type { WorkflowMetadata } from '../workflow/get-workflow-metadata.js';
|
|
3
4
|
import type { StepMetadata } from './get-step-metadata.js';
|
|
4
5
|
export declare const contextStorage: AsyncLocalStorage<{
|
|
@@ -6,5 +7,6 @@ export declare const contextStorage: AsyncLocalStorage<{
|
|
|
6
7
|
workflowMetadata: WorkflowMetadata;
|
|
7
8
|
ops: Promise<void>[];
|
|
8
9
|
closureVars?: Record<string, any>;
|
|
10
|
+
encryptionKey?: CryptoKey;
|
|
9
11
|
}>;
|
|
10
12
|
//# sourceMappingURL=context-storage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-storage.d.ts","sourceRoot":"","sources":["../../src/step/context-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,eAAO,MAAM,cAAc;kBACX,YAAY;sBACR,gBAAgB;SAC7B,OAAO,CAAC,IAAI,CAAC,EAAE;kBACN,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"context-storage.d.ts","sourceRoot":"","sources":["../../src/step/context-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,eAAO,MAAM,cAAc;kBACX,YAAY;sBACR,gBAAgB;SAC7B,OAAO,CAAC,IAAI,CAAC,EAAE;kBACN,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;oBACjB,SAAS;EACvB,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
2
|
export const contextStorage = /* @__PURE__ */ new AsyncLocalStorage();
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAvY29udGV4dC1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBS3JELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsSUFBSSxpQkFBaUIsRUFNL0QsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writable-stream.d.ts","sourceRoot":"","sources":["../../src/step/writable-stream.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,CAAC,GAAG,GAAG,EACjC,OAAO,GAAE,6BAAkC,GAC1C,cAAc,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"writable-stream.d.ts","sourceRoot":"","sources":["../../src/step/writable-stream.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,CAAC,GAAG,GAAG,EACjC,OAAO,GAAE,6BAAkC,GAC1C,cAAc,CAAC,CAAC,CAAC,CA0BnB"}
|
|
@@ -20,11 +20,11 @@ export function getWritable(options = {}) {
|
|
|
20
20
|
const runId = ctx.workflowMetadata.workflowRunId;
|
|
21
21
|
const name = getWorkflowRunStreamId(runId, namespace);
|
|
22
22
|
// Create a transform stream that serializes chunks and pipes to the workflow server
|
|
23
|
-
const serialize = getSerializeStream(getExternalReducers(globalThis, ctx.ops, runId));
|
|
23
|
+
const serialize = getSerializeStream(getExternalReducers(globalThis, ctx.ops, runId, ctx.encryptionKey), ctx.encryptionKey);
|
|
24
24
|
// Pipe the serialized data to the workflow server stream
|
|
25
25
|
// Register this async operation with the runtime's ops array so it's awaited via waitUntil
|
|
26
26
|
ctx.ops.push(serialize.readable.pipeTo(new WorkflowServerWritableStream(name, runId)));
|
|
27
27
|
// Return the writable side of the transform stream
|
|
28
28
|
return serialize.writable;
|
|
29
29
|
}
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGFibGUtc3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAvd3JpdGFibGUtc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLDRCQUE0QixHQUM3QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFhdEQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsVUFBeUMsRUFBRTtJQUUzQyxNQUFNLEdBQUcsR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1QsTUFBTSxJQUFJLEtBQUssQ0FDYix1RUFBdUUsQ0FDeEUsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQzlCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUM7SUFDakQsTUFBTSxJQUFJLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXRELG9GQUFvRjtJQUNwRixNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FDbEMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFDbEUsR0FBRyxDQUFDLGFBQWEsQ0FDbEIsQ0FBQztJQUVGLHlEQUF5RDtJQUN6RCwyRkFBMkY7SUFDM0YsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQ1YsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSw0QkFBNEIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FDekUsQ0FBQztJQUVGLG1EQUFtRDtJQUNuRCxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDNUIsQ0FBQyJ9
|
package/dist/step.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,wBAAgB,aAAa,CAAC,GAAG,EAAE,2BAA2B,IACpC,IAAI,SAAS,YAAY,EAAE,EAAE,MAAM,EACzD,UAAU,MAAM,EAChB,gBAAgB,MAAM,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,YAI1C,OAAO,WACJ,IAAI,KACZ,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,wBAAgB,aAAa,CAAC,GAAG,EAAE,2BAA2B,IACpC,IAAI,SAAS,YAAY,EAAE,EAAE,MAAM,EACzD,UAAU,MAAM,EAChB,gBAAgB,MAAM,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,YAI1C,OAAO,WACJ,IAAI,KACZ,OAAO,CAAC,MAAM,CAAC,CA6LrB"}
|
package/dist/step.js
CHANGED
|
@@ -38,9 +38,9 @@ export function createUseStep(ctx) {
|
|
|
38
38
|
// Crucially, if we got here, then this step Promise does
|
|
39
39
|
// not resolve so that the user workflow code does not proceed any further.
|
|
40
40
|
// Notify the workflow handler that this step has not been run / has not completed yet.
|
|
41
|
-
|
|
41
|
+
ctx.promiseQueue = ctx.promiseQueue.then(() => {
|
|
42
42
|
ctx.onWorkflowError(new WorkflowSuspension(ctx.invocationsQueue, ctx.globalThis));
|
|
43
|
-
}
|
|
43
|
+
});
|
|
44
44
|
return EventConsumerResult.NotConsumed;
|
|
45
45
|
}
|
|
46
46
|
stepLogger.debug('Step consumer event processing', {
|
|
@@ -63,9 +63,9 @@ export function createUseStep(ctx) {
|
|
|
63
63
|
if (!queueItem || queueItem.type !== 'step') {
|
|
64
64
|
// This indicates event log corruption - step_created received
|
|
65
65
|
// but the step was never invoked in the workflow during replay.
|
|
66
|
-
|
|
66
|
+
ctx.promiseQueue = ctx.promiseQueue.then(() => {
|
|
67
67
|
reject(new WorkflowRuntimeError(`Corrupted event log: step ${correlationId} (${stepName}) created but not found in invocation queue`));
|
|
68
|
-
}
|
|
68
|
+
});
|
|
69
69
|
return EventConsumerResult.Finished;
|
|
70
70
|
}
|
|
71
71
|
queueItem.hasCreatedEvent = true;
|
|
@@ -85,8 +85,9 @@ export function createUseStep(ctx) {
|
|
|
85
85
|
if (event.eventType === 'step_failed') {
|
|
86
86
|
// Terminal state - we can remove the invocationQueue item
|
|
87
87
|
ctx.invocationsQueue.delete(event.correlationId);
|
|
88
|
-
// Step failed -
|
|
89
|
-
|
|
88
|
+
// Step failed - chain through promiseQueue to ensure
|
|
89
|
+
// deterministic ordering of all promise resolutions/rejections.
|
|
90
|
+
ctx.promiseQueue = ctx.promiseQueue.then(() => {
|
|
90
91
|
const errorData = event.eventData.error;
|
|
91
92
|
const isErrorObject = typeof errorData === 'object' && errorData !== null;
|
|
92
93
|
const errorMessage = isErrorObject
|
|
@@ -101,19 +102,19 @@ export function createUseStep(ctx) {
|
|
|
101
102
|
error.stack = errorStack;
|
|
102
103
|
}
|
|
103
104
|
reject(error);
|
|
104
|
-
}
|
|
105
|
+
});
|
|
105
106
|
return EventConsumerResult.Finished;
|
|
106
107
|
}
|
|
107
108
|
if (event.eventType === 'step_completed') {
|
|
108
109
|
// Terminal state - we can remove the invocationQueue item
|
|
109
110
|
ctx.invocationsQueue.delete(event.correlationId);
|
|
110
111
|
// Step has completed, so resolve the Promise with the cached result.
|
|
111
|
-
// The hydration is async, so we
|
|
112
|
-
//
|
|
113
|
-
//
|
|
114
|
-
//
|
|
115
|
-
//
|
|
116
|
-
|
|
112
|
+
// The hydration is async (e.g., decryption), so we chain it through
|
|
113
|
+
// ctx.promiseQueue to ensure that even if deserialization
|
|
114
|
+
// takes variable time, promises resolve in event log order.
|
|
115
|
+
// Each step's hydration + resolve waits for all prior hydrations
|
|
116
|
+
// to complete before executing, preserving deterministic ordering.
|
|
117
|
+
ctx.promiseQueue = ctx.promiseQueue.then(async () => {
|
|
117
118
|
try {
|
|
118
119
|
const hydratedResult = await hydrateStepReturnValue(event.eventData.result, ctx.runId, ctx.encryptionKey, ctx.globalThis);
|
|
119
120
|
resolve(hydratedResult);
|
|
@@ -121,13 +122,13 @@ export function createUseStep(ctx) {
|
|
|
121
122
|
catch (error) {
|
|
122
123
|
reject(error);
|
|
123
124
|
}
|
|
124
|
-
}
|
|
125
|
+
});
|
|
125
126
|
return EventConsumerResult.Finished;
|
|
126
127
|
}
|
|
127
128
|
// An unexpected event type has been received, this event log looks corrupted. Let's fail immediately.
|
|
128
|
-
|
|
129
|
+
ctx.promiseQueue = ctx.promiseQueue.then(() => {
|
|
129
130
|
ctx.onWorkflowError(new WorkflowRuntimeError(`Unexpected event type for step ${correlationId} (name: ${stepName}) "${event.eventType}"`));
|
|
130
|
-
}
|
|
131
|
+
});
|
|
131
132
|
return EventConsumerResult.Finished;
|
|
132
133
|
});
|
|
133
134
|
return promise;
|
|
@@ -157,4 +158,4 @@ export function createUseStep(ctx) {
|
|
|
157
158
|
return stepFunction;
|
|
158
159
|
};
|
|
159
160
|
}
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFnQyxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3pDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVELE1BQU0sVUFBVSxhQUFhLENBQUMsR0FBZ0M7SUFDNUQsT0FBTyxTQUFTLE9BQU8sQ0FDckIsUUFBZ0IsRUFDaEIsYUFBa0Q7UUFFbEQsdUZBQXVGO1FBQ3ZGLE1BQU0sWUFBWSxHQUFHLFVBRW5CLEdBQUcsSUFBVTtZQUViLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLGFBQWEsRUFBVSxDQUFDO1lBRTdELE1BQU0sYUFBYSxHQUFHLFFBQVEsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7WUFFbkQsTUFBTSxTQUFTLEdBQTRCO2dCQUN6QyxJQUFJLEVBQUUsTUFBTTtnQkFDWixhQUFhO2dCQUNiLFFBQVE7Z0JBQ1IsSUFBSTthQUNMLENBQUM7WUFFRix1RUFBdUU7WUFDdkUsOERBQThEO1lBQzlELElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDL0QsU0FBUyxDQUFDLE9BQU8sR0FBRyxJQUFvQixDQUFDO1lBQzNDLENBQUM7WUFFRCxpRUFBaUU7WUFDakUsTUFBTSxXQUFXLEdBQUcsYUFBYSxFQUFFLEVB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
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "4.
|
|
1
|
+
export declare const version = "4.2.0-beta.64";
|
|
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
|
+
export const version = '4.2.0-beta.64';
|
|
3
3
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQjtBQUMzQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFBIn0=
|
|
@@ -9,14 +9,17 @@ export function createHook(options) {
|
|
|
9
9
|
return createHookFn(options);
|
|
10
10
|
}
|
|
11
11
|
export function createWebhook(options) {
|
|
12
|
-
const { respondWith, ...rest } = options ?? {};
|
|
12
|
+
const { respondWith, token, ...rest } = (options ?? {});
|
|
13
|
+
if (token !== undefined) {
|
|
14
|
+
throw new Error('`createWebhook()` does not accept a `token` option. Webhook tokens are always randomly generated. Use `createHook()` with `resumeHook()` for deterministic token patterns.');
|
|
15
|
+
}
|
|
13
16
|
let metadata;
|
|
14
17
|
if (typeof respondWith !== 'undefined') {
|
|
15
18
|
metadata = { respondWith };
|
|
16
19
|
}
|
|
17
|
-
const hook = createHook({ ...rest, metadata });
|
|
20
|
+
const hook = createHook({ ...rest, metadata, isWebhook: true });
|
|
18
21
|
const { url } = getWorkflowMetadata();
|
|
19
22
|
hook.url = `${url}/.well-known/workflow/v1/webhook/${encodeURIComponent(hook.token)}`;
|
|
20
23
|
return hook;
|
|
21
24
|
}
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvY3JlYXRlLWhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWpFLE1BQU0sVUFBVSxVQUFVLENBQVUsT0FBcUI7SUFDdkQsK0ZBQStGO0lBQy9GLE1BQU0sWUFBWSxHQUFJLFVBQWtCLENBQ3RDLG9CQUFvQixDQUNHLENBQUM7SUFDMUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQ2IsOERBQThELENBQy9ELENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQU1ELE1BQU0sVUFBVSxhQUFhLENBQzNCLE9BQXdCO0lBRXhCLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUVyRCxDQUFDO0lBRUYsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FDYiw0S0FBNEssQ0FDN0ssQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLFFBQXlELENBQUM7SUFDOUQsSUFBSSxPQUFPLFdBQVcsS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUN2QyxRQUFRLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FFOUIsQ0FBQztJQUVqQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztJQUN0QyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxvQ0FBb0Msa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFFdEYsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/workflow/hook.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAI3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAGjE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,2BAA2B,IAChC,CAAC,GAAG,GAAG,EAAE,UAAS,WAAgB,KAAG,IAAI,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/workflow/hook.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAI3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAGjE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,2BAA2B,IAChC,CAAC,GAAG,GAAG,EAAE,UAAS,WAAgB,KAAG,IAAI,CAAC,CAAC,CAAC,CAuQ5E"}
|
package/dist/workflow/hook.js
CHANGED
|
@@ -10,11 +10,13 @@ export function createCreateHook(ctx) {
|
|
|
10
10
|
const correlationId = `hook_${ctx.generateUlid()}`;
|
|
11
11
|
const token = options.token ?? ctx.generateNanoid();
|
|
12
12
|
// Add hook creation to invocations queue (using Map for O(1) operations)
|
|
13
|
+
const isWebhook = options.isWebhook ?? false;
|
|
13
14
|
ctx.invocationsQueue.set(correlationId, {
|
|
14
15
|
type: 'hook',
|
|
15
16
|
correlationId,
|
|
16
17
|
token,
|
|
17
18
|
metadata: options.metadata,
|
|
19
|
+
isWebhook,
|
|
18
20
|
});
|
|
19
21
|
// Queue of hook events that have been received but not yet processed
|
|
20
22
|
const payloadsQueue = [];
|
|
@@ -34,9 +36,9 @@ export function createCreateHook(ctx) {
|
|
|
34
36
|
if (!event) {
|
|
35
37
|
eventLogEmpty = true;
|
|
36
38
|
if (promises.length > 0) {
|
|
37
|
-
|
|
39
|
+
ctx.promiseQueue = ctx.promiseQueue.then(() => {
|
|
38
40
|
ctx.onWorkflowError(new WorkflowSuspension(ctx.invocationsQueue, ctx.globalThis));
|
|
39
|
-
}
|
|
41
|
+
});
|
|
40
42
|
}
|
|
41
43
|
return EventConsumerResult.NotConsumed;
|
|
42
44
|
}
|
|
@@ -56,30 +58,40 @@ export function createCreateHook(ctx) {
|
|
|
56
58
|
if (event.eventType === 'hook_conflict') {
|
|
57
59
|
// Remove this hook from the invocations queue
|
|
58
60
|
ctx.invocationsQueue.delete(correlationId);
|
|
59
|
-
// Store the conflict event so we can reject any awaited promises
|
|
61
|
+
// Store the conflict event so we can reject any awaited promises.
|
|
62
|
+
// Chain through promiseQueue to ensure deterministic ordering.
|
|
60
63
|
const conflictEvent = event;
|
|
61
64
|
const conflictError = new WorkflowRuntimeError(`Hook token "${conflictEvent.eventData.token}" is already in use by another workflow`, { slug: ERROR_SLUGS.HOOK_CONFLICT });
|
|
62
|
-
// Reject any pending promises
|
|
63
|
-
for (const resolver of promises) {
|
|
64
|
-
resolver.reject(conflictError);
|
|
65
|
-
}
|
|
66
|
-
promises.length = 0;
|
|
67
65
|
// Mark that we have a conflict so future awaits also reject
|
|
68
66
|
hasConflict = true;
|
|
69
67
|
conflictErrorRef = conflictError;
|
|
68
|
+
// Capture and drain pending promises synchronously so the null event
|
|
69
|
+
// handler won't see them and trigger a spurious WorkflowSuspension.
|
|
70
|
+
// The actual rejections are deferred through promiseQueue for ordering.
|
|
71
|
+
const pendingPromises = promises.slice();
|
|
72
|
+
promises.length = 0;
|
|
73
|
+
ctx.promiseQueue = ctx.promiseQueue.then(() => {
|
|
74
|
+
for (const resolver of pendingPromises) {
|
|
75
|
+
resolver.reject(conflictError);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
70
78
|
return EventConsumerResult.Consumed;
|
|
71
79
|
}
|
|
72
80
|
if (event.eventType === 'hook_received') {
|
|
73
81
|
if (promises.length > 0) {
|
|
74
82
|
const next = promises.shift();
|
|
75
83
|
if (next) {
|
|
76
|
-
// Reconstruct the payload from the event data
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
84
|
+
// Reconstruct the payload from the event data.
|
|
85
|
+
// Chain through ctx.promiseQueue to ensure that async
|
|
86
|
+
// deserialization (e.g., decryption) resolves in event log order.
|
|
87
|
+
ctx.promiseQueue = ctx.promiseQueue.then(async () => {
|
|
88
|
+
try {
|
|
89
|
+
const payload = await hydrateStepReturnValue(event.eventData.payload, ctx.runId, ctx.encryptionKey, ctx.globalThis);
|
|
90
|
+
next.resolve(payload);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
next.reject(error);
|
|
94
|
+
}
|
|
83
95
|
});
|
|
84
96
|
}
|
|
85
97
|
}
|
|
@@ -97,9 +109,9 @@ export function createCreateHook(ctx) {
|
|
|
97
109
|
return EventConsumerResult.Finished;
|
|
98
110
|
}
|
|
99
111
|
// An unexpected event type has been received, this event log looks corrupted. Let's fail immediately.
|
|
100
|
-
|
|
112
|
+
ctx.promiseQueue = ctx.promiseQueue.then(() => {
|
|
101
113
|
ctx.onWorkflowError(new WorkflowRuntimeError(`Unexpected event type for hook ${correlationId} (token: ${token}) "${event.eventType}"`));
|
|
102
|
-
}
|
|
114
|
+
});
|
|
103
115
|
return EventConsumerResult.Finished;
|
|
104
116
|
});
|
|
105
117
|
// Track if the hook has been disposed
|
|
@@ -107,21 +119,27 @@ export function createCreateHook(ctx) {
|
|
|
107
119
|
// Helper function to create a new promise that waits for the next hook payload
|
|
108
120
|
function createHookPromise() {
|
|
109
121
|
const resolvers = withResolvers();
|
|
110
|
-
// If we have a conflict, reject
|
|
111
|
-
//
|
|
122
|
+
// If we have a conflict, reject through the promiseQueue to maintain
|
|
123
|
+
// deterministic ordering with any prior queued resolutions.
|
|
112
124
|
if (hasConflict && conflictErrorRef) {
|
|
113
|
-
|
|
125
|
+
ctx.promiseQueue = ctx.promiseQueue.then(() => {
|
|
126
|
+
resolvers.reject(conflictErrorRef);
|
|
127
|
+
});
|
|
114
128
|
return resolvers.promise;
|
|
115
129
|
}
|
|
116
130
|
if (payloadsQueue.length > 0) {
|
|
117
131
|
const nextPayload = payloadsQueue.shift();
|
|
118
132
|
if (nextPayload) {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
133
|
+
// Chain through ctx.promiseQueue to ensure that async
|
|
134
|
+
// deserialization (e.g., decryption) resolves in event log order.
|
|
135
|
+
ctx.promiseQueue = ctx.promiseQueue.then(async () => {
|
|
136
|
+
try {
|
|
137
|
+
const payload = await hydrateStepReturnValue(nextPayload.eventData.payload, ctx.runId, ctx.encryptionKey, ctx.globalThis);
|
|
138
|
+
resolvers.resolve(payload);
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
resolvers.reject(error);
|
|
142
|
+
}
|
|
125
143
|
});
|
|
126
144
|
return resolvers.promise;
|
|
127
145
|
}
|
|
@@ -129,9 +147,9 @@ export function createCreateHook(ctx) {
|
|
|
129
147
|
if (eventLogEmpty) {
|
|
130
148
|
// If the event log is already empty then we know the hook will not be resolved.
|
|
131
149
|
// Treat this case as a "step not run" scenario and suspend the workflow.
|
|
132
|
-
|
|
150
|
+
ctx.promiseQueue = ctx.promiseQueue.then(() => {
|
|
133
151
|
ctx.onWorkflowError(new WorkflowSuspension(ctx.invocationsQueue, ctx.globalThis));
|
|
134
|
-
}
|
|
152
|
+
});
|
|
135
153
|
}
|
|
136
154
|
promises.push(resolvers);
|
|
137
155
|
return resolvers.promise;
|
|
@@ -157,9 +175,9 @@ export function createCreateHook(ctx) {
|
|
|
157
175
|
// never deliver another hook_received after disposal.
|
|
158
176
|
if (promises.length > 0) {
|
|
159
177
|
promises.length = 0;
|
|
160
|
-
|
|
178
|
+
ctx.promiseQueue = ctx.promiseQueue.then(() => {
|
|
161
179
|
ctx.onWorkflowError(new WorkflowSuspension(ctx.invocationsQueue, ctx.globalThis));
|
|
162
|
-
}
|
|
180
|
+
});
|
|
163
181
|
}
|
|
164
182
|
webhookLogger.debug('Hook disposed', { correlationId, token });
|
|
165
183
|
}
|
|
@@ -188,4 +206,4 @@ export function createCreateHook(ctx) {
|
|
|
188
206
|
return hook;
|
|
189
207
|
};
|
|
190
208
|
}
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JrZmxvdy9ob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEVBQTZCLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzNFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTdELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFnQztJQUMvRCxPQUFPLFNBQVMsY0FBYyxDQUFVLFVBQXVCLEVBQUU7UUFDL0QsNkJBQTZCO1FBQzdCLE1BQU0sYUFBYSxHQUFHLFFBQVEsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7UUFDbkQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFcEQseUVBQXlFO1FBQ3pFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDO1FBRTdDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFO1lBQ3RDLElBQUksRUFBRSxNQUFNO1lBQ1osYUFBYTtZQUNiLEtBQUs7WUFDTCxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7WUFDMUIsU0FBUztTQUNWLENBQUMsQ0FBQztRQUVILHFFQUFxRTtRQUNyRSxNQUFNLGFBQWEsR0FBd0IsRUFBRSxDQUFDO1FBRTlDLDBEQUEwRDtRQUMxRCxNQUFNLFFBQVEsR0FBOEIsRUFBRSxDQUFDO1FBRS9DLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztRQUUxQixtRUFBbUU7UUFDbkUsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFFN0IsNkRBQTZEO1FBQzdELElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLGdCQUFnQixHQUFnQyxJQUFJLENBQUM7UUFFekQsYUFBYSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLEdBQUcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDckMseURBQXlEO1lBQ3pELHlGQUF5RjtZQUN6Riw0RUFBNEU7WUFDNUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLGFBQWEsR0FBRyxJQUFJLENBQUM7Z0JBRXJCLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDeEIsR0FBRyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7d0JBQzVDLEdBQUcsQ0FBQyxlQUFlLENBQ2pCLElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FDN0QsQ0FBQztvQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELE9BQU8sbUJBQW1CLENBQUMsV0FBVyxDQUFDO1lBQ3pDLENBQUM7WUFFRCxJQUFJLEtBQUssQ0FBQyxhQUFhLEtBQUssYUFBYSxFQUFFLENBQUM7Z0JBQzFDLHVGQUF1RjtnQkFDdkYsT0FBTyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7WUFDekMsQ0FBQztZQUVELG9FQUFvRTtZQUNwRSxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssY0FBYyxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzFELElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7b0JBQzNDLFNBQVMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUNuQyxDQUFDO2dCQUNELE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO1lBQ3RDLENBQUM7WUFFRCxvRUFBb0U7WUFDcEUsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLGVBQWUsRUFBRSxDQUFDO2dCQUN4Qyw4Q0FBOEM7Z0JBQzlDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBRTNDLGtFQUFrRTtnQkFDbEUsK0RBQStEO2dCQUMvRCxNQUFNLGFBQWEsR0FBRyxLQUEwQixDQUFDO2dCQUNqRCxNQUFNLGFBQWEsR0FBRyxJQUFJLG9CQUFvQixDQUM1QyxlQUFlLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyx5Q0FBeUMsRUFDckYsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUNwQyxDQUFDO2dCQUVGLDREQUE0RDtnQkFDNUQsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDbkIsZ0JBQWdCLEdBQUcsYUFBYSxDQUFDO2dCQUVqQyxxRUFBcUU7Z0JBQ3JFLG9FQUFvRTtnQkFDcEUsd0VBQXdFO2dCQUN4RSxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3pDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUVwQixHQUFHLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDNUMsS0FBSyxNQUFNLFFBQVEsSUFBSSxlQUFlLEVBQUUsQ0FBQzt3QkFDdkMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDakMsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFFSCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztZQUN0QyxDQUFDO1lBRUQsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLGVBQWUsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3hCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxJQUFJLEVBQUUsQ0FBQzt3QkFDVCwrQ0FBK0M7d0JBQy9DLHNEQUFzRDt3QkFDdEQsa0VBQWtFO3dCQUNsRSxHQUFHLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFOzRCQUNsRCxJQUFJLENBQUM7Z0NBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxzQkFBc0IsQ0FDMUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQ3ZCLEdBQUcsQ0FBQyxLQUFLLEVBQ1QsR0FBRyxDQUFDLGFBQWEsRUFDakIsR0FBRyxDQUFDLFVBQVUsQ0FDZixDQUFDO2dDQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBWSxDQUFDLENBQUM7NEJBQzdCLENBQUM7NEJBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQ0FDZixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUNyQixDQUFDO3dCQUNILENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxDQUFDO29CQUNOLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVCLENBQUM7Z0JBRUQsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7WUFDdEMsQ0FBQztZQUVELElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxlQUFlLEVBQUUsQ0FBQztnQkFDeEMsMEVBQTBFO2dCQUMxRSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMzQyxxREFBcUQ7Z0JBQ3JELGdCQUFnQixHQUFHLElBQUksQ0FBQztnQkFDeEIsc0RBQXNEO2dCQUN0RCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztZQUN0QyxDQUFDO1lBRUQsc0dBQXNHO1lBQ3RHLEdBQUcsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUM1QyxHQUFHLENBQUMsZUFBZSxDQUNqQixJQUFJLG9CQUFvQixDQUN0QixrQ0FBa0MsYUFBYSxZQUFZLEtBQUssTUFBTSxLQUFLLENBQUMsU0FBUyxHQUFHLENBQ3pGLENBQ0YsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxzQ0FBc0M7UUFDdEMsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBRXZCLCtFQUErRTtRQUMvRSxTQUFTLGlCQUFpQjtZQUN4QixNQUFNLFNBQVMsR0FBRyxhQUFhLEVBQUssQ0FBQztZQUVyQyxxRUFBcUU7WUFDckUsNERBQTREO1lBQzVELElBQUksV0FBVyxJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3BDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUM1QyxTQUFTLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUMzQixDQUFDO1lBRUQsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3QixNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzFDLElBQUksV0FBVyxFQUFFLENBQUM7b0JBQ2hCLHNEQUFzRDtvQkFDdEQsa0VBQWtFO29CQUNsRSxHQUFHLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO3dCQUNsRCxJQUFJLENBQUM7NEJBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxzQkFBc0IsQ0FDMUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQzdCLEdBQUcsQ0FBQyxLQUFLLEVBQ1QsR0FBRyxDQUFDLGFBQWEsRUFDakIsR0FBRyxDQUFDLFVBQVUsQ0FDZixDQUFDOzRCQUNGLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBWSxDQUFDLENBQUM7d0JBQ2xDLENBQUM7d0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQzs0QkFDZixTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUMxQixDQUFDO29CQUNILENBQUMsQ0FBQyxDQUFDO29CQUNILE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQztnQkFDM0IsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixnRkFBZ0Y7Z0JBQ2hGLHlFQUF5RTtnQkFDekUsR0FBRyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQzVDLEdBQUcsQ0FBQyxlQUFlLENBQ2pCLElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FDN0QsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXpCLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUMzQixDQUFDO1FBRUQsc0NBQXNDO1FBQ3RDLFNBQVMsV0FBVztZQUNsQixJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxrQ0FBa0M7WUFDNUMsQ0FBQztZQUNELFVBQVUsR0FBRyxJQUFJLENBQUM7WUFFbEIsNEVBQTRFO1lBQzVFLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDckIsT0FBTztZQUNULENBQUM7WUFFRCwrQ0FBK0M7WUFDL0MsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMxRCxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUMzQyxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUM1QixDQUFDO1lBRUQsNERBQTREO1lBQzVELHlFQUF5RTtZQUN6RSxzRUFBc0U7WUFDdEUsc0RBQXNEO1lBQ3RELElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ3BCLEdBQUcsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUM1QyxHQUFHLENBQUMsZUFBZSxDQUNqQixJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQzdELENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsYUFBYSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQVk7WUFDcEIsS0FBSztZQUVMLHNFQUFzRTtZQUN0RSxJQUFJLENBQ0YsV0FBcUUsRUFDckUsVUFBdUU7Z0JBRXZFLE9BQU8saUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzNELENBQUM7WUFFRCwyREFBMkQ7WUFDM0QsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO2dCQUMzQixPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ25CLE1BQU0sTUFBTSxJQUFJLENBQUM7Z0JBQ25CLENBQUM7WUFDSCxDQUFDO1lBRUQsT0FBTyxFQUFFLFdBQVc7WUFFcEIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsV0FBVztTQUM5QixDQUFDO1FBRUYscUVBQXFFO1FBQ3JFLG9FQUFvRTtRQUNwRSxpQ0FBaUM7UUFDakMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ2hELElBQUksU0FBUyxJQUFJLFNBQVMsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0MsSUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUN6QyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7QUFDSixDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/workflow/sleep.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/workflow/sleep.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAGtC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAEjE,wBAAgB,WAAW,CAAC,GAAG,EAAE,2BAA2B,IAExD,OAAO,WAAW,GAAG,IAAI,GAAG,MAAM,KACjC,OAAO,CAAC,IAAI,CAAC,CAsEjB"}
|
package/dist/workflow/sleep.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { WorkflowRuntimeError } from '@workflow/errors';
|
|
1
2
|
import { parseDurationToDate, withResolvers } from '@workflow/utils';
|
|
2
3
|
import { EventConsumerResult } from '../events-consumer.js';
|
|
3
4
|
import { WorkflowSuspension } from '../global.js';
|
|
4
|
-
import { WorkflowRuntimeError } from '@workflow/errors';
|
|
5
5
|
export function createSleep(ctx) {
|
|
6
6
|
return async function sleepImpl(param) {
|
|
7
7
|
const { promise, resolve } = withResolvers();
|
|
@@ -19,9 +19,9 @@ export function createSleep(ctx) {
|
|
|
19
19
|
// If there are no events and we're waiting for wait_completed,
|
|
20
20
|
// suspend the workflow until the wait fires
|
|
21
21
|
if (!event) {
|
|
22
|
-
|
|
22
|
+
ctx.promiseQueue = ctx.promiseQueue.then(() => {
|
|
23
23
|
ctx.onWorkflowError(new WorkflowSuspension(ctx.invocationsQueue, ctx.globalThis));
|
|
24
|
-
}
|
|
24
|
+
});
|
|
25
25
|
return EventConsumerResult.NotConsumed;
|
|
26
26
|
}
|
|
27
27
|
if (event.correlationId !== correlationId) {
|
|
@@ -43,19 +43,20 @@ export function createSleep(ctx) {
|
|
|
43
43
|
if (event.eventType === 'wait_completed') {
|
|
44
44
|
// Remove this wait from the invocations queue (O(1) delete using Map)
|
|
45
45
|
ctx.invocationsQueue.delete(correlationId);
|
|
46
|
-
// Wait has elapsed
|
|
47
|
-
|
|
46
|
+
// Wait has elapsed - chain through promiseQueue to ensure
|
|
47
|
+
// deterministic ordering of all promise resolutions.
|
|
48
|
+
ctx.promiseQueue = ctx.promiseQueue.then(() => {
|
|
48
49
|
resolve();
|
|
49
|
-
}
|
|
50
|
+
});
|
|
50
51
|
return EventConsumerResult.Finished;
|
|
51
52
|
}
|
|
52
53
|
// An unexpected event type has been received, this event log looks corrupted. Let's fail immediately.
|
|
53
|
-
|
|
54
|
+
ctx.promiseQueue = ctx.promiseQueue.then(() => {
|
|
54
55
|
ctx.onWorkflowError(new WorkflowRuntimeError(`Unexpected event type for wait ${correlationId} "${event.eventType}"`));
|
|
55
|
-
}
|
|
56
|
+
});
|
|
56
57
|
return EventConsumerResult.Finished;
|
|
57
58
|
});
|
|
58
59
|
return promise;
|
|
59
60
|
};
|
|
60
61
|
}
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvc2xlZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBZ0Msa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHaEYsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFnQztJQUMxRCxPQUFPLEtBQUssVUFBVSxTQUFTLENBQzdCLEtBQWtDO1FBRWxDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsYUFBYSxFQUFRLENBQUM7UUFDbkQsTUFBTSxhQUFhLEdBQUcsUUFBUSxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztRQUVuRCw0QkFBNEI7UUFDNUIsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFNUMsZ0VBQWdFO1FBQ2hFLE1BQU0sUUFBUSxHQUE0QjtZQUN4QyxJQUFJLEVBQUUsTUFBTTtZQUNaLGFBQWE7WUFDYixRQUFRO1NBQ1QsQ0FBQztRQUNGLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRWxELEdBQUcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDckMsK0RBQStEO1lBQy9ELDRDQUE0QztZQUM1QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1gsR0FBRyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQzVDLEdBQUcsQ0FBQyxlQUFlLENBQ2pCLElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FDN0QsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztZQUN6QyxDQUFDO1lBRUQsSUFBSSxLQUFLLENBQUMsYUFBYSxLQUFLLGFBQWEsRUFBRSxDQUFDO2dCQUMxQyx1RkFBdUY7Z0JBQ3ZGLE9BQU8sbUJBQW1CLENBQUMsV0FBVyxDQUFDO1lBQ3pDLENBQUM7WUFFRCw2RUFBNkU7WUFDN0UsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLGNBQWMsRUFBRSxDQUFDO2dCQUN2Qyx1RUFBdUU7Z0JBQ3ZFLHdCQUF3QjtnQkFDeEIsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDM0MsU0FBUyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7b0JBQ2pDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7Z0JBQ2hELENBQUM7Z0JBQ0QsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7WUFDdEMsQ0FBQztZQUVELGlDQUFpQztZQUNqQyxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztnQkFDekMsc0VBQXNFO2dCQUN0RSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUUzQywwREFBMEQ7Z0JBQzFELHFEQUFxRDtnQkFDckQsR0FBRyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQzVDLE9BQU8sRUFBRSxDQUFDO2dCQUNaLENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO1lBQ3RDLENBQUM7WUFFRCxzR0FBc0c7WUFDdEcsR0FBRyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQzVDLEdBQUcsQ0FBQyxlQUFlLENBQ2pCLElBQUksb0JBQW9CLENBQ3RCLGtDQUFrQyxhQUFhLEtBQUssS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUN2RSxDQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyJ9
|
package/dist/workflow.d.ts.map
CHANGED
|
@@ -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,
|
|
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,CAqqB/B"}
|