@blokjs/runner 0.2.2 → 0.6.0
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/Blok.js +32 -3
- package/dist/Blok.js.map +1 -1
- package/dist/Configuration.d.ts +59 -5
- package/dist/Configuration.js +366 -96
- package/dist/Configuration.js.map +1 -1
- package/dist/ForEachNode.d.ts +59 -0
- package/dist/ForEachNode.js +522 -0
- package/dist/ForEachNode.js.map +1 -0
- package/dist/LoopMaxIterationsError.d.ts +11 -0
- package/dist/LoopMaxIterationsError.js +18 -0
- package/dist/LoopMaxIterationsError.js.map +1 -0
- package/dist/LoopNode.d.ts +36 -0
- package/dist/LoopNode.js +182 -0
- package/dist/LoopNode.js.map +1 -0
- package/dist/PayloadTooLargeError.d.ts +19 -0
- package/dist/PayloadTooLargeError.js +29 -0
- package/dist/PayloadTooLargeError.js.map +1 -0
- package/dist/RunCancelledError.d.ts +17 -0
- package/dist/RunCancelledError.js +25 -0
- package/dist/RunCancelledError.js.map +1 -0
- package/dist/Runner.d.ts +11 -1
- package/dist/Runner.js +9 -2
- package/dist/Runner.js.map +1 -1
- package/dist/RunnerSteps.js +648 -44
- package/dist/RunnerSteps.js.map +1 -1
- package/dist/RuntimeAdapterNode.d.ts +2 -1
- package/dist/RuntimeAdapterNode.js +2 -2
- package/dist/RuntimeAdapterNode.js.map +1 -1
- package/dist/RuntimeRegistry.d.ts +23 -2
- package/dist/RuntimeRegistry.js +31 -2
- package/dist/RuntimeRegistry.js.map +1 -1
- package/dist/SubworkflowNode.d.ts +181 -0
- package/dist/SubworkflowNode.js +479 -0
- package/dist/SubworkflowNode.js.map +1 -0
- package/dist/SwitchNode.d.ts +37 -0
- package/dist/SwitchNode.js +153 -0
- package/dist/SwitchNode.js.map +1 -0
- package/dist/TriggerBase.d.ts +178 -0
- package/dist/TriggerBase.js +1032 -5
- package/dist/TriggerBase.js.map +1 -1
- package/dist/TryCatchNode.d.ts +32 -0
- package/dist/TryCatchNode.js +207 -0
- package/dist/TryCatchNode.js.map +1 -0
- package/dist/WaitDispatchRequest.d.ts +38 -0
- package/dist/WaitDispatchRequest.js +13 -0
- package/dist/WaitDispatchRequest.js.map +1 -0
- package/dist/WaitNode.d.ts +23 -0
- package/dist/WaitNode.js +26 -0
- package/dist/WaitNode.js.map +1 -0
- package/dist/adapters/grpc/GrpcCodec.js +2 -2
- package/dist/adapters/grpc/GrpcRuntimeAdapter.d.ts +6 -4
- package/dist/adapters/grpc/GrpcRuntimeAdapter.js +6 -4
- package/dist/adapters/grpc/GrpcRuntimeAdapter.js.map +1 -1
- package/dist/adapters/grpc/types.d.ts +7 -5
- package/dist/adapters/grpc/types.js.map +1 -1
- package/dist/adapters/transport.d.ts +12 -41
- package/dist/adapters/transport.js +21 -70
- package/dist/adapters/transport.js.map +1 -1
- package/dist/cache/NodeResultCache.js +7 -0
- package/dist/cache/NodeResultCache.js.map +1 -1
- package/dist/concurrency/ConcurrencyBackend.d.ts +61 -0
- package/dist/concurrency/ConcurrencyBackend.js +20 -0
- package/dist/concurrency/ConcurrencyBackend.js.map +1 -0
- package/dist/concurrency/ConcurrencyLimitError.d.ts +37 -0
- package/dist/concurrency/ConcurrencyLimitError.js +16 -0
- package/dist/concurrency/ConcurrencyLimitError.js.map +1 -0
- package/dist/concurrency/NatsKvConcurrencyBackend.d.ts +64 -0
- package/dist/concurrency/NatsKvConcurrencyBackend.js +310 -0
- package/dist/concurrency/NatsKvConcurrencyBackend.js.map +1 -0
- package/dist/concurrency/QueueExpiredError.d.ts +40 -0
- package/dist/concurrency/QueueExpiredError.js +15 -0
- package/dist/concurrency/QueueExpiredError.js.map +1 -0
- package/dist/concurrency/RedisConcurrencyBackend.d.ts +64 -0
- package/dist/concurrency/RedisConcurrencyBackend.js +374 -0
- package/dist/concurrency/RedisConcurrencyBackend.js.map +1 -0
- package/dist/concurrency/createConcurrencyBackend.d.ts +24 -0
- package/dist/concurrency/createConcurrencyBackend.js +38 -0
- package/dist/concurrency/createConcurrencyBackend.js.map +1 -0
- package/dist/concurrency/readConcurrencyConfig.d.ts +60 -0
- package/dist/concurrency/readConcurrencyConfig.js +60 -0
- package/dist/concurrency/readConcurrencyConfig.js.map +1 -0
- package/dist/defineNode.d.ts +8 -0
- package/dist/defineNode.js +25 -5
- package/dist/defineNode.js.map +1 -1
- package/dist/graphql/GraphQLSchemaGenerator.js +1 -1
- package/dist/graphql/GraphQLSchemaGenerator.js.map +1 -1
- package/dist/idempotency/resolveIdempotencyKey.d.ts +20 -0
- package/dist/idempotency/resolveIdempotencyKey.js +37 -0
- package/dist/idempotency/resolveIdempotencyKey.js.map +1 -0
- package/dist/index.d.ts +30 -6
- package/dist/index.js +55 -6
- package/dist/index.js.map +1 -1
- package/dist/marketplace/RuntimeCatalog.d.ts +6 -0
- package/dist/marketplace/RuntimeCatalog.js.map +1 -1
- package/dist/marketplace/RuntimeDiscovery.d.ts +2 -2
- package/dist/marketplace/RuntimeDiscovery.js +18 -6
- package/dist/marketplace/RuntimeDiscovery.js.map +1 -1
- package/dist/monitoring/ConcurrencyMetrics.d.ts +82 -0
- package/dist/monitoring/ConcurrencyMetrics.js +139 -0
- package/dist/monitoring/ConcurrencyMetrics.js.map +1 -0
- package/dist/monitoring/ForEachWaitMetrics.d.ts +22 -0
- package/dist/monitoring/ForEachWaitMetrics.js +36 -0
- package/dist/monitoring/ForEachWaitMetrics.js.map +1 -0
- package/dist/monitoring/JanitorMetrics.d.ts +27 -0
- package/dist/monitoring/JanitorMetrics.js +48 -0
- package/dist/monitoring/JanitorMetrics.js.map +1 -0
- package/dist/openapi/OpenAPIGenerator.js +7 -2
- package/dist/openapi/OpenAPIGenerator.js.map +1 -1
- package/dist/runtime/PrimitiveStack.d.ts +64 -0
- package/dist/runtime/PrimitiveStack.js +92 -0
- package/dist/runtime/PrimitiveStack.js.map +1 -0
- package/dist/scheduling/DebounceBackend.d.ts +108 -0
- package/dist/scheduling/DebounceBackend.js +23 -0
- package/dist/scheduling/DebounceBackend.js.map +1 -0
- package/dist/scheduling/DebounceCoordinator.d.ts +141 -0
- package/dist/scheduling/DebounceCoordinator.js +362 -0
- package/dist/scheduling/DebounceCoordinator.js.map +1 -0
- package/dist/scheduling/DeferredDispatchSignal.d.ts +50 -0
- package/dist/scheduling/DeferredDispatchSignal.js +14 -0
- package/dist/scheduling/DeferredDispatchSignal.js.map +1 -0
- package/dist/scheduling/DeferredRunScheduler.d.ts +96 -0
- package/dist/scheduling/DeferredRunScheduler.js +256 -0
- package/dist/scheduling/DeferredRunScheduler.js.map +1 -0
- package/dist/scheduling/NatsKvDebounceBackend.d.ts +53 -0
- package/dist/scheduling/NatsKvDebounceBackend.js +334 -0
- package/dist/scheduling/NatsKvDebounceBackend.js.map +1 -0
- package/dist/scheduling/RedisDebounceBackend.d.ts +49 -0
- package/dist/scheduling/RedisDebounceBackend.js +356 -0
- package/dist/scheduling/RedisDebounceBackend.js.map +1 -0
- package/dist/scheduling/createDebounceBackend.d.ts +25 -0
- package/dist/scheduling/createDebounceBackend.js +39 -0
- package/dist/scheduling/createDebounceBackend.js.map +1 -0
- package/dist/scheduling/readSchedulingConfig.d.ts +24 -0
- package/dist/scheduling/readSchedulingConfig.js +52 -0
- package/dist/scheduling/readSchedulingConfig.js.map +1 -0
- package/dist/security/AuditLogger.js +1 -1
- package/dist/security/AuditLogger.js.map +1 -1
- package/dist/security/AuthMiddleware.d.ts +19 -20
- package/dist/security/AuthMiddleware.js +35 -20
- package/dist/security/AuthMiddleware.js.map +1 -1
- package/dist/security/OAuthProvider.js +2 -2
- package/dist/security/OAuthProvider.js.map +1 -1
- package/dist/security/SecretManager.js +14 -13
- package/dist/security/SecretManager.js.map +1 -1
- package/dist/security/index.d.ts +3 -1
- package/dist/security/index.js +3 -1
- package/dist/security/index.js.map +1 -1
- package/dist/testing/TestHarness.d.ts +27 -12
- package/dist/testing/TestHarness.js +19 -3
- package/dist/testing/TestHarness.js.map +1 -1
- package/dist/testing/WorkflowTestRunner.js +0 -7
- package/dist/testing/WorkflowTestRunner.js.map +1 -1
- package/dist/timeouts/StepTimeoutError.d.ts +22 -0
- package/dist/timeouts/StepTimeoutError.js +31 -0
- package/dist/timeouts/StepTimeoutError.js.map +1 -0
- package/dist/tracing/InMemoryRunStore.d.ts +41 -1
- package/dist/tracing/InMemoryRunStore.js +239 -0
- package/dist/tracing/InMemoryRunStore.js.map +1 -1
- package/dist/tracing/Janitor.d.ts +70 -0
- package/dist/tracing/Janitor.js +150 -0
- package/dist/tracing/Janitor.js.map +1 -0
- package/dist/tracing/PostgresRunStore.d.ts +57 -1
- package/dist/tracing/PostgresRunStore.js +711 -6
- package/dist/tracing/PostgresRunStore.js.map +1 -1
- package/dist/tracing/RoutingDiagnostics.d.ts +55 -0
- package/dist/tracing/RoutingDiagnostics.js +50 -0
- package/dist/tracing/RoutingDiagnostics.js.map +1 -0
- package/dist/tracing/RunStore.d.ts +181 -1
- package/dist/tracing/RunTracker.d.ts +244 -9
- package/dist/tracing/RunTracker.js +594 -1
- package/dist/tracing/RunTracker.js.map +1 -1
- package/dist/tracing/SqliteRunStore.d.ts +79 -2
- package/dist/tracing/SqliteRunStore.js +775 -16
- package/dist/tracing/SqliteRunStore.js.map +1 -1
- package/dist/tracing/TraceRouter.d.ts +20 -2
- package/dist/tracing/TraceRouter.js +612 -6
- package/dist/tracing/TraceRouter.js.map +1 -1
- package/dist/tracing/createStore.js +14 -3
- package/dist/tracing/createStore.js.map +1 -1
- package/dist/tracing/metadataFilter.d.ts +63 -0
- package/dist/tracing/metadataFilter.js +224 -0
- package/dist/tracing/metadataFilter.js.map +1 -0
- package/dist/tracing/sanitize.d.ts +11 -0
- package/dist/tracing/sanitize.js +29 -0
- package/dist/tracing/sanitize.js.map +1 -1
- package/dist/tracing/types.d.ts +672 -2
- package/dist/utils/createChildContext.d.ts +32 -0
- package/dist/utils/createChildContext.js +113 -0
- package/dist/utils/createChildContext.js.map +1 -0
- package/dist/utils/envAllowlist.d.ts +35 -0
- package/dist/utils/envAllowlist.js +113 -0
- package/dist/utils/envAllowlist.js.map +1 -0
- package/dist/version/RuntimeVersionValidator.d.ts +38 -0
- package/dist/version/RuntimeVersionValidator.js +121 -0
- package/dist/version/RuntimeVersionValidator.js.map +1 -0
- package/dist/visualization/WorkflowVisualizer.js +4 -4
- package/dist/visualization/WorkflowVisualizer.js.map +1 -1
- package/dist/workflow/PersistenceHelper.d.ts +18 -10
- package/dist/workflow/PersistenceHelper.js +35 -9
- package/dist/workflow/PersistenceHelper.js.map +1 -1
- package/dist/workflow/WorkflowNormalizer.d.ts +48 -42
- package/dist/workflow/WorkflowNormalizer.js +650 -18
- package/dist/workflow/WorkflowNormalizer.js.map +1 -1
- package/dist/workflow/WorkflowRegistry.d.ts +186 -0
- package/dist/workflow/WorkflowRegistry.js +202 -0
- package/dist/workflow/WorkflowRegistry.js.map +1 -0
- package/dist/workflow/sampleBody.d.ts +54 -0
- package/dist/workflow/sampleBody.js +320 -0
- package/dist/workflow/sampleBody.js.map +1 -0
- package/package.json +3 -8
- package/dist/adapters/HttpRuntimeAdapter.d.ts +0 -79
- package/dist/adapters/HttpRuntimeAdapter.js +0 -233
- package/dist/adapters/HttpRuntimeAdapter.js.map +0 -1
|
@@ -2,22 +2,32 @@
|
|
|
2
2
|
* Apply a step's output to `ctx.state` according to the step's persistence
|
|
3
3
|
* knobs.
|
|
4
4
|
*
|
|
5
|
-
* **Rules** (in order):
|
|
5
|
+
* **Rules** (evaluated in order):
|
|
6
|
+
* 0. **Errored result → no-op.** A step that threw, returned `success:
|
|
7
|
+
* false`, or carries a non-null `error` / `errors` field does NOT write
|
|
8
|
+
* state. Authors can rely on `ctx.state[<step-id>] === undefined` as a
|
|
9
|
+
* truthful "did this step actually succeed?" check inside a
|
|
10
|
+
* `tryCatch.catch` arm. Without this guard, the framework's internal
|
|
11
|
+
* `BlokResponse.setError()` writes `data = {}` and the helper would
|
|
12
|
+
* persist that empty object — making the natural existence check
|
|
13
|
+
* meaningless. (See [tryCatch docs](../../../docs/c/devtools/tryCatch.mdx).)
|
|
6
14
|
* 1. `ephemeral: true` → no-op. Output is only available via `ctx.prev`.
|
|
7
|
-
* 2.
|
|
8
|
-
* 3. `spread: true` AND `data` is a plain object → shallow-merge data's
|
|
15
|
+
* 2. `spread: true` AND `data` is a plain object → shallow-merge data's
|
|
9
16
|
* top-level keys into `ctx.state`.
|
|
10
|
-
*
|
|
17
|
+
* 3. Default → `ctx.state[as ?? name] = data`.
|
|
11
18
|
*
|
|
12
19
|
* Mutates `ctx.state` in place. Always safe to call (no-op on missing data
|
|
13
20
|
* unless `spread` is set, which is an authoring-time error to combine with
|
|
14
21
|
* non-object output and is detected at workflow load time, not here).
|
|
15
22
|
*/
|
|
16
23
|
export function applyStepOutput(ctx, step, result) {
|
|
17
|
-
// Rule
|
|
18
|
-
|
|
24
|
+
// Rule 0 — error guard. Centralized so all callers (Blok.run,
|
|
25
|
+
// RuntimeAdapterNode.run, SubworkflowNode.dispatchSync) inherit the
|
|
26
|
+
// same truthful-state contract without each re-implementing the check.
|
|
27
|
+
if (isErroredResult(result))
|
|
19
28
|
return;
|
|
20
|
-
|
|
29
|
+
// Rule 1 — opt-out path
|
|
30
|
+
if (step.ephemeral === true)
|
|
21
31
|
return;
|
|
22
32
|
// Defensive: ensure state exists (TriggerBase initializes it, but
|
|
23
33
|
// some legacy code paths construct ctx by hand).
|
|
@@ -26,7 +36,7 @@ export function applyStepOutput(ctx, step, result) {
|
|
|
26
36
|
}
|
|
27
37
|
const state = ctx.state;
|
|
28
38
|
const data = result?.data;
|
|
29
|
-
// Rule
|
|
39
|
+
// Rule 2 — spread
|
|
30
40
|
if (step.spread === true) {
|
|
31
41
|
if (isPlainObject(data)) {
|
|
32
42
|
Object.assign(state, data);
|
|
@@ -36,7 +46,7 @@ export function applyStepOutput(ctx, step, result) {
|
|
|
36
46
|
// author is aware.
|
|
37
47
|
return;
|
|
38
48
|
}
|
|
39
|
-
// Rule
|
|
49
|
+
// Rule 3 — default-store
|
|
40
50
|
if (data === undefined)
|
|
41
51
|
return;
|
|
42
52
|
const key = step.as ?? step.name;
|
|
@@ -54,4 +64,20 @@ function isPlainObject(value) {
|
|
|
54
64
|
const proto = Object.getPrototypeOf(value);
|
|
55
65
|
return proto === null || proto === Object.prototype;
|
|
56
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Detect whether a step result represents a failure. Three indicators —
|
|
69
|
+
* `success: false`, a non-null `error` (ResponseContext / BlokResponse
|
|
70
|
+
* shape), or a non-null `errors` (ExecutionResult shape from the runtime
|
|
71
|
+
* adapters) — are all treated equivalently. Any one is enough to skip
|
|
72
|
+
* persistence so the next step's `ctx.state[<id>]` check tells the truth.
|
|
73
|
+
*/
|
|
74
|
+
function isErroredResult(result) {
|
|
75
|
+
if (result.success === false)
|
|
76
|
+
return true;
|
|
77
|
+
if (result.error !== undefined && result.error !== null)
|
|
78
|
+
return true;
|
|
79
|
+
if (result.errors !== undefined && result.errors !== null)
|
|
80
|
+
return true;
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
57
83
|
//# sourceMappingURL=PersistenceHelper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersistenceHelper.js","sourceRoot":"","sources":["../../src/workflow/PersistenceHelper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PersistenceHelper.js","sourceRoot":"","sources":["../../src/workflow/PersistenceHelper.ts"],"names":[],"mappings":"AAkCA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY,EAAE,IAAqB,EAAE,MAAyB;IAC7F,8DAA8D;IAC9D,oEAAoE;IACpE,uEAAuE;IACvE,IAAI,eAAe,CAAC,MAAM,CAAC;QAAE,OAAO;IAEpC,wBAAwB;IACxB,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI;QAAE,OAAO;IAEpC,kEAAkE;IAClE,iDAAiD;IACjD,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,GAA0C,CAAC,KAAK,GAAG,EAAE,CAAC;IACxD,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,KAAgC,CAAC;IACnD,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,CAAC;IAE1B,kBAAkB;IAClB,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC1B,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;QACD,6DAA6D;QAC7D,6DAA6D;QAC7D,mBAAmB;QACnB,OAAO;IACR,CAAC;IAED,yBAAyB;IACzB,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC;IACjC,IAAI,CAAC,GAAG;QAAE,OAAO,CAAC,+DAA+D;IACjF,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACpC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,CAAC;AACrD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,MAAyB;IACjD,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACrE,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACvE,OAAO,KAAK,CAAC;AACd,CAAC"}
|
|
@@ -1,56 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
*
|
|
8
|
-
* v1 (legacy):
|
|
9
|
-
* ```
|
|
10
|
-
* {
|
|
11
|
-
* name, version, trigger,
|
|
12
|
-
* steps: [{ name, node, type, active?, stop?, set_var? }],
|
|
13
|
-
* nodes: { [stepName]: { inputs?, conditions? } }
|
|
14
|
-
* }
|
|
15
|
-
* ```
|
|
16
|
-
*
|
|
17
|
-
* v2 (canonical):
|
|
18
|
-
* ```
|
|
19
|
-
* {
|
|
20
|
-
* name, version, trigger,
|
|
21
|
-
* steps: [
|
|
22
|
-
* { id, use, type?, inputs?, as?, spread?, ephemeral?, active?, stop? }
|
|
23
|
-
* | { id, branch: { when, then, else? } }
|
|
24
|
-
* ]
|
|
25
|
-
* }
|
|
26
|
-
* ```
|
|
27
|
-
*
|
|
28
|
-
* **Output shape** (always v1-compatible internal):
|
|
29
|
-
* ```
|
|
30
|
-
* {
|
|
31
|
-
* name, version, trigger, // method "*" normalized to "ANY"
|
|
32
|
-
* steps: [{ name, node, type, active, stop, set_var, as, spread, ephemeral, ... }],
|
|
33
|
-
* nodes: { [stepName]: { inputs?, conditions? } }
|
|
34
|
-
* }
|
|
35
|
-
* ```
|
|
36
|
-
*
|
|
37
|
-
* **Why a single internal shape?** The runner core (RunnerSteps,
|
|
38
|
-
* Configuration, Blok.run, etc.) is unchanged. Normalization is purely
|
|
39
|
-
* an authoring-layer concern. Old workflows keep running; new authoring
|
|
40
|
-
* shapes get translated transparently.
|
|
41
|
-
*/
|
|
1
|
+
interface RetryConfig {
|
|
2
|
+
maxAttempts: number;
|
|
3
|
+
minTimeoutInMs?: number;
|
|
4
|
+
maxTimeoutInMs?: number;
|
|
5
|
+
factor?: number;
|
|
6
|
+
}
|
|
42
7
|
interface InternalStep {
|
|
43
8
|
name: string;
|
|
44
9
|
node: string;
|
|
45
10
|
type: string;
|
|
46
11
|
active?: boolean;
|
|
47
12
|
stop?: boolean;
|
|
48
|
-
set_var?: boolean;
|
|
49
13
|
as?: string;
|
|
50
14
|
spread?: boolean;
|
|
51
15
|
ephemeral?: boolean;
|
|
52
16
|
stream_logs?: boolean;
|
|
53
17
|
flow?: boolean;
|
|
18
|
+
idempotencyKey?: string;
|
|
19
|
+
idempotencyKeyTTL?: number;
|
|
20
|
+
retry?: RetryConfig;
|
|
21
|
+
subworkflow?: string;
|
|
22
|
+
wait?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Tier 2 quick-wins — per-attempt execution timeout. Number (ms) or
|
|
25
|
+
* duration string (`"30s"`, etc.). Configuration thread-through
|
|
26
|
+
* normalizes to milliseconds via `parseDuration`.
|
|
27
|
+
*/
|
|
28
|
+
maxDuration?: number | string;
|
|
29
|
+
/**
|
|
30
|
+
* PR 4 — `wait.for(duration)` / `wait.until(date)` step.
|
|
31
|
+
*
|
|
32
|
+
* Discriminates by `type === "wait"` and the presence of either
|
|
33
|
+
* `waitForMs` (numeric ms after parseDuration) or `waitUntil` (number
|
|
34
|
+
* ms-since-epoch OR string for $-proxy / ISO).
|
|
35
|
+
*
|
|
36
|
+
* `wait?: boolean` above is the sub-workflow `wait: true|false` flag
|
|
37
|
+
* — separate concern, separate field.
|
|
38
|
+
*/
|
|
39
|
+
waitForMs?: number;
|
|
40
|
+
waitUntil?: number | string;
|
|
54
41
|
[key: string]: unknown;
|
|
55
42
|
}
|
|
56
43
|
interface InternalNodeConfig {
|
|
@@ -71,6 +58,25 @@ export interface InternalWorkflow {
|
|
|
71
58
|
trigger: Record<string, unknown>;
|
|
72
59
|
steps: InternalStep[];
|
|
73
60
|
nodes: Record<string, InternalNodeConfig>;
|
|
61
|
+
/**
|
|
62
|
+
* v0.5 — when `true`, this workflow is registered as middleware and is
|
|
63
|
+
* NOT exposed as a public HTTP route. Invoked from another workflow's
|
|
64
|
+
* `trigger.http.middleware: [...]` array (or `appliedMiddleware` below).
|
|
65
|
+
*/
|
|
66
|
+
middleware?: true;
|
|
67
|
+
/**
|
|
68
|
+
* v0.5.2 — workflow-level middleware chain. Authors write `middleware:
|
|
69
|
+
* [...]` at the top level of the workflow definition; the normalizer
|
|
70
|
+
* routes the array form here while keeping `middleware: true` as the
|
|
71
|
+
* marker bit. Applies to ALL triggers of this workflow, runs BEFORE
|
|
72
|
+
* any trigger-level middleware. Use this when a chain (auth, rate-limit)
|
|
73
|
+
* applies uniformly across every trigger of a workflow — saves
|
|
74
|
+
* repeating the same list on every trigger config.
|
|
75
|
+
*
|
|
76
|
+
* Mutually exclusive with `middleware: true` — a workflow cannot
|
|
77
|
+
* simultaneously be a middleware AND apply other middleware to itself.
|
|
78
|
+
*/
|
|
79
|
+
appliedMiddleware?: readonly string[];
|
|
74
80
|
}
|
|
75
81
|
/**
|
|
76
82
|
* Convert any accepted workflow shape into the canonical internal shape.
|