@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.
Files changed (213) hide show
  1. package/dist/Blok.js +32 -3
  2. package/dist/Blok.js.map +1 -1
  3. package/dist/Configuration.d.ts +59 -5
  4. package/dist/Configuration.js +366 -96
  5. package/dist/Configuration.js.map +1 -1
  6. package/dist/ForEachNode.d.ts +59 -0
  7. package/dist/ForEachNode.js +522 -0
  8. package/dist/ForEachNode.js.map +1 -0
  9. package/dist/LoopMaxIterationsError.d.ts +11 -0
  10. package/dist/LoopMaxIterationsError.js +18 -0
  11. package/dist/LoopMaxIterationsError.js.map +1 -0
  12. package/dist/LoopNode.d.ts +36 -0
  13. package/dist/LoopNode.js +182 -0
  14. package/dist/LoopNode.js.map +1 -0
  15. package/dist/PayloadTooLargeError.d.ts +19 -0
  16. package/dist/PayloadTooLargeError.js +29 -0
  17. package/dist/PayloadTooLargeError.js.map +1 -0
  18. package/dist/RunCancelledError.d.ts +17 -0
  19. package/dist/RunCancelledError.js +25 -0
  20. package/dist/RunCancelledError.js.map +1 -0
  21. package/dist/Runner.d.ts +11 -1
  22. package/dist/Runner.js +9 -2
  23. package/dist/Runner.js.map +1 -1
  24. package/dist/RunnerSteps.js +648 -44
  25. package/dist/RunnerSteps.js.map +1 -1
  26. package/dist/RuntimeAdapterNode.d.ts +2 -1
  27. package/dist/RuntimeAdapterNode.js +2 -2
  28. package/dist/RuntimeAdapterNode.js.map +1 -1
  29. package/dist/RuntimeRegistry.d.ts +23 -2
  30. package/dist/RuntimeRegistry.js +31 -2
  31. package/dist/RuntimeRegistry.js.map +1 -1
  32. package/dist/SubworkflowNode.d.ts +181 -0
  33. package/dist/SubworkflowNode.js +479 -0
  34. package/dist/SubworkflowNode.js.map +1 -0
  35. package/dist/SwitchNode.d.ts +37 -0
  36. package/dist/SwitchNode.js +153 -0
  37. package/dist/SwitchNode.js.map +1 -0
  38. package/dist/TriggerBase.d.ts +178 -0
  39. package/dist/TriggerBase.js +1032 -5
  40. package/dist/TriggerBase.js.map +1 -1
  41. package/dist/TryCatchNode.d.ts +32 -0
  42. package/dist/TryCatchNode.js +207 -0
  43. package/dist/TryCatchNode.js.map +1 -0
  44. package/dist/WaitDispatchRequest.d.ts +38 -0
  45. package/dist/WaitDispatchRequest.js +13 -0
  46. package/dist/WaitDispatchRequest.js.map +1 -0
  47. package/dist/WaitNode.d.ts +23 -0
  48. package/dist/WaitNode.js +26 -0
  49. package/dist/WaitNode.js.map +1 -0
  50. package/dist/adapters/grpc/GrpcCodec.js +2 -2
  51. package/dist/adapters/grpc/GrpcRuntimeAdapter.d.ts +6 -4
  52. package/dist/adapters/grpc/GrpcRuntimeAdapter.js +6 -4
  53. package/dist/adapters/grpc/GrpcRuntimeAdapter.js.map +1 -1
  54. package/dist/adapters/grpc/types.d.ts +7 -5
  55. package/dist/adapters/grpc/types.js.map +1 -1
  56. package/dist/adapters/transport.d.ts +12 -41
  57. package/dist/adapters/transport.js +21 -70
  58. package/dist/adapters/transport.js.map +1 -1
  59. package/dist/cache/NodeResultCache.js +7 -0
  60. package/dist/cache/NodeResultCache.js.map +1 -1
  61. package/dist/concurrency/ConcurrencyBackend.d.ts +61 -0
  62. package/dist/concurrency/ConcurrencyBackend.js +20 -0
  63. package/dist/concurrency/ConcurrencyBackend.js.map +1 -0
  64. package/dist/concurrency/ConcurrencyLimitError.d.ts +37 -0
  65. package/dist/concurrency/ConcurrencyLimitError.js +16 -0
  66. package/dist/concurrency/ConcurrencyLimitError.js.map +1 -0
  67. package/dist/concurrency/NatsKvConcurrencyBackend.d.ts +64 -0
  68. package/dist/concurrency/NatsKvConcurrencyBackend.js +310 -0
  69. package/dist/concurrency/NatsKvConcurrencyBackend.js.map +1 -0
  70. package/dist/concurrency/QueueExpiredError.d.ts +40 -0
  71. package/dist/concurrency/QueueExpiredError.js +15 -0
  72. package/dist/concurrency/QueueExpiredError.js.map +1 -0
  73. package/dist/concurrency/RedisConcurrencyBackend.d.ts +64 -0
  74. package/dist/concurrency/RedisConcurrencyBackend.js +374 -0
  75. package/dist/concurrency/RedisConcurrencyBackend.js.map +1 -0
  76. package/dist/concurrency/createConcurrencyBackend.d.ts +24 -0
  77. package/dist/concurrency/createConcurrencyBackend.js +38 -0
  78. package/dist/concurrency/createConcurrencyBackend.js.map +1 -0
  79. package/dist/concurrency/readConcurrencyConfig.d.ts +60 -0
  80. package/dist/concurrency/readConcurrencyConfig.js +60 -0
  81. package/dist/concurrency/readConcurrencyConfig.js.map +1 -0
  82. package/dist/defineNode.d.ts +8 -0
  83. package/dist/defineNode.js +25 -5
  84. package/dist/defineNode.js.map +1 -1
  85. package/dist/graphql/GraphQLSchemaGenerator.js +1 -1
  86. package/dist/graphql/GraphQLSchemaGenerator.js.map +1 -1
  87. package/dist/idempotency/resolveIdempotencyKey.d.ts +20 -0
  88. package/dist/idempotency/resolveIdempotencyKey.js +37 -0
  89. package/dist/idempotency/resolveIdempotencyKey.js.map +1 -0
  90. package/dist/index.d.ts +30 -6
  91. package/dist/index.js +55 -6
  92. package/dist/index.js.map +1 -1
  93. package/dist/marketplace/RuntimeCatalog.d.ts +6 -0
  94. package/dist/marketplace/RuntimeCatalog.js.map +1 -1
  95. package/dist/marketplace/RuntimeDiscovery.d.ts +2 -2
  96. package/dist/marketplace/RuntimeDiscovery.js +18 -6
  97. package/dist/marketplace/RuntimeDiscovery.js.map +1 -1
  98. package/dist/monitoring/ConcurrencyMetrics.d.ts +82 -0
  99. package/dist/monitoring/ConcurrencyMetrics.js +139 -0
  100. package/dist/monitoring/ConcurrencyMetrics.js.map +1 -0
  101. package/dist/monitoring/ForEachWaitMetrics.d.ts +22 -0
  102. package/dist/monitoring/ForEachWaitMetrics.js +36 -0
  103. package/dist/monitoring/ForEachWaitMetrics.js.map +1 -0
  104. package/dist/monitoring/JanitorMetrics.d.ts +27 -0
  105. package/dist/monitoring/JanitorMetrics.js +48 -0
  106. package/dist/monitoring/JanitorMetrics.js.map +1 -0
  107. package/dist/openapi/OpenAPIGenerator.js +7 -2
  108. package/dist/openapi/OpenAPIGenerator.js.map +1 -1
  109. package/dist/runtime/PrimitiveStack.d.ts +64 -0
  110. package/dist/runtime/PrimitiveStack.js +92 -0
  111. package/dist/runtime/PrimitiveStack.js.map +1 -0
  112. package/dist/scheduling/DebounceBackend.d.ts +108 -0
  113. package/dist/scheduling/DebounceBackend.js +23 -0
  114. package/dist/scheduling/DebounceBackend.js.map +1 -0
  115. package/dist/scheduling/DebounceCoordinator.d.ts +141 -0
  116. package/dist/scheduling/DebounceCoordinator.js +362 -0
  117. package/dist/scheduling/DebounceCoordinator.js.map +1 -0
  118. package/dist/scheduling/DeferredDispatchSignal.d.ts +50 -0
  119. package/dist/scheduling/DeferredDispatchSignal.js +14 -0
  120. package/dist/scheduling/DeferredDispatchSignal.js.map +1 -0
  121. package/dist/scheduling/DeferredRunScheduler.d.ts +96 -0
  122. package/dist/scheduling/DeferredRunScheduler.js +256 -0
  123. package/dist/scheduling/DeferredRunScheduler.js.map +1 -0
  124. package/dist/scheduling/NatsKvDebounceBackend.d.ts +53 -0
  125. package/dist/scheduling/NatsKvDebounceBackend.js +334 -0
  126. package/dist/scheduling/NatsKvDebounceBackend.js.map +1 -0
  127. package/dist/scheduling/RedisDebounceBackend.d.ts +49 -0
  128. package/dist/scheduling/RedisDebounceBackend.js +356 -0
  129. package/dist/scheduling/RedisDebounceBackend.js.map +1 -0
  130. package/dist/scheduling/createDebounceBackend.d.ts +25 -0
  131. package/dist/scheduling/createDebounceBackend.js +39 -0
  132. package/dist/scheduling/createDebounceBackend.js.map +1 -0
  133. package/dist/scheduling/readSchedulingConfig.d.ts +24 -0
  134. package/dist/scheduling/readSchedulingConfig.js +52 -0
  135. package/dist/scheduling/readSchedulingConfig.js.map +1 -0
  136. package/dist/security/AuditLogger.js +1 -1
  137. package/dist/security/AuditLogger.js.map +1 -1
  138. package/dist/security/AuthMiddleware.d.ts +19 -20
  139. package/dist/security/AuthMiddleware.js +35 -20
  140. package/dist/security/AuthMiddleware.js.map +1 -1
  141. package/dist/security/OAuthProvider.js +2 -2
  142. package/dist/security/OAuthProvider.js.map +1 -1
  143. package/dist/security/SecretManager.js +14 -13
  144. package/dist/security/SecretManager.js.map +1 -1
  145. package/dist/security/index.d.ts +3 -1
  146. package/dist/security/index.js +3 -1
  147. package/dist/security/index.js.map +1 -1
  148. package/dist/testing/TestHarness.d.ts +27 -12
  149. package/dist/testing/TestHarness.js +19 -3
  150. package/dist/testing/TestHarness.js.map +1 -1
  151. package/dist/testing/WorkflowTestRunner.js +0 -7
  152. package/dist/testing/WorkflowTestRunner.js.map +1 -1
  153. package/dist/timeouts/StepTimeoutError.d.ts +22 -0
  154. package/dist/timeouts/StepTimeoutError.js +31 -0
  155. package/dist/timeouts/StepTimeoutError.js.map +1 -0
  156. package/dist/tracing/InMemoryRunStore.d.ts +41 -1
  157. package/dist/tracing/InMemoryRunStore.js +239 -0
  158. package/dist/tracing/InMemoryRunStore.js.map +1 -1
  159. package/dist/tracing/Janitor.d.ts +70 -0
  160. package/dist/tracing/Janitor.js +150 -0
  161. package/dist/tracing/Janitor.js.map +1 -0
  162. package/dist/tracing/PostgresRunStore.d.ts +57 -1
  163. package/dist/tracing/PostgresRunStore.js +711 -6
  164. package/dist/tracing/PostgresRunStore.js.map +1 -1
  165. package/dist/tracing/RoutingDiagnostics.d.ts +55 -0
  166. package/dist/tracing/RoutingDiagnostics.js +50 -0
  167. package/dist/tracing/RoutingDiagnostics.js.map +1 -0
  168. package/dist/tracing/RunStore.d.ts +181 -1
  169. package/dist/tracing/RunTracker.d.ts +244 -9
  170. package/dist/tracing/RunTracker.js +594 -1
  171. package/dist/tracing/RunTracker.js.map +1 -1
  172. package/dist/tracing/SqliteRunStore.d.ts +79 -2
  173. package/dist/tracing/SqliteRunStore.js +775 -16
  174. package/dist/tracing/SqliteRunStore.js.map +1 -1
  175. package/dist/tracing/TraceRouter.d.ts +20 -2
  176. package/dist/tracing/TraceRouter.js +612 -6
  177. package/dist/tracing/TraceRouter.js.map +1 -1
  178. package/dist/tracing/createStore.js +14 -3
  179. package/dist/tracing/createStore.js.map +1 -1
  180. package/dist/tracing/metadataFilter.d.ts +63 -0
  181. package/dist/tracing/metadataFilter.js +224 -0
  182. package/dist/tracing/metadataFilter.js.map +1 -0
  183. package/dist/tracing/sanitize.d.ts +11 -0
  184. package/dist/tracing/sanitize.js +29 -0
  185. package/dist/tracing/sanitize.js.map +1 -1
  186. package/dist/tracing/types.d.ts +672 -2
  187. package/dist/utils/createChildContext.d.ts +32 -0
  188. package/dist/utils/createChildContext.js +113 -0
  189. package/dist/utils/createChildContext.js.map +1 -0
  190. package/dist/utils/envAllowlist.d.ts +35 -0
  191. package/dist/utils/envAllowlist.js +113 -0
  192. package/dist/utils/envAllowlist.js.map +1 -0
  193. package/dist/version/RuntimeVersionValidator.d.ts +38 -0
  194. package/dist/version/RuntimeVersionValidator.js +121 -0
  195. package/dist/version/RuntimeVersionValidator.js.map +1 -0
  196. package/dist/visualization/WorkflowVisualizer.js +4 -4
  197. package/dist/visualization/WorkflowVisualizer.js.map +1 -1
  198. package/dist/workflow/PersistenceHelper.d.ts +18 -10
  199. package/dist/workflow/PersistenceHelper.js +35 -9
  200. package/dist/workflow/PersistenceHelper.js.map +1 -1
  201. package/dist/workflow/WorkflowNormalizer.d.ts +48 -42
  202. package/dist/workflow/WorkflowNormalizer.js +650 -18
  203. package/dist/workflow/WorkflowNormalizer.js.map +1 -1
  204. package/dist/workflow/WorkflowRegistry.d.ts +186 -0
  205. package/dist/workflow/WorkflowRegistry.js +202 -0
  206. package/dist/workflow/WorkflowRegistry.js.map +1 -0
  207. package/dist/workflow/sampleBody.d.ts +54 -0
  208. package/dist/workflow/sampleBody.js +320 -0
  209. package/dist/workflow/sampleBody.js.map +1 -0
  210. package/package.json +3 -8
  211. package/dist/adapters/HttpRuntimeAdapter.d.ts +0 -79
  212. package/dist/adapters/HttpRuntimeAdapter.js +0 -233
  213. 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. Legacy `set_var: false` treated as `ephemeral: true` (back-compat).
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
- * 4. Default → `ctx.state[as ?? name] = data`.
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 1 & 2 opt-out paths
18
- if (step.ephemeral === true)
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
- if (step.set_var === false)
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 3 — spread
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 4 — default-store
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":"AAiCA;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY,EAAE,IAAqB,EAAE,MAAyB;IAC7F,6BAA6B;IAC7B,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI;QAAE,OAAO;IACpC,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK;QAAE,OAAO;IAEnC,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"}
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
- * WorkflowNormalizer — accepts v1 or v2 workflow shapes and projects both
3
- * to the single canonical internal shape that `Configuration.getSteps` /
4
- * `Configuration.getNodes` already consume.
5
- *
6
- * **Input shapes accepted**
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.