@workflow/core 5.0.0-beta.3 → 5.0.0-beta.31

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 (268) hide show
  1. package/dist/attribute-changes.d.ts +7 -0
  2. package/dist/attribute-changes.d.ts.map +1 -0
  3. package/dist/attribute-changes.js +25 -0
  4. package/dist/capabilities.d.ts +22 -1
  5. package/dist/capabilities.d.ts.map +1 -1
  6. package/dist/capabilities.js +41 -4
  7. package/dist/capture-stack.d.ts +16 -0
  8. package/dist/capture-stack.d.ts.map +1 -0
  9. package/dist/capture-stack.js +21 -0
  10. package/dist/class-serialization.d.ts +32 -0
  11. package/dist/class-serialization.d.ts.map +1 -1
  12. package/dist/class-serialization.js +37 -1
  13. package/dist/classify-error.d.ts +26 -3
  14. package/dist/classify-error.d.ts.map +1 -1
  15. package/dist/classify-error.js +103 -6
  16. package/dist/context-errors.d.ts +27 -0
  17. package/dist/context-errors.d.ts.map +1 -0
  18. package/dist/context-errors.js +101 -0
  19. package/dist/context-violation-error.d.ts +97 -0
  20. package/dist/context-violation-error.d.ts.map +1 -0
  21. package/dist/context-violation-error.js +147 -0
  22. package/dist/create-hook.d.ts +42 -3
  23. package/dist/create-hook.d.ts.map +1 -1
  24. package/dist/create-hook.js +4 -3
  25. package/dist/define-hook.d.ts.map +1 -1
  26. package/dist/define-hook.js +20 -5
  27. package/dist/describe-error.d.ts +70 -0
  28. package/dist/describe-error.d.ts.map +1 -0
  29. package/dist/describe-error.js +165 -0
  30. package/dist/encryption.d.ts +22 -1
  31. package/dist/encryption.d.ts.map +1 -1
  32. package/dist/encryption.js +72 -27
  33. package/dist/events-consumer.d.ts +25 -1
  34. package/dist/events-consumer.d.ts.map +1 -1
  35. package/dist/events-consumer.js +95 -16
  36. package/dist/flushable-stream.d.ts +10 -10
  37. package/dist/flushable-stream.d.ts.map +1 -1
  38. package/dist/flushable-stream.js +26 -15
  39. package/dist/global.d.ts +35 -1
  40. package/dist/global.d.ts.map +1 -1
  41. package/dist/global.js +21 -3
  42. package/dist/index.d.ts +1 -0
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +2 -1
  45. package/dist/log-format.d.ts +25 -0
  46. package/dist/log-format.d.ts.map +1 -0
  47. package/dist/log-format.js +250 -0
  48. package/dist/logger.d.ts +29 -30
  49. package/dist/logger.d.ts.map +1 -1
  50. package/dist/logger.js +82 -32
  51. package/dist/private.d.ts +107 -2
  52. package/dist/private.d.ts.map +1 -1
  53. package/dist/private.js +80 -3
  54. package/dist/runtime/constants.d.ts +189 -0
  55. package/dist/runtime/constants.d.ts.map +1 -1
  56. package/dist/runtime/constants.js +310 -15
  57. package/dist/runtime/get-port-lazy.d.ts +25 -0
  58. package/dist/runtime/get-port-lazy.d.ts.map +1 -0
  59. package/dist/runtime/get-port-lazy.js +92 -0
  60. package/dist/runtime/get-world-lazy.d.ts +23 -0
  61. package/dist/runtime/get-world-lazy.d.ts.map +1 -0
  62. package/dist/runtime/get-world-lazy.js +46 -0
  63. package/dist/runtime/helpers.d.ts +57 -6
  64. package/dist/runtime/helpers.d.ts.map +1 -1
  65. package/dist/runtime/helpers.js +169 -32
  66. package/dist/runtime/replay-budget.d.ts +98 -0
  67. package/dist/runtime/replay-budget.d.ts.map +1 -0
  68. package/dist/runtime/replay-budget.js +192 -0
  69. package/dist/runtime/resume-hook.d.ts.map +1 -1
  70. package/dist/runtime/resume-hook.js +39 -23
  71. package/dist/runtime/run-id-time.d.ts +10 -0
  72. package/dist/runtime/run-id-time.d.ts.map +1 -0
  73. package/dist/runtime/run-id-time.js +31 -0
  74. package/dist/runtime/run.d.ts +6 -2
  75. package/dist/runtime/run.d.ts.map +1 -1
  76. package/dist/runtime/run.js +52 -10
  77. package/dist/runtime/runs.d.ts +36 -2
  78. package/dist/runtime/runs.d.ts.map +1 -1
  79. package/dist/runtime/runs.js +18 -7
  80. package/dist/runtime/start.d.ts +58 -1
  81. package/dist/runtime/start.d.ts.map +1 -1
  82. package/dist/runtime/start.js +160 -46
  83. package/dist/runtime/step-executor.d.ts +131 -0
  84. package/dist/runtime/step-executor.d.ts.map +1 -0
  85. package/dist/runtime/step-executor.js +818 -0
  86. package/dist/runtime/step-handler.d.ts.map +1 -1
  87. package/dist/runtime/step-handler.js +718 -557
  88. package/dist/runtime/step-latency.d.ts +131 -0
  89. package/dist/runtime/step-latency.d.ts.map +1 -0
  90. package/dist/runtime/step-latency.js +155 -0
  91. package/dist/runtime/step-ownership.d.ts +72 -0
  92. package/dist/runtime/step-ownership.d.ts.map +1 -0
  93. package/dist/runtime/step-ownership.js +114 -0
  94. package/dist/runtime/step-single-flight.d.ts +12 -0
  95. package/dist/runtime/step-single-flight.d.ts.map +1 -0
  96. package/dist/runtime/step-single-flight.js +69 -0
  97. package/dist/runtime/suspension-handler.d.ts +81 -7
  98. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  99. package/dist/runtime/suspension-handler.js +355 -137
  100. package/dist/runtime/wait-continuation.d.ts +84 -0
  101. package/dist/runtime/wait-continuation.d.ts.map +1 -0
  102. package/dist/runtime/wait-continuation.js +105 -0
  103. package/dist/runtime/wait-until.d.ts +18 -0
  104. package/dist/runtime/wait-until.d.ts.map +1 -0
  105. package/dist/runtime/wait-until.js +42 -0
  106. package/dist/runtime/world-compatibility.d.ts +5 -0
  107. package/dist/runtime/world-compatibility.d.ts.map +1 -0
  108. package/dist/runtime/world-compatibility.js +12 -0
  109. package/dist/runtime/world-init.d.ts +50 -0
  110. package/dist/runtime/world-init.d.ts.map +1 -0
  111. package/dist/runtime/world-init.js +50 -0
  112. package/dist/runtime/world-target.d.ts +11 -0
  113. package/dist/runtime/world-target.d.ts.map +1 -0
  114. package/dist/runtime/world-target.js +15 -0
  115. package/dist/runtime/world.d.ts +21 -9
  116. package/dist/runtime/world.d.ts.map +1 -1
  117. package/dist/runtime/world.js +58 -83
  118. package/dist/runtime.d.ts +15 -10
  119. package/dist/runtime.d.ts.map +1 -1
  120. package/dist/runtime.js +1757 -326
  121. package/dist/schemas.d.ts +1 -1
  122. package/dist/schemas.d.ts.map +1 -1
  123. package/dist/schemas.js +1 -1
  124. package/dist/serialization/client.d.ts +17 -0
  125. package/dist/serialization/client.d.ts.map +1 -0
  126. package/dist/serialization/client.js +48 -0
  127. package/dist/serialization/codec-devalue.d.ts +14 -0
  128. package/dist/serialization/codec-devalue.d.ts.map +1 -0
  129. package/dist/serialization/codec-devalue.js +98 -0
  130. package/dist/serialization/codec.d.ts +106 -0
  131. package/dist/serialization/codec.d.ts.map +1 -0
  132. package/dist/serialization/codec.js +17 -0
  133. package/dist/serialization/compression.d.ts +104 -0
  134. package/dist/serialization/compression.d.ts.map +1 -0
  135. package/dist/serialization/compression.js +260 -0
  136. package/dist/serialization/encryption.d.ts +33 -0
  137. package/dist/serialization/encryption.d.ts.map +1 -0
  138. package/dist/serialization/encryption.js +70 -0
  139. package/dist/serialization/errors.d.ts +34 -0
  140. package/dist/serialization/errors.d.ts.map +1 -0
  141. package/dist/serialization/errors.js +59 -0
  142. package/dist/serialization/format.d.ts +60 -0
  143. package/dist/serialization/format.d.ts.map +1 -0
  144. package/dist/serialization/format.js +97 -0
  145. package/dist/serialization/index.d.ts +19 -0
  146. package/dist/serialization/index.d.ts.map +1 -0
  147. package/dist/serialization/index.js +22 -0
  148. package/dist/serialization/reducers/class.d.ts +11 -0
  149. package/dist/serialization/reducers/class.d.ts.map +1 -0
  150. package/dist/serialization/reducers/class.js +68 -0
  151. package/dist/serialization/reducers/common.d.ts +16 -0
  152. package/dist/serialization/reducers/common.d.ts.map +1 -0
  153. package/dist/serialization/reducers/common.js +417 -0
  154. package/dist/serialization/reducers/step-function.d.ts +35 -0
  155. package/dist/serialization/reducers/step-function.d.ts.map +1 -0
  156. package/dist/serialization/reducers/step-function.js +88 -0
  157. package/dist/serialization/step.d.ts +17 -0
  158. package/dist/serialization/step.d.ts.map +1 -0
  159. package/dist/serialization/step.js +48 -0
  160. package/dist/serialization/types.d.ts +253 -0
  161. package/dist/serialization/types.d.ts.map +1 -0
  162. package/dist/serialization/types.js +25 -0
  163. package/dist/serialization/workflow.d.ts +29 -0
  164. package/dist/serialization/workflow.d.ts.map +1 -0
  165. package/dist/serialization/workflow.js +54 -0
  166. package/dist/serialization-format.d.ts +16 -0
  167. package/dist/serialization-format.d.ts.map +1 -1
  168. package/dist/serialization-format.js +213 -50
  169. package/dist/serialization.d.ts +322 -214
  170. package/dist/serialization.d.ts.map +1 -1
  171. package/dist/serialization.js +1575 -664
  172. package/dist/set-attributes.d.ts +18 -0
  173. package/dist/set-attributes.d.ts.map +1 -0
  174. package/dist/set-attributes.js +61 -0
  175. package/dist/sleep.d.ts.map +1 -1
  176. package/dist/sleep.js +3 -2
  177. package/dist/source-map.d.ts +5 -0
  178. package/dist/source-map.d.ts.map +1 -1
  179. package/dist/source-map.js +102 -10
  180. package/dist/step/context-storage.d.ts +53 -0
  181. package/dist/step/context-storage.d.ts.map +1 -1
  182. package/dist/step/context-storage.js +1 -1
  183. package/dist/step/get-closure-vars.d.ts.map +1 -1
  184. package/dist/step/get-closure-vars.js +3 -2
  185. package/dist/step/get-step-metadata.d.ts.map +1 -1
  186. package/dist/step/get-step-metadata.js +3 -2
  187. package/dist/step/get-workflow-metadata.d.ts.map +1 -1
  188. package/dist/step/get-workflow-metadata.js +3 -2
  189. package/dist/step/writable-stream.d.ts.map +1 -1
  190. package/dist/step/writable-stream.js +58 -6
  191. package/dist/step-hydration-cache.d.ts +148 -0
  192. package/dist/step-hydration-cache.d.ts.map +1 -0
  193. package/dist/step-hydration-cache.js +171 -0
  194. package/dist/step.d.ts.map +1 -1
  195. package/dist/step.js +144 -25
  196. package/dist/symbols.d.ts +28 -0
  197. package/dist/symbols.d.ts.map +1 -1
  198. package/dist/symbols.js +29 -1
  199. package/dist/telemetry/semantic-conventions.d.ts +98 -2
  200. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  201. package/dist/telemetry/semantic-conventions.js +66 -1
  202. package/dist/telemetry.d.ts +68 -0
  203. package/dist/telemetry.d.ts.map +1 -1
  204. package/dist/telemetry.js +106 -4
  205. package/dist/types.d.ts +6 -0
  206. package/dist/types.d.ts.map +1 -1
  207. package/dist/types.js +23 -1
  208. package/dist/util.d.ts +16 -6
  209. package/dist/util.d.ts.map +1 -1
  210. package/dist/util.js +25 -16
  211. package/dist/version.d.ts +1 -1
  212. package/dist/version.d.ts.map +1 -1
  213. package/dist/version.js +2 -2
  214. package/dist/vm/index.d.ts.map +1 -1
  215. package/dist/vm/index.js +3 -2
  216. package/dist/vm/script-cache.d.ts +28 -0
  217. package/dist/vm/script-cache.d.ts.map +1 -0
  218. package/dist/vm/script-cache.js +140 -0
  219. package/dist/workflow/abort-controller.d.ts +65 -0
  220. package/dist/workflow/abort-controller.d.ts.map +1 -0
  221. package/dist/workflow/abort-controller.js +277 -0
  222. package/dist/workflow/attribute-dispatcher.d.ts +6 -0
  223. package/dist/workflow/attribute-dispatcher.d.ts.map +1 -0
  224. package/dist/workflow/attribute-dispatcher.js +48 -0
  225. package/dist/workflow/create-hook.d.ts.map +1 -1
  226. package/dist/workflow/create-hook.js +25 -3
  227. package/dist/workflow/define-hook.d.ts +1 -1
  228. package/dist/workflow/define-hook.d.ts.map +1 -1
  229. package/dist/workflow/define-hook.js +8 -4
  230. package/dist/workflow/get-workflow-metadata.d.ts.map +1 -1
  231. package/dist/workflow/get-workflow-metadata.js +14 -3
  232. package/dist/workflow/hook.d.ts.map +1 -1
  233. package/dist/workflow/hook.js +207 -33
  234. package/dist/workflow/index.d.ts +1 -0
  235. package/dist/workflow/index.d.ts.map +1 -1
  236. package/dist/workflow/index.js +5 -3
  237. package/dist/workflow/set-attributes.d.ts +77 -0
  238. package/dist/workflow/set-attributes.d.ts.map +1 -0
  239. package/dist/workflow/set-attributes.js +65 -0
  240. package/dist/workflow/sleep.d.ts.map +1 -1
  241. package/dist/workflow/sleep.js +45 -8
  242. package/dist/workflow/world-init-stub.d.ts +15 -0
  243. package/dist/workflow/world-init-stub.d.ts.map +1 -0
  244. package/dist/workflow/world-init-stub.js +15 -0
  245. package/dist/workflow.d.ts +17 -1
  246. package/dist/workflow.d.ts.map +1 -1
  247. package/dist/workflow.js +190 -56
  248. package/docs/api-reference/create-hook.mdx +38 -0
  249. package/docs/api-reference/create-webhook.mdx +1 -0
  250. package/docs/api-reference/fetch.mdx +5 -0
  251. package/docs/api-reference/index.mdx +3 -0
  252. package/docs/api-reference/set-attributes.mdx +65 -0
  253. package/docs/foundations/cancellation.mdx +459 -0
  254. package/docs/foundations/errors-and-retries.mdx +7 -3
  255. package/docs/foundations/hooks.mdx +29 -0
  256. package/docs/foundations/idempotency.mdx +236 -11
  257. package/docs/foundations/index.mdx +1 -23
  258. package/docs/foundations/meta.json +3 -1
  259. package/docs/foundations/serialization.mdx +77 -41
  260. package/docs/foundations/starting-workflows.mdx +5 -1
  261. package/docs/foundations/streaming.mdx +14 -23
  262. package/docs/foundations/versioning.mdx +263 -0
  263. package/docs/how-it-works/cancellation.mdx +287 -0
  264. package/docs/how-it-works/code-transform.mdx +2 -2
  265. package/docs/how-it-works/encryption.mdx +2 -2
  266. package/docs/how-it-works/event-sourcing.mdx +2 -2
  267. package/docs/how-it-works/meta.json +2 -1
  268. package/package.json +32 -11
@@ -0,0 +1,7 @@
1
+ import { type AttributeChange } from '@workflow/world';
2
+ interface AttributeChangeOptions {
3
+ allowReservedAttributes?: boolean;
4
+ }
5
+ export declare function normalizeAttributeChanges(attrs: Record<string, string | undefined>, options?: AttributeChangeOptions): AttributeChange[];
6
+ export {};
7
+ //# sourceMappingURL=attribute-changes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attribute-changes.d.ts","sourceRoot":"","sources":["../src/attribute-changes.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,iBAAiB,CAAC;AAEzB,UAAU,sBAAsB;IAC9B,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACzC,OAAO,GAAE,sBAA2B,GACnC,eAAe,EAAE,CA4BnB"}
@@ -0,0 +1,25 @@
1
+ import { FatalError } from '@workflow/errors';
2
+ import { AttributeValidationError, validateAttributeChanges, } from '@workflow/world';
3
+ export function normalizeAttributeChanges(attrs, options = {}) {
4
+ if (attrs === null || typeof attrs !== 'object' || Array.isArray(attrs)) {
5
+ throw new FatalError(`setAttributes requires a plain object, got ${attrs === null ? 'null' : Array.isArray(attrs) ? 'array' : typeof attrs}`);
6
+ }
7
+ const changes = Object.entries(attrs).map(([key, value]) => ({
8
+ key,
9
+ value: value === undefined ? null : value,
10
+ }));
11
+ if (changes.length === 0)
12
+ return changes;
13
+ const allowReservedAttributes = options.allowReservedAttributes === true;
14
+ try {
15
+ validateAttributeChanges(changes, { allowReservedAttributes });
16
+ }
17
+ catch (err) {
18
+ if (err instanceof AttributeValidationError) {
19
+ throw new FatalError(err.message);
20
+ }
21
+ throw err;
22
+ }
23
+ return changes;
24
+ }
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLWNoYW5nZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXR0cmlidXRlLWNoYW5nZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFFTCx3QkFBd0IsRUFDeEIsd0JBQXdCLEdBQ3pCLE1BQU0saUJBQWlCLENBQUM7QUFNekIsTUFBTSxVQUFVLHlCQUF5QixDQUN2QyxLQUF5QyxFQUN6QyxVQUFrQyxFQUFFO0lBRXBDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hFLE1BQU0sSUFBSSxVQUFVLENBQ2xCLDhDQUNFLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQ3BFLEVBQUUsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFzQixNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FDMUQsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixHQUFHO1FBQ0gsS0FBSyxFQUFFLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztLQUMxQyxDQUFDLENBQ0gsQ0FBQztJQUNGLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFFekMsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLENBQUMsdUJBQXVCLEtBQUssSUFBSSxDQUFDO0lBQ3pFLElBQUksQ0FBQztRQUNILHdCQUF3QixDQUFDLE9BQU8sRUFBRSxFQUFFLHVCQUF1QixFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksR0FBRyxZQUFZLHdCQUF3QixFQUFFLENBQUM7WUFDNUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELE1BQU0sR0FBRyxDQUFDO0lBQ1osQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGYXRhbEVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQge1xuICB0eXBlIEF0dHJpYnV0ZUNoYW5nZSxcbiAgQXR0cmlidXRlVmFsaWRhdGlvbkVycm9yLFxuICB2YWxpZGF0ZUF0dHJpYnV0ZUNoYW5nZXMsXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5cbmludGVyZmFjZSBBdHRyaWJ1dGVDaGFuZ2VPcHRpb25zIHtcbiAgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQXR0cmlidXRlQ2hhbmdlcyhcbiAgYXR0cnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4sXG4gIG9wdGlvbnM6IEF0dHJpYnV0ZUNoYW5nZU9wdGlvbnMgPSB7fVxuKTogQXR0cmlidXRlQ2hhbmdlW10ge1xuICBpZiAoYXR0cnMgPT09IG51bGwgfHwgdHlwZW9mIGF0dHJzICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGF0dHJzKSkge1xuICAgIHRocm93IG5ldyBGYXRhbEVycm9yKFxuICAgICAgYHNldEF0dHJpYnV0ZXMgcmVxdWlyZXMgYSBwbGFpbiBvYmplY3QsIGdvdCAke1xuICAgICAgICBhdHRycyA9PT0gbnVsbCA/ICdudWxsJyA6IEFycmF5LmlzQXJyYXkoYXR0cnMpID8gJ2FycmF5JyA6IHR5cGVvZiBhdHRyc1xuICAgICAgfWBcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY2hhbmdlczogQXR0cmlidXRlQ2hhbmdlW10gPSBPYmplY3QuZW50cmllcyhhdHRycykubWFwKFxuICAgIChba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICBrZXksXG4gICAgICB2YWx1ZTogdmFsdWUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB2YWx1ZSxcbiAgICB9KVxuICApO1xuICBpZiAoY2hhbmdlcy5sZW5ndGggPT09IDApIHJldHVybiBjaGFuZ2VzO1xuXG4gIGNvbnN0IGFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzID0gb3B0aW9ucy5hbGxvd1Jlc2VydmVkQXR0cmlidXRlcyA9PT0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICB2YWxpZGF0ZUF0dHJpYnV0ZUNoYW5nZXMoY2hhbmdlcywgeyBhbGxvd1Jlc2VydmVkQXR0cmlidXRlcyB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIEF0dHJpYnV0ZVZhbGlkYXRpb25FcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEZhdGFsRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgIH1cbiAgICB0aHJvdyBlcnI7XG4gIH1cblxuICByZXR1cm4gY2hhbmdlcztcbn1cbiJdfQ==
@@ -15,11 +15,22 @@
15
15
  * `@workflow/core` version that supports it
16
16
  * 3. The `getRunCapabilities()` function will automatically include it
17
17
  *
18
+ * ## Adding a new non-format capability
19
+ *
20
+ * Some capabilities aren't serialization format prefixes — e.g.
21
+ * byte-stream wire framing is an envelope around chunks rather than
22
+ * a content format. For those, add a boolean field to `RunCapabilities`
23
+ * and an entry in `CAPABILITY_VERSION_TABLE` below.
24
+ *
18
25
  * ## History
19
26
  *
20
27
  * - `encr` (AES-256-GCM encryption): added in `4.2.0-beta.64`
21
28
  * Commit: 7618ac36 "Wire AES-GCM encryption into serialization layer (#1251)"
22
29
  * https://github.com/vercel/workflow/commit/7618ac36
30
+ * - `framedByteStreams` (wire-level chunk framing for byte streams): added in `5.0.0-beta.15`
31
+ * - `gzip` (gzip payload compression): added in `5.0.0-beta.18`
32
+ * - `zstd` (zstd payload compression, preferred codec): added in `5.0.0-beta.18`
33
+ * alongside gzip — they co-ship, so any run that can read one can read both.
23
34
  */
24
35
  import { type SerializationFormatType } from './serialization.js';
25
36
  /**
@@ -32,6 +43,15 @@ export interface RunCapabilities {
32
43
  * if encryption is supported, etc.
33
44
  */
34
45
  supportedFormats: ReadonlySet<SerializationFormatType>;
46
+ /**
47
+ * Whether the target run can decode wire-framed byte streams. When true,
48
+ * byte streams (`type: 'bytes'` ReadableStreams passed across boundaries)
49
+ * are wrapped in a length-prefixed frame envelope on the wire so the
50
+ * reader can identify chunk boundaries — which enables auto-reconnect
51
+ * on transient stream errors. When false, byte streams are written as
52
+ * raw bytes (the legacy format) for compatibility with older runs.
53
+ */
54
+ framedByteStreams: boolean;
35
55
  }
36
56
  /**
37
57
  * Look up what serialization capabilities a workflow run supports based on
@@ -39,7 +59,8 @@ export interface RunCapabilities {
39
59
  *
40
60
  * When the version is `undefined`, not a string, or not a valid semver string
41
61
  * (e.g. very old runs that predate the field, or corrupted metadata),
42
- * we assume the most conservative capabilities (baseline formats only).
62
+ * we assume the most conservative capabilities (baseline formats only,
63
+ * non-format capabilities all `false`).
43
64
  */
44
65
  export declare function getRunCapabilities(workflowCoreVersion: string | undefined): RunCapabilities;
45
66
  //# sourceMappingURL=capabilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,gBAAgB,EAAE,WAAW,CAAC,uBAAuB,CAAC,CAAC;CACxD;AA0BD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,mBAAmB,EAAE,MAAM,GAAG,SAAS,GACtC,eAAe,CAcjB"}
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,gBAAgB,EAAE,WAAW,CAAC,uBAAuB,CAAC,CAAC;IAEvD;;;;;;;OAOG;IACH,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAgDD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,mBAAmB,EAAE,MAAM,GAAG,SAAS,GACtC,eAAe,CA4BjB"}
@@ -15,11 +15,22 @@
15
15
  * `@workflow/core` version that supports it
16
16
  * 3. The `getRunCapabilities()` function will automatically include it
17
17
  *
18
+ * ## Adding a new non-format capability
19
+ *
20
+ * Some capabilities aren't serialization format prefixes — e.g.
21
+ * byte-stream wire framing is an envelope around chunks rather than
22
+ * a content format. For those, add a boolean field to `RunCapabilities`
23
+ * and an entry in `CAPABILITY_VERSION_TABLE` below.
24
+ *
18
25
  * ## History
19
26
  *
20
27
  * - `encr` (AES-256-GCM encryption): added in `4.2.0-beta.64`
21
28
  * Commit: 7618ac36 "Wire AES-GCM encryption into serialization layer (#1251)"
22
29
  * https://github.com/vercel/workflow/commit/7618ac36
30
+ * - `framedByteStreams` (wire-level chunk framing for byte streams): added in `5.0.0-beta.15`
31
+ * - `gzip` (gzip payload compression): added in `5.0.0-beta.18`
32
+ * - `zstd` (zstd payload compression, preferred codec): added in `5.0.0-beta.18`
33
+ * alongside gzip — they co-ship, so any run that can read one can read both.
23
34
  */
24
35
  import semver from 'semver';
25
36
  import { SerializationFormat, } from './serialization.js';
@@ -30,10 +41,23 @@ import { SerializationFormat, } from './serialization.js';
30
41
  */
31
42
  const FORMAT_VERSION_TABLE = [
32
43
  { format: SerializationFormat.ENCRYPTED, minVersion: '4.2.0-beta.64' },
44
+ // TODO(release): verify this matches the actual version that ships payload
45
+ // compression. If a "Version Packages (beta)" PR merges before this change,
46
+ // bump to the next beta. A too-low cutoff makes new producers write
47
+ // compressed payloads to consumers that cannot decompress them; too-high
48
+ // merely delays the optimization (safe). gzip and zstd ship together, so
49
+ // they share a min version — a run that can read one can read both.
50
+ { format: SerializationFormat.GZIP, minVersion: '5.0.0-beta.18' },
51
+ { format: SerializationFormat.ZSTD, minVersion: '5.0.0-beta.18' },
33
52
  // Future entries:
34
53
  // { format: SerializationFormat.CBOR, minVersion: '5.x.y' },
35
54
  // { format: SerializationFormat.ENCRYPTED_V2, minVersion: '5.x.y' },
36
55
  ];
56
+ /**
57
+ * Maps non-format capability flags (booleans on `RunCapabilities`) to the
58
+ * minimum `@workflow/core` version that introduced support for them.
59
+ */
60
+ const CAPABILITY_VERSION_TABLE = [{ capability: 'framedByteStreams', minVersion: '5.0.0-beta.15' }];
37
61
  /**
38
62
  * The set of formats supported by all specVersion 2 runs, regardless of
39
63
  * `@workflow/core` version. These are the baseline formats that were present
@@ -48,11 +72,15 @@ const BASELINE_FORMATS = new Set([
48
72
  *
49
73
  * When the version is `undefined`, not a string, or not a valid semver string
50
74
  * (e.g. very old runs that predate the field, or corrupted metadata),
51
- * we assume the most conservative capabilities (baseline formats only).
75
+ * we assume the most conservative capabilities (baseline formats only,
76
+ * non-format capabilities all `false`).
52
77
  */
53
78
  export function getRunCapabilities(workflowCoreVersion) {
54
79
  if (!workflowCoreVersion || !semver.valid(workflowCoreVersion)) {
55
- return { supportedFormats: BASELINE_FORMATS };
80
+ return {
81
+ supportedFormats: BASELINE_FORMATS,
82
+ framedByteStreams: false,
83
+ };
56
84
  }
57
85
  const formats = new Set(BASELINE_FORMATS);
58
86
  for (const { format, minVersion } of FORMAT_VERSION_TABLE) {
@@ -60,6 +88,15 @@ export function getRunCapabilities(workflowCoreVersion) {
60
88
  formats.add(format);
61
89
  }
62
90
  }
63
- return { supportedFormats: formats };
91
+ const result = {
92
+ supportedFormats: formats,
93
+ framedByteStreams: false,
94
+ };
95
+ for (const { capability, minVersion } of CAPABILITY_VERSION_TABLE) {
96
+ if (semver.gte(workflowCoreVersion, minVersion)) {
97
+ result[capability] = true;
98
+ }
99
+ }
100
+ return result;
64
101
  }
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwYWJpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NhcGFiaWxpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQ0wsbUJBQW1CLEdBRXBCLE1BQU0sb0JBQW9CLENBQUM7QUFjNUI7Ozs7R0FJRztBQUNILE1BQU0sb0JBQW9CLEdBR3JCO0lBQ0gsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUU7SUFDdEUsa0JBQWtCO0lBQ2xCLDZEQUE2RDtJQUM3RCxxRUFBcUU7Q0FDdEUsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLGdCQUFnQixHQUF5QyxJQUFJLEdBQUcsQ0FBQztJQUNyRSxtQkFBbUIsQ0FBQyxVQUFVO0NBQy9CLENBQUMsQ0FBQztBQUVIOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLG1CQUF1QztJQUV2QyxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztRQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQTBCLGdCQUFnQixDQUFDLENBQUM7SUFFbkUsS0FBSyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDMUQsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDYXBhYmlsaXRpZXMgdGFibGUgZm9yIHdvcmtmbG93IHJ1bnMgYmFzZWQgb24gdGhlaXIgYEB3b3JrZmxvdy9jb3JlYCB2ZXJzaW9uLlxuICpcbiAqIFdoZW4gcmVzdW1pbmcgYSBob29rIG9yIHdlYmhvb2ssIHRoZSBwYXlsb2FkIG11c3QgYmUgZW5jb2RlZCBpbiBhIGZvcm1hdFxuICogdGhhdCB0aGUgKnRhcmdldCogd29ya2Zsb3cgcnVuJ3MgZGVwbG95bWVudCBjYW4gZGVjb2RlLiBUaGlzIG1vZHVsZSBwcm92aWRlc1xuICogYSB3YXkgdG8gbG9vayB1cCB3aGF0IHNlcmlhbGl6YXRpb24gZm9ybWF0cyBhIGdpdmVuIGBAd29ya2Zsb3cvY29yZWAgdmVyc2lvblxuICogc3VwcG9ydHMsIHNvIHRoYXQgbmV3ZXIgZGVwbG95bWVudHMgY2FuIGF2b2lkIGVuY29kaW5nIHBheWxvYWRzIGluIGZvcm1hdHNcbiAqIHRoYXQgb2xkZXIgZGVwbG95bWVudHMgZG9uJ3QgdW5kZXJzdGFuZCAoZS5nLiwgdGhlIGBlbmNyYCBlbmNyeXB0aW9uIGZvcm1hdCkuXG4gKlxuICogIyMgQWRkaW5nIGEgbmV3IGZvcm1hdFxuICpcbiAqIFdoZW4gYSBuZXcgc2VyaWFsaXphdGlvbiBmb3JtYXQgaXMgaW50cm9kdWNlZDpcbiAqIDEuIEFkZCB0aGUgZm9ybWF0IGNvbnN0YW50IHRvIGBTZXJpYWxpemF0aW9uRm9ybWF0YCBpbiBgc2VyaWFsaXphdGlvbi50c2BcbiAqIDIuIEFkZCBhbiBlbnRyeSB0byBgRk9STUFUX1ZFUlNJT05fVEFCTEVgIGJlbG93IHdpdGggdGhlIG1pbmltdW1cbiAqICAgIGBAd29ya2Zsb3cvY29yZWAgdmVyc2lvbiB0aGF0IHN1cHBvcnRzIGl0XG4gKiAzLiBUaGUgYGdldFJ1bkNhcGFiaWxpdGllcygpYCBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgaW5jbHVkZSBpdFxuICpcbiAqICMjIEhpc3RvcnlcbiAqXG4gKiAtIGBlbmNyYCAoQUVTLTI1Ni1HQ00gZW5jcnlwdGlvbik6IGFkZGVkIGluIGA0LjIuMC1iZXRhLjY0YFxuICogICBDb21taXQ6IDc2MThhYzM2IFwiV2lyZSBBRVMtR0NNIGVuY3J5cHRpb24gaW50byBzZXJpYWxpemF0aW9uIGxheWVyICgjMTI1MSlcIlxuICogICBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3dvcmtmbG93L2NvbW1pdC83NjE4YWMzNlxuICovXG5cbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7XG4gIFNlcmlhbGl6YXRpb25Gb3JtYXQsXG4gIHR5cGUgU2VyaWFsaXphdGlvbkZvcm1hdFR5cGUsXG59IGZyb20gJy4vc2VyaWFsaXphdGlvbi5qcyc7XG5cbi8qKlxuICogQ2FwYWJpbGl0aWVzIG9mIGEgd29ya2Zsb3cgcnVuIGJhc2VkIG9uIGl0cyBgQHdvcmtmbG93L2NvcmVgIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuQ2FwYWJpbGl0aWVzIHtcbiAgLyoqXG4gICAqIFRoZSBzZXQgb2Ygc2VyaWFsaXphdGlvbiBmb3JtYXQgcHJlZml4ZXMgdGhhdCB0aGUgdGFyZ2V0IHJ1biBjYW4gZGVjb2RlLlxuICAgKiBVc2UgYHN1cHBvcnRlZEZvcm1hdHMuaGFzKFNlcmlhbGl6YXRpb25Gb3JtYXQuRU5DUllQVEVEKWAgdG8gY2hlY2tcbiAgICogaWYgZW5jcnlwdGlvbiBpcyBzdXBwb3J0ZWQsIGV0Yy5cbiAgICovXG4gIHN1cHBvcnRlZEZvcm1hdHM6IFJlYWRvbmx5U2V0PFNlcmlhbGl6YXRpb25Gb3JtYXRUeXBlPjtcbn1cblxuLyoqXG4gKiBNYXBzIHNlcmlhbGl6YXRpb24gZm9ybWF0IGlkZW50aWZpZXJzIHRvIHRoZSBtaW5pbXVtIGBAd29ya2Zsb3cvY29yZWBcbiAqIHZlcnNpb24gdGhhdCBpbnRyb2R1Y2VkIHN1cHBvcnQgZm9yIHRoZW0uIEZvcm1hdHMgbm90IGxpc3RlZCBoZXJlIGFyZVxuICogYXNzdW1lZCB0byBiZSBzdXBwb3J0ZWQgYnkgYWxsIHNwZWNWZXJzaW9uIDIgcnVucyAoZS5nLiwgYGRldmxgKS5cbiAqL1xuY29uc3QgRk9STUFUX1ZFUlNJT05fVEFCTEU6IFJlYWRvbmx5QXJyYXk8e1xuICBmb3JtYXQ6IFNlcmlhbGl6YXRpb25Gb3JtYXRUeXBlO1xuICBtaW5WZXJzaW9uOiBzdHJpbmc7XG59PiA9IFtcbiAgeyBmb3JtYXQ6IFNlcmlhbGl6YXRpb25Gb3JtYXQuRU5DUllQVEVELCBtaW5WZXJzaW9uOiAnNC4yLjAtYmV0YS42NCcgfSxcbiAgLy8gRnV0dXJlIGVudHJpZXM6XG4gIC8vIHsgZm9ybWF0OiBTZXJpYWxpemF0aW9uRm9ybWF0LkNCT1IsIG1pblZlcnNpb246ICc1LngueScgfSxcbiAgLy8geyBmb3JtYXQ6IFNlcmlhbGl6YXRpb25Gb3JtYXQuRU5DUllQVEVEX1YyLCBtaW5WZXJzaW9uOiAnNS54LnknIH0sXG5dO1xuXG4vKipcbiAqIFRoZSBzZXQgb2YgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgYWxsIHNwZWNWZXJzaW9uIDIgcnVucywgcmVnYXJkbGVzcyBvZlxuICogYEB3b3JrZmxvdy9jb3JlYCB2ZXJzaW9uLiBUaGVzZSBhcmUgdGhlIGJhc2VsaW5lIGZvcm1hdHMgdGhhdCB3ZXJlIHByZXNlbnRcbiAqIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBzcGVjVmVyc2lvbiAyIHByb3RvY29sLlxuICovXG5jb25zdCBCQVNFTElORV9GT1JNQVRTOiBSZWFkb25seVNldDxTZXJpYWxpemF0aW9uRm9ybWF0VHlwZT4gPSBuZXcgU2V0KFtcbiAgU2VyaWFsaXphdGlvbkZvcm1hdC5ERVZBTFVFX1YxLFxuXSk7XG5cbi8qKlxuICogTG9vayB1cCB3aGF0IHNlcmlhbGl6YXRpb24gY2FwYWJpbGl0aWVzIGEgd29ya2Zsb3cgcnVuIHN1cHBvcnRzIGJhc2VkIG9uXG4gKiBpdHMgYEB3b3JrZmxvdy9jb3JlYCB2ZXJzaW9uIHN0cmluZyAoZnJvbSBgZXhlY3V0aW9uQ29udGV4dC53b3JrZmxvd0NvcmVWZXJzaW9uYCkuXG4gKlxuICogV2hlbiB0aGUgdmVyc2lvbiBpcyBgdW5kZWZpbmVkYCwgbm90IGEgc3RyaW5nLCBvciBub3QgYSB2YWxpZCBzZW12ZXIgc3RyaW5nXG4gKiAoZS5nLiB2ZXJ5IG9sZCBydW5zIHRoYXQgcHJlZGF0ZSB0aGUgZmllbGQsIG9yIGNvcnJ1cHRlZCBtZXRhZGF0YSksXG4gKiB3ZSBhc3N1bWUgdGhlIG1vc3QgY29uc2VydmF0aXZlIGNhcGFiaWxpdGllcyAoYmFzZWxpbmUgZm9ybWF0cyBvbmx5KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJ1bkNhcGFiaWxpdGllcyhcbiAgd29ya2Zsb3dDb3JlVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBSdW5DYXBhYmlsaXRpZXMge1xuICBpZiAoIXdvcmtmbG93Q29yZVZlcnNpb24gfHwgIXNlbXZlci52YWxpZCh3b3JrZmxvd0NvcmVWZXJzaW9uKSkge1xuICAgIHJldHVybiB7IHN1cHBvcnRlZEZvcm1hdHM6IEJBU0VMSU5FX0ZPUk1BVFMgfTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdHMgPSBuZXcgU2V0PFNlcmlhbGl6YXRpb25Gb3JtYXRUeXBlPihCQVNFTElORV9GT1JNQVRTKTtcblxuICBmb3IgKGNvbnN0IHsgZm9ybWF0LCBtaW5WZXJzaW9uIH0gb2YgRk9STUFUX1ZFUlNJT05fVEFCTEUpIHtcbiAgICBpZiAoc2VtdmVyLmd0ZSh3b3JrZmxvd0NvcmVWZXJzaW9uLCBtaW5WZXJzaW9uKSkge1xuICAgICAgZm9ybWF0cy5hZGQoZm9ybWF0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBzdXBwb3J0ZWRGb3JtYXRzOiBmb3JtYXRzIH07XG59XG4iXX0=
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwYWJpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NhcGFiaWxpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUNHO0FBRUgsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFDTCxtQkFBbUIsR0FFcEIsTUFBTSxvQkFBb0IsQ0FBQztBQXdCNUI7Ozs7R0FJRztBQUNILE1BQU0sb0JBQW9CLEdBR3JCO0lBQ0gsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUU7SUFDdEUsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSxvRUFBb0U7SUFDcEUseUVBQXlFO0lBQ3pFLHlFQUF5RTtJQUN6RSxvRUFBb0U7SUFDcEUsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUU7SUFDakUsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUU7SUFDakUsa0JBQWtCO0lBQ2xCLDZEQUE2RDtJQUM3RCxxRUFBcUU7Q0FDdEUsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sd0JBQXdCLEdBUXpCLENBQUMsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7QUFFeEU7Ozs7R0FJRztBQUNILE1BQU0sZ0JBQWdCLEdBQXlDLElBQUksR0FBRyxDQUFDO0lBQ3JFLG1CQUFtQixDQUFDLFVBQVU7Q0FDL0IsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLG1CQUF1QztJQUV2QyxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztRQUMvRCxPQUFPO1lBQ0wsZ0JBQWdCLEVBQUUsZ0JBQWdCO1lBQ2xDLGlCQUFpQixFQUFFLEtBQUs7U0FDekIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBMEIsZ0JBQWdCLENBQUMsQ0FBQztJQUVuRSxLQUFLLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUMxRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQW9CO1FBQzlCLGdCQUFnQixFQUFFLE9BQU87UUFDekIsaUJBQWlCLEVBQUUsS0FBSztLQUN6QixDQUFDO0lBRUYsS0FBSyxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxJQUFJLHdCQUF3QixFQUFFLENBQUM7UUFDbEUsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDaEQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENhcGFiaWxpdGllcyB0YWJsZSBmb3Igd29ya2Zsb3cgcnVucyBiYXNlZCBvbiB0aGVpciBgQHdvcmtmbG93L2NvcmVgIHZlcnNpb24uXG4gKlxuICogV2hlbiByZXN1bWluZyBhIGhvb2sgb3Igd2ViaG9vaywgdGhlIHBheWxvYWQgbXVzdCBiZSBlbmNvZGVkIGluIGEgZm9ybWF0XG4gKiB0aGF0IHRoZSAqdGFyZ2V0KiB3b3JrZmxvdyBydW4ncyBkZXBsb3ltZW50IGNhbiBkZWNvZGUuIFRoaXMgbW9kdWxlIHByb3ZpZGVzXG4gKiBhIHdheSB0byBsb29rIHVwIHdoYXQgc2VyaWFsaXphdGlvbiBmb3JtYXRzIGEgZ2l2ZW4gYEB3b3JrZmxvdy9jb3JlYCB2ZXJzaW9uXG4gKiBzdXBwb3J0cywgc28gdGhhdCBuZXdlciBkZXBsb3ltZW50cyBjYW4gYXZvaWQgZW5jb2RpbmcgcGF5bG9hZHMgaW4gZm9ybWF0c1xuICogdGhhdCBvbGRlciBkZXBsb3ltZW50cyBkb24ndCB1bmRlcnN0YW5kIChlLmcuLCB0aGUgYGVuY3JgIGVuY3J5cHRpb24gZm9ybWF0KS5cbiAqXG4gKiAjIyBBZGRpbmcgYSBuZXcgZm9ybWF0XG4gKlxuICogV2hlbiBhIG5ldyBzZXJpYWxpemF0aW9uIGZvcm1hdCBpcyBpbnRyb2R1Y2VkOlxuICogMS4gQWRkIHRoZSBmb3JtYXQgY29uc3RhbnQgdG8gYFNlcmlhbGl6YXRpb25Gb3JtYXRgIGluIGBzZXJpYWxpemF0aW9uLnRzYFxuICogMi4gQWRkIGFuIGVudHJ5IHRvIGBGT1JNQVRfVkVSU0lPTl9UQUJMRWAgYmVsb3cgd2l0aCB0aGUgbWluaW11bVxuICogICAgYEB3b3JrZmxvdy9jb3JlYCB2ZXJzaW9uIHRoYXQgc3VwcG9ydHMgaXRcbiAqIDMuIFRoZSBgZ2V0UnVuQ2FwYWJpbGl0aWVzKClgIGZ1bmN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBpbmNsdWRlIGl0XG4gKlxuICogIyMgQWRkaW5nIGEgbmV3IG5vbi1mb3JtYXQgY2FwYWJpbGl0eVxuICpcbiAqIFNvbWUgY2FwYWJpbGl0aWVzIGFyZW4ndCBzZXJpYWxpemF0aW9uIGZvcm1hdCBwcmVmaXhlcyDigJQgZS5nLlxuICogYnl0ZS1zdHJlYW0gd2lyZSBmcmFtaW5nIGlzIGFuIGVudmVsb3BlIGFyb3VuZCBjaHVua3MgcmF0aGVyIHRoYW5cbiAqIGEgY29udGVudCBmb3JtYXQuIEZvciB0aG9zZSwgYWRkIGEgYm9vbGVhbiBmaWVsZCB0byBgUnVuQ2FwYWJpbGl0aWVzYFxuICogYW5kIGFuIGVudHJ5IGluIGBDQVBBQklMSVRZX1ZFUlNJT05fVEFCTEVgIGJlbG93LlxuICpcbiAqICMjIEhpc3RvcnlcbiAqXG4gKiAtIGBlbmNyYCAoQUVTLTI1Ni1HQ00gZW5jcnlwdGlvbik6IGFkZGVkIGluIGA0LjIuMC1iZXRhLjY0YFxuICogICBDb21taXQ6IDc2MThhYzM2IFwiV2lyZSBBRVMtR0NNIGVuY3J5cHRpb24gaW50byBzZXJpYWxpemF0aW9uIGxheWVyICgjMTI1MSlcIlxuICogICBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3dvcmtmbG93L2NvbW1pdC83NjE4YWMzNlxuICogLSBgZnJhbWVkQnl0ZVN0cmVhbXNgICh3aXJlLWxldmVsIGNodW5rIGZyYW1pbmcgZm9yIGJ5dGUgc3RyZWFtcyk6IGFkZGVkIGluIGA1LjAuMC1iZXRhLjE1YFxuICogLSBgZ3ppcGAgKGd6aXAgcGF5bG9hZCBjb21wcmVzc2lvbik6IGFkZGVkIGluIGA1LjAuMC1iZXRhLjE4YFxuICogLSBgenN0ZGAgKHpzdGQgcGF5bG9hZCBjb21wcmVzc2lvbiwgcHJlZmVycmVkIGNvZGVjKTogYWRkZWQgaW4gYDUuMC4wLWJldGEuMThgXG4gKiAgIGFsb25nc2lkZSBnemlwIOKAlCB0aGV5IGNvLXNoaXAsIHNvIGFueSBydW4gdGhhdCBjYW4gcmVhZCBvbmUgY2FuIHJlYWQgYm90aC5cbiAqL1xuXG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQge1xuICBTZXJpYWxpemF0aW9uRm9ybWF0LFxuICB0eXBlIFNlcmlhbGl6YXRpb25Gb3JtYXRUeXBlLFxufSBmcm9tICcuL3NlcmlhbGl6YXRpb24uanMnO1xuXG4vKipcbiAqIENhcGFiaWxpdGllcyBvZiBhIHdvcmtmbG93IHJ1biBiYXNlZCBvbiBpdHMgYEB3b3JrZmxvdy9jb3JlYCB2ZXJzaW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bkNhcGFiaWxpdGllcyB7XG4gIC8qKlxuICAgKiBUaGUgc2V0IG9mIHNlcmlhbGl6YXRpb24gZm9ybWF0IHByZWZpeGVzIHRoYXQgdGhlIHRhcmdldCBydW4gY2FuIGRlY29kZS5cbiAgICogVXNlIGBzdXBwb3J0ZWRGb3JtYXRzLmhhcyhTZXJpYWxpemF0aW9uRm9ybWF0LkVOQ1JZUFRFRClgIHRvIGNoZWNrXG4gICAqIGlmIGVuY3J5cHRpb24gaXMgc3VwcG9ydGVkLCBldGMuXG4gICAqL1xuICBzdXBwb3J0ZWRGb3JtYXRzOiBSZWFkb25seVNldDxTZXJpYWxpemF0aW9uRm9ybWF0VHlwZT47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHRhcmdldCBydW4gY2FuIGRlY29kZSB3aXJlLWZyYW1lZCBieXRlIHN0cmVhbXMuIFdoZW4gdHJ1ZSxcbiAgICogYnl0ZSBzdHJlYW1zIChgdHlwZTogJ2J5dGVzJ2AgUmVhZGFibGVTdHJlYW1zIHBhc3NlZCBhY3Jvc3MgYm91bmRhcmllcylcbiAgICogYXJlIHdyYXBwZWQgaW4gYSBsZW5ndGgtcHJlZml4ZWQgZnJhbWUgZW52ZWxvcGUgb24gdGhlIHdpcmUgc28gdGhlXG4gICAqIHJlYWRlciBjYW4gaWRlbnRpZnkgY2h1bmsgYm91bmRhcmllcyDigJQgd2hpY2ggZW5hYmxlcyBhdXRvLXJlY29ubmVjdFxuICAgKiBvbiB0cmFuc2llbnQgc3RyZWFtIGVycm9ycy4gV2hlbiBmYWxzZSwgYnl0ZSBzdHJlYW1zIGFyZSB3cml0dGVuIGFzXG4gICAqIHJhdyBieXRlcyAodGhlIGxlZ2FjeSBmb3JtYXQpIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgcnVucy5cbiAgICovXG4gIGZyYW1lZEJ5dGVTdHJlYW1zOiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1hcHMgc2VyaWFsaXphdGlvbiBmb3JtYXQgaWRlbnRpZmllcnMgdG8gdGhlIG1pbmltdW0gYEB3b3JrZmxvdy9jb3JlYFxuICogdmVyc2lvbiB0aGF0IGludHJvZHVjZWQgc3VwcG9ydCBmb3IgdGhlbS4gRm9ybWF0cyBub3QgbGlzdGVkIGhlcmUgYXJlXG4gKiBhc3N1bWVkIHRvIGJlIHN1cHBvcnRlZCBieSBhbGwgc3BlY1ZlcnNpb24gMiBydW5zIChlLmcuLCBgZGV2bGApLlxuICovXG5jb25zdCBGT1JNQVRfVkVSU0lPTl9UQUJMRTogUmVhZG9ubHlBcnJheTx7XG4gIGZvcm1hdDogU2VyaWFsaXphdGlvbkZvcm1hdFR5cGU7XG4gIG1pblZlcnNpb246IHN0cmluZztcbn0+ID0gW1xuICB7IGZvcm1hdDogU2VyaWFsaXphdGlvbkZvcm1hdC5FTkNSWVBURUQsIG1pblZlcnNpb246ICc0LjIuMC1iZXRhLjY0JyB9LFxuICAvLyBUT0RPKHJlbGVhc2UpOiB2ZXJpZnkgdGhpcyBtYXRjaGVzIHRoZSBhY3R1YWwgdmVyc2lvbiB0aGF0IHNoaXBzIHBheWxvYWRcbiAgLy8gY29tcHJlc3Npb24uIElmIGEgXCJWZXJzaW9uIFBhY2thZ2VzIChiZXRhKVwiIFBSIG1lcmdlcyBiZWZvcmUgdGhpcyBjaGFuZ2UsXG4gIC8vIGJ1bXAgdG8gdGhlIG5leHQgYmV0YS4gQSB0b28tbG93IGN1dG9mZiBtYWtlcyBuZXcgcHJvZHVjZXJzIHdyaXRlXG4gIC8vIGNvbXByZXNzZWQgcGF5bG9hZHMgdG8gY29uc3VtZXJzIHRoYXQgY2Fubm90IGRlY29tcHJlc3MgdGhlbTsgdG9vLWhpZ2hcbiAgLy8gbWVyZWx5IGRlbGF5cyB0aGUgb3B0aW1pemF0aW9uIChzYWZlKS4gZ3ppcCBhbmQgenN0ZCBzaGlwIHRvZ2V0aGVyLCBzb1xuICAvLyB0aGV5IHNoYXJlIGEgbWluIHZlcnNpb24g4oCUIGEgcnVuIHRoYXQgY2FuIHJlYWQgb25lIGNhbiByZWFkIGJvdGguXG4gIHsgZm9ybWF0OiBTZXJpYWxpemF0aW9uRm9ybWF0LkdaSVAsIG1pblZlcnNpb246ICc1LjAuMC1iZXRhLjE4JyB9LFxuICB7IGZvcm1hdDogU2VyaWFsaXphdGlvbkZvcm1hdC5aU1RELCBtaW5WZXJzaW9uOiAnNS4wLjAtYmV0YS4xOCcgfSxcbiAgLy8gRnV0dXJlIGVudHJpZXM6XG4gIC8vIHsgZm9ybWF0OiBTZXJpYWxpemF0aW9uRm9ybWF0LkNCT1IsIG1pblZlcnNpb246ICc1LngueScgfSxcbiAgLy8geyBmb3JtYXQ6IFNlcmlhbGl6YXRpb25Gb3JtYXQuRU5DUllQVEVEX1YyLCBtaW5WZXJzaW9uOiAnNS54LnknIH0sXG5dO1xuXG4vKipcbiAqIE1hcHMgbm9uLWZvcm1hdCBjYXBhYmlsaXR5IGZsYWdzIChib29sZWFucyBvbiBgUnVuQ2FwYWJpbGl0aWVzYCkgdG8gdGhlXG4gKiBtaW5pbXVtIGBAd29ya2Zsb3cvY29yZWAgdmVyc2lvbiB0aGF0IGludHJvZHVjZWQgc3VwcG9ydCBmb3IgdGhlbS5cbiAqL1xuY29uc3QgQ0FQQUJJTElUWV9WRVJTSU9OX1RBQkxFOiBSZWFkb25seUFycmF5PHtcbiAgY2FwYWJpbGl0eToga2V5b2YgT21pdDxSdW5DYXBhYmlsaXRpZXMsICdzdXBwb3J0ZWRGb3JtYXRzJz47XG4gIG1pblZlcnNpb246IHN0cmluZztcbiAgLy8gVE9ETyhyZWxlYXNlKTogdmVyaWZ5IHRoaXMgbWF0Y2hlcyB0aGUgYWN0dWFsIHZlcnNpb24gdGhhdCBzaGlwcyBieXRlLXN0cmVhbVxuICAvLyBmcmFtaW5nLiBJZiBhIFwiVmVyc2lvbiBQYWNrYWdlcyAoYmV0YSlcIiBQUiBtZXJnZXMgYmVmb3JlIHRoaXMgY2hhbmdlLCBidW1wXG4gIC8vIHRvIHRoZSBuZXh0IGJldGEuIEEgdG9vLWxvdyBjdXRvZmYgbWFrZXMgbmV3IHByb2R1Y2VycyB3cml0ZSBmcmFtZWQgYnl0ZXMgdG9cbiAgLy8gY29uc3VtZXJzIHRoYXQgY2Fubm90IHVuZnJhbWUgdGhlbSAoc2lsZW50IGNvcnJ1cHRpb24pOyB0b28taGlnaCBtZXJlbHlcbiAgLy8gZGVsYXlzIHRoZSBvcHRpbWl6YXRpb24gKHNhZmUpLlxufT4gPSBbeyBjYXBhYmlsaXR5OiAnZnJhbWVkQnl0ZVN0cmVhbXMnLCBtaW5WZXJzaW9uOiAnNS4wLjAtYmV0YS4xNScgfV07XG5cbi8qKlxuICogVGhlIHNldCBvZiBmb3JtYXRzIHN1cHBvcnRlZCBieSBhbGwgc3BlY1ZlcnNpb24gMiBydW5zLCByZWdhcmRsZXNzIG9mXG4gKiBgQHdvcmtmbG93L2NvcmVgIHZlcnNpb24uIFRoZXNlIGFyZSB0aGUgYmFzZWxpbmUgZm9ybWF0cyB0aGF0IHdlcmUgcHJlc2VudFxuICogZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHNwZWNWZXJzaW9uIDIgcHJvdG9jb2wuXG4gKi9cbmNvbnN0IEJBU0VMSU5FX0ZPUk1BVFM6IFJlYWRvbmx5U2V0PFNlcmlhbGl6YXRpb25Gb3JtYXRUeXBlPiA9IG5ldyBTZXQoW1xuICBTZXJpYWxpemF0aW9uRm9ybWF0LkRFVkFMVUVfVjEsXG5dKTtcblxuLyoqXG4gKiBMb29rIHVwIHdoYXQgc2VyaWFsaXphdGlvbiBjYXBhYmlsaXRpZXMgYSB3b3JrZmxvdyBydW4gc3VwcG9ydHMgYmFzZWQgb25cbiAqIGl0cyBgQHdvcmtmbG93L2NvcmVgIHZlcnNpb24gc3RyaW5nIChmcm9tIGBleGVjdXRpb25Db250ZXh0LndvcmtmbG93Q29yZVZlcnNpb25gKS5cbiAqXG4gKiBXaGVuIHRoZSB2ZXJzaW9uIGlzIGB1bmRlZmluZWRgLCBub3QgYSBzdHJpbmcsIG9yIG5vdCBhIHZhbGlkIHNlbXZlciBzdHJpbmdcbiAqIChlLmcuIHZlcnkgb2xkIHJ1bnMgdGhhdCBwcmVkYXRlIHRoZSBmaWVsZCwgb3IgY29ycnVwdGVkIG1ldGFkYXRhKSxcbiAqIHdlIGFzc3VtZSB0aGUgbW9zdCBjb25zZXJ2YXRpdmUgY2FwYWJpbGl0aWVzIChiYXNlbGluZSBmb3JtYXRzIG9ubHksXG4gKiBub24tZm9ybWF0IGNhcGFiaWxpdGllcyBhbGwgYGZhbHNlYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSdW5DYXBhYmlsaXRpZXMoXG4gIHdvcmtmbG93Q29yZVZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogUnVuQ2FwYWJpbGl0aWVzIHtcbiAgaWYgKCF3b3JrZmxvd0NvcmVWZXJzaW9uIHx8ICFzZW12ZXIudmFsaWQod29ya2Zsb3dDb3JlVmVyc2lvbikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3VwcG9ydGVkRm9ybWF0czogQkFTRUxJTkVfRk9STUFUUyxcbiAgICAgIGZyYW1lZEJ5dGVTdHJlYW1zOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgZm9ybWF0cyA9IG5ldyBTZXQ8U2VyaWFsaXphdGlvbkZvcm1hdFR5cGU+KEJBU0VMSU5FX0ZPUk1BVFMpO1xuXG4gIGZvciAoY29uc3QgeyBmb3JtYXQsIG1pblZlcnNpb24gfSBvZiBGT1JNQVRfVkVSU0lPTl9UQUJMRSkge1xuICAgIGlmIChzZW12ZXIuZ3RlKHdvcmtmbG93Q29yZVZlcnNpb24sIG1pblZlcnNpb24pKSB7XG4gICAgICBmb3JtYXRzLmFkZChmb3JtYXQpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogUnVuQ2FwYWJpbGl0aWVzID0ge1xuICAgIHN1cHBvcnRlZEZvcm1hdHM6IGZvcm1hdHMsXG4gICAgZnJhbWVkQnl0ZVN0cmVhbXM6IGZhbHNlLFxuICB9O1xuXG4gIGZvciAoY29uc3QgeyBjYXBhYmlsaXR5LCBtaW5WZXJzaW9uIH0gb2YgQ0FQQUJJTElUWV9WRVJTSU9OX1RBQkxFKSB7XG4gICAgaWYgKHNlbXZlci5ndGUod29ya2Zsb3dDb3JlVmVyc2lvbiwgbWluVmVyc2lvbikpIHtcbiAgICAgIHJlc3VsdFtjYXBhYmlsaXR5XSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ /**
2
+ * V8-only (Node, Bun, Chrome, Deno). Rewrites `err.stack` so the top frame is
3
+ * the caller of `stackStartFn` instead of the framework function that threw.
4
+ * Without this, terminal overlays (Next.js, Turbopack, VS Code) render the
5
+ * code frame at our `throw` site inside `@workflow/core`, which is useless
6
+ * to the user.
7
+ *
8
+ * No-op on engines that don't expose `Error.captureStackTrace` — the stack
9
+ * degrades gracefully to the default behavior.
10
+ *
11
+ * Kept in its own tiny module so callers that can't participate in the
12
+ * `context-errors.ts` ↔ `workflow/get-workflow-metadata.ts` import cycle can
13
+ * still pull in the helper without pulling in the full error classes.
14
+ */
15
+ export declare function redirectStackToCaller(err: Error, stackStartFn: Function): void;
16
+ //# sourceMappingURL=capture-stack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-stack.d.ts","sourceRoot":"","sources":["../src/capture-stack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,KAAK,EAEV,YAAY,EAAE,QAAQ,GACrB,IAAI,CAON"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * V8-only (Node, Bun, Chrome, Deno). Rewrites `err.stack` so the top frame is
3
+ * the caller of `stackStartFn` instead of the framework function that threw.
4
+ * Without this, terminal overlays (Next.js, Turbopack, VS Code) render the
5
+ * code frame at our `throw` site inside `@workflow/core`, which is useless
6
+ * to the user.
7
+ *
8
+ * No-op on engines that don't expose `Error.captureStackTrace` — the stack
9
+ * degrades gracefully to the default behavior.
10
+ *
11
+ * Kept in its own tiny module so callers that can't participate in the
12
+ * `context-errors.ts` ↔ `workflow/get-workflow-metadata.ts` import cycle can
13
+ * still pull in the helper without pulling in the full error classes.
14
+ */
15
+ export function redirectStackToCaller(err,
16
+ // biome-ignore lint/complexity/noBannedTypes: signature matches Error.captureStackTrace
17
+ stackStartFn) {
18
+ const capture = Error.captureStackTrace;
19
+ capture?.(err, stackStartFn);
20
+ }
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwdHVyZS1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jYXB0dXJlLXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLEdBQVU7QUFDVix3RkFBd0Y7QUFDeEYsWUFBc0I7SUFFdEIsTUFBTSxPQUFPLEdBQ1gsS0FHRCxDQUFDLGlCQUFpQixDQUFDO0lBQ3BCLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBWOC1vbmx5IChOb2RlLCBCdW4sIENocm9tZSwgRGVubykuIFJld3JpdGVzIGBlcnIuc3RhY2tgIHNvIHRoZSB0b3AgZnJhbWUgaXNcbiAqIHRoZSBjYWxsZXIgb2YgYHN0YWNrU3RhcnRGbmAgaW5zdGVhZCBvZiB0aGUgZnJhbWV3b3JrIGZ1bmN0aW9uIHRoYXQgdGhyZXcuXG4gKiBXaXRob3V0IHRoaXMsIHRlcm1pbmFsIG92ZXJsYXlzIChOZXh0LmpzLCBUdXJib3BhY2ssIFZTIENvZGUpIHJlbmRlciB0aGVcbiAqIGNvZGUgZnJhbWUgYXQgb3VyIGB0aHJvd2Agc2l0ZSBpbnNpZGUgYEB3b3JrZmxvdy9jb3JlYCwgd2hpY2ggaXMgdXNlbGVzc1xuICogdG8gdGhlIHVzZXIuXG4gKlxuICogTm8tb3Agb24gZW5naW5lcyB0aGF0IGRvbid0IGV4cG9zZSBgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2VgIOKAlCB0aGUgc3RhY2tcbiAqIGRlZ3JhZGVzIGdyYWNlZnVsbHkgdG8gdGhlIGRlZmF1bHQgYmVoYXZpb3IuXG4gKlxuICogS2VwdCBpbiBpdHMgb3duIHRpbnkgbW9kdWxlIHNvIGNhbGxlcnMgdGhhdCBjYW4ndCBwYXJ0aWNpcGF0ZSBpbiB0aGVcbiAqIGBjb250ZXh0LWVycm9ycy50c2Ag4oaUIGB3b3JrZmxvdy9nZXQtd29ya2Zsb3ctbWV0YWRhdGEudHNgIGltcG9ydCBjeWNsZSBjYW5cbiAqIHN0aWxsIHB1bGwgaW4gdGhlIGhlbHBlciB3aXRob3V0IHB1bGxpbmcgaW4gdGhlIGZ1bGwgZXJyb3IgY2xhc3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZGlyZWN0U3RhY2tUb0NhbGxlcihcbiAgZXJyOiBFcnJvcixcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0Jhbm5lZFR5cGVzOiBzaWduYXR1cmUgbWF0Y2hlcyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZVxuICBzdGFja1N0YXJ0Rm46IEZ1bmN0aW9uXG4pOiB2b2lkIHtcbiAgY29uc3QgY2FwdHVyZSA9IChcbiAgICBFcnJvciBhcyB1bmtub3duIGFzIHtcbiAgICAgIGNhcHR1cmVTdGFja1RyYWNlPzogKHRhcmdldDogb2JqZWN0LCBmbjogRnVuY3Rpb24pID0+IHZvaWQ7XG4gICAgfVxuICApLmNhcHR1cmVTdGFja1RyYWNlO1xuICBjYXB0dXJlPy4oZXJyLCBzdGFja1N0YXJ0Rm4pO1xufVxuIl19
@@ -18,6 +18,38 @@
18
18
  * when serializing instances (e.g., step return values).
19
19
  */
20
20
  export declare function registerSerializationClass(classId: string, cls: Function): void;
21
+ /**
22
+ * Stable, well-known registry id for the SDK's `Run` class.
23
+ *
24
+ * The SWC plugin auto-registers `Run` under a *path-derived* id (e.g.
25
+ * `class//./node_modules/@workflow/core/dist/runtime/run//Run`), which
26
+ * varies with the app's dependency layout and bundler. Host-side code
27
+ * that needs to construct `Run` instances inside the workflow VM (e.g.
28
+ * the hook event consumer resolving `hook.getConflict()`) cannot know
29
+ * that id statically, so the workflow-mode `create-hook` module also
30
+ * aliases the bundle's `Run` under this stable id at evaluation time.
31
+ *
32
+ * The `workflow` pseudo-path cannot collide with plugin-derived ids,
33
+ * which always use real relative module paths (`./…` / `../…`).
34
+ */
35
+ export declare const RUN_CLASS_ID = "class//workflow//Run";
36
+ /**
37
+ * Register an additional registry id for a class without touching its
38
+ * `classId` property.
39
+ *
40
+ * Unlike {@link registerSerializationClass}, this is safe to call for a
41
+ * class the SWC plugin has already registered: the plugin's inlined IIFE
42
+ * defines `classId` as non-configurable, so a second `defineProperty`
43
+ * would throw. Aliasing only adds a registry entry — the class keeps
44
+ * serializing under its primary (path-derived) id, while lookups succeed
45
+ * under both.
46
+ *
47
+ * Registration is per-global by construction: evaluated inside the
48
+ * workflow VM it registers the VM's compiled class on the VM's registry;
49
+ * evaluated on the host it registers the host class on the host's
50
+ * registry. Each context resolves its own correct variant.
51
+ */
52
+ export declare function aliasSerializationClass(classId: string, cls: Function, global?: Record<string, any>): void;
21
53
  /**
22
54
  * Find a registered class constructor by ID (used during deserialization)
23
55
  *
@@ -1 +1 @@
1
- {"version":3,"file":"class-serialization.d.ts","sourceRoot":"","sources":["../src/class-serialization.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuBH;;;;;;;;;;;GAWG;AAEH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,QASxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAE1B,QAAQ,GAAG,SAAS,CAEtB"}
1
+ {"version":3,"file":"class-serialization.d.ts","sourceRoot":"","sources":["../src/class-serialization.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuBH;;;;;;;;;;;GAWG;AAEH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,QASxE;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,yBAAyB,CAAC;AAEnD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EAEf,GAAG,EAAE,QAAQ,EACb,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAc,QAGzC;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAE1B,QAAQ,GAAG,SAAS,CAEtB"}
@@ -44,6 +44,42 @@ export function registerSerializationClass(classId, cls) {
44
44
  configurable: false,
45
45
  });
46
46
  }
47
+ /**
48
+ * Stable, well-known registry id for the SDK's `Run` class.
49
+ *
50
+ * The SWC plugin auto-registers `Run` under a *path-derived* id (e.g.
51
+ * `class//./node_modules/@workflow/core/dist/runtime/run//Run`), which
52
+ * varies with the app's dependency layout and bundler. Host-side code
53
+ * that needs to construct `Run` instances inside the workflow VM (e.g.
54
+ * the hook event consumer resolving `hook.getConflict()`) cannot know
55
+ * that id statically, so the workflow-mode `create-hook` module also
56
+ * aliases the bundle's `Run` under this stable id at evaluation time.
57
+ *
58
+ * The `workflow` pseudo-path cannot collide with plugin-derived ids,
59
+ * which always use real relative module paths (`./…` / `../…`).
60
+ */
61
+ export const RUN_CLASS_ID = 'class//workflow//Run';
62
+ /**
63
+ * Register an additional registry id for a class without touching its
64
+ * `classId` property.
65
+ *
66
+ * Unlike {@link registerSerializationClass}, this is safe to call for a
67
+ * class the SWC plugin has already registered: the plugin's inlined IIFE
68
+ * defines `classId` as non-configurable, so a second `defineProperty`
69
+ * would throw. Aliasing only adds a registry entry — the class keeps
70
+ * serializing under its primary (path-derived) id, while lookups succeed
71
+ * under both.
72
+ *
73
+ * Registration is per-global by construction: evaluated inside the
74
+ * workflow VM it registers the VM's compiled class on the VM's registry;
75
+ * evaluated on the host it registers the host class on the host's
76
+ * registry. Each context resolves its own correct variant.
77
+ */
78
+ export function aliasSerializationClass(classId,
79
+ // biome-ignore lint/complexity/noBannedTypes: We need to use Function to represent class constructors
80
+ cls, global = globalThis) {
81
+ getRegistry(global).set(classId, cls);
82
+ }
47
83
  /**
48
84
  * Find a registered class constructor by ID (used during deserialization)
49
85
  *
@@ -58,4 +94,4 @@ export function getSerializationClass(classId, global
58
94
  ) {
59
95
  return getRegistry(global).get(classId);
60
96
  }
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Mtc2VyaWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGFzcy1zZXJpYWxpemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUt2RDs7Ozs7R0FLRztBQUNILFNBQVMsV0FBVyxDQUFDLFNBQThCLFVBQVU7SUFDM0QsTUFBTSxDQUFDLEdBQUcsTUFBYSxDQUFDO0lBQ3hCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQyx1QkFBdUIsQ0FBOEIsQ0FBQztJQUN2RSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsdUJBQXVCLENBQUMsR0FBRyxRQUFRLENBQUM7SUFDeEMsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILHNHQUFzRztBQUN0RyxNQUFNLFVBQVUsMEJBQTBCLENBQUMsT0FBZSxFQUFFLEdBQWE7SUFDdkUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNoQyw2Q0FBNkM7SUFDN0MsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFO1FBQ3BDLEtBQUssRUFBRSxPQUFPO1FBQ2QsUUFBUSxFQUFFLEtBQUs7UUFDZixVQUFVLEVBQUUsS0FBSztRQUNqQixZQUFZLEVBQUUsS0FBSztLQUNwQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLE9BQWUsRUFDZixNQUEyQjtBQUMzQixzR0FBc0c7O0lBRXRHLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDbGFzcyBzZXJpYWxpemF0aW9uIHV0aWxpdGllcy5cbiAqXG4gKiBUaGlzIG1vZHVsZSBpcyBzZXBhcmF0ZSBmcm9tIHByaXZhdGUudHMgdG8gYXZvaWQgcHVsbGluZyBpbiBOb2RlLmpzLW9ubHlcbiAqIGRlcGVuZGVuY2llcyAobGlrZSBhc3luY19ob29rcyB2aWEgZ2V0LWNsb3N1cmUtdmFycy50cykgd2hlbiB1c2VkIGluXG4gKiB3b3JrZmxvdyBidW5kbGVzLlxuICovXG5cbmltcG9ydCB7IFdPUktGTE9XX0NMQVNTX1JFR0lTVFJZIH0gZnJvbSAnLi9zeW1ib2xzLmpzJztcblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0Jhbm5lZFR5cGVzOiBXZSBuZWVkIHRvIHVzZSBGdW5jdGlvbiB0byByZXByZXNlbnQgY2xhc3MgY29uc3RydWN0b3JzXG50eXBlIENsYXNzUmVnaXN0cnkgPSBNYXA8c3RyaW5nLCBGdW5jdGlvbj47XG5cbi8qKlxuICogR2V0IG9yIGNyZWF0ZSB0aGUgY2xhc3MgcmVnaXN0cnkgb24gdGhlIGdpdmVuIGdsb2JhbCBvYmplY3QuXG4gKiBUaGlzIHdvcmtzIGlzb21vcnBoaWNhbGx5IGluIGJvdGggc3RlcCBtb2RlIChtYWluIGNvbnRleHQpIGFuZCB3b3JrZmxvdyBtb2RlIChWTSBjb250ZXh0KS5cbiAqXG4gKiBAcGFyYW0gZ2xvYmFsIC0gVGhlIGdsb2JhbCBvYmplY3QgdG8gdXNlLiBEZWZhdWx0cyB0byBnbG9iYWxUaGlzLCBidXQgY2FuIGJlIGEgVk0ncyBnbG9iYWwuXG4gKi9cbmZ1bmN0aW9uIGdldFJlZ2lzdHJ5KGdsb2JhbDogUmVjb3JkPHN0cmluZywgYW55PiA9IGdsb2JhbFRoaXMpOiBDbGFzc1JlZ2lzdHJ5IHtcbiAgY29uc3QgZyA9IGdsb2JhbCBhcyBhbnk7XG4gIGxldCByZWdpc3RyeSA9IGdbV09SS0ZMT1dfQ0xBU1NfUkVHSVNUUlldIGFzIENsYXNzUmVnaXN0cnkgfCB1bmRlZmluZWQ7XG4gIGlmICghcmVnaXN0cnkpIHtcbiAgICByZWdpc3RyeSA9IG5ldyBNYXAoKTtcbiAgICBnW1dPUktGTE9XX0NMQVNTX1JFR0lTVFJZXSA9IHJlZ2lzdHJ5O1xuICB9XG4gIHJldHVybiByZWdpc3RyeTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIGNsYXNzIGNvbnN0cnVjdG9yIGZvciBzZXJpYWxpemF0aW9uLlxuICogVGhpcyBhbGxvd3MgY2xhc3MgY29uc3RydWN0b3JzIHRvIGJlIGRlc2VyaWFsaXplZCBieSBsb29raW5nIHVwIHRoZSBjbGFzc0lkLlxuICpcbiAqIE5vdGU6IFRoZSBTV0MgcGx1Z2luIG5vdyBpbmxpbmVzIGVxdWl2YWxlbnQgcmVnaXN0cmF0aW9uIGxvZ2ljIGFzIGFcbiAqIHNlbGYtY29udGFpbmVkIElJRkUgKHVzaW5nIHRoZSBzYW1lIGdsb2JhbFRoaXMgU3ltYm9sLWtleWVkIHJlZ2lzdHJ5KSxcbiAqIHNvIHRoaXMgZnVuY3Rpb24gaXMgbm8gbG9uZ2VyIGltcG9ydGVkIGJ5IGdlbmVyYXRlZCBjb2RlLiBJdCBpcyByZXRhaW5lZFxuICogZm9yIHByb2dyYW1tYXRpYyB1c2UgYW5kIHRlc3RpbmcuXG4gKlxuICogQWxzbyBzZXRzIHRoZSBgY2xhc3NJZGAgcHJvcGVydHkgb24gdGhlIGNsYXNzIHNvIHRoZSBzZXJpYWxpemVyIGNhbiBmaW5kIGl0XG4gKiB3aGVuIHNlcmlhbGl6aW5nIGluc3RhbmNlcyAoZS5nLiwgc3RlcCByZXR1cm4gdmFsdWVzKS5cbiAqL1xuLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0Jhbm5lZFR5cGVzOiBXZSBuZWVkIHRvIHVzZSBGdW5jdGlvbiB0byByZXByZXNlbnQgY2xhc3MgY29uc3RydWN0b3JzXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJTZXJpYWxpemF0aW9uQ2xhc3MoY2xhc3NJZDogc3RyaW5nLCBjbHM6IEZ1bmN0aW9uKSB7XG4gIGdldFJlZ2lzdHJ5KCkuc2V0KGNsYXNzSWQsIGNscyk7XG4gIC8vIFNldCBjbGFzc0lkIG9uIHRoZSBjbGFzcyBmb3Igc2VyaWFsaXphdGlvblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xzLCAnY2xhc3NJZCcsIHtcbiAgICB2YWx1ZTogY2xhc3NJZCxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgfSk7XG59XG5cbi8qKlxuICogRmluZCBhIHJlZ2lzdGVyZWQgY2xhc3MgY29uc3RydWN0b3IgYnkgSUQgKHVzZWQgZHVyaW5nIGRlc2VyaWFsaXphdGlvbilcbiAqXG4gKiBAcGFyYW0gY2xhc3NJZCAtIFRoZSBjbGFzcyBJRCB0byBsb29rIHVwXG4gKiBAcGFyYW0gZ2xvYmFsIC0gVGhlIGdsb2JhbCBvYmplY3QgdG8gY2hlY2suIFRoaXMgZW5zdXJlcyB3b3JrZmxvdyBjb2RlIHJ1bm5pbmdcbiAqICAgICAgICAgICAgICAgICBpbiBhIFZNIG9ubHkgYWNjZXNzZXMgY2xhc3NlcyByZWdpc3RlcmVkIG9uIHRoZSBWTSdzIGdsb2JhbCxcbiAqICAgICAgICAgICAgICAgICBtYXRjaGluZyBwcm9kdWN0aW9uIHNlcnZlcmxlc3MgYmVoYXZpb3Igd2hlcmUgd29ya2Zsb3cgY29kZVxuICogICAgICAgICAgICAgICAgIHJ1bnMgaW4gaXNvbGF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VyaWFsaXphdGlvbkNsYXNzKFxuICBjbGFzc0lkOiBzdHJpbmcsXG4gIGdsb2JhbDogUmVjb3JkPHN0cmluZywgYW55PlxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vQmFubmVkVHlwZXM6IFdlIG5lZWQgdG8gdXNlIEZ1bmN0aW9uIHRvIHJlcHJlc2VudCBjbGFzcyBjb25zdHJ1Y3RvcnNcbik6IEZ1bmN0aW9uIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdldFJlZ2lzdHJ5KGdsb2JhbCkuZ2V0KGNsYXNzSWQpO1xufVxuIl19
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Mtc2VyaWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGFzcy1zZXJpYWxpemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUt2RDs7Ozs7R0FLRztBQUNILFNBQVMsV0FBVyxDQUFDLFNBQThCLFVBQVU7SUFDM0QsTUFBTSxDQUFDLEdBQUcsTUFBYSxDQUFDO0lBQ3hCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQyx1QkFBdUIsQ0FBOEIsQ0FBQztJQUN2RSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsdUJBQXVCLENBQUMsR0FBRyxRQUFRLENBQUM7SUFDeEMsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILHNHQUFzRztBQUN0RyxNQUFNLFVBQVUsMEJBQTBCLENBQUMsT0FBZSxFQUFFLEdBQWE7SUFDdkUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNoQyw2Q0FBNkM7SUFDN0MsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFO1FBQ3BDLEtBQUssRUFBRSxPQUFPO1FBQ2QsUUFBUSxFQUFFLEtBQUs7UUFDZixVQUFVLEVBQUUsS0FBSztRQUNqQixZQUFZLEVBQUUsS0FBSztLQUNwQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxzQkFBc0IsQ0FBQztBQUVuRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLE9BQWU7QUFDZixzR0FBc0c7QUFDdEcsR0FBYSxFQUNiLFNBQThCLFVBQVU7SUFFeEMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxPQUFlLEVBQ2YsTUFBMkI7QUFDM0Isc0dBQXNHOztJQUV0RyxPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2xhc3Mgc2VyaWFsaXphdGlvbiB1dGlsaXRpZXMuXG4gKlxuICogVGhpcyBtb2R1bGUgaXMgc2VwYXJhdGUgZnJvbSBwcml2YXRlLnRzIHRvIGF2b2lkIHB1bGxpbmcgaW4gTm9kZS5qcy1vbmx5XG4gKiBkZXBlbmRlbmNpZXMgKGxpa2UgYXN5bmNfaG9va3MgdmlhIGdldC1jbG9zdXJlLXZhcnMudHMpIHdoZW4gdXNlZCBpblxuICogd29ya2Zsb3cgYnVuZGxlcy5cbiAqL1xuXG5pbXBvcnQgeyBXT1JLRkxPV19DTEFTU19SRUdJU1RSWSB9IGZyb20gJy4vc3ltYm9scy5qcyc7XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9CYW5uZWRUeXBlczogV2UgbmVlZCB0byB1c2UgRnVuY3Rpb24gdG8gcmVwcmVzZW50IGNsYXNzIGNvbnN0cnVjdG9yc1xudHlwZSBDbGFzc1JlZ2lzdHJ5ID0gTWFwPHN0cmluZywgRnVuY3Rpb24+O1xuXG4vKipcbiAqIEdldCBvciBjcmVhdGUgdGhlIGNsYXNzIHJlZ2lzdHJ5IG9uIHRoZSBnaXZlbiBnbG9iYWwgb2JqZWN0LlxuICogVGhpcyB3b3JrcyBpc29tb3JwaGljYWxseSBpbiBib3RoIHN0ZXAgbW9kZSAobWFpbiBjb250ZXh0KSBhbmQgd29ya2Zsb3cgbW9kZSAoVk0gY29udGV4dCkuXG4gKlxuICogQHBhcmFtIGdsb2JhbCAtIFRoZSBnbG9iYWwgb2JqZWN0IHRvIHVzZS4gRGVmYXVsdHMgdG8gZ2xvYmFsVGhpcywgYnV0IGNhbiBiZSBhIFZNJ3MgZ2xvYmFsLlxuICovXG5mdW5jdGlvbiBnZXRSZWdpc3RyeShnbG9iYWw6IFJlY29yZDxzdHJpbmcsIGFueT4gPSBnbG9iYWxUaGlzKTogQ2xhc3NSZWdpc3RyeSB7XG4gIGNvbnN0IGcgPSBnbG9iYWwgYXMgYW55O1xuICBsZXQgcmVnaXN0cnkgPSBnW1dPUktGTE9XX0NMQVNTX1JFR0lTVFJZXSBhcyBDbGFzc1JlZ2lzdHJ5IHwgdW5kZWZpbmVkO1xuICBpZiAoIXJlZ2lzdHJ5KSB7XG4gICAgcmVnaXN0cnkgPSBuZXcgTWFwKCk7XG4gICAgZ1tXT1JLRkxPV19DTEFTU19SRUdJU1RSWV0gPSByZWdpc3RyeTtcbiAgfVxuICByZXR1cm4gcmVnaXN0cnk7XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYSBjbGFzcyBjb25zdHJ1Y3RvciBmb3Igc2VyaWFsaXphdGlvbi5cbiAqIFRoaXMgYWxsb3dzIGNsYXNzIGNvbnN0cnVjdG9ycyB0byBiZSBkZXNlcmlhbGl6ZWQgYnkgbG9va2luZyB1cCB0aGUgY2xhc3NJZC5cbiAqXG4gKiBOb3RlOiBUaGUgU1dDIHBsdWdpbiBub3cgaW5saW5lcyBlcXVpdmFsZW50IHJlZ2lzdHJhdGlvbiBsb2dpYyBhcyBhXG4gKiBzZWxmLWNvbnRhaW5lZCBJSUZFICh1c2luZyB0aGUgc2FtZSBnbG9iYWxUaGlzIFN5bWJvbC1rZXllZCByZWdpc3RyeSksXG4gKiBzbyB0aGlzIGZ1bmN0aW9uIGlzIG5vIGxvbmdlciBpbXBvcnRlZCBieSBnZW5lcmF0ZWQgY29kZS4gSXQgaXMgcmV0YWluZWRcbiAqIGZvciBwcm9ncmFtbWF0aWMgdXNlIGFuZCB0ZXN0aW5nLlxuICpcbiAqIEFsc28gc2V0cyB0aGUgYGNsYXNzSWRgIHByb3BlcnR5IG9uIHRoZSBjbGFzcyBzbyB0aGUgc2VyaWFsaXplciBjYW4gZmluZCBpdFxuICogd2hlbiBzZXJpYWxpemluZyBpbnN0YW5jZXMgKGUuZy4sIHN0ZXAgcmV0dXJuIHZhbHVlcykuXG4gKi9cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9CYW5uZWRUeXBlczogV2UgbmVlZCB0byB1c2UgRnVuY3Rpb24gdG8gcmVwcmVzZW50IGNsYXNzIGNvbnN0cnVjdG9yc1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyU2VyaWFsaXphdGlvbkNsYXNzKGNsYXNzSWQ6IHN0cmluZywgY2xzOiBGdW5jdGlvbikge1xuICBnZXRSZWdpc3RyeSgpLnNldChjbGFzc0lkLCBjbHMpO1xuICAvLyBTZXQgY2xhc3NJZCBvbiB0aGUgY2xhc3MgZm9yIHNlcmlhbGl6YXRpb25cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNscywgJ2NsYXNzSWQnLCB7XG4gICAgdmFsdWU6IGNsYXNzSWQsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gIH0pO1xufVxuXG4vKipcbiAqIFN0YWJsZSwgd2VsbC1rbm93biByZWdpc3RyeSBpZCBmb3IgdGhlIFNESydzIGBSdW5gIGNsYXNzLlxuICpcbiAqIFRoZSBTV0MgcGx1Z2luIGF1dG8tcmVnaXN0ZXJzIGBSdW5gIHVuZGVyIGEgKnBhdGgtZGVyaXZlZCogaWQgKGUuZy5cbiAqIGBjbGFzcy8vLi9ub2RlX21vZHVsZXMvQHdvcmtmbG93L2NvcmUvZGlzdC9ydW50aW1lL3J1bi8vUnVuYCksIHdoaWNoXG4gKiB2YXJpZXMgd2l0aCB0aGUgYXBwJ3MgZGVwZW5kZW5jeSBsYXlvdXQgYW5kIGJ1bmRsZXIuIEhvc3Qtc2lkZSBjb2RlXG4gKiB0aGF0IG5lZWRzIHRvIGNvbnN0cnVjdCBgUnVuYCBpbnN0YW5jZXMgaW5zaWRlIHRoZSB3b3JrZmxvdyBWTSAoZS5nLlxuICogdGhlIGhvb2sgZXZlbnQgY29uc3VtZXIgcmVzb2x2aW5nIGBob29rLmdldENvbmZsaWN0KClgKSBjYW5ub3Qga25vd1xuICogdGhhdCBpZCBzdGF0aWNhbGx5LCBzbyB0aGUgd29ya2Zsb3ctbW9kZSBgY3JlYXRlLWhvb2tgIG1vZHVsZSBhbHNvXG4gKiBhbGlhc2VzIHRoZSBidW5kbGUncyBgUnVuYCB1bmRlciB0aGlzIHN0YWJsZSBpZCBhdCBldmFsdWF0aW9uIHRpbWUuXG4gKlxuICogVGhlIGB3b3JrZmxvd2AgcHNldWRvLXBhdGggY2Fubm90IGNvbGxpZGUgd2l0aCBwbHVnaW4tZGVyaXZlZCBpZHMsXG4gKiB3aGljaCBhbHdheXMgdXNlIHJlYWwgcmVsYXRpdmUgbW9kdWxlIHBhdGhzIChgLi/igKZgIC8gYC4uL+KApmApLlxuICovXG5leHBvcnQgY29uc3QgUlVOX0NMQVNTX0lEID0gJ2NsYXNzLy93b3JrZmxvdy8vUnVuJztcblxuLyoqXG4gKiBSZWdpc3RlciBhbiBhZGRpdGlvbmFsIHJlZ2lzdHJ5IGlkIGZvciBhIGNsYXNzIHdpdGhvdXQgdG91Y2hpbmcgaXRzXG4gKiBgY2xhc3NJZGAgcHJvcGVydHkuXG4gKlxuICogVW5saWtlIHtAbGluayByZWdpc3RlclNlcmlhbGl6YXRpb25DbGFzc30sIHRoaXMgaXMgc2FmZSB0byBjYWxsIGZvciBhXG4gKiBjbGFzcyB0aGUgU1dDIHBsdWdpbiBoYXMgYWxyZWFkeSByZWdpc3RlcmVkOiB0aGUgcGx1Z2luJ3MgaW5saW5lZCBJSUZFXG4gKiBkZWZpbmVzIGBjbGFzc0lkYCBhcyBub24tY29uZmlndXJhYmxlLCBzbyBhIHNlY29uZCBgZGVmaW5lUHJvcGVydHlgXG4gKiB3b3VsZCB0aHJvdy4gQWxpYXNpbmcgb25seSBhZGRzIGEgcmVnaXN0cnkgZW50cnkg4oCUIHRoZSBjbGFzcyBrZWVwc1xuICogc2VyaWFsaXppbmcgdW5kZXIgaXRzIHByaW1hcnkgKHBhdGgtZGVyaXZlZCkgaWQsIHdoaWxlIGxvb2t1cHMgc3VjY2VlZFxuICogdW5kZXIgYm90aC5cbiAqXG4gKiBSZWdpc3RyYXRpb24gaXMgcGVyLWdsb2JhbCBieSBjb25zdHJ1Y3Rpb246IGV2YWx1YXRlZCBpbnNpZGUgdGhlXG4gKiB3b3JrZmxvdyBWTSBpdCByZWdpc3RlcnMgdGhlIFZNJ3MgY29tcGlsZWQgY2xhc3Mgb24gdGhlIFZNJ3MgcmVnaXN0cnk7XG4gKiBldmFsdWF0ZWQgb24gdGhlIGhvc3QgaXQgcmVnaXN0ZXJzIHRoZSBob3N0IGNsYXNzIG9uIHRoZSBob3N0J3NcbiAqIHJlZ2lzdHJ5LiBFYWNoIGNvbnRleHQgcmVzb2x2ZXMgaXRzIG93biBjb3JyZWN0IHZhcmlhbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGlhc1NlcmlhbGl6YXRpb25DbGFzcyhcbiAgY2xhc3NJZDogc3RyaW5nLFxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vQmFubmVkVHlwZXM6IFdlIG5lZWQgdG8gdXNlIEZ1bmN0aW9uIHRvIHJlcHJlc2VudCBjbGFzcyBjb25zdHJ1Y3RvcnNcbiAgY2xzOiBGdW5jdGlvbixcbiAgZ2xvYmFsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gZ2xvYmFsVGhpc1xuKSB7XG4gIGdldFJlZ2lzdHJ5KGdsb2JhbCkuc2V0KGNsYXNzSWQsIGNscyk7XG59XG5cbi8qKlxuICogRmluZCBhIHJlZ2lzdGVyZWQgY2xhc3MgY29uc3RydWN0b3IgYnkgSUQgKHVzZWQgZHVyaW5nIGRlc2VyaWFsaXphdGlvbilcbiAqXG4gKiBAcGFyYW0gY2xhc3NJZCAtIFRoZSBjbGFzcyBJRCB0byBsb29rIHVwXG4gKiBAcGFyYW0gZ2xvYmFsIC0gVGhlIGdsb2JhbCBvYmplY3QgdG8gY2hlY2suIFRoaXMgZW5zdXJlcyB3b3JrZmxvdyBjb2RlIHJ1bm5pbmdcbiAqICAgICAgICAgICAgICAgICBpbiBhIFZNIG9ubHkgYWNjZXNzZXMgY2xhc3NlcyByZWdpc3RlcmVkIG9uIHRoZSBWTSdzIGdsb2JhbCxcbiAqICAgICAgICAgICAgICAgICBtYXRjaGluZyBwcm9kdWN0aW9uIHNlcnZlcmxlc3MgYmVoYXZpb3Igd2hlcmUgd29ya2Zsb3cgY29kZVxuICogICAgICAgICAgICAgICAgIHJ1bnMgaW4gaXNvbGF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VyaWFsaXphdGlvbkNsYXNzKFxuICBjbGFzc0lkOiBzdHJpbmcsXG4gIGdsb2JhbDogUmVjb3JkPHN0cmluZywgYW55PlxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vQmFubmVkVHlwZXM6IFdlIG5lZWQgdG8gdXNlIEZ1bmN0aW9uIHRvIHJlcHJlc2VudCBjbGFzcyBjb25zdHJ1Y3RvcnNcbik6IEZ1bmN0aW9uIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdldFJlZ2lzdHJ5KGdsb2JhbCkuZ2V0KGNsYXNzSWQpO1xufVxuIl19
@@ -1,12 +1,35 @@
1
- import { type RunErrorCode } from '@workflow/errors';
1
+ import { type RunErrorCode, WorkflowWorldError } from '@workflow/errors';
2
2
  /**
3
3
  * Classify an error that caused a workflow run to fail.
4
4
  *
5
5
  * After the structural separation of infrastructure vs user code error
6
6
  * handling, the only errors that reach the `run_failed` try/catch are:
7
7
  * - User code errors (throws from workflow functions, propagated step failures)
8
- * - WorkflowRuntimeError and subclasses (corrupted event log, missing
9
- * timestamps, workflow/step not registered, etc.)
8
+ * - WorkflowRuntimeError and subclasses (missing timestamps, workflow/step
9
+ * not registered, corrupted event log, etc.)
10
+ *
11
+ * Uses each subclass's `.is()` static (a name-based duck check) instead of
12
+ * a single `instanceof` check because workflows execute in a separate
13
+ * `vm` realm: the VM-context `WorkflowRuntimeError` and the host-context
14
+ * one are distinct classes, so `instanceof` returns `false` for any error
15
+ * thrown inside the workflow VM and we'd misclassify genuine runtime
16
+ * errors as user errors.
17
+ */
18
+ export declare function isWorldContractError(err: unknown): err is WorkflowWorldError;
19
+ /**
20
+ * True when an error from a world (workflow-server) call is a transient
21
+ * infrastructure failure that should be retried by redelivering the queue
22
+ * message, rather than failing the run. A fresh invocation will likely
23
+ * succeed once the backend (or the firewall in front of it) recovers.
24
+ *
25
+ * - `ThrottleError` (429): rate limited / load shed
26
+ * - `WorkflowWorldError` with `status >= 500`: server-side error
27
+ * - `WorkflowWorldError` with a retryable transport `code` (`TRANSPORT` /
28
+ * `TIMEOUT`): the request never produced a usable response
29
+ *
30
+ * Uses `.is()` name-based duck checks (not `instanceof`) for the same
31
+ * cross-`vm`-realm reason described on `classifyRunError`.
10
32
  */
33
+ export declare function isRetryableWorldError(err: unknown): boolean;
11
34
  export declare function classifyRunError(err: unknown): RunErrorCode;
12
35
  //# sourceMappingURL=classify-error.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"classify-error.d.ts","sourceRoot":"","sources":["../src/classify-error.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EAGlB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAK3D"}
1
+ {"version":3,"file":"classify-error.d.ts","sourceRoot":"","sources":["../src/classify-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,YAAY,EAMjB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAsC1B;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,kBAAkB,CAe5E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAW3D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CA0B3D"}
@@ -1,17 +1,114 @@
1
- import { RUN_ERROR_CODES, WorkflowRuntimeError, } from '@workflow/errors';
1
+ import { CorruptedEventLogError, ReplayDivergenceError, RUN_ERROR_CODES, RuntimeDecryptionError, StepNotRegisteredError, ThrottleError, WorkflowNotRegisteredError, WorkflowRuntimeError, WorkflowWorldError, } from '@workflow/errors';
2
+ const WORLD_CONTRACT_ERROR_CODES = new Set([
3
+ 'PARSE_ERROR',
4
+ 'SCHEMA_VALIDATION',
5
+ RUN_ERROR_CODES.WORLD_CONTRACT_ERROR,
6
+ ]);
7
+ /**
8
+ * `WorkflowWorldError.code` values that mark a transient transport failure
9
+ * (set by world-vercel's HTTP client): `TRANSPORT` covers an exhausted
10
+ * RetryAgent (`UND_ERR_REQ_RETRY` — e.g. the firewall in front of
11
+ * workflow-server shedding load with 429/503), a dropped socket, or a
12
+ * connect/DNS failure; `TIMEOUT` covers a request that exceeded the client
13
+ * timeout. Both are infrastructure failures a fresh invocation can recover
14
+ * from. Kept distinct from `WORLD_CONTRACT_ERROR_CODES` so a transport blip is
15
+ * never misclassified as the server returning a malformed response.
16
+ */
17
+ const RETRYABLE_WORLD_ERROR_CODES = new Set(['TRANSPORT', 'TIMEOUT']);
18
+ /**
19
+ * Set of error names that should classify as generic `RUNTIME_ERROR`. Each
20
+ * `*.is()` static does a name-based duck check, so subclassing alone is
21
+ * not enough — we have to enumerate every concrete subclass we want to
22
+ * recognize. Keep in sync with the `WorkflowRuntimeError` class hierarchy
23
+ * in `@workflow/errors`.
24
+ */
25
+ const RUNTIME_ERROR_CHECKS = [
26
+ WorkflowRuntimeError.is,
27
+ StepNotRegisteredError.is,
28
+ WorkflowNotRegisteredError.is,
29
+ // SDK-level encryption failures (most notably AES-GCM auth-tag
30
+ // mismatches surfacing as a native `OperationError` from
31
+ // `AESCipherJob.onDone`) are wrapped in `RuntimeDecryptionError` at
32
+ // the encryption module boundary.
33
+ RuntimeDecryptionError.is,
34
+ ];
2
35
  /**
3
36
  * Classify an error that caused a workflow run to fail.
4
37
  *
5
38
  * After the structural separation of infrastructure vs user code error
6
39
  * handling, the only errors that reach the `run_failed` try/catch are:
7
40
  * - User code errors (throws from workflow functions, propagated step failures)
8
- * - WorkflowRuntimeError and subclasses (corrupted event log, missing
9
- * timestamps, workflow/step not registered, etc.)
41
+ * - WorkflowRuntimeError and subclasses (missing timestamps, workflow/step
42
+ * not registered, corrupted event log, etc.)
43
+ *
44
+ * Uses each subclass's `.is()` static (a name-based duck check) instead of
45
+ * a single `instanceof` check because workflows execute in a separate
46
+ * `vm` realm: the VM-context `WorkflowRuntimeError` and the host-context
47
+ * one are distinct classes, so `instanceof` returns `false` for any error
48
+ * thrown inside the workflow VM and we'd misclassify genuine runtime
49
+ * errors as user errors.
50
+ */
51
+ export function isWorldContractError(err) {
52
+ if (!WorkflowWorldError.is(err) || err.status !== undefined) {
53
+ return false;
54
+ }
55
+ const cause = 'cause' in err ? err.cause : undefined;
56
+ return ((err.code !== undefined && WORLD_CONTRACT_ERROR_CODES.has(err.code)) ||
57
+ err.message.startsWith('Failed to parse response body for ') ||
58
+ err.message.startsWith('Schema validation failed for ') ||
59
+ (typeof cause === 'object' &&
60
+ cause !== null &&
61
+ 'name' in cause &&
62
+ cause.name === 'ZodError'));
63
+ }
64
+ /**
65
+ * True when an error from a world (workflow-server) call is a transient
66
+ * infrastructure failure that should be retried by redelivering the queue
67
+ * message, rather than failing the run. A fresh invocation will likely
68
+ * succeed once the backend (or the firewall in front of it) recovers.
69
+ *
70
+ * - `ThrottleError` (429): rate limited / load shed
71
+ * - `WorkflowWorldError` with `status >= 500`: server-side error
72
+ * - `WorkflowWorldError` with a retryable transport `code` (`TRANSPORT` /
73
+ * `TIMEOUT`): the request never produced a usable response
74
+ *
75
+ * Uses `.is()` name-based duck checks (not `instanceof`) for the same
76
+ * cross-`vm`-realm reason described on `classifyRunError`.
10
77
  */
78
+ export function isRetryableWorldError(err) {
79
+ if (ThrottleError.is(err)) {
80
+ return true;
81
+ }
82
+ if (!WorkflowWorldError.is(err)) {
83
+ return false;
84
+ }
85
+ if (err.status !== undefined && err.status >= 500) {
86
+ return true;
87
+ }
88
+ return err.code !== undefined && RETRYABLE_WORLD_ERROR_CODES.has(err.code);
89
+ }
11
90
  export function classifyRunError(err) {
12
- if (err instanceof WorkflowRuntimeError) {
13
- return RUN_ERROR_CODES.RUNTIME_ERROR;
91
+ if (ReplayDivergenceError.is(err)) {
92
+ return RUN_ERROR_CODES.REPLAY_DIVERGENCE;
93
+ }
94
+ if (CorruptedEventLogError.is(err)) {
95
+ return RUN_ERROR_CODES.CORRUPTED_EVENT_LOG;
96
+ }
97
+ // World-layer faults — both a malformed response (contract violation) and a
98
+ // transient infrastructure failure (throttle / 5xx / transport / timeout,
99
+ // e.g. a firewall challenge) — are the backend's fault, not the user's.
100
+ // Bucket them under WORLD_CONTRACT_ERROR rather than USER_ERROR so dashboards
101
+ // attribute an outage correctly. Note the retryable variants are normally
102
+ // redelivered via the queue (see `isRetryableWorldError`) and only reach this
103
+ // terminal classification if the run ultimately gives up.
104
+ if (isWorldContractError(err) || isRetryableWorldError(err)) {
105
+ return RUN_ERROR_CODES.WORLD_CONTRACT_ERROR;
106
+ }
107
+ for (const isMatch of RUNTIME_ERROR_CHECKS) {
108
+ if (isMatch(err)) {
109
+ return RUN_ERROR_CODES.RUNTIME_ERROR;
110
+ }
14
111
  }
15
112
  return RUN_ERROR_CODES.USER_ERROR;
16
113
  }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3NpZnktZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2xhc3NpZnktZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGVBQWUsRUFDZixvQkFBb0IsR0FDckIsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFZO0lBQzNDLElBQUksR0FBRyxZQUFZLG9CQUFvQixFQUFFLENBQUM7UUFDeEMsT0FBTyxlQUFlLENBQUMsYUFBYSxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxPQUFPLGVBQWUsQ0FBQyxVQUFVLENBQUM7QUFDcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgUnVuRXJyb3JDb2RlLFxuICBSVU5fRVJST1JfQ09ERVMsXG4gIFdvcmtmbG93UnVudGltZUVycm9yLFxufSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcblxuLyoqXG4gKiBDbGFzc2lmeSBhbiBlcnJvciB0aGF0IGNhdXNlZCBhIHdvcmtmbG93IHJ1biB0byBmYWlsLlxuICpcbiAqIEFmdGVyIHRoZSBzdHJ1Y3R1cmFsIHNlcGFyYXRpb24gb2YgaW5mcmFzdHJ1Y3R1cmUgdnMgdXNlciBjb2RlIGVycm9yXG4gKiBoYW5kbGluZywgdGhlIG9ubHkgZXJyb3JzIHRoYXQgcmVhY2ggdGhlIGBydW5fZmFpbGVkYCB0cnkvY2F0Y2ggYXJlOlxuICogLSBVc2VyIGNvZGUgZXJyb3JzICh0aHJvd3MgZnJvbSB3b3JrZmxvdyBmdW5jdGlvbnMsIHByb3BhZ2F0ZWQgc3RlcCBmYWlsdXJlcylcbiAqIC0gV29ya2Zsb3dSdW50aW1lRXJyb3IgYW5kIHN1YmNsYXNzZXMgKGNvcnJ1cHRlZCBldmVudCBsb2csIG1pc3NpbmdcbiAqICAgdGltZXN0YW1wcywgd29ya2Zsb3cvc3RlcCBub3QgcmVnaXN0ZXJlZCwgZXRjLilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5UnVuRXJyb3IoZXJyOiB1bmtub3duKTogUnVuRXJyb3JDb2RlIHtcbiAgaWYgKGVyciBpbnN0YW5jZW9mIFdvcmtmbG93UnVudGltZUVycm9yKSB7XG4gICAgcmV0dXJuIFJVTl9FUlJPUl9DT0RFUy5SVU5USU1FX0VSUk9SO1xuICB9XG4gIHJldHVybiBSVU5fRVJST1JfQ09ERVMuVVNFUl9FUlJPUjtcbn1cbiJdfQ==
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3NpZnktZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2xhc3NpZnktZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsZUFBZSxFQUVmLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsYUFBYSxFQUNiLDBCQUEwQixFQUMxQixvQkFBb0IsRUFDcEIsa0JBQWtCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN6QyxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLGVBQWUsQ0FBQyxvQkFBb0I7Q0FDckMsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBRXRFOzs7Ozs7R0FNRztBQUNILE1BQU0sb0JBQW9CLEdBQUc7SUFDM0Isb0JBQW9CLENBQUMsRUFBRTtJQUN2QixzQkFBc0IsQ0FBQyxFQUFFO0lBQ3pCLDBCQUEwQixDQUFDLEVBQUU7SUFDN0IsK0RBQStEO0lBQy9ELHlEQUF5RDtJQUN6RCxvRUFBb0U7SUFDcEUsa0NBQWtDO0lBQ2xDLHNCQUFzQixDQUFDLEVBQUU7Q0FDMUIsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxHQUFZO0lBQy9DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM1RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDckQsT0FBTyxDQUNMLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksMEJBQTBCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRSxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxvQ0FBb0MsQ0FBQztRQUM1RCxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQywrQkFBK0IsQ0FBQztRQUN2RCxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFDeEIsS0FBSyxLQUFLLElBQUk7WUFDZCxNQUFNLElBQUksS0FBSztZQUNmLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQzdCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxHQUFZO0lBQ2hELElBQUksYUFBYSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNoQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbEQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSwyQkFBMkIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdFLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsR0FBWTtJQUMzQyxJQUFJLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sZUFBZSxDQUFDLGlCQUFpQixDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ25DLE9BQU8sZUFBZSxDQUFDLG1CQUFtQixDQUFDO0lBQzdDLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsMEVBQTBFO0lBQzFFLHdFQUF3RTtJQUN4RSw4RUFBOEU7SUFDOUUsMEVBQTBFO0lBQzFFLDhFQUE4RTtJQUM5RSwwREFBMEQ7SUFDMUQsSUFBSSxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVELE9BQU8sZUFBZSxDQUFDLG9CQUFvQixDQUFDO0lBQzlDLENBQUM7SUFFRCxLQUFLLE1BQU0sT0FBTyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDM0MsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqQixPQUFPLGVBQWUsQ0FBQyxhQUFhLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLGVBQWUsQ0FBQyxVQUFVLENBQUM7QUFDcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvcnJ1cHRlZEV2ZW50TG9nRXJyb3IsXG4gIFJlcGxheURpdmVyZ2VuY2VFcnJvcixcbiAgUlVOX0VSUk9SX0NPREVTLFxuICB0eXBlIFJ1bkVycm9yQ29kZSxcbiAgUnVudGltZURlY3J5cHRpb25FcnJvcixcbiAgU3RlcE5vdFJlZ2lzdGVyZWRFcnJvcixcbiAgVGhyb3R0bGVFcnJvcixcbiAgV29ya2Zsb3dOb3RSZWdpc3RlcmVkRXJyb3IsXG4gIFdvcmtmbG93UnVudGltZUVycm9yLFxuICBXb3JrZmxvd1dvcmxkRXJyb3IsXG59IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuXG5jb25zdCBXT1JMRF9DT05UUkFDVF9FUlJPUl9DT0RFUyA9IG5ldyBTZXQoW1xuICAnUEFSU0VfRVJST1InLFxuICAnU0NIRU1BX1ZBTElEQVRJT04nLFxuICBSVU5fRVJST1JfQ09ERVMuV09STERfQ09OVFJBQ1RfRVJST1IsXG5dKTtcblxuLyoqXG4gKiBgV29ya2Zsb3dXb3JsZEVycm9yLmNvZGVgIHZhbHVlcyB0aGF0IG1hcmsgYSB0cmFuc2llbnQgdHJhbnNwb3J0IGZhaWx1cmVcbiAqIChzZXQgYnkgd29ybGQtdmVyY2VsJ3MgSFRUUCBjbGllbnQpOiBgVFJBTlNQT1JUYCBjb3ZlcnMgYW4gZXhoYXVzdGVkXG4gKiBSZXRyeUFnZW50IChgVU5EX0VSUl9SRVFfUkVUUllgIOKAlCBlLmcuIHRoZSBmaXJld2FsbCBpbiBmcm9udCBvZlxuICogd29ya2Zsb3ctc2VydmVyIHNoZWRkaW5nIGxvYWQgd2l0aCA0MjkvNTAzKSwgYSBkcm9wcGVkIHNvY2tldCwgb3IgYVxuICogY29ubmVjdC9ETlMgZmFpbHVyZTsgYFRJTUVPVVRgIGNvdmVycyBhIHJlcXVlc3QgdGhhdCBleGNlZWRlZCB0aGUgY2xpZW50XG4gKiB0aW1lb3V0LiBCb3RoIGFyZSBpbmZyYXN0cnVjdHVyZSBmYWlsdXJlcyBhIGZyZXNoIGludm9jYXRpb24gY2FuIHJlY292ZXJcbiAqIGZyb20uIEtlcHQgZGlzdGluY3QgZnJvbSBgV09STERfQ09OVFJBQ1RfRVJST1JfQ09ERVNgIHNvIGEgdHJhbnNwb3J0IGJsaXAgaXNcbiAqIG5ldmVyIG1pc2NsYXNzaWZpZWQgYXMgdGhlIHNlcnZlciByZXR1cm5pbmcgYSBtYWxmb3JtZWQgcmVzcG9uc2UuXG4gKi9cbmNvbnN0IFJFVFJZQUJMRV9XT1JMRF9FUlJPUl9DT0RFUyA9IG5ldyBTZXQoWydUUkFOU1BPUlQnLCAnVElNRU9VVCddKTtcblxuLyoqXG4gKiBTZXQgb2YgZXJyb3IgbmFtZXMgdGhhdCBzaG91bGQgY2xhc3NpZnkgYXMgZ2VuZXJpYyBgUlVOVElNRV9FUlJPUmAuIEVhY2hcbiAqIGAqLmlzKClgIHN0YXRpYyBkb2VzIGEgbmFtZS1iYXNlZCBkdWNrIGNoZWNrLCBzbyBzdWJjbGFzc2luZyBhbG9uZSBpc1xuICogbm90IGVub3VnaCDigJQgd2UgaGF2ZSB0byBlbnVtZXJhdGUgZXZlcnkgY29uY3JldGUgc3ViY2xhc3Mgd2Ugd2FudCB0b1xuICogcmVjb2duaXplLiBLZWVwIGluIHN5bmMgd2l0aCB0aGUgYFdvcmtmbG93UnVudGltZUVycm9yYCBjbGFzcyBoaWVyYXJjaHlcbiAqIGluIGBAd29ya2Zsb3cvZXJyb3JzYC5cbiAqL1xuY29uc3QgUlVOVElNRV9FUlJPUl9DSEVDS1MgPSBbXG4gIFdvcmtmbG93UnVudGltZUVycm9yLmlzLFxuICBTdGVwTm90UmVnaXN0ZXJlZEVycm9yLmlzLFxuICBXb3JrZmxvd05vdFJlZ2lzdGVyZWRFcnJvci5pcyxcbiAgLy8gU0RLLWxldmVsIGVuY3J5cHRpb24gZmFpbHVyZXMgKG1vc3Qgbm90YWJseSBBRVMtR0NNIGF1dGgtdGFnXG4gIC8vIG1pc21hdGNoZXMgc3VyZmFjaW5nIGFzIGEgbmF0aXZlIGBPcGVyYXRpb25FcnJvcmAgZnJvbVxuICAvLyBgQUVTQ2lwaGVySm9iLm9uRG9uZWApIGFyZSB3cmFwcGVkIGluIGBSdW50aW1lRGVjcnlwdGlvbkVycm9yYCBhdFxuICAvLyB0aGUgZW5jcnlwdGlvbiBtb2R1bGUgYm91bmRhcnkuXG4gIFJ1bnRpbWVEZWNyeXB0aW9uRXJyb3IuaXMsXG5dO1xuXG4vKipcbiAqIENsYXNzaWZ5IGFuIGVycm9yIHRoYXQgY2F1c2VkIGEgd29ya2Zsb3cgcnVuIHRvIGZhaWwuXG4gKlxuICogQWZ0ZXIgdGhlIHN0cnVjdHVyYWwgc2VwYXJhdGlvbiBvZiBpbmZyYXN0cnVjdHVyZSB2cyB1c2VyIGNvZGUgZXJyb3JcbiAqIGhhbmRsaW5nLCB0aGUgb25seSBlcnJvcnMgdGhhdCByZWFjaCB0aGUgYHJ1bl9mYWlsZWRgIHRyeS9jYXRjaCBhcmU6XG4gKiAtIFVzZXIgY29kZSBlcnJvcnMgKHRocm93cyBmcm9tIHdvcmtmbG93IGZ1bmN0aW9ucywgcHJvcGFnYXRlZCBzdGVwIGZhaWx1cmVzKVxuICogLSBXb3JrZmxvd1J1bnRpbWVFcnJvciBhbmQgc3ViY2xhc3NlcyAobWlzc2luZyB0aW1lc3RhbXBzLCB3b3JrZmxvdy9zdGVwXG4gKiAgIG5vdCByZWdpc3RlcmVkLCBjb3JydXB0ZWQgZXZlbnQgbG9nLCBldGMuKVxuICpcbiAqIFVzZXMgZWFjaCBzdWJjbGFzcydzIGAuaXMoKWAgc3RhdGljIChhIG5hbWUtYmFzZWQgZHVjayBjaGVjaykgaW5zdGVhZCBvZlxuICogYSBzaW5nbGUgYGluc3RhbmNlb2ZgIGNoZWNrIGJlY2F1c2Ugd29ya2Zsb3dzIGV4ZWN1dGUgaW4gYSBzZXBhcmF0ZVxuICogYHZtYCByZWFsbTogdGhlIFZNLWNvbnRleHQgYFdvcmtmbG93UnVudGltZUVycm9yYCBhbmQgdGhlIGhvc3QtY29udGV4dFxuICogb25lIGFyZSBkaXN0aW5jdCBjbGFzc2VzLCBzbyBgaW5zdGFuY2VvZmAgcmV0dXJucyBgZmFsc2VgIGZvciBhbnkgZXJyb3JcbiAqIHRocm93biBpbnNpZGUgdGhlIHdvcmtmbG93IFZNIGFuZCB3ZSdkIG1pc2NsYXNzaWZ5IGdlbnVpbmUgcnVudGltZVxuICogZXJyb3JzIGFzIHVzZXIgZXJyb3JzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXb3JsZENvbnRyYWN0RXJyb3IoZXJyOiB1bmtub3duKTogZXJyIGlzIFdvcmtmbG93V29ybGRFcnJvciB7XG4gIGlmICghV29ya2Zsb3dXb3JsZEVycm9yLmlzKGVycikgfHwgZXJyLnN0YXR1cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgY2F1c2UgPSAnY2F1c2UnIGluIGVyciA/IGVyci5jYXVzZSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIChcbiAgICAoZXJyLmNvZGUgIT09IHVuZGVmaW5lZCAmJiBXT1JMRF9DT05UUkFDVF9FUlJPUl9DT0RFUy5oYXMoZXJyLmNvZGUpKSB8fFxuICAgIGVyci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0ZhaWxlZCB0byBwYXJzZSByZXNwb25zZSBib2R5IGZvciAnKSB8fFxuICAgIGVyci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ1NjaGVtYSB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgJykgfHxcbiAgICAodHlwZW9mIGNhdXNlID09PSAnb2JqZWN0JyAmJlxuICAgICAgY2F1c2UgIT09IG51bGwgJiZcbiAgICAgICduYW1lJyBpbiBjYXVzZSAmJlxuICAgICAgY2F1c2UubmFtZSA9PT0gJ1pvZEVycm9yJylcbiAgKTtcbn1cblxuLyoqXG4gKiBUcnVlIHdoZW4gYW4gZXJyb3IgZnJvbSBhIHdvcmxkICh3b3JrZmxvdy1zZXJ2ZXIpIGNhbGwgaXMgYSB0cmFuc2llbnRcbiAqIGluZnJhc3RydWN0dXJlIGZhaWx1cmUgdGhhdCBzaG91bGQgYmUgcmV0cmllZCBieSByZWRlbGl2ZXJpbmcgdGhlIHF1ZXVlXG4gKiBtZXNzYWdlLCByYXRoZXIgdGhhbiBmYWlsaW5nIHRoZSBydW4uIEEgZnJlc2ggaW52b2NhdGlvbiB3aWxsIGxpa2VseVxuICogc3VjY2VlZCBvbmNlIHRoZSBiYWNrZW5kIChvciB0aGUgZmlyZXdhbGwgaW4gZnJvbnQgb2YgaXQpIHJlY292ZXJzLlxuICpcbiAqIC0gYFRocm90dGxlRXJyb3JgICg0MjkpOiByYXRlIGxpbWl0ZWQgLyBsb2FkIHNoZWRcbiAqIC0gYFdvcmtmbG93V29ybGRFcnJvcmAgd2l0aCBgc3RhdHVzID49IDUwMGA6IHNlcnZlci1zaWRlIGVycm9yXG4gKiAtIGBXb3JrZmxvd1dvcmxkRXJyb3JgIHdpdGggYSByZXRyeWFibGUgdHJhbnNwb3J0IGBjb2RlYCAoYFRSQU5TUE9SVGAgL1xuICogICBgVElNRU9VVGApOiB0aGUgcmVxdWVzdCBuZXZlciBwcm9kdWNlZCBhIHVzYWJsZSByZXNwb25zZVxuICpcbiAqIFVzZXMgYC5pcygpYCBuYW1lLWJhc2VkIGR1Y2sgY2hlY2tzIChub3QgYGluc3RhbmNlb2ZgKSBmb3IgdGhlIHNhbWVcbiAqIGNyb3NzLWB2bWAtcmVhbG0gcmVhc29uIGRlc2NyaWJlZCBvbiBgY2xhc3NpZnlSdW5FcnJvcmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JldHJ5YWJsZVdvcmxkRXJyb3IoZXJyOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmIChUaHJvdHRsZUVycm9yLmlzKGVycikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoIVdvcmtmbG93V29ybGRFcnJvci5pcyhlcnIpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChlcnIuc3RhdHVzICE9PSB1bmRlZmluZWQgJiYgZXJyLnN0YXR1cyA+PSA1MDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZXJyLmNvZGUgIT09IHVuZGVmaW5lZCAmJiBSRVRSWUFCTEVfV09STERfRVJST1JfQ09ERVMuaGFzKGVyci5jb2RlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5UnVuRXJyb3IoZXJyOiB1bmtub3duKTogUnVuRXJyb3JDb2RlIHtcbiAgaWYgKFJlcGxheURpdmVyZ2VuY2VFcnJvci5pcyhlcnIpKSB7XG4gICAgcmV0dXJuIFJVTl9FUlJPUl9DT0RFUy5SRVBMQVlfRElWRVJHRU5DRTtcbiAgfVxuXG4gIGlmIChDb3JydXB0ZWRFdmVudExvZ0Vycm9yLmlzKGVycikpIHtcbiAgICByZXR1cm4gUlVOX0VSUk9SX0NPREVTLkNPUlJVUFRFRF9FVkVOVF9MT0c7XG4gIH1cblxuICAvLyBXb3JsZC1sYXllciBmYXVsdHMg4oCUIGJvdGggYSBtYWxmb3JtZWQgcmVzcG9uc2UgKGNvbnRyYWN0IHZpb2xhdGlvbikgYW5kIGFcbiAgLy8gdHJhbnNpZW50IGluZnJhc3RydWN0dXJlIGZhaWx1cmUgKHRocm90dGxlIC8gNXh4IC8gdHJhbnNwb3J0IC8gdGltZW91dCxcbiAgLy8gZS5nLiBhIGZpcmV3YWxsIGNoYWxsZW5nZSkg4oCUIGFyZSB0aGUgYmFja2VuZCdzIGZhdWx0LCBub3QgdGhlIHVzZXIncy5cbiAgLy8gQnVja2V0IHRoZW0gdW5kZXIgV09STERfQ09OVFJBQ1RfRVJST1IgcmF0aGVyIHRoYW4gVVNFUl9FUlJPUiBzbyBkYXNoYm9hcmRzXG4gIC8vIGF0dHJpYnV0ZSBhbiBvdXRhZ2UgY29ycmVjdGx5LiBOb3RlIHRoZSByZXRyeWFibGUgdmFyaWFudHMgYXJlIG5vcm1hbGx5XG4gIC8vIHJlZGVsaXZlcmVkIHZpYSB0aGUgcXVldWUgKHNlZSBgaXNSZXRyeWFibGVXb3JsZEVycm9yYCkgYW5kIG9ubHkgcmVhY2ggdGhpc1xuICAvLyB0ZXJtaW5hbCBjbGFzc2lmaWNhdGlvbiBpZiB0aGUgcnVuIHVsdGltYXRlbHkgZ2l2ZXMgdXAuXG4gIGlmIChpc1dvcmxkQ29udHJhY3RFcnJvcihlcnIpIHx8IGlzUmV0cnlhYmxlV29ybGRFcnJvcihlcnIpKSB7XG4gICAgcmV0dXJuIFJVTl9FUlJPUl9DT0RFUy5XT1JMRF9DT05UUkFDVF9FUlJPUjtcbiAgfVxuXG4gIGZvciAoY29uc3QgaXNNYXRjaCBvZiBSVU5USU1FX0VSUk9SX0NIRUNLUykge1xuICAgIGlmIChpc01hdGNoKGVycikpIHtcbiAgICAgIHJldHVybiBSVU5fRVJST1JfQ09ERVMuUlVOVElNRV9FUlJPUjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFJVTl9FUlJPUl9DT0RFUy5VU0VSX0VSUk9SO1xufVxuIl19
@@ -0,0 +1,27 @@
1
+ import { ContextViolationError, type DocsUrl, NotInStepContextError, NotInWorkflowContextError, NotInWorkflowOrStepContextError } from './context-violation-error.js';
2
+ export { ContextViolationError, NotInStepContextError, NotInWorkflowContextError, NotInWorkflowOrStepContextError, };
3
+ /**
4
+ * Thrown when an API that MUST NOT run inside a workflow function is called
5
+ * from one (e.g. `resumeHook()`, which would cause determinism issues).
6
+ * The message names the specific workflow that made the offending call.
7
+ */
8
+ export declare class UnavailableInWorkflowContextError extends ContextViolationError {
9
+ name: string;
10
+ constructor(functionName: string, docsUrl: DocsUrl);
11
+ }
12
+ /**
13
+ * Throw a {@link NotInWorkflowContextError} whose stack trace points at the
14
+ * user code that called `stackStartFn`, not at our framework internals.
15
+ *
16
+ * Prefer this over `throw new NotInWorkflowContextError(...)` so tooling
17
+ * (Next.js error overlay, VS Code terminal linkifier, Sentry, etc.) shows
18
+ * the user's call site as the relevant frame.
19
+ */
20
+ export declare function throwNotInWorkflowContext(functionName: string, docsUrl: DocsUrl, stackStartFn: Function): never;
21
+ /** See {@link throwNotInWorkflowContext}. */
22
+ export declare function throwNotInStepContext(functionName: string, docsUrl: DocsUrl, stackStartFn: Function): never;
23
+ /** See {@link throwNotInWorkflowContext}. */
24
+ export declare function throwNotInWorkflowOrStepContext(functionName: string, docsUrl: DocsUrl, stackStartFn: Function): never;
25
+ /** See {@link throwNotInWorkflowContext}. */
26
+ export declare function throwUnavailableInWorkflowContext(functionName: string, docsUrl: DocsUrl, stackStartFn: Function): never;
27
+ //# sourceMappingURL=context-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-errors.d.ts","sourceRoot":"","sources":["../src/context-errors.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EAErB,KAAK,OAAO,EACZ,qBAAqB,EACrB,yBAAyB,EACzB,+BAA+B,EAChC,MAAM,8BAA8B,CAAC;AAUtC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,+BAA+B,GAChC,CAAC;AAEF;;;;GAIG;AACH,qBAAa,iCAAkC,SAAQ,qBAAqB;IAC1E,IAAI,SAAuC;gBAE/B,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CAgDnD;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,EAEhB,YAAY,EAAE,QAAQ,GACrB,KAAK,CAIP;AAED,6CAA6C;AAC7C,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,EAEhB,YAAY,EAAE,QAAQ,GACrB,KAAK,CAIP;AAED,6CAA6C;AAC7C,wBAAgB,+BAA+B,CAC7C,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,EAEhB,YAAY,EAAE,QAAQ,GACrB,KAAK,CAIP;AAED,6CAA6C;AAC7C,wBAAgB,iCAAiC,CAC/C,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,EAEhB,YAAY,EAAE,QAAQ,GACrB,KAAK,CAIP"}