@workflow/core 5.0.0-beta.0 → 5.0.0-beta.10
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/README.md +1 -1
- 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.js +1 -1
- 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.js +1 -1
- package/dist/classify-error.d.ts +11 -3
- package/dist/classify-error.d.ts.map +1 -1
- package/dist/classify-error.js +56 -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 +147 -0
- 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 +165 -0
- package/dist/encryption.d.ts +22 -1
- package/dist/encryption.d.ts.map +1 -1
- package/dist/encryption.js +72 -27
- package/dist/events-consumer.d.ts +7 -0
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +18 -3
- package/dist/flushable-stream.d.ts +10 -10
- package/dist/flushable-stream.d.ts.map +1 -1
- package/dist/flushable-stream.js +18 -13
- package/dist/global.d.ts +4 -0
- package/dist/global.d.ts.map +1 -1
- package/dist/global.js +8 -2
- 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 +28 -30
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +77 -31
- package/dist/private.d.ts +5 -5
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +8 -8
- package/dist/runtime/constants.d.ts +48 -0
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +91 -8
- package/dist/runtime/get-port-lazy.d.ts +10 -0
- package/dist/runtime/get-port-lazy.d.ts.map +1 -0
- package/dist/runtime/get-port-lazy.js +30 -0
- package/dist/runtime/get-world-lazy.d.ts +32 -0
- package/dist/runtime/get-world-lazy.d.ts.map +1 -0
- package/dist/runtime/get-world-lazy.js +56 -0
- package/dist/runtime/helpers.d.ts +40 -7
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +93 -36
- package/dist/runtime/replay-budget.d.ts +98 -0
- package/dist/runtime/replay-budget.d.ts.map +1 -0
- package/dist/runtime/replay-budget.js +191 -0
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +5 -4
- package/dist/runtime/run.d.ts +10 -32
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +83 -33
- package/dist/runtime/runs.d.ts +1 -1
- package/dist/runtime/runs.d.ts.map +1 -1
- package/dist/runtime/runs.js +7 -4
- package/dist/runtime/start.js +17 -6
- package/dist/runtime/step-executor.d.ts +40 -0
- package/dist/runtime/step-executor.d.ts.map +1 -0
- package/dist/runtime/step-executor.js +492 -0
- package/dist/runtime/step-handler.d.ts +0 -5
- package/dist/runtime/step-handler.d.ts.map +1 -1
- package/dist/runtime/step-handler.js +227 -119
- package/dist/runtime/suspension-handler.d.ts +22 -4
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +90 -73
- package/dist/runtime/world-init.d.ts +75 -0
- package/dist/runtime/world-init.d.ts.map +1 -0
- package/dist/runtime/world-init.js +75 -0
- package/dist/runtime/world.d.ts +4 -3
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +98 -9
- package/dist/runtime.d.ts +8 -7
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +810 -324
- package/dist/schemas.d.ts +1 -1
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +1 -1
- package/dist/serialization/client.d.ts +17 -0
- package/dist/serialization/client.d.ts.map +1 -0
- package/dist/serialization/client.js +45 -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 +98 -0
- package/dist/serialization/codec.d.ts +90 -0
- package/dist/serialization/codec.d.ts.map +1 -0
- package/dist/serialization/codec.js +17 -0
- package/dist/serialization/encryption.d.ts +32 -0
- package/dist/serialization/encryption.d.ts.map +1 -0
- package/dist/serialization/encryption.js +67 -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/index.d.ts +18 -0
- package/dist/serialization/index.d.ts.map +1 -0
- package/dist/serialization/index.js +20 -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 +68 -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 +417 -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 +88 -0
- package/dist/serialization/step.d.ts +17 -0
- package/dist/serialization/step.d.ts.map +1 -0
- package/dist/serialization/step.js +45 -0
- package/dist/serialization/types.d.ts +222 -0
- package/dist/serialization/types.d.ts.map +1 -0
- package/dist/serialization/types.js +21 -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 +16 -2
- package/dist/serialization-format.d.ts.map +1 -1
- package/dist/serialization-format.js +104 -5
- package/dist/serialization.d.ts +217 -224
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +940 -643
- package/dist/set-attributes.d.ts +13 -0
- package/dist/set-attributes.d.ts.map +1 -0
- package/dist/set-attributes.js +40 -0
- package/dist/sleep.d.ts.map +1 -1
- package/dist/sleep.js +3 -2
- package/dist/source-map.d.ts.map +1 -1
- package/dist/source-map.js +44 -6
- package/dist/step/context-storage.d.ts +14 -0
- package/dist/step/context-storage.d.ts.map +1 -1
- package/dist/step/context-storage.js +1 -1
- 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 +39 -5
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +97 -19
- package/dist/symbols.d.ts +20 -0
- package/dist/symbols.d.ts.map +1 -1
- package/dist/symbols.js +21 -1
- package/dist/telemetry/semantic-conventions.d.ts +2 -2
- package/dist/telemetry/semantic-conventions.js +1 -1
- package/dist/telemetry.js +1 -1
- 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 +18 -3
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +28 -5
- 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 +3 -2
- package/dist/vm/uint8array-base64.js +1 -1
- package/dist/vm/uuid.js +1 -1
- 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 +260 -0
- package/dist/workflow/create-hook.d.ts.map +1 -1
- package/dist/workflow/create-hook.js +3 -2
- 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 +11 -0
- 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 +13 -4
- 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 +74 -0
- package/dist/workflow/set-attributes.d.ts.map +1 -0
- package/dist/workflow/set-attributes.js +66 -0
- package/dist/workflow/sleep.d.ts.map +1 -1
- package/dist/workflow/sleep.js +22 -3
- 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/writable-stream.js +1 -1
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +84 -31
- package/docs/api-reference/create-webhook.mdx +37 -18
- package/docs/api-reference/experimental-set-attributes.mdx +63 -0
- package/docs/api-reference/get-workflow-metadata.mdx +61 -0
- package/docs/api-reference/index.mdx +3 -0
- package/docs/foundations/cancellation.mdx +460 -0
- package/docs/foundations/errors-and-retries.mdx +7 -3
- package/docs/foundations/index.mdx +3 -3
- package/docs/foundations/meta.json +3 -2
- package/docs/foundations/serialization.mdx +78 -42
- package/docs/foundations/starting-workflows.mdx +6 -2
- package/docs/foundations/versioning.mdx +263 -0
- package/docs/how-it-works/cancellation.mdx +287 -0
- package/docs/how-it-works/code-transform.mdx +8 -7
- package/docs/how-it-works/event-sourcing.mdx +2 -2
- package/docs/how-it-works/meta.json +2 -1
- package/package.json +19 -10
- package/docs/foundations/common-patterns.mdx +0 -265
|
@@ -1,3 +1,51 @@
|
|
|
1
1
|
export declare const MAX_QUEUE_DELIVERIES = 48;
|
|
2
|
+
/**
|
|
3
|
+
* Default maximum time allowed for the *replay* portion of a single workflow
|
|
4
|
+
* handler invocation (in ms). This budget only covers deterministic-replay
|
|
5
|
+
* and workflow-VM execution between step boundaries — inline step bodies
|
|
6
|
+
* (`"use step"` functions invoked via `executeStep`) do NOT count against
|
|
7
|
+
* it. Step bodies are bounded separately by the platform's function
|
|
8
|
+
* `maxDuration` (e.g. 800s on Vercel Pro Fluid) and `NO_INLINE_REPLAY_AFTER_MS`.
|
|
9
|
+
*
|
|
10
|
+
* If the non-step ("replay") time within a single invocation exceeds this
|
|
11
|
+
* budget, the handler exits so the queue can retry. After
|
|
12
|
+
* `REPLAY_TIMEOUT_MAX_RETRIES` exhausted attempts the run is failed with
|
|
13
|
+
* `RUN_ERROR_CODES.REPLAY_TIMEOUT`.
|
|
14
|
+
*
|
|
15
|
+
* Note that on Vercel Hobby (standard functions), the platform `maxDuration`
|
|
16
|
+
* is 60s — well below this budget, so the platform SIGTERM will fire first
|
|
17
|
+
* and the queue will re-deliver until the visibility window expires. With
|
|
18
|
+
* Fluid Compute on Hobby the per-function ceiling rises to 300s, still
|
|
19
|
+
* under the default budget.
|
|
20
|
+
*
|
|
21
|
+
* Override via the `WORKFLOW_REPLAY_TIMEOUT_MS` env var (clamped to
|
|
22
|
+
* `MIN_REPLAY_TIMEOUT_MS`..`MAX_REPLAY_TIMEOUT_MS`).
|
|
23
|
+
*/
|
|
2
24
|
export declare const REPLAY_TIMEOUT_MS = 240000;
|
|
25
|
+
/** Lower bound for the replay-timeout env var override. */
|
|
26
|
+
export declare const MIN_REPLAY_TIMEOUT_MS = 30000;
|
|
27
|
+
/**
|
|
28
|
+
* Upper bound for the replay-timeout env var override. 780s leaves ≥20s of
|
|
29
|
+
* headroom under Vercel Pro Fluid's 800s function ceiling so the handler
|
|
30
|
+
* can write `run_failed` before SIGTERM.
|
|
31
|
+
*/
|
|
32
|
+
export declare const MAX_REPLAY_TIMEOUT_MS = 780000;
|
|
33
|
+
/**
|
|
34
|
+
* Resolve the effective replay-timeout budget for the current process.
|
|
35
|
+
*
|
|
36
|
+
* Reads `process.env.WORKFLOW_REPLAY_TIMEOUT_MS` lazily so tests and
|
|
37
|
+
* deployments can override per invocation. Invalid / out-of-range values
|
|
38
|
+
* fall back to a safe value (no throw — the env var is an escape hatch,
|
|
39
|
+
* not a hard requirement) and emit a one-time warning so misconfiguration
|
|
40
|
+
* is observable.
|
|
41
|
+
*/
|
|
42
|
+
export declare function getReplayTimeoutMs(): number;
|
|
43
|
+
/**
|
|
44
|
+
* Reset the warn-once cache. Test-only — exported so unit tests can
|
|
45
|
+
* exercise the warn path repeatedly without sharing state.
|
|
46
|
+
*
|
|
47
|
+
* @internal
|
|
48
|
+
*/
|
|
49
|
+
export declare function _resetReplayTimeoutWarnCacheForTests(): void;
|
|
50
|
+
export declare const REPLAY_TIMEOUT_MAX_RETRIES = 3;
|
|
3
51
|
//# 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":"AAcA,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { runtimeLogger } from '../logger.js';
|
|
1
2
|
// Maximum number of queue delivery attempts before the handler gives up and
|
|
2
3
|
// gracefully fails the run/step. This must be bounded under the VQS message
|
|
3
4
|
// max visibility window (24 hours) so that our handler-side failure path
|
|
@@ -11,12 +12,94 @@
|
|
|
11
12
|
// At 48 attempts the total elapsed time is approximately 20 hours, which is
|
|
12
13
|
// safely under the 24-hour message visibility limit.
|
|
13
14
|
export const MAX_QUEUE_DELIVERIES = 48;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Default maximum time allowed for the *replay* portion of a single workflow
|
|
17
|
+
* handler invocation (in ms). This budget only covers deterministic-replay
|
|
18
|
+
* and workflow-VM execution between step boundaries — inline step bodies
|
|
19
|
+
* (`"use step"` functions invoked via `executeStep`) do NOT count against
|
|
20
|
+
* it. Step bodies are bounded separately by the platform's function
|
|
21
|
+
* `maxDuration` (e.g. 800s on Vercel Pro Fluid) and `NO_INLINE_REPLAY_AFTER_MS`.
|
|
22
|
+
*
|
|
23
|
+
* If the non-step ("replay") time within a single invocation exceeds this
|
|
24
|
+
* budget, the handler exits so the queue can retry. After
|
|
25
|
+
* `REPLAY_TIMEOUT_MAX_RETRIES` exhausted attempts the run is failed with
|
|
26
|
+
* `RUN_ERROR_CODES.REPLAY_TIMEOUT`.
|
|
27
|
+
*
|
|
28
|
+
* Note that on Vercel Hobby (standard functions), the platform `maxDuration`
|
|
29
|
+
* is 60s — well below this budget, so the platform SIGTERM will fire first
|
|
30
|
+
* and the queue will re-deliver until the visibility window expires. With
|
|
31
|
+
* Fluid Compute on Hobby the per-function ceiling rises to 300s, still
|
|
32
|
+
* under the default budget.
|
|
33
|
+
*
|
|
34
|
+
* Override via the `WORKFLOW_REPLAY_TIMEOUT_MS` env var (clamped to
|
|
35
|
+
* `MIN_REPLAY_TIMEOUT_MS`..`MAX_REPLAY_TIMEOUT_MS`).
|
|
36
|
+
*/
|
|
21
37
|
export const REPLAY_TIMEOUT_MS = 240_000;
|
|
22
|
-
|
|
38
|
+
/** Lower bound for the replay-timeout env var override. */
|
|
39
|
+
export const MIN_REPLAY_TIMEOUT_MS = 30_000;
|
|
40
|
+
/**
|
|
41
|
+
* Upper bound for the replay-timeout env var override. 780s leaves ≥20s of
|
|
42
|
+
* headroom under Vercel Pro Fluid's 800s function ceiling so the handler
|
|
43
|
+
* can write `run_failed` before SIGTERM.
|
|
44
|
+
*/
|
|
45
|
+
export const MAX_REPLAY_TIMEOUT_MS = 780_000;
|
|
46
|
+
// Track which raw env var values we've already warned about so the warning
|
|
47
|
+
// log only fires once per process (the function may be called many times).
|
|
48
|
+
const warnedReplayTimeoutValues = new Set();
|
|
49
|
+
function warnOnce(raw, message, data) {
|
|
50
|
+
if (warnedReplayTimeoutValues.has(raw))
|
|
51
|
+
return;
|
|
52
|
+
warnedReplayTimeoutValues.add(raw);
|
|
53
|
+
runtimeLogger.warn(message, data);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Resolve the effective replay-timeout budget for the current process.
|
|
57
|
+
*
|
|
58
|
+
* Reads `process.env.WORKFLOW_REPLAY_TIMEOUT_MS` lazily so tests and
|
|
59
|
+
* deployments can override per invocation. Invalid / out-of-range values
|
|
60
|
+
* fall back to a safe value (no throw — the env var is an escape hatch,
|
|
61
|
+
* not a hard requirement) and emit a one-time warning so misconfiguration
|
|
62
|
+
* is observable.
|
|
63
|
+
*/
|
|
64
|
+
export function getReplayTimeoutMs() {
|
|
65
|
+
const raw = process.env.WORKFLOW_REPLAY_TIMEOUT_MS;
|
|
66
|
+
if (!raw)
|
|
67
|
+
return REPLAY_TIMEOUT_MS;
|
|
68
|
+
const parsed = Number(raw);
|
|
69
|
+
if (!Number.isFinite(parsed) || parsed <= 0) {
|
|
70
|
+
warnOnce(raw, 'Ignoring WORKFLOW_REPLAY_TIMEOUT_MS: not a positive finite number; using default', { raw, defaultMs: REPLAY_TIMEOUT_MS });
|
|
71
|
+
return REPLAY_TIMEOUT_MS;
|
|
72
|
+
}
|
|
73
|
+
if (parsed < MIN_REPLAY_TIMEOUT_MS) {
|
|
74
|
+
warnOnce(raw, 'WORKFLOW_REPLAY_TIMEOUT_MS below minimum; clamped', {
|
|
75
|
+
raw,
|
|
76
|
+
clampedMs: MIN_REPLAY_TIMEOUT_MS,
|
|
77
|
+
minMs: MIN_REPLAY_TIMEOUT_MS,
|
|
78
|
+
});
|
|
79
|
+
return MIN_REPLAY_TIMEOUT_MS;
|
|
80
|
+
}
|
|
81
|
+
if (parsed > MAX_REPLAY_TIMEOUT_MS) {
|
|
82
|
+
warnOnce(raw, 'WORKFLOW_REPLAY_TIMEOUT_MS above maximum; clamped', {
|
|
83
|
+
raw,
|
|
84
|
+
clampedMs: MAX_REPLAY_TIMEOUT_MS,
|
|
85
|
+
maxMs: MAX_REPLAY_TIMEOUT_MS,
|
|
86
|
+
});
|
|
87
|
+
return MAX_REPLAY_TIMEOUT_MS;
|
|
88
|
+
}
|
|
89
|
+
return parsed;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Reset the warn-once cache. Test-only — exported so unit tests can
|
|
93
|
+
* exercise the warn path repeatedly without sharing state.
|
|
94
|
+
*
|
|
95
|
+
* @internal
|
|
96
|
+
*/
|
|
97
|
+
export function _resetReplayTimeoutWarnCacheForTests() {
|
|
98
|
+
warnedReplayTimeoutValues.clear();
|
|
99
|
+
}
|
|
100
|
+
// Number of queue delivery attempts to allow before permanently failing a run
|
|
101
|
+
// due to a replay timeout. On attempts 1 through this value, the timeout
|
|
102
|
+
// handler exits without writing run_failed so the queue retries the message.
|
|
103
|
+
// On the next attempt the run is marked as failed.
|
|
104
|
+
export const REPLAY_TIMEOUT_MAX_RETRIES = 3;
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0MsNEVBQTRFO0FBQzVFLDRFQUE0RTtBQUM1RSx5RUFBeUU7QUFDekUsb0RBQW9EO0FBQ3BELEVBQUU7QUFDRixrREFBa0Q7QUFDbEQsMkVBQTJFO0FBQzNFLCtEQUErRDtBQUMvRCx3RUFBd0U7QUFDeEUsRUFBRTtBQUNGLDRFQUE0RTtBQUM1RSxxREFBcUQ7QUFDckQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBRXZDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUM7QUFFekMsMkRBQTJEO0FBQzNELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQztBQUU1Qzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsT0FBTyxDQUFDO0FBRTdDLDJFQUEyRTtBQUMzRSwyRUFBMkU7QUFDM0UsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0FBRXBELFNBQVMsUUFBUSxDQUNmLEdBQVcsRUFDWCxPQUFlLEVBQ2YsSUFBNkI7SUFFN0IsSUFBSSx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTztJQUMvQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQjtJQUNoQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDO0lBQ25ELElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxpQkFBaUIsQ0FBQztJQUNuQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzVDLFFBQVEsQ0FDTixHQUFHLEVBQ0gsa0ZBQWtGLEVBQ2xGLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxDQUN0QyxDQUFDO1FBQ0YsT0FBTyxpQkFBaUIsQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFBSSxNQUFNLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztRQUNuQyxRQUFRLENBQUMsR0FBRyxFQUFFLG1EQUFtRCxFQUFFO1lBQ2pFLEdBQUc7WUFDSCxTQUFTLEVBQUUscUJBQXFCO1lBQ2hDLEtBQUssRUFBRSxxQkFBcUI7U0FDN0IsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxxQkFBcUIsQ0FBQztJQUMvQixDQUFDO0lBQ0QsSUFBSSxNQUFNLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztRQUNuQyxRQUFRLENBQUMsR0FBRyxFQUFFLG1EQUFtRCxFQUFFO1lBQ2pFLEdBQUc7WUFDSCxTQUFTLEVBQUUscUJBQXFCO1lBQ2hDLEtBQUssRUFBRSxxQkFBcUI7U0FDN0IsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxxQkFBcUIsQ0FBQztJQUMvQixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLG9DQUFvQztJQUNsRCx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNwQyxDQUFDO0FBRUQsOEVBQThFO0FBQzlFLHlFQUF5RTtBQUN6RSw2RUFBNkU7QUFDN0UsbURBQW1EO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJ1bnRpbWVMb2dnZXIgfSBmcm9tICcuLi9sb2dnZXIuanMnO1xuXG4vLyBNYXhpbXVtIG51bWJlciBvZiBxdWV1ZSBkZWxpdmVyeSBhdHRlbXB0cyBiZWZvcmUgdGhlIGhhbmRsZXIgZ2l2ZXMgdXAgYW5kXG4vLyBncmFjZWZ1bGx5IGZhaWxzIHRoZSBydW4vc3RlcC4gVGhpcyBtdXN0IGJlIGJvdW5kZWQgdW5kZXIgdGhlIFZRUyBtZXNzYWdlXG4vLyBtYXggdmlzaWJpbGl0eSB3aW5kb3cgKDI0IGhvdXJzKSBzbyB0aGF0IG91ciBoYW5kbGVyLXNpZGUgZmFpbHVyZSBwYXRoXG4vLyByZWxpYWJseSBleGVjdXRlcyBiZWZvcmUgVlFTIGV4cGlyZXMgdGhlIG1lc3NhZ2UuXG4vL1xuLy8gVlFTIHJldHJ5IHNjaGVkdWxlICh3aXRoIHJldHJ5QWZ0ZXJTZWNvbmRzOiA1KTpcbi8vICAgQXR0ZW1wdHMgMeKAkzMyOiAgbGluZWFyIGJhY2tvZmYgYXQgNXMgZWFjaCAg4oaSIDMyIMOXIDVzID0gMTYwcyAofjIuNyBtaW4pXG4vLyAgIEF0dGVtcHRzIDMzKzogICBleHBvbmVudGlhbCBiYWNrb2ZmOiA2MHMgw5cgMl4oYXR0ZW1wdC0zMiksXG4vLyAgICAgICAgICAgICAgICAgICBjYXBwZWQgYXQgNywyMDBzICgyaCksIGZsb29yZWQgYXQgcmV0cnlBZnRlclNlY29uZHNcbi8vXG4vLyBBdCA0OCBhdHRlbXB0cyB0aGUgdG90YWwgZWxhcHNlZCB0aW1lIGlzIGFwcHJveGltYXRlbHkgMjAgaG91cnMsIHdoaWNoIGlzXG4vLyBzYWZlbHkgdW5kZXIgdGhlIDI0LWhvdXIgbWVzc2FnZSB2aXNpYmlsaXR5IGxpbWl0LlxuZXhwb3J0IGNvbnN0IE1BWF9RVUVVRV9ERUxJVkVSSUVTID0gNDg7XG5cbi8qKlxuICogRGVmYXVsdCBtYXhpbXVtIHRpbWUgYWxsb3dlZCBmb3IgdGhlICpyZXBsYXkqIHBvcnRpb24gb2YgYSBzaW5nbGUgd29ya2Zsb3dcbiAqIGhhbmRsZXIgaW52b2NhdGlvbiAoaW4gbXMpLiBUaGlzIGJ1ZGdldCBvbmx5IGNvdmVycyBkZXRlcm1pbmlzdGljLXJlcGxheVxuICogYW5kIHdvcmtmbG93LVZNIGV4ZWN1dGlvbiBiZXR3ZWVuIHN0ZXAgYm91bmRhcmllcyDigJQgaW5saW5lIHN0ZXAgYm9kaWVzXG4gKiAoYFwidXNlIHN0ZXBcImAgZnVuY3Rpb25zIGludm9rZWQgdmlhIGBleGVjdXRlU3RlcGApIGRvIE5PVCBjb3VudCBhZ2FpbnN0XG4gKiBpdC4gU3RlcCBib2RpZXMgYXJlIGJvdW5kZWQgc2VwYXJhdGVseSBieSB0aGUgcGxhdGZvcm0ncyBmdW5jdGlvblxuICogYG1heER1cmF0aW9uYCAoZS5nLiA4MDBzIG9uIFZlcmNlbCBQcm8gRmx1aWQpIGFuZCBgTk9fSU5MSU5FX1JFUExBWV9BRlRFUl9NU2AuXG4gKlxuICogSWYgdGhlIG5vbi1zdGVwIChcInJlcGxheVwiKSB0aW1lIHdpdGhpbiBhIHNpbmdsZSBpbnZvY2F0aW9uIGV4Y2VlZHMgdGhpc1xuICogYnVkZ2V0LCB0aGUgaGFuZGxlciBleGl0cyBzbyB0aGUgcXVldWUgY2FuIHJldHJ5LiBBZnRlclxuICogYFJFUExBWV9USU1FT1VUX01BWF9SRVRSSUVTYCBleGhhdXN0ZWQgYXR0ZW1wdHMgdGhlIHJ1biBpcyBmYWlsZWQgd2l0aFxuICogYFJVTl9FUlJPUl9DT0RFUy5SRVBMQVlfVElNRU9VVGAuXG4gKlxuICogTm90ZSB0aGF0IG9uIFZlcmNlbCBIb2JieSAoc3RhbmRhcmQgZnVuY3Rpb25zKSwgdGhlIHBsYXRmb3JtIGBtYXhEdXJhdGlvbmBcbiAqIGlzIDYwcyDigJQgd2VsbCBiZWxvdyB0aGlzIGJ1ZGdldCwgc28gdGhlIHBsYXRmb3JtIFNJR1RFUk0gd2lsbCBmaXJlIGZpcnN0XG4gKiBhbmQgdGhlIHF1ZXVlIHdpbGwgcmUtZGVsaXZlciB1bnRpbCB0aGUgdmlzaWJpbGl0eSB3aW5kb3cgZXhwaXJlcy4gV2l0aFxuICogRmx1aWQgQ29tcHV0ZSBvbiBIb2JieSB0aGUgcGVyLWZ1bmN0aW9uIGNlaWxpbmcgcmlzZXMgdG8gMzAwcywgc3RpbGxcbiAqIHVuZGVyIHRoZSBkZWZhdWx0IGJ1ZGdldC5cbiAqXG4gKiBPdmVycmlkZSB2aWEgdGhlIGBXT1JLRkxPV19SRVBMQVlfVElNRU9VVF9NU2AgZW52IHZhciAoY2xhbXBlZCB0b1xuICogYE1JTl9SRVBMQVlfVElNRU9VVF9NU2AuLmBNQVhfUkVQTEFZX1RJTUVPVVRfTVNgKS5cbiAqL1xuZXhwb3J0IGNvbnN0IFJFUExBWV9USU1FT1VUX01TID0gMjQwXzAwMDtcblxuLyoqIExvd2VyIGJvdW5kIGZvciB0aGUgcmVwbGF5LXRpbWVvdXQgZW52IHZhciBvdmVycmlkZS4gKi9cbmV4cG9ydCBjb25zdCBNSU5fUkVQTEFZX1RJTUVPVVRfTVMgPSAzMF8wMDA7XG5cbi8qKlxuICogVXBwZXIgYm91bmQgZm9yIHRoZSByZXBsYXktdGltZW91dCBlbnYgdmFyIG92ZXJyaWRlLiA3ODBzIGxlYXZlcyDiiaUyMHMgb2ZcbiAqIGhlYWRyb29tIHVuZGVyIFZlcmNlbCBQcm8gRmx1aWQncyA4MDBzIGZ1bmN0aW9uIGNlaWxpbmcgc28gdGhlIGhhbmRsZXJcbiAqIGNhbiB3cml0ZSBgcnVuX2ZhaWxlZGAgYmVmb3JlIFNJR1RFUk0uXG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfUkVQTEFZX1RJTUVPVVRfTVMgPSA3ODBfMDAwO1xuXG4vLyBUcmFjayB3aGljaCByYXcgZW52IHZhciB2YWx1ZXMgd2UndmUgYWxyZWFkeSB3YXJuZWQgYWJvdXQgc28gdGhlIHdhcm5pbmdcbi8vIGxvZyBvbmx5IGZpcmVzIG9uY2UgcGVyIHByb2Nlc3MgKHRoZSBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIG1hbnkgdGltZXMpLlxuY29uc3Qgd2FybmVkUmVwbGF5VGltZW91dFZhbHVlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG5mdW5jdGlvbiB3YXJuT25jZShcbiAgcmF3OiBzdHJpbmcsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IHZvaWQge1xuICBpZiAod2FybmVkUmVwbGF5VGltZW91dFZhbHVlcy5oYXMocmF3KSkgcmV0dXJuO1xuICB3YXJuZWRSZXBsYXlUaW1lb3V0VmFsdWVzLmFkZChyYXcpO1xuICBydW50aW1lTG9nZ2VyLndhcm4obWVzc2FnZSwgZGF0YSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgZWZmZWN0aXZlIHJlcGxheS10aW1lb3V0IGJ1ZGdldCBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcy5cbiAqXG4gKiBSZWFkcyBgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfUkVQTEFZX1RJTUVPVVRfTVNgIGxhemlseSBzbyB0ZXN0cyBhbmRcbiAqIGRlcGxveW1lbnRzIGNhbiBvdmVycmlkZSBwZXIgaW52b2NhdGlvbi4gSW52YWxpZCAvIG91dC1vZi1yYW5nZSB2YWx1ZXNcbiAqIGZhbGwgYmFjayB0byBhIHNhZmUgdmFsdWUgKG5vIHRocm93IOKAlCB0aGUgZW52IHZhciBpcyBhbiBlc2NhcGUgaGF0Y2gsXG4gKiBub3QgYSBoYXJkIHJlcXVpcmVtZW50KSBhbmQgZW1pdCBhIG9uZS10aW1lIHdhcm5pbmcgc28gbWlzY29uZmlndXJhdGlvblxuICogaXMgb2JzZXJ2YWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlcGxheVRpbWVvdXRNcygpOiBudW1iZXIge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudi5XT1JLRkxPV19SRVBMQVlfVElNRU9VVF9NUztcbiAgaWYgKCFyYXcpIHJldHVybiBSRVBMQVlfVElNRU9VVF9NUztcbiAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHJhdyk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgfHwgcGFyc2VkIDw9IDApIHtcbiAgICB3YXJuT25jZShcbiAgICAgIHJhdyxcbiAgICAgICdJZ25vcmluZyBXT1JLRkxPV19SRVBMQVlfVElNRU9VVF9NUzogbm90IGEgcG9zaXRpdmUgZmluaXRlIG51bWJlcjsgdXNpbmcgZGVmYXVsdCcsXG4gICAgICB7IHJhdywgZGVmYXVsdE1zOiBSRVBMQVlfVElNRU9VVF9NUyB9XG4gICAgKTtcbiAgICByZXR1cm4gUkVQTEFZX1RJTUVPVVRfTVM7XG4gIH1cbiAgaWYgKHBhcnNlZCA8IE1JTl9SRVBMQVlfVElNRU9VVF9NUykge1xuICAgIHdhcm5PbmNlKHJhdywgJ1dPUktGTE9XX1JFUExBWV9USU1FT1VUX01TIGJlbG93IG1pbmltdW07IGNsYW1wZWQnLCB7XG4gICAgICByYXcsXG4gICAgICBjbGFtcGVkTXM6IE1JTl9SRVBMQVlfVElNRU9VVF9NUyxcbiAgICAgIG1pbk1zOiBNSU5fUkVQTEFZX1RJTUVPVVRfTVMsXG4gICAgfSk7XG4gICAgcmV0dXJuIE1JTl9SRVBMQVlfVElNRU9VVF9NUztcbiAgfVxuICBpZiAocGFyc2VkID4gTUFYX1JFUExBWV9USU1FT1VUX01TKSB7XG4gICAgd2Fybk9uY2UocmF3LCAnV09SS0ZMT1dfUkVQTEFZX1RJTUVPVVRfTVMgYWJvdmUgbWF4aW11bTsgY2xhbXBlZCcsIHtcbiAgICAgIHJhdyxcbiAgICAgIGNsYW1wZWRNczogTUFYX1JFUExBWV9USU1FT1VUX01TLFxuICAgICAgbWF4TXM6IE1BWF9SRVBMQVlfVElNRU9VVF9NUyxcbiAgICB9KTtcbiAgICByZXR1cm4gTUFYX1JFUExBWV9USU1FT1VUX01TO1xuICB9XG4gIHJldHVybiBwYXJzZWQ7XG59XG5cbi8qKlxuICogUmVzZXQgdGhlIHdhcm4tb25jZSBjYWNoZS4gVGVzdC1vbmx5IOKAlCBleHBvcnRlZCBzbyB1bml0IHRlc3RzIGNhblxuICogZXhlcmNpc2UgdGhlIHdhcm4gcGF0aCByZXBlYXRlZGx5IHdpdGhvdXQgc2hhcmluZyBzdGF0ZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9yZXNldFJlcGxheVRpbWVvdXRXYXJuQ2FjaGVGb3JUZXN0cygpOiB2b2lkIHtcbiAgd2FybmVkUmVwbGF5VGltZW91dFZhbHVlcy5jbGVhcigpO1xufVxuXG4vLyBOdW1iZXIgb2YgcXVldWUgZGVsaXZlcnkgYXR0ZW1wdHMgdG8gYWxsb3cgYmVmb3JlIHBlcm1hbmVudGx5IGZhaWxpbmcgYSBydW5cbi8vIGR1ZSB0byBhIHJlcGxheSB0aW1lb3V0LiBPbiBhdHRlbXB0cyAxIHRocm91Z2ggdGhpcyB2YWx1ZSwgdGhlIHRpbWVvdXRcbi8vIGhhbmRsZXIgZXhpdHMgd2l0aG91dCB3cml0aW5nIHJ1bl9mYWlsZWQgc28gdGhlIHF1ZXVlIHJldHJpZXMgdGhlIG1lc3NhZ2UuXG4vLyBPbiB0aGUgbmV4dCBhdHRlbXB0IHRoZSBydW4gaXMgbWFya2VkIGFzIGZhaWxlZC5cbmV4cG9ydCBjb25zdCBSRVBMQVlfVElNRU9VVF9NQVhfUkVUUklFUyA9IDM7XG4iXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy loader for getPort that prevents bundlers (Turbopack, esbuild)
|
|
3
|
+
* from statically tracing @workflow/utils/get-port and its filesystem
|
|
4
|
+
* operations (readdir, readFile, readlink) into the flow route bundle.
|
|
5
|
+
*
|
|
6
|
+
* Uses createRequire with a dynamically constructed specifier so the
|
|
7
|
+
* dependency is invisible to bundler static analysis.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getPortLazy(): Promise<number | undefined>;
|
|
10
|
+
//# sourceMappingURL=get-port-lazy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-port-lazy.d.ts","sourceRoot":"","sources":["../../src/runtime/get-port-lazy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAkB/D"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy loader for getPort that prevents bundlers (Turbopack, esbuild)
|
|
3
|
+
* from statically tracing @workflow/utils/get-port and its filesystem
|
|
4
|
+
* operations (readdir, readFile, readlink) into the flow route bundle.
|
|
5
|
+
*
|
|
6
|
+
* Uses createRequire with a dynamically constructed specifier so the
|
|
7
|
+
* dependency is invisible to bundler static analysis.
|
|
8
|
+
*/
|
|
9
|
+
import { createRequire } from 'node:module';
|
|
10
|
+
import { pathToFileURL } from 'node:url';
|
|
11
|
+
let _getPort;
|
|
12
|
+
export async function getPortLazy() {
|
|
13
|
+
if (!_getPort) {
|
|
14
|
+
try {
|
|
15
|
+
// Construct specifier at runtime to defeat bundler static analysis.
|
|
16
|
+
const spec = ['@workflow/utils', 'get-port'].join('/');
|
|
17
|
+
// Use process.cwd()-based createRequire for CJS/ESM compatibility.
|
|
18
|
+
// import.meta.url is unavailable in CJS re-bundled outputs.
|
|
19
|
+
const _require = createRequire(pathToFileURL(process.cwd() + '/package.json').href);
|
|
20
|
+
const mod = _require(spec);
|
|
21
|
+
_getPort = mod.getPort;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Module not available (e.g., in a browser or minimal bundle)
|
|
25
|
+
_getPort = async () => undefined;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return _getPort();
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXBvcnQtbGF6eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2dldC1wb3J0LWxhenkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV6QyxJQUFJLFFBQXlELENBQUM7QUFFOUQsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXO0lBQy9CLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQztZQUNILG9FQUFvRTtZQUNwRSxNQUFNLElBQUksR0FBRyxDQUFDLGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2RCxtRUFBbUU7WUFDbkUsNERBQTREO1lBQzVELE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FDNUIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQ3BELENBQUM7WUFDRixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsUUFBUSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDekIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLDhEQUE4RDtZQUM5RCxRQUFRLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFFBQVMsRUFBRSxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExhenkgbG9hZGVyIGZvciBnZXRQb3J0IHRoYXQgcHJldmVudHMgYnVuZGxlcnMgKFR1cmJvcGFjaywgZXNidWlsZClcbiAqIGZyb20gc3RhdGljYWxseSB0cmFjaW5nIEB3b3JrZmxvdy91dGlscy9nZXQtcG9ydCBhbmQgaXRzIGZpbGVzeXN0ZW1cbiAqIG9wZXJhdGlvbnMgKHJlYWRkaXIsIHJlYWRGaWxlLCByZWFkbGluaykgaW50byB0aGUgZmxvdyByb3V0ZSBidW5kbGUuXG4gKlxuICogVXNlcyBjcmVhdGVSZXF1aXJlIHdpdGggYSBkeW5hbWljYWxseSBjb25zdHJ1Y3RlZCBzcGVjaWZpZXIgc28gdGhlXG4gKiBkZXBlbmRlbmN5IGlzIGludmlzaWJsZSB0byBidW5kbGVyIHN0YXRpYyBhbmFseXNpcy5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbm9kZTptb2R1bGUnO1xuaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ25vZGU6dXJsJztcblxubGV0IF9nZXRQb3J0OiAoKCkgPT4gUHJvbWlzZTxudW1iZXIgfCB1bmRlZmluZWQ+KSB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBvcnRMYXp5KCk6IFByb21pc2U8bnVtYmVyIHwgdW5kZWZpbmVkPiB7XG4gIGlmICghX2dldFBvcnQpIHtcbiAgICB0cnkge1xuICAgICAgLy8gQ29uc3RydWN0IHNwZWNpZmllciBhdCBydW50aW1lIHRvIGRlZmVhdCBidW5kbGVyIHN0YXRpYyBhbmFseXNpcy5cbiAgICAgIGNvbnN0IHNwZWMgPSBbJ0B3b3JrZmxvdy91dGlscycsICdnZXQtcG9ydCddLmpvaW4oJy8nKTtcbiAgICAgIC8vIFVzZSBwcm9jZXNzLmN3ZCgpLWJhc2VkIGNyZWF0ZVJlcXVpcmUgZm9yIENKUy9FU00gY29tcGF0aWJpbGl0eS5cbiAgICAgIC8vIGltcG9ydC5tZXRhLnVybCBpcyB1bmF2YWlsYWJsZSBpbiBDSlMgcmUtYnVuZGxlZCBvdXRwdXRzLlxuICAgICAgY29uc3QgX3JlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKFxuICAgICAgICBwYXRoVG9GaWxlVVJMKHByb2Nlc3MuY3dkKCkgKyAnL3BhY2thZ2UuanNvbicpLmhyZWZcbiAgICAgICk7XG4gICAgICBjb25zdCBtb2QgPSBfcmVxdWlyZShzcGVjKTtcbiAgICAgIF9nZXRQb3J0ID0gbW9kLmdldFBvcnQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBNb2R1bGUgbm90IGF2YWlsYWJsZSAoZS5nLiwgaW4gYSBicm93c2VyIG9yIG1pbmltYWwgYnVuZGxlKVxuICAgICAgX2dldFBvcnQgPSBhc3luYyAoKSA9PiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBfZ2V0UG9ydCEoKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy accessor for the World singleton via globalThis symbols.
|
|
3
|
+
*
|
|
4
|
+
* This module exists to break the static import chain from step-side
|
|
5
|
+
* modules (serialization, run, helpers, start) to world.ts. Without it,
|
|
6
|
+
* esbuild bundles world.ts (and its transitive deps: world-local,
|
|
7
|
+
* world-vercel, process.cwd(), etc.) into the step registrations bundle,
|
|
8
|
+
* which triggers Turbopack NFT tracing errors in the V2 combined flow route.
|
|
9
|
+
*
|
|
10
|
+
* Resolution order, in priority:
|
|
11
|
+
*
|
|
12
|
+
* 1. `globalThis[WorldCacheKey]` — populated by a successful prior
|
|
13
|
+
* `getWorld()` call. This is the steady-state hot path.
|
|
14
|
+
* 2. `globalThis[GetWorldFnKey]` — populated by the module-load side
|
|
15
|
+
* effect at the bottom of `./world.ts`. Fires on every server bundle
|
|
16
|
+
* that reaches this file via `workflow/api` (which imports
|
|
17
|
+
* `./world-init.ts` for its side effect; see that file for the full
|
|
18
|
+
* rationale). This is the cold-start path for routes that consume
|
|
19
|
+
* `start` without any prior workflow run.
|
|
20
|
+
* 3. Dynamic `import('./world.js')` — last-resort fallback for
|
|
21
|
+
* environments where neither (1) nor (2) is available (CJS test
|
|
22
|
+
* runners, scripts that import deeply into `@workflow/core` without
|
|
23
|
+
* going through `workflow/api`, future bundlers we haven't validated).
|
|
24
|
+
* The specifier is built at runtime so esbuild can't trace it into
|
|
25
|
+
* step bundles. Note: this branch is unreliable in webpack-bundled
|
|
26
|
+
* routes because webpack inlines this module into the route file and
|
|
27
|
+
* the relative path resolves against the bundle location — paths (1)
|
|
28
|
+
* and (2) cover those cases instead.
|
|
29
|
+
*/
|
|
30
|
+
import type { World } from '@workflow/world';
|
|
31
|
+
export declare function getWorldLazy(): Promise<World>;
|
|
32
|
+
//# sourceMappingURL=get-world-lazy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-world-lazy.d.ts","sourceRoot":"","sources":["../../src/runtime/get-world-lazy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAM7C,wBAAsB,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC,CAoBnD"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy accessor for the World singleton via globalThis symbols.
|
|
3
|
+
*
|
|
4
|
+
* This module exists to break the static import chain from step-side
|
|
5
|
+
* modules (serialization, run, helpers, start) to world.ts. Without it,
|
|
6
|
+
* esbuild bundles world.ts (and its transitive deps: world-local,
|
|
7
|
+
* world-vercel, process.cwd(), etc.) into the step registrations bundle,
|
|
8
|
+
* which triggers Turbopack NFT tracing errors in the V2 combined flow route.
|
|
9
|
+
*
|
|
10
|
+
* Resolution order, in priority:
|
|
11
|
+
*
|
|
12
|
+
* 1. `globalThis[WorldCacheKey]` — populated by a successful prior
|
|
13
|
+
* `getWorld()` call. This is the steady-state hot path.
|
|
14
|
+
* 2. `globalThis[GetWorldFnKey]` — populated by the module-load side
|
|
15
|
+
* effect at the bottom of `./world.ts`. Fires on every server bundle
|
|
16
|
+
* that reaches this file via `workflow/api` (which imports
|
|
17
|
+
* `./world-init.ts` for its side effect; see that file for the full
|
|
18
|
+
* rationale). This is the cold-start path for routes that consume
|
|
19
|
+
* `start` without any prior workflow run.
|
|
20
|
+
* 3. Dynamic `import('./world.js')` — last-resort fallback for
|
|
21
|
+
* environments where neither (1) nor (2) is available (CJS test
|
|
22
|
+
* runners, scripts that import deeply into `@workflow/core` without
|
|
23
|
+
* going through `workflow/api`, future bundlers we haven't validated).
|
|
24
|
+
* The specifier is built at runtime so esbuild can't trace it into
|
|
25
|
+
* step bundles. Note: this branch is unreliable in webpack-bundled
|
|
26
|
+
* routes because webpack inlines this module into the route file and
|
|
27
|
+
* the relative path resolves against the bundle location — paths (1)
|
|
28
|
+
* and (2) cover those cases instead.
|
|
29
|
+
*/
|
|
30
|
+
const WorldCacheKey = Symbol.for('@workflow/world//cache');
|
|
31
|
+
const WorldCachePromiseKey = Symbol.for('@workflow/world//cachePromise');
|
|
32
|
+
const GetWorldFnKey = Symbol.for('@workflow/world//getWorldFn');
|
|
33
|
+
export async function getWorldLazy() {
|
|
34
|
+
const g = globalThis;
|
|
35
|
+
if (g[WorldCacheKey])
|
|
36
|
+
return g[WorldCacheKey];
|
|
37
|
+
if (g[WorldCachePromiseKey]) {
|
|
38
|
+
g[WorldCacheKey] = await g[WorldCachePromiseKey];
|
|
39
|
+
return g[WorldCacheKey];
|
|
40
|
+
}
|
|
41
|
+
// If world.ts is statically present in this bundle, it has registered
|
|
42
|
+
// getWorld on globalThis at module load. Prefer that over the dynamic
|
|
43
|
+
// import fallback, which doesn't survive Next.js inlining get-world-lazy
|
|
44
|
+
// into a route bundle (the relative './world.js' resolves against the
|
|
45
|
+
// bundled location, where no sibling world.js exists).
|
|
46
|
+
const getWorldFn = g[GetWorldFnKey];
|
|
47
|
+
if (getWorldFn)
|
|
48
|
+
return getWorldFn();
|
|
49
|
+
// Last resort: dynamic import for environments where world.ts wasn't
|
|
50
|
+
// bundled but is reachable as a sibling module on disk. The specifier is
|
|
51
|
+
// built at runtime so esbuild can't trace it into the step bundle.
|
|
52
|
+
const worldPath = ['./world', 'js'].join('.');
|
|
53
|
+
const { getWorld } = await import(worldPath);
|
|
54
|
+
return getWorld();
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXdvcmxkLWxhenkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9nZXQtd29ybGQtbGF6eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUlILE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUMzRCxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztBQUN6RSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDLENBQUM7QUFFaEUsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZO0lBQ2hDLE1BQU0sQ0FBQyxHQUFHLFVBQWlCLENBQUM7SUFDNUIsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDO1FBQUUsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDOUMsSUFBSSxDQUFDLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRCxzRUFBc0U7SUFDdEUsc0VBQXNFO0lBQ3RFLHlFQUF5RTtJQUN6RSxzRUFBc0U7SUFDdEUsdURBQXVEO0lBQ3ZELE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQXVDLENBQUM7SUFDMUUsSUFBSSxVQUFVO1FBQUUsT0FBTyxVQUFVLEVBQUUsQ0FBQztJQUNwQyxxRUFBcUU7SUFDckUseUVBQXlFO0lBQ3pFLG1FQUFtRTtJQUNuRSxNQUFNLFNBQVMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdDLE9BQU8sUUFBUSxFQUFFLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGF6eSBhY2Nlc3NvciBmb3IgdGhlIFdvcmxkIHNpbmdsZXRvbiB2aWEgZ2xvYmFsVGhpcyBzeW1ib2xzLlxuICpcbiAqIFRoaXMgbW9kdWxlIGV4aXN0cyB0byBicmVhayB0aGUgc3RhdGljIGltcG9ydCBjaGFpbiBmcm9tIHN0ZXAtc2lkZVxuICogbW9kdWxlcyAoc2VyaWFsaXphdGlvbiwgcnVuLCBoZWxwZXJzLCBzdGFydCkgdG8gd29ybGQudHMuIFdpdGhvdXQgaXQsXG4gKiBlc2J1aWxkIGJ1bmRsZXMgd29ybGQudHMgKGFuZCBpdHMgdHJhbnNpdGl2ZSBkZXBzOiB3b3JsZC1sb2NhbCxcbiAqIHdvcmxkLXZlcmNlbCwgcHJvY2Vzcy5jd2QoKSwgZXRjLikgaW50byB0aGUgc3RlcCByZWdpc3RyYXRpb25zIGJ1bmRsZSxcbiAqIHdoaWNoIHRyaWdnZXJzIFR1cmJvcGFjayBORlQgdHJhY2luZyBlcnJvcnMgaW4gdGhlIFYyIGNvbWJpbmVkIGZsb3cgcm91dGUuXG4gKlxuICogUmVzb2x1dGlvbiBvcmRlciwgaW4gcHJpb3JpdHk6XG4gKlxuICogMS4gYGdsb2JhbFRoaXNbV29ybGRDYWNoZUtleV1gIOKAlCBwb3B1bGF0ZWQgYnkgYSBzdWNjZXNzZnVsIHByaW9yXG4gKiAgICBgZ2V0V29ybGQoKWAgY2FsbC4gVGhpcyBpcyB0aGUgc3RlYWR5LXN0YXRlIGhvdCBwYXRoLlxuICogMi4gYGdsb2JhbFRoaXNbR2V0V29ybGRGbktleV1gIOKAlCBwb3B1bGF0ZWQgYnkgdGhlIG1vZHVsZS1sb2FkIHNpZGVcbiAqICAgIGVmZmVjdCBhdCB0aGUgYm90dG9tIG9mIGAuL3dvcmxkLnRzYC4gRmlyZXMgb24gZXZlcnkgc2VydmVyIGJ1bmRsZVxuICogICAgdGhhdCByZWFjaGVzIHRoaXMgZmlsZSB2aWEgYHdvcmtmbG93L2FwaWAgKHdoaWNoIGltcG9ydHNcbiAqICAgIGAuL3dvcmxkLWluaXQudHNgIGZvciBpdHMgc2lkZSBlZmZlY3Q7IHNlZSB0aGF0IGZpbGUgZm9yIHRoZSBmdWxsXG4gKiAgICByYXRpb25hbGUpLiBUaGlzIGlzIHRoZSBjb2xkLXN0YXJ0IHBhdGggZm9yIHJvdXRlcyB0aGF0IGNvbnN1bWVcbiAqICAgIGBzdGFydGAgd2l0aG91dCBhbnkgcHJpb3Igd29ya2Zsb3cgcnVuLlxuICogMy4gRHluYW1pYyBgaW1wb3J0KCcuL3dvcmxkLmpzJylgIOKAlCBsYXN0LXJlc29ydCBmYWxsYmFjayBmb3JcbiAqICAgIGVudmlyb25tZW50cyB3aGVyZSBuZWl0aGVyICgxKSBub3IgKDIpIGlzIGF2YWlsYWJsZSAoQ0pTIHRlc3RcbiAqICAgIHJ1bm5lcnMsIHNjcmlwdHMgdGhhdCBpbXBvcnQgZGVlcGx5IGludG8gYEB3b3JrZmxvdy9jb3JlYCB3aXRob3V0XG4gKiAgICBnb2luZyB0aHJvdWdoIGB3b3JrZmxvdy9hcGlgLCBmdXR1cmUgYnVuZGxlcnMgd2UgaGF2ZW4ndCB2YWxpZGF0ZWQpLlxuICogICAgVGhlIHNwZWNpZmllciBpcyBidWlsdCBhdCBydW50aW1lIHNvIGVzYnVpbGQgY2FuJ3QgdHJhY2UgaXQgaW50b1xuICogICAgc3RlcCBidW5kbGVzLiBOb3RlOiB0aGlzIGJyYW5jaCBpcyB1bnJlbGlhYmxlIGluIHdlYnBhY2stYnVuZGxlZFxuICogICAgcm91dGVzIGJlY2F1c2Ugd2VicGFjayBpbmxpbmVzIHRoaXMgbW9kdWxlIGludG8gdGhlIHJvdXRlIGZpbGUgYW5kXG4gKiAgICB0aGUgcmVsYXRpdmUgcGF0aCByZXNvbHZlcyBhZ2FpbnN0IHRoZSBidW5kbGUgbG9jYXRpb24g4oCUIHBhdGhzICgxKVxuICogICAgYW5kICgyKSBjb3ZlciB0aG9zZSBjYXNlcyBpbnN0ZWFkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgV29ybGQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuXG5jb25zdCBXb3JsZENhY2hlS2V5ID0gU3ltYm9sLmZvcignQHdvcmtmbG93L3dvcmxkLy9jYWNoZScpO1xuY29uc3QgV29ybGRDYWNoZVByb21pc2VLZXkgPSBTeW1ib2wuZm9yKCdAd29ya2Zsb3cvd29ybGQvL2NhY2hlUHJvbWlzZScpO1xuY29uc3QgR2V0V29ybGRGbktleSA9IFN5bWJvbC5mb3IoJ0B3b3JrZmxvdy93b3JsZC8vZ2V0V29ybGRGbicpO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0V29ybGRMYXp5KCk6IFByb21pc2U8V29ybGQ+IHtcbiAgY29uc3QgZyA9IGdsb2JhbFRoaXMgYXMgYW55O1xuICBpZiAoZ1tXb3JsZENhY2hlS2V5XSkgcmV0dXJuIGdbV29ybGRDYWNoZUtleV07XG4gIGlmIChnW1dvcmxkQ2FjaGVQcm9taXNlS2V5XSkge1xuICAgIGdbV29ybGRDYWNoZUtleV0gPSBhd2FpdCBnW1dvcmxkQ2FjaGVQcm9taXNlS2V5XTtcbiAgICByZXR1cm4gZ1tXb3JsZENhY2hlS2V5XTtcbiAgfVxuICAvLyBJZiB3b3JsZC50cyBpcyBzdGF0aWNhbGx5IHByZXNlbnQgaW4gdGhpcyBidW5kbGUsIGl0IGhhcyByZWdpc3RlcmVkXG4gIC8vIGdldFdvcmxkIG9uIGdsb2JhbFRoaXMgYXQgbW9kdWxlIGxvYWQuIFByZWZlciB0aGF0IG92ZXIgdGhlIGR5bmFtaWNcbiAgLy8gaW1wb3J0IGZhbGxiYWNrLCB3aGljaCBkb2Vzbid0IHN1cnZpdmUgTmV4dC5qcyBpbmxpbmluZyBnZXQtd29ybGQtbGF6eVxuICAvLyBpbnRvIGEgcm91dGUgYnVuZGxlICh0aGUgcmVsYXRpdmUgJy4vd29ybGQuanMnIHJlc29sdmVzIGFnYWluc3QgdGhlXG4gIC8vIGJ1bmRsZWQgbG9jYXRpb24sIHdoZXJlIG5vIHNpYmxpbmcgd29ybGQuanMgZXhpc3RzKS5cbiAgY29uc3QgZ2V0V29ybGRGbiA9IGdbR2V0V29ybGRGbktleV0gYXMgKCgpID0+IFByb21pc2U8V29ybGQ+KSB8IHVuZGVmaW5lZDtcbiAgaWYgKGdldFdvcmxkRm4pIHJldHVybiBnZXRXb3JsZEZuKCk7XG4gIC8vIExhc3QgcmVzb3J0OiBkeW5hbWljIGltcG9ydCBmb3IgZW52aXJvbm1lbnRzIHdoZXJlIHdvcmxkLnRzIHdhc24ndFxuICAvLyBidW5kbGVkIGJ1dCBpcyByZWFjaGFibGUgYXMgYSBzaWJsaW5nIG1vZHVsZSBvbiBkaXNrLiBUaGUgc3BlY2lmaWVyIGlzXG4gIC8vIGJ1aWx0IGF0IHJ1bnRpbWUgc28gZXNidWlsZCBjYW4ndCB0cmFjZSBpdCBpbnRvIHRoZSBzdGVwIGJ1bmRsZS5cbiAgY29uc3Qgd29ybGRQYXRoID0gWycuL3dvcmxkJywgJ2pzJ10uam9pbignLicpO1xuICBjb25zdCB7IGdldFdvcmxkIH0gPSBhd2FpdCBpbXBvcnQod29ybGRQYXRoKTtcbiAgcmV0dXJuIGdldFdvcmxkKCk7XG59XG4iXX0=
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { Event, HealthCheckPayload, ValidQueueName, World } from '@workflow/world';
|
|
1
|
+
import type { Event, HealthCheckPayload, ValidQueueName, WorkflowRun, World } from '@workflow/world';
|
|
2
|
+
import { type CryptoKey } from '../encryption.js';
|
|
2
3
|
/**
|
|
3
4
|
* Validates a workflow name and returns the corresponding queue name.
|
|
4
5
|
* Ensures the workflow name only contains safe characters before
|
|
@@ -29,7 +30,7 @@ export declare function parseHealthCheckPayload(message: unknown): HealthCheckPa
|
|
|
29
30
|
* @param healthCheck - The parsed health check payload
|
|
30
31
|
* @param endpoint - Which endpoint is responding ('workflow' or 'step')
|
|
31
32
|
*/
|
|
32
|
-
export declare function handleHealthCheckMessage(healthCheck: HealthCheckPayload, endpoint: 'workflow' | 'step'): Promise<void>;
|
|
33
|
+
export declare function handleHealthCheckMessage(healthCheck: HealthCheckPayload, endpoint: 'workflow' | 'step', worldSpecVersion?: number): Promise<void>;
|
|
33
34
|
export type HealthCheckEndpoint = 'workflow' | 'step';
|
|
34
35
|
export interface HealthCheckOptions {
|
|
35
36
|
/** Timeout in milliseconds to wait for health check response. Default: 30000 (30s) */
|
|
@@ -39,16 +40,25 @@ export interface HealthCheckOptions {
|
|
|
39
40
|
}
|
|
40
41
|
export declare function healthCheck(world: World, endpoint: HealthCheckEndpoint, options?: HealthCheckOptions): Promise<HealthCheckResult>;
|
|
41
42
|
/**
|
|
42
|
-
* Loads
|
|
43
|
-
*
|
|
44
|
-
*
|
|
43
|
+
* Loads workflow run events by iterating through all pages of paginated
|
|
44
|
+
* results. Events are returned in chronological (ascending) order for
|
|
45
|
+
* deterministic workflow replay.
|
|
46
|
+
*
|
|
47
|
+
* @param runId - The workflow run ID.
|
|
48
|
+
* @param afterCursor - If provided, only events after this cursor are
|
|
49
|
+
* returned (incremental load). If omitted, all events are returned.
|
|
50
|
+
* The returned cursor can be passed back in on a subsequent call for
|
|
51
|
+
* incremental loading.
|
|
45
52
|
*/
|
|
46
|
-
export declare function
|
|
53
|
+
export declare function loadWorkflowRunEvents(runId: string, afterCursor?: string): Promise<{
|
|
54
|
+
events: Event[];
|
|
55
|
+
cursor: string | null;
|
|
56
|
+
}>;
|
|
47
57
|
/**
|
|
48
58
|
* Wraps a request/response handler and adds a health check "mode"
|
|
49
59
|
* based on the presence of a `__health` query parameter.
|
|
50
60
|
*/
|
|
51
|
-
export declare function withHealthCheck(handler: (req: Request) => Promise<Response
|
|
61
|
+
export declare function withHealthCheck(handler: (req: Request) => Promise<Response>, worldSpecVersion?: number): (req: Request) => Promise<Response>;
|
|
52
62
|
/**
|
|
53
63
|
* Queues a message to the specified queue with tracing.
|
|
54
64
|
*/
|
|
@@ -61,4 +71,27 @@ export declare function getQueueOverhead(message: {
|
|
|
61
71
|
}): {
|
|
62
72
|
[k: string]: number;
|
|
63
73
|
} | undefined;
|
|
74
|
+
/**
|
|
75
|
+
* Returns a memoized accessor for the per-run AES-256 encryption key.
|
|
76
|
+
*
|
|
77
|
+
* The first call resolves the key via `world.getEncryptionKeyForRun` (which
|
|
78
|
+
* may do HKDF derivation locally on Vercel, or a network fetch from
|
|
79
|
+
* external contexts) and imports it as a `CryptoKey`; subsequent calls
|
|
80
|
+
* await the same cached promise. If the world doesn't support encryption
|
|
81
|
+
* or the run has no key configured, the cached value is `undefined`.
|
|
82
|
+
*
|
|
83
|
+
* Used by step / workflow handlers to defer the (potentially expensive)
|
|
84
|
+
* key fetch until the first code path that actually needs it — typically
|
|
85
|
+
* input hydration on the success path, or error dehydration on a failure
|
|
86
|
+
* path. Both paths can race-call the accessor without triggering duplicate
|
|
87
|
+
* fetches.
|
|
88
|
+
*
|
|
89
|
+
* Errors thrown by `getEncryptionKeyForRun` propagate to every caller
|
|
90
|
+
* (the cached promise rejects). This is intentional: when encryption is
|
|
91
|
+
* configured, we never want to silently fall back to plaintext
|
|
92
|
+
* serialization. A propagated error in an event-emission path leaves the
|
|
93
|
+
* outer try/catch to log and surface the issue; the queue's redelivery
|
|
94
|
+
* semantics will retry the key fetch on the next attempt.
|
|
95
|
+
*/
|
|
96
|
+
export declare function memoizeEncryptionKey(world: World, runOrId: WorkflowRun | string): () => Promise<CryptoKey | undefined>;
|
|
64
97
|
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/runtime/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,kBAAkB,EAClB,cAAc,EACd,KAAK,EACN,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/runtime/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,KAAK,EACN,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,kBAAkB,CAAC;AAiB7D;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,CAOzE;AAWD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,GACf,kBAAkB,GAAG,SAAS,CAMhC;AAYD;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,kBAAkB,EAC/B,QAAQ,EAAE,UAAU,GAAG,MAAM,EAC7B,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iGAAiG;IACjG,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAoGD,wBAAsB,WAAW,CAC/B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CA2E5B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAqErD;AAYD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,EAC5C,gBAAgB,CAAC,EAAE,MAAM,GACxB,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CA8BrC;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,KAAK,EACZ,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,iBA0BxC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,IAAI,CAAA;CAAE;;cAS/D;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,WAAW,GAAG,MAAM,GAC5B,MAAM,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAiBtC"}
|