@workflow/core 5.0.0-beta.4 → 5.0.0-beta.41
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/attribute-changes.d.ts +7 -0
- package/dist/attribute-changes.d.ts.map +1 -0
- package/dist/attribute-changes.js +25 -0
- package/dist/capabilities.d.ts +33 -1
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +71 -4
- package/dist/capture-stack.d.ts +16 -0
- package/dist/capture-stack.d.ts.map +1 -0
- package/dist/capture-stack.js +21 -0
- package/dist/class-serialization.d.ts +32 -0
- package/dist/class-serialization.d.ts.map +1 -1
- package/dist/class-serialization.js +37 -1
- package/dist/classify-error.d.ts +26 -3
- package/dist/classify-error.d.ts.map +1 -1
- package/dist/classify-error.js +109 -6
- package/dist/context-errors.d.ts +27 -0
- package/dist/context-errors.d.ts.map +1 -0
- package/dist/context-errors.js +101 -0
- package/dist/context-violation-error.d.ts +97 -0
- package/dist/context-violation-error.d.ts.map +1 -0
- package/dist/context-violation-error.js +149 -0
- package/dist/create-hook.d.ts +62 -4
- package/dist/create-hook.d.ts.map +1 -1
- package/dist/create-hook.js +4 -3
- package/dist/define-hook.d.ts.map +1 -1
- package/dist/define-hook.js +20 -5
- package/dist/describe-error.d.ts +70 -0
- package/dist/describe-error.d.ts.map +1 -0
- package/dist/describe-error.js +189 -0
- package/dist/encryption.d.ts +37 -3
- package/dist/encryption.d.ts.map +1 -1
- package/dist/encryption.js +97 -31
- package/dist/events-consumer.d.ts +147 -1
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +444 -43
- package/dist/flushable-stream.d.ts +65 -10
- package/dist/flushable-stream.d.ts.map +1 -1
- package/dist/flushable-stream.js +131 -18
- package/dist/global.d.ts +37 -1
- package/dist/global.d.ts.map +1 -1
- package/dist/global.js +21 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/log-format.d.ts +25 -0
- package/dist/log-format.d.ts.map +1 -0
- package/dist/log-format.js +250 -0
- package/dist/logger.d.ts +29 -30
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +82 -32
- package/dist/private.d.ts +246 -8
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +345 -9
- package/dist/replay-payload-cache.d.ts +68 -0
- package/dist/replay-payload-cache.d.ts.map +1 -0
- package/dist/replay-payload-cache.js +160 -0
- package/dist/runtime/compute-instance.d.ts +12 -0
- package/dist/runtime/compute-instance.d.ts.map +1 -0
- package/dist/runtime/compute-instance.js +13 -0
- package/dist/runtime/constants.d.ts +251 -0
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +425 -16
- package/dist/runtime/count-step-started-events.d.ts +52 -0
- package/dist/runtime/count-step-started-events.d.ts.map +1 -0
- package/dist/runtime/count-step-started-events.js +72 -0
- package/dist/runtime/deployment-guard.d.ts +99 -0
- package/dist/runtime/deployment-guard.d.ts.map +1 -0
- package/dist/runtime/deployment-guard.js +154 -0
- package/dist/runtime/get-port-lazy.d.ts +25 -0
- package/dist/runtime/get-port-lazy.d.ts.map +1 -0
- package/dist/runtime/get-port-lazy.js +92 -0
- package/dist/runtime/get-world-lazy.d.ts +23 -0
- package/dist/runtime/get-world-lazy.d.ts.map +1 -0
- package/dist/runtime/get-world-lazy.js +46 -0
- package/dist/runtime/helpers.d.ts +327 -10
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +586 -40
- package/dist/runtime/quickjs-assets.generated.d.ts +14 -0
- package/dist/runtime/quickjs-assets.generated.d.ts.map +1 -0
- package/dist/runtime/quickjs-assets.generated.js +30 -0
- package/dist/runtime/quickjs-entrypoint.d.ts +124 -0
- package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -0
- package/dist/runtime/quickjs-entrypoint.js +1437 -0
- package/dist/runtime/quickjs-runtime.d.ts +228 -0
- package/dist/runtime/quickjs-runtime.d.ts.map +1 -0
- package/dist/runtime/quickjs-runtime.js +2372 -0
- package/dist/runtime/quickjs-serde.d.ts +107 -0
- package/dist/runtime/quickjs-serde.d.ts.map +1 -0
- package/dist/runtime/quickjs-serde.js +2098 -0
- package/dist/runtime/replay-budget.d.ts +89 -0
- package/dist/runtime/replay-budget.d.ts.map +1 -0
- package/dist/runtime/replay-budget.js +139 -0
- package/dist/runtime/replay-recovery-reporter.d.ts +36 -0
- package/dist/runtime/replay-recovery-reporter.d.ts.map +1 -0
- package/dist/runtime/replay-recovery-reporter.js +64 -0
- package/dist/runtime/resume-hook.d.ts +27 -4
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +452 -76
- package/dist/runtime/run-id-time.d.ts +19 -0
- package/dist/runtime/run-id-time.d.ts.map +1 -0
- package/dist/runtime/run-id-time.js +42 -0
- package/dist/runtime/run.d.ts +8 -2
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +62 -15
- package/dist/runtime/runs.d.ts +54 -3
- package/dist/runtime/runs.d.ts.map +1 -1
- package/dist/runtime/runs.js +119 -13
- package/dist/runtime/start.d.ts +70 -1
- package/dist/runtime/start.d.ts.map +1 -1
- package/dist/runtime/start.js +313 -60
- package/dist/runtime/step-executor.d.ts +177 -0
- package/dist/runtime/step-executor.d.ts.map +1 -0
- package/dist/runtime/step-executor.js +946 -0
- package/dist/runtime/step-latency.d.ts +197 -0
- package/dist/runtime/step-latency.d.ts.map +1 -0
- package/dist/runtime/step-latency.js +207 -0
- package/dist/runtime/step-ownership.d.ts +72 -0
- package/dist/runtime/step-ownership.d.ts.map +1 -0
- package/dist/runtime/step-ownership.js +114 -0
- package/dist/runtime/step-single-flight.d.ts +12 -0
- package/dist/runtime/step-single-flight.d.ts.map +1 -0
- package/dist/runtime/step-single-flight.js +69 -0
- package/dist/runtime/suspension-handler.d.ts +109 -7
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +486 -140
- package/dist/runtime/vm-mode.d.ts +44 -0
- package/dist/runtime/vm-mode.d.ts.map +1 -0
- package/dist/runtime/vm-mode.js +62 -0
- package/dist/runtime/vm-serde-bundle.generated.d.ts +14 -0
- package/dist/runtime/vm-serde-bundle.generated.d.ts.map +1 -0
- package/dist/runtime/vm-serde-bundle.generated.js +16 -0
- package/dist/runtime/wait-continuation.d.ts +84 -0
- package/dist/runtime/wait-continuation.d.ts.map +1 -0
- package/dist/runtime/wait-continuation.js +105 -0
- package/dist/runtime/wait-until.d.ts +18 -0
- package/dist/runtime/wait-until.d.ts.map +1 -0
- package/dist/runtime/wait-until.js +42 -0
- package/dist/runtime/world-compatibility.d.ts +20 -0
- package/dist/runtime/world-compatibility.d.ts.map +1 -0
- package/dist/runtime/world-compatibility.js +32 -0
- package/dist/runtime/world-init.d.ts +50 -0
- package/dist/runtime/world-init.d.ts.map +1 -0
- package/dist/runtime/world-init.js +50 -0
- package/dist/runtime/world.d.ts +14 -2
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +101 -26
- package/dist/runtime.d.ts +17 -12
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +3135 -328
- package/dist/schemas.d.ts +1 -1
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +1 -1
- package/dist/sealed-box.d.ts +167 -0
- package/dist/sealed-box.d.ts.map +1 -0
- package/dist/sealed-box.js +571 -0
- package/dist/serialization/client.d.ts +17 -0
- package/dist/serialization/client.d.ts.map +1 -0
- package/dist/serialization/client.js +48 -0
- package/dist/serialization/codec-devalue-vm.d.ts +16 -0
- package/dist/serialization/codec-devalue-vm.d.ts.map +1 -0
- package/dist/serialization/codec-devalue-vm.js +148 -0
- package/dist/serialization/codec-devalue.d.ts +14 -0
- package/dist/serialization/codec-devalue.d.ts.map +1 -0
- package/dist/serialization/codec-devalue.js +105 -0
- package/dist/serialization/codec.d.ts +125 -0
- package/dist/serialization/codec.d.ts.map +1 -0
- package/dist/serialization/codec.js +17 -0
- package/dist/serialization/compression.d.ts +104 -0
- package/dist/serialization/compression.d.ts.map +1 -0
- package/dist/serialization/compression.js +260 -0
- package/dist/serialization/encryption.d.ts +134 -0
- package/dist/serialization/encryption.d.ts.map +1 -0
- package/dist/serialization/encryption.js +186 -0
- package/dist/serialization/errors.d.ts +34 -0
- package/dist/serialization/errors.d.ts.map +1 -0
- package/dist/serialization/errors.js +59 -0
- package/dist/serialization/format.d.ts +60 -0
- package/dist/serialization/format.d.ts.map +1 -0
- package/dist/serialization/format.js +97 -0
- package/dist/serialization/hardened.d.ts +155 -0
- package/dist/serialization/hardened.d.ts.map +1 -0
- package/dist/serialization/hardened.js +523 -0
- package/dist/serialization/index.d.ts +20 -0
- package/dist/serialization/index.d.ts.map +1 -0
- package/dist/serialization/index.js +22 -0
- package/dist/serialization/reducers/class-vm.d.ts +20 -0
- package/dist/serialization/reducers/class-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/class-vm.js +77 -0
- package/dist/serialization/reducers/class.d.ts +11 -0
- package/dist/serialization/reducers/class.d.ts.map +1 -0
- package/dist/serialization/reducers/class.js +73 -0
- package/dist/serialization/reducers/common-vm.d.ts +15 -0
- package/dist/serialization/reducers/common-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/common-vm.js +579 -0
- package/dist/serialization/reducers/common.d.ts +16 -0
- package/dist/serialization/reducers/common.d.ts.map +1 -0
- package/dist/serialization/reducers/common.js +478 -0
- package/dist/serialization/reducers/step-function-vm.d.ts +44 -0
- package/dist/serialization/reducers/step-function-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/step-function-vm.js +97 -0
- package/dist/serialization/reducers/step-function.d.ts +35 -0
- package/dist/serialization/reducers/step-function.d.ts.map +1 -0
- package/dist/serialization/reducers/step-function.js +104 -0
- package/dist/serialization/step.d.ts +17 -0
- package/dist/serialization/step.d.ts.map +1 -0
- package/dist/serialization/step.js +48 -0
- package/dist/serialization/types.d.ts +273 -0
- package/dist/serialization/types.d.ts.map +1 -0
- package/dist/serialization/types.js +35 -0
- package/dist/serialization/workflow-vm.d.ts +29 -0
- package/dist/serialization/workflow-vm.d.ts.map +1 -0
- package/dist/serialization/workflow-vm.js +71 -0
- package/dist/serialization/workflow.d.ts +29 -0
- package/dist/serialization/workflow.d.ts.map +1 -0
- package/dist/serialization/workflow.js +54 -0
- package/dist/serialization-format.d.ts +60 -4
- package/dist/serialization-format.d.ts.map +1 -1
- package/dist/serialization-format.js +276 -56
- package/dist/serialization.d.ts +374 -221
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +2300 -783
- package/dist/set-attributes.d.ts +13 -0
- package/dist/set-attributes.d.ts.map +1 -0
- package/dist/set-attributes.js +60 -0
- package/dist/sleep.d.ts.map +1 -1
- package/dist/sleep.js +3 -2
- package/dist/source-map.d.ts +25 -0
- package/dist/source-map.d.ts.map +1 -1
- package/dist/source-map.js +148 -10
- package/dist/step/context-storage.d.ts +61 -2
- package/dist/step/context-storage.d.ts.map +1 -1
- package/dist/step/context-storage.js +7 -5
- package/dist/step/get-closure-vars.d.ts.map +1 -1
- package/dist/step/get-closure-vars.js +3 -2
- package/dist/step/get-step-metadata.d.ts.map +1 -1
- package/dist/step/get-step-metadata.js +3 -2
- package/dist/step/get-workflow-metadata.d.ts.map +1 -1
- package/dist/step/get-workflow-metadata.js +3 -2
- package/dist/step/writable-stream.d.ts.map +1 -1
- package/dist/step/writable-stream.js +71 -7
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +225 -29
- package/dist/symbols.d.ts +54 -0
- package/dist/symbols.d.ts.map +1 -1
- package/dist/symbols.js +55 -1
- package/dist/telemetry/semantic-conventions.d.ts +265 -2
- package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
- package/dist/telemetry/semantic-conventions.js +190 -1
- package/dist/telemetry.d.ts +73 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +153 -16
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +23 -1
- package/dist/util.d.ts +16 -6
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +25 -16
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +2 -2
- package/dist/vm/index.d.ts.map +1 -1
- package/dist/vm/index.js +85 -14
- package/dist/vm/script-cache.d.ts +28 -0
- package/dist/vm/script-cache.d.ts.map +1 -0
- package/dist/vm/script-cache.js +140 -0
- package/dist/workflow/abort-controller.d.ts +65 -0
- package/dist/workflow/abort-controller.d.ts.map +1 -0
- package/dist/workflow/abort-controller.js +312 -0
- package/dist/workflow/attribute-dispatcher.d.ts +6 -0
- package/dist/workflow/attribute-dispatcher.d.ts.map +1 -0
- package/dist/workflow/attribute-dispatcher.js +48 -0
- package/dist/workflow/create-hook.d.ts.map +1 -1
- package/dist/workflow/create-hook.js +25 -3
- package/dist/workflow/define-hook.d.ts +1 -1
- package/dist/workflow/define-hook.d.ts.map +1 -1
- package/dist/workflow/define-hook.js +8 -4
- package/dist/workflow/get-workflow-metadata.d.ts.map +1 -1
- package/dist/workflow/get-workflow-metadata.js +14 -3
- package/dist/workflow/hook.d.ts.map +1 -1
- package/dist/workflow/hook.js +302 -36
- package/dist/workflow/index.d.ts +1 -0
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +5 -3
- package/dist/workflow/set-attributes.d.ts +68 -0
- package/dist/workflow/set-attributes.d.ts.map +1 -0
- package/dist/workflow/set-attributes.js +60 -0
- package/dist/workflow/sleep.d.ts.map +1 -1
- package/dist/workflow/sleep.js +57 -8
- package/dist/workflow/world-init-stub.d.ts +15 -0
- package/dist/workflow/world-init-stub.d.ts.map +1 -0
- package/dist/workflow/world-init-stub.js +15 -0
- package/dist/workflow.d.ts +79 -3
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +831 -553
- package/docs/api-reference/create-hook.mdx +79 -0
- package/docs/api-reference/create-webhook.mdx +1 -0
- package/docs/api-reference/define-hook.mdx +26 -24
- package/docs/api-reference/fatal-error.mdx +29 -7
- package/docs/api-reference/fetch.mdx +8 -4
- package/docs/api-reference/index.mdx +3 -0
- package/docs/api-reference/set-attributes.mdx +61 -0
- package/docs/api-reference/sleep.mdx +1 -1
- package/docs/foundations/cancellation.mdx +459 -0
- package/docs/foundations/errors-and-retries.mdx +7 -3
- package/docs/foundations/hooks.mdx +29 -0
- package/docs/foundations/idempotency.mdx +243 -11
- package/docs/foundations/index.mdx +1 -23
- package/docs/foundations/meta.json +3 -1
- package/docs/foundations/serialization.mdx +77 -41
- package/docs/foundations/starting-workflows.mdx +79 -2
- package/docs/foundations/streaming.mdx +14 -23
- package/docs/foundations/versioning.mdx +263 -0
- package/docs/how-it-works/cancellation.mdx +287 -0
- package/docs/how-it-works/code-transform.mdx +21 -17
- package/docs/how-it-works/encryption.mdx +5 -5
- package/docs/how-it-works/event-sourcing.mdx +17 -9
- package/docs/how-it-works/framework-integrations.mdx +96 -337
- package/docs/how-it-works/meta.json +2 -1
- package/package.json +31 -13
- package/dist/runtime/step-handler.d.ts +0 -2
- package/dist/runtime/step-handler.d.ts.map +0 -1
- package/dist/runtime/step-handler.js +0 -678
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { prepareReplayPayload, } from './serialization.js';
|
|
2
|
+
const MAX_MEMOIZED_PRIMITIVE_LENGTH = 4096;
|
|
3
|
+
function isMemoizablePrimitive(value) {
|
|
4
|
+
if (value === null)
|
|
5
|
+
return true;
|
|
6
|
+
const type = typeof value;
|
|
7
|
+
if (type === 'object' || type === 'function')
|
|
8
|
+
return false;
|
|
9
|
+
if (type === 'string') {
|
|
10
|
+
return value.length <= MAX_MEMOIZED_PRIMITIVE_LENGTH;
|
|
11
|
+
}
|
|
12
|
+
if (type === 'bigint') {
|
|
13
|
+
return value.toString().length <= MAX_MEMOIZED_PRIMITIVE_LENGTH;
|
|
14
|
+
}
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Invocation-scoped cache for replay payload hydration.
|
|
19
|
+
*
|
|
20
|
+
* A workflow invocation may replay the same event log through several fresh
|
|
21
|
+
* VMs. This cache keeps the VM-independent decrypt/decompress result across
|
|
22
|
+
* those replays. Deserialization still runs against each VM's globals so every
|
|
23
|
+
* replay receives fresh object graphs and correctly revived Workflow objects.
|
|
24
|
+
*
|
|
25
|
+
* Successful prepared plaintext remains resident for the invocation lifetime.
|
|
26
|
+
* Its memory cost is the sum of decrypted and decompressed payload sizes, but
|
|
27
|
+
* it never crosses workflow runs or queue deliveries.
|
|
28
|
+
*/
|
|
29
|
+
export class ReplayPayloadCache {
|
|
30
|
+
encryptionKey;
|
|
31
|
+
preparer;
|
|
32
|
+
preparedPayloads = new Map();
|
|
33
|
+
primitiveStepResults = new Map();
|
|
34
|
+
nextUnscannedEventIndex = 0;
|
|
35
|
+
constructor(encryptionKey, preparer = prepareReplayPayload) {
|
|
36
|
+
this.encryptionKey = encryptionKey;
|
|
37
|
+
this.preparer = preparer;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Start every missing binary preparation before workflow execution. Failures
|
|
41
|
+
* are intentionally retained: the ordered event consumer must observe the
|
|
42
|
+
* original rejection before that entry becomes retryable.
|
|
43
|
+
*/
|
|
44
|
+
async prewarm(workflowRun, events) {
|
|
45
|
+
const preparations = [];
|
|
46
|
+
const start = (cacheKey, value) => {
|
|
47
|
+
// Legacy flattened values may be mutated by devalue's unflatten and are
|
|
48
|
+
// therefore prepared only by their eventual consumer, never cached.
|
|
49
|
+
if (!(value instanceof Uint8Array))
|
|
50
|
+
return;
|
|
51
|
+
// Each replay scans the full event log, so awaiting cached promises here
|
|
52
|
+
// would add O(N^2) promise reactions over an N-step invocation. Only wait
|
|
53
|
+
// for preparations first discovered by this prewarm pass.
|
|
54
|
+
if (this.preparedPayloads.has(cacheKey))
|
|
55
|
+
return;
|
|
56
|
+
preparations.push(this.ensurePreparation(cacheKey, value));
|
|
57
|
+
};
|
|
58
|
+
start(this.workflowInputKey(workflowRun.runId), workflowRun.input);
|
|
59
|
+
// This cache is scoped to one invocation. Incremental loads and write
|
|
60
|
+
// response deltas only ever append, so the scanned length locates the
|
|
61
|
+
// events added since the previous replay. A reload that can insert events
|
|
62
|
+
// BELOW that length — a stale-snapshot restart replacing the log with a
|
|
63
|
+
// corrected one — must call `resetScan()` first, or the inserted events are
|
|
64
|
+
// never scanned. Prepared entries stay valid across that: they are keyed by
|
|
65
|
+
// event id, not by position.
|
|
66
|
+
for (let index = this.nextUnscannedEventIndex; index < events.length; index++) {
|
|
67
|
+
const event = events[index];
|
|
68
|
+
switch (event.eventType) {
|
|
69
|
+
case 'step_completed':
|
|
70
|
+
start(this.eventPayloadKey(event.eventId, 'result'), event.eventData?.result);
|
|
71
|
+
break;
|
|
72
|
+
case 'step_failed':
|
|
73
|
+
start(this.eventPayloadKey(event.eventId, 'error'), event.eventData?.error);
|
|
74
|
+
break;
|
|
75
|
+
case 'hook_received':
|
|
76
|
+
start(this.eventPayloadKey(event.eventId, 'payload'), event.eventData?.payload);
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
this.nextUnscannedEventIndex = events.length;
|
|
81
|
+
// Prewarming is speculative and must not fail replay before the matching
|
|
82
|
+
// event is consumed. allSettled also attaches rejection handlers eagerly.
|
|
83
|
+
await Promise.allSettled(preparations);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Forget how much of the event log has been scanned, so the next
|
|
87
|
+
* {@link prewarm} walks it from the start again.
|
|
88
|
+
*
|
|
89
|
+
* Required before a replay whose event log was reloaded rather than extended:
|
|
90
|
+
* a corrected log inserts the events the previous load was missing, which
|
|
91
|
+
* shifts every later position, so a positional resume would skip exactly the
|
|
92
|
+
* events the reload was for. Already-prepared payloads are kept — they are
|
|
93
|
+
* keyed by event id, so re-scanning re-observes them for free.
|
|
94
|
+
*/
|
|
95
|
+
resetScan() {
|
|
96
|
+
this.nextUnscannedEventIndex = 0;
|
|
97
|
+
}
|
|
98
|
+
/** Return the workflow input after shared host-side preparation. */
|
|
99
|
+
prepareWorkflowInput(workflowRun) {
|
|
100
|
+
return this.consumePreparation(this.workflowInputKey(workflowRun.runId), workflowRun.input);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Return an event payload after shared host-side preparation. A rejected
|
|
104
|
+
* preparation is evicted only after this ordered consumer requests it, so a
|
|
105
|
+
* later replay can retry without hiding the original failure.
|
|
106
|
+
*/
|
|
107
|
+
prepareEventPayload(eventId, field, value) {
|
|
108
|
+
return this.consumePreparation(this.eventPayloadKey(eventId, field), value);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Reuse final step values only when sharing them across VMs is unobservable.
|
|
112
|
+
* Objects and large strings/bigints always run `hydrate` again, producing a
|
|
113
|
+
* fresh VM-specific value from the separately cached prepared payload.
|
|
114
|
+
*/
|
|
115
|
+
async getStepResult(eventId, hydrate) {
|
|
116
|
+
if (this.primitiveStepResults.has(eventId)) {
|
|
117
|
+
return this.primitiveStepResults.get(eventId);
|
|
118
|
+
}
|
|
119
|
+
const value = await hydrate();
|
|
120
|
+
if (isMemoizablePrimitive(value)) {
|
|
121
|
+
this.primitiveStepResults.set(eventId, value);
|
|
122
|
+
}
|
|
123
|
+
return value;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Consumer-facing lookup. Binary payloads share preparation; legacy values
|
|
127
|
+
* bypass the cache because their flattened representation may be mutated.
|
|
128
|
+
*/
|
|
129
|
+
consumePreparation(cacheKey, value) {
|
|
130
|
+
if (!(value instanceof Uint8Array))
|
|
131
|
+
return this.runPreparation(value);
|
|
132
|
+
const preparation = this.ensurePreparation(cacheKey, value);
|
|
133
|
+
void preparation.catch(() => {
|
|
134
|
+
if (this.preparedPayloads.get(cacheKey) === preparation) {
|
|
135
|
+
this.preparedPayloads.delete(cacheKey);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
return preparation;
|
|
139
|
+
}
|
|
140
|
+
/** Start preparation once and share the exact in-flight promise. */
|
|
141
|
+
ensurePreparation(cacheKey, value) {
|
|
142
|
+
const cached = this.preparedPayloads.get(cacheKey);
|
|
143
|
+
if (cached)
|
|
144
|
+
return cached;
|
|
145
|
+
const preparation = this.runPreparation(value);
|
|
146
|
+
this.preparedPayloads.set(cacheKey, preparation);
|
|
147
|
+
return preparation;
|
|
148
|
+
}
|
|
149
|
+
/** Normalize synchronous and asynchronous preparers to one promise contract. */
|
|
150
|
+
async runPreparation(value) {
|
|
151
|
+
return this.preparer(value, this.encryptionKey);
|
|
152
|
+
}
|
|
153
|
+
workflowInputKey(runId) {
|
|
154
|
+
return `run:${runId}:input`;
|
|
155
|
+
}
|
|
156
|
+
eventPayloadKey(eventId, field) {
|
|
157
|
+
return `event:${eventId}:${field}`;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGF5LXBheWxvYWQtY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVwbGF5LXBheWxvYWQtY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUVMLG9CQUFvQixHQUVyQixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE1BQU0sNkJBQTZCLEdBQUcsSUFBSSxDQUFDO0FBRzNDLFNBQVMscUJBQXFCLENBQUMsS0FBYztJQUMzQyxJQUFJLEtBQUssS0FBSyxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDaEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7SUFDMUIsSUFBSSxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksS0FBSyxVQUFVO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDM0QsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdEIsT0FBUSxLQUFnQixDQUFDLE1BQU0sSUFBSSw2QkFBNkIsQ0FBQztJQUNuRSxDQUFDO0lBQ0QsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdEIsT0FBUSxLQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sSUFBSSw2QkFBNkIsQ0FBQztJQUM5RSxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBU1Y7SUFDQTtJQVRGLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUd4QyxDQUFDO0lBQ2Esb0JBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7SUFDM0QsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO0lBRXBDLFlBQ21CLGFBQXFDLEVBQ3JDLFdBQWtDLG9CQUFvQjtRQUR0RCxrQkFBYSxHQUFiLGFBQWEsQ0FBd0I7UUFDckMsYUFBUSxHQUFSLFFBQVEsQ0FBOEM7SUFDdEUsQ0FBQztJQUVKOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsT0FB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QyxDQUFDO1FBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxnRkFBZ0Y7SUFDeEUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFjO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFhO1FBQ3BDLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQztJQUM5QixDQUFDO0lBRU8sZUFBZSxDQUFDLE9BQWUsRUFBRSxLQUF5QjtRQUNoRSxPQUFPLFNBQVMsT0FBTyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ3JDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRXZlbnQsIFdvcmtmbG93UnVuIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB0eXBlIHsgUGF5bG9hZEtleSB9IGZyb20gJy4vc2VyaWFsaXphdGlvbi9lbmNyeXB0aW9uLmpzJztcbmltcG9ydCB7XG4gIHR5cGUgUHJlcGFyZWRSZXBsYXlQYXlsb2FkLFxuICBwcmVwYXJlUmVwbGF5UGF5bG9hZCxcbiAgdHlwZSBSZXBsYXlQYXlsb2FkUHJlcGFyZXIsXG59IGZyb20gJy4vc2VyaWFsaXphdGlvbi5qcyc7XG5cbmNvbnN0IE1BWF9NRU1PSVpFRF9QUklNSVRJVkVfTEVOR1RIID0gNDA5NjtcbnR5cGUgUmVwbGF5UGF5bG9hZEZpZWxkID0gJ3Jlc3VsdCcgfCAnZXJyb3InIHwgJ3BheWxvYWQnO1xuXG5mdW5jdGlvbiBpc01lbW9pemFibGVQcmltaXRpdmUodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgaWYgKHR5cGUgPT09ICdvYmplY3QnIHx8IHR5cGUgPT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuICh2YWx1ZSBhcyBzdHJpbmcpLmxlbmd0aCA8PSBNQVhfTUVNT0laRURfUFJJTUlUSVZFX0xFTkdUSDtcbiAgfVxuICBpZiAodHlwZSA9PT0gJ2JpZ2ludCcpIHtcbiAgICByZXR1cm4gKHZhbHVlIGFzIGJpZ2ludCkudG9TdHJpbmcoKS5sZW5ndGggPD0gTUFYX01FTU9JWkVEX1BSSU1JVElWRV9MRU5HVEg7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogSW52b2NhdGlvbi1zY29wZWQgY2FjaGUgZm9yIHJlcGxheSBwYXlsb2FkIGh5ZHJhdGlvbi5cbiAqXG4gKiBBIHdvcmtmbG93IGludm9jYXRpb24gbWF5IHJlcGxheSB0aGUgc2FtZSBldmVudCBsb2cgdGhyb3VnaCBzZXZlcmFsIGZyZXNoXG4gKiBWTXMuIFRoaXMgY2FjaGUga2VlcHMgdGhlIFZNLWluZGVwZW5kZW50IGRlY3J5cHQvZGVjb21wcmVzcyByZXN1bHQgYWNyb3NzXG4gKiB0aG9zZSByZXBsYXlzLiBEZXNlcmlhbGl6YXRpb24gc3RpbGwgcnVucyBhZ2FpbnN0IGVhY2ggVk0ncyBnbG9iYWxzIHNvIGV2ZXJ5XG4gKiByZXBsYXkgcmVjZWl2ZXMgZnJlc2ggb2JqZWN0IGdyYXBocyBhbmQgY29ycmVjdGx5IHJldml2ZWQgV29ya2Zsb3cgb2JqZWN0cy5cbiAqXG4gKiBTdWNjZXNzZnVsIHByZXBhcmVkIHBsYWludGV4dCByZW1haW5zIHJlc2lkZW50IGZvciB0aGUgaW52b2NhdGlvbiBsaWZldGltZS5cbiAqIEl0cyBtZW1vcnkgY29zdCBpcyB0aGUgc3VtIG9mIGRlY3J5cHRlZCBhbmQgZGVjb21wcmVzc2VkIHBheWxvYWQgc2l6ZXMsIGJ1dFxuICogaXQgbmV2ZXIgY3Jvc3NlcyB3b3JrZmxvdyBydW5zIG9yIHF1ZXVlIGRlbGl2ZXJpZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXBsYXlQYXlsb2FkQ2FjaGUge1xuICBwcml2YXRlIHJlYWRvbmx5IHByZXBhcmVkUGF5bG9hZHMgPSBuZXcgTWFwPFxuICAgIHN0cmluZyxcbiAgICBQcm9taXNlPFByZXBhcmVkUmVwbGF5UGF5bG9hZD5cbiAgPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHByaW1pdGl2ZVN0ZXBSZXN1bHRzID0gbmV3IE1hcDxzdHJpbmcsIHVua25vd24+KCk7XG4gIHByaXZhdGUgbmV4dFVuc2Nhbm5lZEV2ZW50SW5kZXggPSAwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZW5jcnlwdGlvbktleTogUGF5bG9hZEtleSB8IHVuZGVmaW5lZCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByZXBhcmVyOiBSZXBsYXlQYXlsb2FkUHJlcGFyZXIgPSBwcmVwYXJlUmVwbGF5UGF5bG9hZFxuICApIHt9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGV2ZXJ5IG1pc3NpbmcgYmluYXJ5IHByZXBhcmF0aW9uIGJlZm9yZSB3b3JrZmxvdyBleGVjdXRpb24uIEZhaWx1cmVzXG4gICAqIGFyZSBpbnRlbnRpb25hbGx5IHJldGFpbmVkOiB0aGUgb3JkZXJlZCBldmVudCBjb25zdW1lciBtdXN0IG9ic2VydmUgdGhlXG4gICAqIG9yaWdpbmFsIHJlamVjdGlvbiBiZWZvcmUgdGhhdCBlbnRyeSBiZWNvbWVzIHJldHJ5YWJsZS5cbiAgICovXG4gIGFzeW5jIHByZXdhcm0od29ya2Zsb3dSdW46IFdvcmtmbG93UnVuLCBldmVudHM6IEV2ZW50W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwcmVwYXJhdGlvbnM6IFByb21pc2U8UHJlcGFyZWRSZXBsYXlQYXlsb2FkPltdID0gW107XG4gICAgY29uc3Qgc3RhcnQgPSAoY2FjaGVLZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkID0+IHtcbiAgICAgIC8vIExlZ2FjeSBmbGF0dGVuZWQgdmFsdWVzIG1heSBiZSBtdXRhdGVkIGJ5IGRldmFsdWUncyB1bmZsYXR0ZW4gYW5kIGFyZVxuICAgICAgLy8gdGhlcmVmb3JlIHByZXBhcmVkIG9ubHkgYnkgdGhlaXIgZXZlbnR1YWwgY29uc3VtZXIsIG5ldmVyIGNhY2hlZC5cbiAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHJldHVybjtcblxuICAgICAgLy8gRWFjaCByZXBsYXkgc2NhbnMgdGhlIGZ1bGwgZXZlbnQgbG9nLCBzbyBhd2FpdGluZyBjYWNoZWQgcHJvbWlzZXMgaGVyZVxuICAgICAgLy8gd291bGQgYWRkIE8oTl4yKSBwcm9taXNlIHJlYWN0aW9ucyBvdmVyIGFuIE4tc3RlcCBpbnZvY2F0aW9uLiBPbmx5IHdhaXRcbiAgICAgIC8vIGZvciBwcmVwYXJhdGlvbnMgZmlyc3QgZGlzY292ZXJlZCBieSB0aGlzIHByZXdhcm0gcGFzcy5cbiAgICAgIGlmICh0aGlzLnByZXBhcmVkUGF5bG9hZHMuaGFzKGNhY2hlS2V5KSkgcmV0dXJuO1xuICAgICAgcHJlcGFyYXRpb25zLnB1c2godGhpcy5lbnN1cmVQcmVwYXJhdGlvbihjYWNoZUtleSwgdmFsdWUpKTtcbiAgICB9O1xuXG4gICAgc3RhcnQodGhpcy53b3JrZmxvd0lucHV0S2V5KHdvcmtmbG93UnVuLnJ1bklkKSwgd29ya2Zsb3dSdW4uaW5wdXQpO1xuICAgIC8vIFRoaXMgY2FjaGUgaXMgc2NvcGVkIHRvIG9uZSBpbnZvY2F0aW9uLiBJbmNyZW1lbnRhbCBsb2FkcyBhbmQgd3JpdGVcbiAgICAvLyByZXNwb25zZSBkZWx0YXMgb25seSBldmVyIGFwcGVuZCwgc28gdGhlIHNjYW5uZWQgbGVuZ3RoIGxvY2F0ZXMgdGhlXG4gICAgLy8gZXZlbnRzIGFkZGVkIHNpbmNlIHRoZSBwcmV2aW91cyByZXBsYXkuIEEgcmVsb2FkIHRoYXQgY2FuIGluc2VydCBldmVudHNcbiAgICAvLyBCRUxPVyB0aGF0IGxlbmd0aCDigJQgYSBzdGFsZS1zbmFwc2hvdCByZXN0YXJ0IHJlcGxhY2luZyB0aGUgbG9nIHdpdGggYVxuICAgIC8vIGNvcnJlY3RlZCBvbmUg4oCUIG11c3QgY2FsbCBgcmVzZXRTY2FuKClgIGZpcnN0LCBvciB0aGUgaW5zZXJ0ZWQgZXZlbnRzIGFyZVxuICAgIC8vIG5ldmVyIHNjYW5uZWQuIFByZXBhcmVkIGVudHJpZXMgc3RheSB2YWxpZCBhY3Jvc3MgdGhhdDogdGhleSBhcmUga2V5ZWQgYnlcbiAgICAvLyBldmVudCBpZCwgbm90IGJ5IHBvc2l0aW9uLlxuICAgIGZvciAoXG4gICAgICBsZXQgaW5kZXggPSB0aGlzLm5leHRVbnNjYW5uZWRFdmVudEluZGV4O1xuICAgICAgaW5kZXggPCBldmVudHMubGVuZ3RoO1xuICAgICAgaW5kZXgrK1xuICAgICkge1xuICAgICAgY29uc3QgZXZlbnQgPSBldmVudHNbaW5kZXhdO1xuICAgICAgc3dpdGNoIChldmVudC5ldmVudFR5cGUpIHtcbiAgICAgICAgY2FzZSAnc3RlcF9jb21wbGV0ZWQnOlxuICAgICAgICAgIHN0YXJ0KFxuICAgICAgICAgICAgdGhpcy5ldmVudFBheWxvYWRLZXkoZXZlbnQuZXZlbnRJZCwgJ3Jlc3VsdCcpLFxuICAgICAgICAgICAgZXZlbnQuZXZlbnREYXRhPy5yZXN1bHRcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzdGVwX2ZhaWxlZCc6XG4gICAgICAgICAgc3RhcnQoXG4gICAgICAgICAgICB0aGlzLmV2ZW50UGF5bG9hZEtleShldmVudC5ldmVudElkLCAnZXJyb3InKSxcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50RGF0YT8uZXJyb3JcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdob29rX3JlY2VpdmVkJzpcbiAgICAgICAgICBzdGFydChcbiAgICAgICAgICAgIHRoaXMuZXZlbnRQYXlsb2FkS2V5KGV2ZW50LmV2ZW50SWQsICdwYXlsb2FkJyksXG4gICAgICAgICAgICBldmVudC5ldmVudERhdGE/LnBheWxvYWRcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm5leHRVbnNjYW5uZWRFdmVudEluZGV4ID0gZXZlbnRzLmxlbmd0aDtcblxuICAgIC8vIFByZXdhcm1pbmcgaXMgc3BlY3VsYXRpdmUgYW5kIG11c3Qgbm90IGZhaWwgcmVwbGF5IGJlZm9yZSB0aGUgbWF0Y2hpbmdcbiAgICAvLyBldmVudCBpcyBjb25zdW1lZC4gYWxsU2V0dGxlZCBhbHNvIGF0dGFjaGVzIHJlamVjdGlvbiBoYW5kbGVycyBlYWdlcmx5LlxuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChwcmVwYXJhdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmdldCBob3cgbXVjaCBvZiB0aGUgZXZlbnQgbG9nIGhhcyBiZWVuIHNjYW5uZWQsIHNvIHRoZSBuZXh0XG4gICAqIHtAbGluayBwcmV3YXJtfSB3YWxrcyBpdCBmcm9tIHRoZSBzdGFydCBhZ2Fpbi5cbiAgICpcbiAgICogUmVxdWlyZWQgYmVmb3JlIGEgcmVwbGF5IHdob3NlIGV2ZW50IGxvZyB3YXMgcmVsb2FkZWQgcmF0aGVyIHRoYW4gZXh0ZW5kZWQ6XG4gICAqIGEgY29ycmVjdGVkIGxvZyBpbnNlcnRzIHRoZSBldmVudHMgdGhlIHByZXZpb3VzIGxvYWQgd2FzIG1pc3NpbmcsIHdoaWNoXG4gICAqIHNoaWZ0cyBldmVyeSBsYXRlciBwb3NpdGlvbiwgc28gYSBwb3NpdGlvbmFsIHJlc3VtZSB3b3VsZCBza2lwIGV4YWN0bHkgdGhlXG4gICAqIGV2ZW50cyB0aGUgcmVsb2FkIHdhcyBmb3IuIEFscmVhZHktcHJlcGFyZWQgcGF5bG9hZHMgYXJlIGtlcHQg4oCUIHRoZXkgYXJlXG4gICAqIGtleWVkIGJ5IGV2ZW50IGlkLCBzbyByZS1zY2FubmluZyByZS1vYnNlcnZlcyB0aGVtIGZvciBmcmVlLlxuICAgKi9cbiAgcmVzZXRTY2FuKCk6IHZvaWQge1xuICAgIHRoaXMubmV4dFVuc2Nhbm5lZEV2ZW50SW5kZXggPSAwO1xuICB9XG5cbiAgLyoqIFJldHVybiB0aGUgd29ya2Zsb3cgaW5wdXQgYWZ0ZXIgc2hhcmVkIGhvc3Qtc2lkZSBwcmVwYXJhdGlvbi4gKi9cbiAgcHJlcGFyZVdvcmtmbG93SW5wdXQoXG4gICAgd29ya2Zsb3dSdW46IFdvcmtmbG93UnVuXG4gICk6IFByb21pc2U8UHJlcGFyZWRSZXBsYXlQYXlsb2FkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3VtZVByZXBhcmF0aW9uKFxuICAgICAgdGhpcy53b3JrZmxvd0lucHV0S2V5KHdvcmtmbG93UnVuLnJ1bklkKSxcbiAgICAgIHdvcmtmbG93UnVuLmlucHV0XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gZXZlbnQgcGF5bG9hZCBhZnRlciBzaGFyZWQgaG9zdC1zaWRlIHByZXBhcmF0aW9uLiBBIHJlamVjdGVkXG4gICAqIHByZXBhcmF0aW9uIGlzIGV2aWN0ZWQgb25seSBhZnRlciB0aGlzIG9yZGVyZWQgY29uc3VtZXIgcmVxdWVzdHMgaXQsIHNvIGFcbiAgICogbGF0ZXIgcmVwbGF5IGNhbiByZXRyeSB3aXRob3V0IGhpZGluZyB0aGUgb3JpZ2luYWwgZmFpbHVyZS5cbiAgICovXG4gIHByZXBhcmVFdmVudFBheWxvYWQoXG4gICAgZXZlbnRJZDogc3RyaW5nLFxuICAgIGZpZWxkOiBSZXBsYXlQYXlsb2FkRmllbGQsXG4gICAgdmFsdWU6IHVua25vd25cbiAgKTogUHJvbWlzZTxQcmVwYXJlZFJlcGxheVBheWxvYWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25zdW1lUHJlcGFyYXRpb24odGhpcy5ldmVudFBheWxvYWRLZXkoZXZlbnRJZCwgZmllbGQpLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV1c2UgZmluYWwgc3RlcCB2YWx1ZXMgb25seSB3aGVuIHNoYXJpbmcgdGhlbSBhY3Jvc3MgVk1zIGlzIHVub2JzZXJ2YWJsZS5cbiAgICogT2JqZWN0cyBhbmQgbGFyZ2Ugc3RyaW5ncy9iaWdpbnRzIGFsd2F5cyBydW4gYGh5ZHJhdGVgIGFnYWluLCBwcm9kdWNpbmcgYVxuICAgKiBmcmVzaCBWTS1zcGVjaWZpYyB2YWx1ZSBmcm9tIHRoZSBzZXBhcmF0ZWx5IGNhY2hlZCBwcmVwYXJlZCBwYXlsb2FkLlxuICAgKi9cbiAgYXN5bmMgZ2V0U3RlcFJlc3VsdChcbiAgICBldmVudElkOiBzdHJpbmcsXG4gICAgaHlkcmF0ZTogKCkgPT4gUHJvbWlzZTx1bmtub3duPlxuICApOiBQcm9taXNlPHVua25vd24+IHtcbiAgICBpZiAodGhpcy5wcmltaXRpdmVTdGVwUmVzdWx0cy5oYXMoZXZlbnRJZCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByaW1pdGl2ZVN0ZXBSZXN1bHRzLmdldChldmVudElkKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IGh5ZHJhdGUoKTtcbiAgICBpZiAoaXNNZW1vaXphYmxlUHJpbWl0aXZlKHZhbHVlKSkge1xuICAgICAgdGhpcy5wcmltaXRpdmVTdGVwUmVzdWx0cy5zZXQoZXZlbnRJZCwgdmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3VtZXItZmFjaW5nIGxvb2t1cC4gQmluYXJ5IHBheWxvYWRzIHNoYXJlIHByZXBhcmF0aW9uOyBsZWdhY3kgdmFsdWVzXG4gICAqIGJ5cGFzcyB0aGUgY2FjaGUgYmVjYXVzZSB0aGVpciBmbGF0dGVuZWQgcmVwcmVzZW50YXRpb24gbWF5IGJlIG11dGF0ZWQuXG4gICAqL1xuICBwcml2YXRlIGNvbnN1bWVQcmVwYXJhdGlvbihcbiAgICBjYWNoZUtleTogc3RyaW5nLFxuICAgIHZhbHVlOiB1bmtub3duXG4gICk6IFByb21pc2U8UHJlcGFyZWRSZXBsYXlQYXlsb2FkPiB7XG4gICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkgcmV0dXJuIHRoaXMucnVuUHJlcGFyYXRpb24odmFsdWUpO1xuXG4gICAgY29uc3QgcHJlcGFyYXRpb24gPSB0aGlzLmVuc3VyZVByZXBhcmF0aW9uKGNhY2hlS2V5LCB2YWx1ZSk7XG4gICAgdm9pZCBwcmVwYXJhdGlvbi5jYXRjaCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5wcmVwYXJlZFBheWxvYWRzLmdldChjYWNoZUtleSkgPT09IHByZXBhcmF0aW9uKSB7XG4gICAgICAgIHRoaXMucHJlcGFyZWRQYXlsb2Fkcy5kZWxldGUoY2FjaGVLZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBwcmVwYXJhdGlvbjtcbiAgfVxuXG4gIC8qKiBTdGFydCBwcmVwYXJhdGlvbiBvbmNlIGFuZCBzaGFyZSB0aGUgZXhhY3QgaW4tZmxpZ2h0IHByb21pc2UuICovXG4gIHByaXZhdGUgZW5zdXJlUHJlcGFyYXRpb24oXG4gICAgY2FjaGVLZXk6IHN0cmluZyxcbiAgICB2YWx1ZTogVWludDhBcnJheVxuICApOiBQcm9taXNlPFByZXBhcmVkUmVwbGF5UGF5bG9hZD4ge1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMucHJlcGFyZWRQYXlsb2Fkcy5nZXQoY2FjaGVLZXkpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgICBjb25zdCBwcmVwYXJhdGlvbiA9IHRoaXMucnVuUHJlcGFyYXRpb24odmFsdWUpO1xuICAgIHRoaXMucHJlcGFyZWRQYXlsb2Fkcy5zZXQoY2FjaGVLZXksIHByZXBhcmF0aW9uKTtcbiAgICByZXR1cm4gcHJlcGFyYXRpb247XG4gIH1cblxuICAvKiogTm9ybWFsaXplIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcHJlcGFyZXJzIHRvIG9uZSBwcm9taXNlIGNvbnRyYWN0LiAqL1xuICBwcml2YXRlIGFzeW5jIHJ1blByZXBhcmF0aW9uKHZhbHVlOiB1bmtub3duKTogUHJvbWlzZTxQcmVwYXJlZFJlcGxheVBheWxvYWQ+IHtcbiAgICByZXR1cm4gdGhpcy5wcmVwYXJlcih2YWx1ZSwgdGhpcy5lbmNyeXB0aW9uS2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgd29ya2Zsb3dJbnB1dEtleShydW5JZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYHJ1bjoke3J1bklkfTppbnB1dGA7XG4gIH1cblxuICBwcml2YXRlIGV2ZW50UGF5bG9hZEtleShldmVudElkOiBzdHJpbmcsIGZpZWxkOiBSZXBsYXlQYXlsb2FkRmllbGQpOiBzdHJpbmcge1xuICAgIHJldHVybiBgZXZlbnQ6JHtldmVudElkfToke2ZpZWxkfWA7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identifier for the compute instance (microVM) this module was loaded into.
|
|
3
|
+
*
|
|
4
|
+
* Vercel exposes no native per-instance id under Fluid compute (`AWS_LAMBDA_*`
|
|
5
|
+
* is blocked), so we synthesize one at module load: a prefixed ULID
|
|
6
|
+
* (`cinst_<ulid>`, per the `wrun_`/`step_` convention) whose timestamp is the
|
|
7
|
+
* instance's birth time. Stable for the instance's life and shared by every
|
|
8
|
+
* invocation it handles — including the concurrent ones Fluid packs onto it;
|
|
9
|
+
* cold starts mint fresh ids. Emitted as the OTEL `faas.instance` attribute.
|
|
10
|
+
*/
|
|
11
|
+
export declare const COMPUTE_INSTANCE_ID: string;
|
|
12
|
+
//# sourceMappingURL=compute-instance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute-instance.d.ts","sourceRoot":"","sources":["../../src/runtime/compute-instance.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,QAAoB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ulid } from 'ulid';
|
|
2
|
+
/**
|
|
3
|
+
* Identifier for the compute instance (microVM) this module was loaded into.
|
|
4
|
+
*
|
|
5
|
+
* Vercel exposes no native per-instance id under Fluid compute (`AWS_LAMBDA_*`
|
|
6
|
+
* is blocked), so we synthesize one at module load: a prefixed ULID
|
|
7
|
+
* (`cinst_<ulid>`, per the `wrun_`/`step_` convention) whose timestamp is the
|
|
8
|
+
* instance's birth time. Stable for the instance's life and shared by every
|
|
9
|
+
* invocation it handles — including the concurrent ones Fluid packs onto it;
|
|
10
|
+
* cold starts mint fresh ids. Emitted as the OTEL `faas.instance` attribute.
|
|
11
|
+
*/
|
|
12
|
+
export const COMPUTE_INSTANCE_ID = `cinst_${ulid()}`;
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS1pbnN0YW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2NvbXB1dGUtaW5zdGFuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1Qjs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxTQUFTLElBQUksRUFBRSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1bGlkIH0gZnJvbSAndWxpZCc7XG5cbi8qKlxuICogSWRlbnRpZmllciBmb3IgdGhlIGNvbXB1dGUgaW5zdGFuY2UgKG1pY3JvVk0pIHRoaXMgbW9kdWxlIHdhcyBsb2FkZWQgaW50by5cbiAqXG4gKiBWZXJjZWwgZXhwb3NlcyBubyBuYXRpdmUgcGVyLWluc3RhbmNlIGlkIHVuZGVyIEZsdWlkIGNvbXB1dGUgKGBBV1NfTEFNQkRBXypgXG4gKiBpcyBibG9ja2VkKSwgc28gd2Ugc3ludGhlc2l6ZSBvbmUgYXQgbW9kdWxlIGxvYWQ6IGEgcHJlZml4ZWQgVUxJRFxuICogKGBjaW5zdF88dWxpZD5gLCBwZXIgdGhlIGB3cnVuX2AvYHN0ZXBfYCBjb252ZW50aW9uKSB3aG9zZSB0aW1lc3RhbXAgaXMgdGhlXG4gKiBpbnN0YW5jZSdzIGJpcnRoIHRpbWUuIFN0YWJsZSBmb3IgdGhlIGluc3RhbmNlJ3MgbGlmZSBhbmQgc2hhcmVkIGJ5IGV2ZXJ5XG4gKiBpbnZvY2F0aW9uIGl0IGhhbmRsZXMg4oCUIGluY2x1ZGluZyB0aGUgY29uY3VycmVudCBvbmVzIEZsdWlkIHBhY2tzIG9udG8gaXQ7XG4gKiBjb2xkIHN0YXJ0cyBtaW50IGZyZXNoIGlkcy4gRW1pdHRlZCBhcyB0aGUgT1RFTCBgZmFhcy5pbnN0YW5jZWAgYXR0cmlidXRlLlxuICovXG5leHBvcnQgY29uc3QgQ09NUFVURV9JTlNUQU5DRV9JRCA9IGBjaW5zdF8ke3VsaWQoKX1gO1xuIl19
|
|
@@ -1,4 +1,255 @@
|
|
|
1
1
|
export declare const MAX_QUEUE_DELIVERIES = 48;
|
|
2
|
+
/**
|
|
3
|
+
* Effective max queue deliveries. Override via `WORKFLOW_MAX_QUEUE_DELIVERIES`.
|
|
4
|
+
*/
|
|
5
|
+
export declare function getMaxQueueDeliveries(): number;
|
|
6
|
+
/**
|
|
7
|
+
* Default maximum time allowed for the *replay* portion of a single workflow
|
|
8
|
+
* handler invocation (in ms). This budget only covers deterministic-replay
|
|
9
|
+
* and workflow-VM execution between step boundaries — inline step bodies
|
|
10
|
+
* (`"use step"` functions invoked via `executeStep`) do NOT count against
|
|
11
|
+
* it. Step bodies are bounded separately by the platform's function
|
|
12
|
+
* `maxDuration` (e.g. 800s on Vercel Pro Fluid) and `NO_INLINE_REPLAY_AFTER_MS`.
|
|
13
|
+
*
|
|
14
|
+
* If the non-step ("replay") time within a single invocation exceeds this
|
|
15
|
+
* budget, the handler rejects so the queue can retry. After
|
|
16
|
+
* `REPLAY_TIMEOUT_MAX_RETRIES` exhausted attempts the run is failed with
|
|
17
|
+
* `RUN_ERROR_CODES.REPLAY_TIMEOUT`.
|
|
18
|
+
*
|
|
19
|
+
* Note that on Vercel Hobby (standard functions), the platform `maxDuration`
|
|
20
|
+
* is 60s — well below this budget, so the platform SIGTERM will fire first
|
|
21
|
+
* and the queue will re-deliver until the visibility window expires. With
|
|
22
|
+
* Fluid Compute on Hobby the per-function ceiling rises to 300s, still
|
|
23
|
+
* under the default budget.
|
|
24
|
+
*
|
|
25
|
+
* Override via the `WORKFLOW_REPLAY_TIMEOUT_MS` env var (clamped to
|
|
26
|
+
* `MIN_REPLAY_TIMEOUT_MS`..`MAX_REPLAY_TIMEOUT_MS`).
|
|
27
|
+
*/
|
|
2
28
|
export declare const REPLAY_TIMEOUT_MS = 240000;
|
|
29
|
+
/** Lower bound for the replay-timeout env var override. */
|
|
30
|
+
export declare const MIN_REPLAY_TIMEOUT_MS = 30000;
|
|
31
|
+
/**
|
|
32
|
+
* Upper bound for the replay-timeout env var override. 780s leaves ≥20s of
|
|
33
|
+
* headroom under Vercel Pro Fluid's 800s function ceiling so the handler
|
|
34
|
+
* can write `run_failed` before SIGTERM.
|
|
35
|
+
*/
|
|
36
|
+
export declare const MAX_REPLAY_TIMEOUT_MS = 780000;
|
|
37
|
+
/**
|
|
38
|
+
* Resolve the effective replay-timeout budget for the current process.
|
|
39
|
+
*
|
|
40
|
+
* Reads `process.env.WORKFLOW_REPLAY_TIMEOUT_MS` lazily so tests and
|
|
41
|
+
* deployments can override per invocation. Invalid / out-of-range values
|
|
42
|
+
* fall back to a safe value (no throw — the env var is an escape hatch,
|
|
43
|
+
* not a hard requirement) and emit a one-time warning so misconfiguration
|
|
44
|
+
* is observable.
|
|
45
|
+
*/
|
|
46
|
+
export declare function getReplayTimeoutMs(): number;
|
|
47
|
+
/**
|
|
48
|
+
* Reset the warn-once cache. Test-only — exported so unit tests can
|
|
49
|
+
* exercise the warn path repeatedly without sharing state.
|
|
50
|
+
*
|
|
51
|
+
* @internal
|
|
52
|
+
*/
|
|
53
|
+
export declare function _resetReplayTimeoutWarnCacheForTests(): void;
|
|
3
54
|
export declare const REPLAY_TIMEOUT_MAX_RETRIES = 3;
|
|
55
|
+
/**
|
|
56
|
+
* Effective replay-timeout retry budget. Override via
|
|
57
|
+
* `WORKFLOW_REPLAY_TIMEOUT_MAX_RETRIES`.
|
|
58
|
+
*/
|
|
59
|
+
export declare function getReplayTimeoutMaxRetries(): number;
|
|
60
|
+
/**
|
|
61
|
+
* Default maximum number of steps the owned-inline path runs inline (in
|
|
62
|
+
* parallel) per suspension. The rest are queued to background handlers. Each
|
|
63
|
+
* inline step is created lazily — its `step_created` is folded into the
|
|
64
|
+
* `step_started` that `executeStep` sends — so inlining N steps saves N queue
|
|
65
|
+
* round-trips for a `Promise.all`-style fan-out. `1` reproduces the
|
|
66
|
+
* single-inline-step behavior exactly (useful kill-switch).
|
|
67
|
+
*
|
|
68
|
+
* Override via `WORKFLOW_MAX_INLINE_STEPS` (clamped to
|
|
69
|
+
* `MIN_MAX_INLINE_STEPS`..`MAX_MAX_INLINE_STEPS`).
|
|
70
|
+
*/
|
|
71
|
+
export declare const MAX_INLINE_STEPS = 3;
|
|
72
|
+
/** Lower bound for the inline-steps env override (1 = single inline step). */
|
|
73
|
+
export declare const MIN_MAX_INLINE_STEPS = 1;
|
|
74
|
+
/**
|
|
75
|
+
* Upper bound for the inline-steps env override. Inline bodies run in parallel
|
|
76
|
+
* within one function invocation, so this caps memory/CPU fan-out per handler.
|
|
77
|
+
*/
|
|
78
|
+
export declare const MAX_MAX_INLINE_STEPS = 16;
|
|
79
|
+
/**
|
|
80
|
+
* Resolve the effective max number of inline steps for the current process.
|
|
81
|
+
*
|
|
82
|
+
* Reads `process.env.WORKFLOW_MAX_INLINE_STEPS` lazily so tests and
|
|
83
|
+
* deployments can override per invocation. Invalid / out-of-range values fall
|
|
84
|
+
* back to a safe value (no throw — the env var is an escape hatch) and emit a
|
|
85
|
+
* one-time warning so misconfiguration is observable.
|
|
86
|
+
*/
|
|
87
|
+
export declare function getMaxInlineSteps(): number;
|
|
88
|
+
/**
|
|
89
|
+
* Optional client-side override for the server-supplied per-run event ceiling.
|
|
90
|
+
* When set to a positive integer, the runtime clamps the server's limit *down*
|
|
91
|
+
* to this value (never raises it) so enforcement can be exercised without a
|
|
92
|
+
* server-side change. `undefined` (unset) ⇒ use the server value as-is.
|
|
93
|
+
*
|
|
94
|
+
* Reads `process.env.WORKFLOW_MAX_EVENTS_OVERRIDE` lazily so tests and
|
|
95
|
+
* deployments can override per invocation. Invalid values fall back to unset
|
|
96
|
+
* (no throw — the env var is an escape hatch) and emit a one-time warning.
|
|
97
|
+
*/
|
|
98
|
+
export declare function getMaxEventsOverride(): number | undefined;
|
|
99
|
+
/**
|
|
100
|
+
* Whether optimistic inline step start is enabled. When on, the owned-inline
|
|
101
|
+
* path begins running a brand-new step's body *before* its lazy `step_started`
|
|
102
|
+
* network call resolves (the input is already known locally), awaiting the
|
|
103
|
+
* `step_started` only before the terminal write.
|
|
104
|
+
*
|
|
105
|
+
* This can run a step body more than once when handlers race for the same
|
|
106
|
+
* step's create-claim — both run the body before one wins. That is unsafe for
|
|
107
|
+
* steps with non-idempotent side effects; in particular, two concurrent runs
|
|
108
|
+
* of a step that writes to the workflow stream (e.g. an AI agent streaming
|
|
109
|
+
* tokens) can interleave and corrupt the stream data. So the optimization is
|
|
110
|
+
* **off by default** and must be explicitly opted into per deployment.
|
|
111
|
+
*
|
|
112
|
+
* Reads `process.env.WORKFLOW_OPTIMISTIC_INLINE_START` lazily. Default OFF;
|
|
113
|
+
* enabled only by an explicit `'1'` / `'true'`.
|
|
114
|
+
*/
|
|
115
|
+
export declare function isOptimisticInlineStartEnabled(): boolean;
|
|
116
|
+
/**
|
|
117
|
+
* Whether an operator has **explicitly disabled** optimistic inline start via
|
|
118
|
+
* `WORKFLOW_OPTIMISTIC_INLINE_START=0` / `=false`. Distinct from "unset": unset
|
|
119
|
+
* leaves the optimization off by default but lets turbo force it on; an explicit
|
|
120
|
+
* `0`/`false` is an operator opt-out that turbo must honor (turbo's forced
|
|
121
|
+
* optimistic start still runs a step body before `step_started`/`run_started` is
|
|
122
|
+
* confirmed, the property such an operator is opting out of), so
|
|
123
|
+
* `forceOptimisticStart` defers to this. Reads the env var lazily.
|
|
124
|
+
*/
|
|
125
|
+
export declare function isOptimisticInlineStartExplicitlyDisabled(): boolean;
|
|
126
|
+
/**
|
|
127
|
+
* Whether "turbo mode" is enabled. Turbo mode fast-paths the *first delivery of
|
|
128
|
+
* the first invocation* of a run (detected by the entrypoint via `runInput`
|
|
129
|
+
* presence + `metadata.attempt === 1`): it backgrounds the `run_started` event
|
|
130
|
+
* creation, skips the initial event-log load (nothing has been written yet),
|
|
131
|
+
* and forces optimistic inline step start for that invocation — independent of
|
|
132
|
+
* `WORKFLOW_OPTIMISTIC_INLINE_START`.
|
|
133
|
+
*
|
|
134
|
+
* Forcing optimistic start is safe here because the first delivery has no
|
|
135
|
+
* concurrent peer handler to race the step create-claim, so a step body runs
|
|
136
|
+
* exactly once. That single-handler guarantee ends as soon as the run creates a
|
|
137
|
+
* hook or wait (which introduce resume/parallel invocations), so the runtime
|
|
138
|
+
* exits turbo at that point.
|
|
139
|
+
*
|
|
140
|
+
* Reads `process.env.WORKFLOW_TURBO` lazily. Default **ON**; disabled only by an
|
|
141
|
+
* explicit `'0'` / `'false'` (case-insensitive).
|
|
142
|
+
*/
|
|
143
|
+
export declare function isTurboEnabled(): boolean;
|
|
144
|
+
/**
|
|
145
|
+
* Whether the QuickJS engine's baseline-snapshot startup optimization is
|
|
146
|
+
* enabled (default ON). When on, the engine hydrates a VM with the
|
|
147
|
+
* workflow bundle once per function instance, snapshots it, and starts
|
|
148
|
+
* every invocation by restoring the snapshot instead of re-evaluating
|
|
149
|
+
* the bundle — skipping the dominant share of VM startup (measured
|
|
150
|
+
* ~77ms → ~3ms to first suspension for a 1.3MB bundle). Bundles whose
|
|
151
|
+
* module scope consumes randomness, reads the clock, or replaces a
|
|
152
|
+
* serialization intrinsic are detected at hydrate time and
|
|
153
|
+
* automatically fall back to per-invocation fresh evaluation (see
|
|
154
|
+
* prepareBaselineSnapshot). Set WORKFLOW_QUICKJS_BASELINE_SNAPSHOT=0 to
|
|
155
|
+
* disable.
|
|
156
|
+
*/
|
|
157
|
+
export declare function isQuickJSBaselineSnapshotEnabled(): boolean;
|
|
158
|
+
/**
|
|
159
|
+
* Whether the inline loop retains a suspended workflow VM across inline steps
|
|
160
|
+
* within one invocation (default ON). When on, a step-only suspension keeps
|
|
161
|
+
* the live VM, event consumer, and hydrated state alive, and the next loop
|
|
162
|
+
* iteration appends only the newly durable events instead of rebuilding the
|
|
163
|
+
* `vm.Context` and replaying the whole event log. Non-step suspensions and
|
|
164
|
+
* replay divergence always fall back to the ordinary durable replay path.
|
|
165
|
+
*
|
|
166
|
+
* `WORKFLOW_RETAINED_VM=0` (or `false`) is the kill switch: every iteration
|
|
167
|
+
* replays from scratch in a fresh VM, matching the pre-retention behavior.
|
|
168
|
+
*/
|
|
169
|
+
export declare function isVmRetentionEnabled(): boolean;
|
|
170
|
+
/**
|
|
171
|
+
* Whether inline step ownership is enabled (default ON). When on, the lazy
|
|
172
|
+
* `step_started` that creates an inline step records the owning queue
|
|
173
|
+
* message ID, and wake replays that observe an actively-owned step enqueue a
|
|
174
|
+
* *delayed backstop* message instead of immediately requeueing it — fixing
|
|
175
|
+
* duplicate inline step execution when a hook/wait wakes a run mid-step
|
|
176
|
+
* (vercel/workflow#2780).
|
|
177
|
+
*
|
|
178
|
+
* `WORKFLOW_INLINE_OWNERSHIP=0` (or `false`) is the kill switch: dispatch
|
|
179
|
+
* reverts to the unconditional immediate requeue. Stamping is unaffected —
|
|
180
|
+
* the recorded ownerMessageId is inert data when the switch is off.
|
|
181
|
+
*/
|
|
182
|
+
export declare function isInlineOwnershipEnabled(): boolean;
|
|
183
|
+
/**
|
|
184
|
+
* Default inline-ownership lease, in seconds: how long after a step's latest
|
|
185
|
+
* (stamped) `step_started` a non-owner invocation assumes the owning
|
|
186
|
+
* invocation may still be alive. Within the lease, wake replays enqueue the
|
|
187
|
+
* step's backstop message with `delaySeconds = lease remaining` instead of
|
|
188
|
+
* immediately; past it, they enqueue immediately (today's behavior).
|
|
189
|
+
*
|
|
190
|
+
* Why a fixed 860 and not a value derived from the function's `maxDuration`:
|
|
191
|
+
* neither runtime nor build time can see the resolved value — builders emit
|
|
192
|
+
* `maxDuration: 'max'`, which the platform resolves per-plan at deploy, and
|
|
193
|
+
* no env var or request-context deadline API exposes the result. The bound
|
|
194
|
+
* comes from a platform rule instead: durations above 800s require explicit
|
|
195
|
+
* per-function numeric config, so a builder-emitted `'max'` resolves to at
|
|
196
|
+
* most 800s — 860s therefore dominates any workflow route's invocation
|
|
197
|
+
* lifetime plus scheduling slack. Revisit when that ceiling moves (the
|
|
198
|
+
* 30-minute duration beta becoming reachable via `'max'` would invalidate
|
|
199
|
+
* the bound). Worlds without an invocation kill bound (world-local,
|
|
200
|
+
* self-hosted) get no death proof from any constant — there the in-process
|
|
201
|
+
* single-flight layer (step-single-flight.ts) is what makes a backstop
|
|
202
|
+
* firing mid-step harmless.
|
|
203
|
+
*
|
|
204
|
+
* 860 also stays under the queue's 900s maximum delay (SQS cap), so a
|
|
205
|
+
* backstop's full lease remainder always fits in a single delayed message.
|
|
206
|
+
*
|
|
207
|
+
* Override via `WORKFLOW_INLINE_OWNERSHIP_LEASE_SECONDS` (clamped to
|
|
208
|
+
* 1..`MAX_INLINE_OWNERSHIP_LEASE_SECONDS`).
|
|
209
|
+
*/
|
|
210
|
+
export declare const INLINE_OWNERSHIP_LEASE_SECONDS = 860;
|
|
211
|
+
/**
|
|
212
|
+
* Upper bound for the lease env override. 900s is the queue's maximum
|
|
213
|
+
* per-message delay (SQS cap) — a longer lease would need delay chaining
|
|
214
|
+
* like long waits use; clamp instead so one delayed message always suffices.
|
|
215
|
+
*/
|
|
216
|
+
export declare const MAX_INLINE_OWNERSHIP_LEASE_SECONDS = 900;
|
|
217
|
+
/**
|
|
218
|
+
* Effective inline-ownership lease. Override via
|
|
219
|
+
* `WORKFLOW_INLINE_OWNERSHIP_LEASE_SECONDS` — e.g. raise it on self-hosted
|
|
220
|
+
* multi-instance worlds with long-running steps to widen the window in which
|
|
221
|
+
* a live owner is protected from a concurrent backstop execution.
|
|
222
|
+
*/
|
|
223
|
+
export declare function getInlineOwnershipLeaseSeconds(): number;
|
|
224
|
+
export declare const REPLAY_DIVERGENCE_MAX_RETRIES = 3;
|
|
225
|
+
/**
|
|
226
|
+
* Effective replay-divergence recovery budget. Override via
|
|
227
|
+
* `WORKFLOW_REPLAY_DIVERGENCE_MAX_RETRIES`.
|
|
228
|
+
*/
|
|
229
|
+
export declare function getReplayDivergenceMaxRetries(): number;
|
|
230
|
+
export declare const PRECONDITION_MAX_INPROCESS_RESTARTS = 3;
|
|
231
|
+
/**
|
|
232
|
+
* Effective in-process replay-restart budget for stale-snapshot rejections.
|
|
233
|
+
* Override via `WORKFLOW_PRECONDITION_MAX_INPROCESS_RESTARTS`.
|
|
234
|
+
*/
|
|
235
|
+
export declare function getPreconditionMaxInProcessRestarts(): number;
|
|
236
|
+
export declare const PRECONDITION_MAX_REINVOCATIONS = 5;
|
|
237
|
+
/**
|
|
238
|
+
* Effective per-run budget for re-invocations caused by stale-snapshot
|
|
239
|
+
* rejections. Override via `WORKFLOW_PRECONDITION_MAX_REINVOCATIONS`.
|
|
240
|
+
*/
|
|
241
|
+
export declare function getPreconditionMaxReinvocations(): number;
|
|
242
|
+
export declare const PRECONDITION_REINVOKE_DELAY_SECONDS = 2;
|
|
243
|
+
/**
|
|
244
|
+
* Effective delay before a precondition re-invocation. Override via
|
|
245
|
+
* `WORKFLOW_PRECONDITION_REINVOKE_DELAY_SECONDS`.
|
|
246
|
+
*/
|
|
247
|
+
export declare function getPreconditionReinvokeDelaySeconds(): number;
|
|
248
|
+
export declare const DEPLOYMENT_MISMATCH_MAX_RETRIES = 3;
|
|
249
|
+
/**
|
|
250
|
+
* Effective deployment-mismatch re-route budget. Override via
|
|
251
|
+
* `WORKFLOW_DEPLOYMENT_MISMATCH_MAX_RETRIES`; `0` fails the run on the first
|
|
252
|
+
* misrouted delivery instead of attempting recovery.
|
|
253
|
+
*/
|
|
254
|
+
export declare function getDeploymentMismatchMaxRetries(): number;
|
|
4
255
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/runtime/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/runtime/constants.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAW9C;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,iBAAiB,SAAU,CAAC;AAEzC,2DAA2D;AAC3D,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAE5C;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,SAAU,CAAC;AAgB7C;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CA6B3C;AAED;;;;;GAKG;AACH,wBAAgB,oCAAoC,IAAI,IAAI,CAE3D;AAMD,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAMnD;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAKvC;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CA2B1C;AAID;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAezD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,8BAA8B,IAAI,OAAO,CAIxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,yCAAyC,IAAI,OAAO,CAInE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAIxC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gCAAgC,IAAI,OAAO,CAI1D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAI9C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,IAAI,OAAO,CAIlD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,kCAAkC,MAAM,CAAC;AAEtD;;;;;GAKG;AACH,wBAAgB,8BAA8B,IAAI,MAAM,CAMvD;AAKD,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAE/C;;;GAGG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,CAMtD;AAQD,eAAO,MAAM,mCAAmC,IAAI,CAAC;AAErD;;;GAGG;AACH,wBAAgB,mCAAmC,IAAI,MAAM,CAM5D;AASD,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,+BAA+B,IAAI,MAAM,CAMxD;AAMD,eAAO,MAAM,mCAAmC,IAAI,CAAC;AAErD;;;GAGG;AACH,wBAAgB,mCAAmC,IAAI,MAAM,CAM5D;AAKD,eAAO,MAAM,+BAA+B,IAAI,CAAC;AAEjD;;;;GAIG;AACH,wBAAgB,+BAA+B,IAAI,MAAM,CAMxD"}
|