@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,101 @@
1
+ import { redirectStackToCaller } from './capture-stack.js';
2
+ import { ContextViolationError, NotInStepContextError, NotInWorkflowContextError, NotInWorkflowOrStepContextError, } from './context-violation-error.js';
3
+ import { WORKFLOW_CONTEXT_SYMBOL, } from './workflow/get-workflow-metadata.js';
4
+ // Re-export the structural base + subclasses so the public surface is a
5
+ // single import point. The base + simpler subclasses live in
6
+ // `context-violation-error.ts` because `get-workflow-metadata.ts` needs to
7
+ // throw one without creating an import cycle with this file.
8
+ export { ContextViolationError, NotInStepContextError, NotInWorkflowContextError, NotInWorkflowOrStepContextError, };
9
+ /**
10
+ * Thrown when an API that MUST NOT run inside a workflow function is called
11
+ * from one (e.g. `resumeHook()`, which would cause determinism issues).
12
+ * The message names the specific workflow that made the offending call.
13
+ */
14
+ export class UnavailableInWorkflowContextError extends ContextViolationError {
15
+ name = 'UnavailableInWorkflowContextError';
16
+ constructor(functionName, docsUrl) {
17
+ const ctx = globalThis[WORKFLOW_CONTEXT_SYMBOL];
18
+ const workflowName = ctx?.workflowName;
19
+ // Apply dim styling to `workflow/` / `step/` prefixes in the qualified
20
+ // name so the part the user named stands out.
21
+ const nameSegs = (() => {
22
+ if (!workflowName)
23
+ return null;
24
+ const m = workflowName.match(/^(workflow\/|step\/)(.*)$/);
25
+ if (m)
26
+ return [{ dim: m[1] }, { text: m[2] }];
27
+ return [{ text: workflowName }];
28
+ })();
29
+ const contextLine = nameSegs
30
+ ? {
31
+ type: 'plain',
32
+ segments: [
33
+ { text: 'this call was made from the ' },
34
+ ...nameSegs,
35
+ { text: ' workflow context.' },
36
+ ],
37
+ }
38
+ : {
39
+ type: 'plain',
40
+ segments: [{ text: 'this call was made from a workflow context.' }],
41
+ };
42
+ super({
43
+ title: [
44
+ { code: functionName },
45
+ { text: ' cannot be called from a workflow context.' },
46
+ ],
47
+ details: [
48
+ {
49
+ type: 'plain',
50
+ segments: [
51
+ {
52
+ text: 'calling this in a workflow context can cause determinism issues.',
53
+ },
54
+ ],
55
+ },
56
+ contextLine,
57
+ { type: 'docs', url: docsUrl },
58
+ ],
59
+ });
60
+ }
61
+ }
62
+ /**
63
+ * Throw a {@link NotInWorkflowContextError} whose stack trace points at the
64
+ * user code that called `stackStartFn`, not at our framework internals.
65
+ *
66
+ * Prefer this over `throw new NotInWorkflowContextError(...)` so tooling
67
+ * (Next.js error overlay, VS Code terminal linkifier, Sentry, etc.) shows
68
+ * the user's call site as the relevant frame.
69
+ */
70
+ export function throwNotInWorkflowContext(functionName, docsUrl,
71
+ // biome-ignore lint/complexity/noBannedTypes: matches Error.captureStackTrace
72
+ stackStartFn) {
73
+ const err = new NotInWorkflowContextError(functionName, docsUrl);
74
+ redirectStackToCaller(err, stackStartFn);
75
+ throw err;
76
+ }
77
+ /** See {@link throwNotInWorkflowContext}. */
78
+ export function throwNotInStepContext(functionName, docsUrl,
79
+ // biome-ignore lint/complexity/noBannedTypes: matches Error.captureStackTrace
80
+ stackStartFn) {
81
+ const err = new NotInStepContextError(functionName, docsUrl);
82
+ redirectStackToCaller(err, stackStartFn);
83
+ throw err;
84
+ }
85
+ /** See {@link throwNotInWorkflowContext}. */
86
+ export function throwNotInWorkflowOrStepContext(functionName, docsUrl,
87
+ // biome-ignore lint/complexity/noBannedTypes: matches Error.captureStackTrace
88
+ stackStartFn) {
89
+ const err = new NotInWorkflowOrStepContextError(functionName, docsUrl);
90
+ redirectStackToCaller(err, stackStartFn);
91
+ throw err;
92
+ }
93
+ /** See {@link throwNotInWorkflowContext}. */
94
+ export function throwUnavailableInWorkflowContext(functionName, docsUrl,
95
+ // biome-ignore lint/complexity/noBannedTypes: matches Error.captureStackTrace
96
+ stackStartFn) {
97
+ const err = new UnavailableInWorkflowContextError(functionName, docsUrl);
98
+ redirectStackToCaller(err, stackStartFn);
99
+ throw err;
100
+ }
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1lcnJvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29udGV4dC1lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0QsT0FBTyxFQUNMLHFCQUFxQixFQUdyQixxQkFBcUIsRUFDckIseUJBQXlCLEVBQ3pCLCtCQUErQixHQUNoQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFDTCx1QkFBdUIsR0FFeEIsTUFBTSxxQ0FBcUMsQ0FBQztBQUU3Qyx3RUFBd0U7QUFDeEUsNkRBQTZEO0FBQzdELDJFQUEyRTtBQUMzRSw2REFBNkQ7QUFDN0QsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIseUJBQXlCLEVBQ3pCLCtCQUErQixHQUNoQyxDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxpQ0FBa0MsU0FBUSxxQkFBcUI7SUFDMUUsSUFBSSxHQUFHLG1DQUFtQyxDQUFDO0lBRTNDLFlBQVksWUFBb0IsRUFBRSxPQUFnQjtRQUNoRCxNQUFNLEdBQUcsR0FBSSxVQUFrQixDQUFDLHVCQUF1QixDQUUxQyxDQUFDO1FBQ2QsTUFBTSxZQUFZLEdBQUcsR0FBRyxFQUFFLFlBQVksQ0FBQztRQUV2Qyx1RUFBdUU7UUFDdkUsOENBQThDO1FBQzlDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxZQUFZO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUM7Z0JBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFVLENBQUM7WUFDdkQsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFVLENBQUM7UUFDM0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVMLE1BQU0sV0FBVyxHQUFXLFFBQVE7WUFDbEMsQ0FBQyxDQUFDO2dCQUNFLElBQUksRUFBRSxPQUFPO2dCQUNiLFFBQVEsRUFBRTtvQkFDUixFQUFFLElBQUksRUFBRSw4QkFBOEIsRUFBRTtvQkFDeEMsR0FBRyxRQUFRO29CQUNYLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFO2lCQUMvQjthQUNGO1lBQ0gsQ0FBQyxDQUFDO2dCQUNFLElBQUksRUFBRSxPQUFPO2dCQUNiLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLDZDQUE2QyxFQUFFLENBQUM7YUFDcEUsQ0FBQztRQUVOLEtBQUssQ0FBQztZQUNKLEtBQUssRUFBRTtnQkFDTCxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBQ3RCLEVBQUUsSUFBSSxFQUFFLDRDQUE0QyxFQUFFO2FBQ3ZEO1lBQ0QsT0FBTyxFQUFFO2dCQUNQO29CQUNFLElBQUksRUFBRSxPQUFPO29CQUNiLFFBQVEsRUFBRTt3QkFDUjs0QkFDRSxJQUFJLEVBQUUsa0VBQWtFO3lCQUN6RTtxQkFDRjtpQkFDRjtnQkFDRCxXQUFXO2dCQUNYLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFO2FBQy9CO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsWUFBb0IsRUFDcEIsT0FBZ0I7QUFDaEIsOEVBQThFO0FBQzlFLFlBQXNCO0lBRXRCLE1BQU0sR0FBRyxHQUFHLElBQUkseUJBQXlCLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pFLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN6QyxNQUFNLEdBQUcsQ0FBQztBQUNaLENBQUM7QUFFRCw2Q0FBNkM7QUFDN0MsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxZQUFvQixFQUNwQixPQUFnQjtBQUNoQiw4RUFBOEU7QUFDOUUsWUFBc0I7SUFFdEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0QscUJBQXFCLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sR0FBRyxDQUFDO0FBQ1osQ0FBQztBQUVELDZDQUE2QztBQUM3QyxNQUFNLFVBQVUsK0JBQStCLENBQzdDLFlBQW9CLEVBQ3BCLE9BQWdCO0FBQ2hCLDhFQUE4RTtBQUM5RSxZQUFzQjtJQUV0QixNQUFNLEdBQUcsR0FBRyxJQUFJLCtCQUErQixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2RSxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDekMsTUFBTSxHQUFHLENBQUM7QUFDWixDQUFDO0FBRUQsNkNBQTZDO0FBQzdDLE1BQU0sVUFBVSxpQ0FBaUMsQ0FDL0MsWUFBb0IsRUFDcEIsT0FBZ0I7QUFDaEIsOEVBQThFO0FBQzlFLFlBQXNCO0lBRXRCLE1BQU0sR0FBRyxHQUFHLElBQUksaUNBQWlDLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pFLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN6QyxNQUFNLEdBQUcsQ0FBQztBQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWRpcmVjdFN0YWNrVG9DYWxsZXIgfSBmcm9tICcuL2NhcHR1cmUtc3RhY2suanMnO1xuaW1wb3J0IHtcbiAgQ29udGV4dFZpb2xhdGlvbkVycm9yLFxuICB0eXBlIERldGFpbCxcbiAgdHlwZSBEb2NzVXJsLFxuICBOb3RJblN0ZXBDb250ZXh0RXJyb3IsXG4gIE5vdEluV29ya2Zsb3dDb250ZXh0RXJyb3IsXG4gIE5vdEluV29ya2Zsb3dPclN0ZXBDb250ZXh0RXJyb3IsXG59IGZyb20gJy4vY29udGV4dC12aW9sYXRpb24tZXJyb3IuanMnO1xuaW1wb3J0IHtcbiAgV09SS0ZMT1dfQ09OVEVYVF9TWU1CT0wsXG4gIHR5cGUgV29ya2Zsb3dNZXRhZGF0YSxcbn0gZnJvbSAnLi93b3JrZmxvdy9nZXQtd29ya2Zsb3ctbWV0YWRhdGEuanMnO1xuXG4vLyBSZS1leHBvcnQgdGhlIHN0cnVjdHVyYWwgYmFzZSArIHN1YmNsYXNzZXMgc28gdGhlIHB1YmxpYyBzdXJmYWNlIGlzIGFcbi8vIHNpbmdsZSBpbXBvcnQgcG9pbnQuIFRoZSBiYXNlICsgc2ltcGxlciBzdWJjbGFzc2VzIGxpdmUgaW5cbi8vIGBjb250ZXh0LXZpb2xhdGlvbi1lcnJvci50c2AgYmVjYXVzZSBgZ2V0LXdvcmtmbG93LW1ldGFkYXRhLnRzYCBuZWVkcyB0b1xuLy8gdGhyb3cgb25lIHdpdGhvdXQgY3JlYXRpbmcgYW4gaW1wb3J0IGN5Y2xlIHdpdGggdGhpcyBmaWxlLlxuZXhwb3J0IHtcbiAgQ29udGV4dFZpb2xhdGlvbkVycm9yLFxuICBOb3RJblN0ZXBDb250ZXh0RXJyb3IsXG4gIE5vdEluV29ya2Zsb3dDb250ZXh0RXJyb3IsXG4gIE5vdEluV29ya2Zsb3dPclN0ZXBDb250ZXh0RXJyb3IsXG59O1xuXG4vKipcbiAqIFRocm93biB3aGVuIGFuIEFQSSB0aGF0IE1VU1QgTk9UIHJ1biBpbnNpZGUgYSB3b3JrZmxvdyBmdW5jdGlvbiBpcyBjYWxsZWRcbiAqIGZyb20gb25lIChlLmcuIGByZXN1bWVIb29rKClgLCB3aGljaCB3b3VsZCBjYXVzZSBkZXRlcm1pbmlzbSBpc3N1ZXMpLlxuICogVGhlIG1lc3NhZ2UgbmFtZXMgdGhlIHNwZWNpZmljIHdvcmtmbG93IHRoYXQgbWFkZSB0aGUgb2ZmZW5kaW5nIGNhbGwuXG4gKi9cbmV4cG9ydCBjbGFzcyBVbmF2YWlsYWJsZUluV29ya2Zsb3dDb250ZXh0RXJyb3IgZXh0ZW5kcyBDb250ZXh0VmlvbGF0aW9uRXJyb3Ige1xuICBuYW1lID0gJ1VuYXZhaWxhYmxlSW5Xb3JrZmxvd0NvbnRleHRFcnJvcic7XG5cbiAgY29uc3RydWN0b3IoZnVuY3Rpb25OYW1lOiBzdHJpbmcsIGRvY3NVcmw6IERvY3NVcmwpIHtcbiAgICBjb25zdCBjdHggPSAoZ2xvYmFsVGhpcyBhcyBhbnkpW1dPUktGTE9XX0NPTlRFWFRfU1lNQk9MXSBhc1xuICAgICAgfCBXb3JrZmxvd01ldGFkYXRhXG4gICAgICB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB3b3JrZmxvd05hbWUgPSBjdHg/LndvcmtmbG93TmFtZTtcblxuICAgIC8vIEFwcGx5IGRpbSBzdHlsaW5nIHRvIGB3b3JrZmxvdy9gIC8gYHN0ZXAvYCBwcmVmaXhlcyBpbiB0aGUgcXVhbGlmaWVkXG4gICAgLy8gbmFtZSBzbyB0aGUgcGFydCB0aGUgdXNlciBuYW1lZCBzdGFuZHMgb3V0LlxuICAgIGNvbnN0IG5hbWVTZWdzID0gKCgpID0+IHtcbiAgICAgIGlmICghd29ya2Zsb3dOYW1lKSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IG0gPSB3b3JrZmxvd05hbWUubWF0Y2goL14od29ya2Zsb3dcXC98c3RlcFxcLykoLiopJC8pO1xuICAgICAgaWYgKG0pIHJldHVybiBbeyBkaW06IG1bMV0gfSwgeyB0ZXh0OiBtWzJdIH1dIGFzIGNvbnN0O1xuICAgICAgcmV0dXJuIFt7IHRleHQ6IHdvcmtmbG93TmFtZSB9XSBhcyBjb25zdDtcbiAgICB9KSgpO1xuXG4gICAgY29uc3QgY29udGV4dExpbmU6IERldGFpbCA9IG5hbWVTZWdzXG4gICAgICA/IHtcbiAgICAgICAgICB0eXBlOiAncGxhaW4nLFxuICAgICAgICAgIHNlZ21lbnRzOiBbXG4gICAgICAgICAgICB7IHRleHQ6ICd0aGlzIGNhbGwgd2FzIG1hZGUgZnJvbSB0aGUgJyB9LFxuICAgICAgICAgICAgLi4ubmFtZVNlZ3MsXG4gICAgICAgICAgICB7IHRleHQ6ICcgd29ya2Zsb3cgY29udGV4dC4nIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgdHlwZTogJ3BsYWluJyxcbiAgICAgICAgICBzZWdtZW50czogW3sgdGV4dDogJ3RoaXMgY2FsbCB3YXMgbWFkZSBmcm9tIGEgd29ya2Zsb3cgY29udGV4dC4nIH1dLFxuICAgICAgICB9O1xuXG4gICAgc3VwZXIoe1xuICAgICAgdGl0bGU6IFtcbiAgICAgICAgeyBjb2RlOiBmdW5jdGlvbk5hbWUgfSxcbiAgICAgICAgeyB0ZXh0OiAnIGNhbm5vdCBiZSBjYWxsZWQgZnJvbSBhIHdvcmtmbG93IGNvbnRleHQuJyB9LFxuICAgICAgXSxcbiAgICAgIGRldGFpbHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdwbGFpbicsXG4gICAgICAgICAgc2VnbWVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGV4dDogJ2NhbGxpbmcgdGhpcyBpbiBhIHdvcmtmbG93IGNvbnRleHQgY2FuIGNhdXNlIGRldGVybWluaXNtIGlzc3Vlcy4nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBjb250ZXh0TGluZSxcbiAgICAgICAgeyB0eXBlOiAnZG9jcycsIHVybDogZG9jc1VybCB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93IGEge0BsaW5rIE5vdEluV29ya2Zsb3dDb250ZXh0RXJyb3J9IHdob3NlIHN0YWNrIHRyYWNlIHBvaW50cyBhdCB0aGVcbiAqIHVzZXIgY29kZSB0aGF0IGNhbGxlZCBgc3RhY2tTdGFydEZuYCwgbm90IGF0IG91ciBmcmFtZXdvcmsgaW50ZXJuYWxzLlxuICpcbiAqIFByZWZlciB0aGlzIG92ZXIgYHRocm93IG5ldyBOb3RJbldvcmtmbG93Q29udGV4dEVycm9yKC4uLilgIHNvIHRvb2xpbmdcbiAqIChOZXh0LmpzIGVycm9yIG92ZXJsYXksIFZTIENvZGUgdGVybWluYWwgbGlua2lmaWVyLCBTZW50cnksIGV0Yy4pIHNob3dzXG4gKiB0aGUgdXNlcidzIGNhbGwgc2l0ZSBhcyB0aGUgcmVsZXZhbnQgZnJhbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd05vdEluV29ya2Zsb3dDb250ZXh0KFxuICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgZG9jc1VybDogRG9jc1VybCxcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0Jhbm5lZFR5cGVzOiBtYXRjaGVzIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlXG4gIHN0YWNrU3RhcnRGbjogRnVuY3Rpb25cbik6IG5ldmVyIHtcbiAgY29uc3QgZXJyID0gbmV3IE5vdEluV29ya2Zsb3dDb250ZXh0RXJyb3IoZnVuY3Rpb25OYW1lLCBkb2NzVXJsKTtcbiAgcmVkaXJlY3RTdGFja1RvQ2FsbGVyKGVyciwgc3RhY2tTdGFydEZuKTtcbiAgdGhyb3cgZXJyO1xufVxuXG4vKiogU2VlIHtAbGluayB0aHJvd05vdEluV29ya2Zsb3dDb250ZXh0fS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd05vdEluU3RlcENvbnRleHQoXG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICBkb2NzVXJsOiBEb2NzVXJsLFxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vQmFubmVkVHlwZXM6IG1hdGNoZXMgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2VcbiAgc3RhY2tTdGFydEZuOiBGdW5jdGlvblxuKTogbmV2ZXIge1xuICBjb25zdCBlcnIgPSBuZXcgTm90SW5TdGVwQ29udGV4dEVycm9yKGZ1bmN0aW9uTmFtZSwgZG9jc1VybCk7XG4gIHJlZGlyZWN0U3RhY2tUb0NhbGxlcihlcnIsIHN0YWNrU3RhcnRGbik7XG4gIHRocm93IGVycjtcbn1cblxuLyoqIFNlZSB7QGxpbmsgdGhyb3dOb3RJbldvcmtmbG93Q29udGV4dH0uICovXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dChcbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gIGRvY3NVcmw6IERvY3NVcmwsXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9CYW5uZWRUeXBlczogbWF0Y2hlcyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZVxuICBzdGFja1N0YXJ0Rm46IEZ1bmN0aW9uXG4pOiBuZXZlciB7XG4gIGNvbnN0IGVyciA9IG5ldyBOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dEVycm9yKGZ1bmN0aW9uTmFtZSwgZG9jc1VybCk7XG4gIHJlZGlyZWN0U3RhY2tUb0NhbGxlcihlcnIsIHN0YWNrU3RhcnRGbik7XG4gIHRocm93IGVycjtcbn1cblxuLyoqIFNlZSB7QGxpbmsgdGhyb3dOb3RJbldvcmtmbG93Q29udGV4dH0uICovXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dVbmF2YWlsYWJsZUluV29ya2Zsb3dDb250ZXh0KFxuICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgZG9jc1VybDogRG9jc1VybCxcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0Jhbm5lZFR5cGVzOiBtYXRjaGVzIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlXG4gIHN0YWNrU3RhcnRGbjogRnVuY3Rpb25cbik6IG5ldmVyIHtcbiAgY29uc3QgZXJyID0gbmV3IFVuYXZhaWxhYmxlSW5Xb3JrZmxvd0NvbnRleHRFcnJvcihmdW5jdGlvbk5hbWUsIGRvY3NVcmwpO1xuICByZWRpcmVjdFN0YWNrVG9DYWxsZXIoZXJyLCBzdGFja1N0YXJ0Rm4pO1xuICB0aHJvdyBlcnI7XG59XG4iXX0=
@@ -0,0 +1,97 @@
1
+ /**
2
+ * A `docs:` line URL. The leading protocol is part of the type so call sites
3
+ * can't accidentally pass a protocol-relative or bare path.
4
+ */
5
+ export type DocsUrl = `https://${string}`;
6
+ declare const INSPECT_CUSTOM: unique symbol;
7
+ /**
8
+ * Structured data for a framed error. The base class takes this and renders
9
+ * it to plain text (for `.message` / `.stack` / structured logs) or to an
10
+ * ANSI-framed string (for terminal display via `util.inspect` / `toString`).
11
+ *
12
+ * Keeping the pieces structured means we never have to strip ANSI back out
13
+ * once it's in the message — we just don't put it there in the first place.
14
+ */
15
+ export interface FramedContent {
16
+ /** Headline. `{ code: 'foo()' }` segments render as backticked inline code. */
17
+ readonly title: readonly Segment[];
18
+ /** One framed branch per entry. The last uses `╰▶`, others use `├▶`. */
19
+ readonly details: readonly Detail[];
20
+ }
21
+ export type Segment = {
22
+ readonly text: string;
23
+ } | {
24
+ readonly code: string;
25
+ } | {
26
+ readonly dim: string;
27
+ };
28
+ export type Detail = {
29
+ readonly type: 'plain';
30
+ readonly segments: readonly Segment[];
31
+ } | {
32
+ readonly type: 'docs';
33
+ readonly url: DocsUrl;
34
+ };
35
+ export declare function renderPlain(c: FramedContent): string;
36
+ export declare function renderPretty(c: FramedContent): string;
37
+ /**
38
+ * Base class for structured context-violation errors.
39
+ *
40
+ * Design notes:
41
+ *
42
+ * - `.message` is **plain text** (no ANSI escape bytes). Structured logs,
43
+ * log drains, CBOR-serialized event data, and anything else that reads
44
+ * `err.message` / `err.stack` as a string gets clean output — no mojibake
45
+ * in JSON, no `\x1B[...m` noise in Vercel logs.
46
+ *
47
+ * - The ANSI-framed version is rendered **lazily** via `toString()` and
48
+ * `[util.inspect.custom]`. When the error is thrown and Node prints it
49
+ * via `util.inspect`, the user sees the colored, framed box. When it's
50
+ * attached to a structured log field, the consumer sees plain text.
51
+ *
52
+ * - `fatal = true` marks these as non-retryable. Calling `createHook()`
53
+ * from a step function will never succeed no matter how many retries —
54
+ * burning attempts just produces duplicated log output. The runtime's
55
+ * `FatalError.is(err)` gate recognizes any error with `fatal: true`.
56
+ */
57
+ export declare abstract class ContextViolationError extends Error {
58
+ #private;
59
+ /** Non-retryable — see class doc. */
60
+ readonly fatal = true;
61
+ constructor(content: FramedContent);
62
+ /**
63
+ * `console.log(err)` and most Node internals route through `util.inspect`,
64
+ * which respects this symbol. Returning a custom string here means the
65
+ * thrown error prints as a pretty frame in the terminal while `.message`
66
+ * and `.stack` stay plain.
67
+ */
68
+ [INSPECT_CUSTOM](): string;
69
+ toString(): string;
70
+ }
71
+ /**
72
+ * Thrown when an API that must run inside a workflow function is called
73
+ * from outside a workflow context (e.g. from a step function or from
74
+ * regular application code).
75
+ */
76
+ export declare class NotInWorkflowContextError extends ContextViolationError {
77
+ name: string;
78
+ constructor(functionName: string, docsUrl: DocsUrl);
79
+ }
80
+ /**
81
+ * Thrown when an API that must run inside a step function is called from
82
+ * outside a step context.
83
+ */
84
+ export declare class NotInStepContextError extends ContextViolationError {
85
+ name: string;
86
+ constructor(functionName: string, docsUrl: DocsUrl);
87
+ }
88
+ /**
89
+ * Thrown when an API that must run inside either a workflow or step function
90
+ * is called from regular application code.
91
+ */
92
+ export declare class NotInWorkflowOrStepContextError extends ContextViolationError {
93
+ name: string;
94
+ constructor(functionName: string, docsUrl: DocsUrl);
95
+ }
96
+ export {};
97
+ //# sourceMappingURL=context-violation-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-violation-error.d.ts","sourceRoot":"","sources":["../src/context-violation-error.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG,WAAW,MAAM,EAAE,CAAC;AAE1C,QAAA,MAAM,cAAc,eAA2C,CAAC;AAEhE;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IACnC,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,MAAM,OAAO,GACf;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7B,MAAM,MAAM,MAAM,GACd;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,GACjE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CAAC;AAwBrD,wBAAgB,WAAW,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAapD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAGrD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,8BAAsB,qBAAsB,SAAQ,KAAK;;IACvD,qCAAqC;IACrC,QAAQ,CAAC,KAAK,QAAQ;gBAIV,OAAO,EAAE,aAAa;IAKlC;;;;;OAKG;IACH,CAAC,cAAc,CAAC,IAAI,MAAM;IAgB1B,QAAQ,IAAI,MAAM;CAGnB;AAED;;;;GAIG;AACH,qBAAa,yBAA0B,SAAQ,qBAAqB;IAClE,IAAI,SAA+B;gBAEvB,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CASnD;AAED;;;GAGG;AACH,qBAAa,qBAAsB,SAAQ,qBAAqB;IAC9D,IAAI,SAA2B;gBAEnB,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CASnD;AAED;;;GAGG;AACH,qBAAa,+BAAgC,SAAQ,qBAAqB;IACxE,IAAI,SAAqC;gBAE7B,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CASnD"}
@@ -0,0 +1,147 @@
1
+ import * as Ansi from '@workflow/errors/ansi';
2
+ const INSPECT_CUSTOM = Symbol.for('nodejs.util.inspect.custom');
3
+ function renderSegmentPlain(s) {
4
+ if ('code' in s)
5
+ return `\`${s.code}\``;
6
+ if ('dim' in s)
7
+ return s.dim;
8
+ return s.text;
9
+ }
10
+ function renderSegmentPretty(s) {
11
+ if ('code' in s)
12
+ return Ansi.code(s.code);
13
+ if ('dim' in s)
14
+ return Ansi.dim(s.dim);
15
+ return s.text;
16
+ }
17
+ function renderDetailPlain(d) {
18
+ if (d.type === 'docs')
19
+ return `docs: ${d.url}`;
20
+ return d.segments.map(renderSegmentPlain).join('');
21
+ }
22
+ function renderDetailPretty(d) {
23
+ if (d.type === 'docs')
24
+ return Ansi.docs(d.url);
25
+ return d.segments.map(renderSegmentPretty).join('');
26
+ }
27
+ export function renderPlain(c) {
28
+ // Mimic `Ansi.frame` structure so `.message` is still readable in logs
29
+ // even without the color.
30
+ const title = c.title.map(renderSegmentPlain).join('');
31
+ const lines = [title];
32
+ c.details.forEach((detail, index) => {
33
+ const isLast = index === c.details.length - 1;
34
+ const first = isLast ? '╰▶ ' : '├▶ ';
35
+ const cont = isLast ? ' ' : '│ ';
36
+ const raw = renderDetailPlain(detail).split('\n');
37
+ raw.forEach((line, i) => lines.push(`${i === 0 ? first : cont}${line}`));
38
+ });
39
+ return lines.join('\n');
40
+ }
41
+ export function renderPretty(c) {
42
+ const title = c.title.map(renderSegmentPretty).join('');
43
+ return Ansi.frame(title, c.details.map(renderDetailPretty));
44
+ }
45
+ /**
46
+ * Base class for structured context-violation errors.
47
+ *
48
+ * Design notes:
49
+ *
50
+ * - `.message` is **plain text** (no ANSI escape bytes). Structured logs,
51
+ * log drains, CBOR-serialized event data, and anything else that reads
52
+ * `err.message` / `err.stack` as a string gets clean output — no mojibake
53
+ * in JSON, no `\x1B[...m` noise in Vercel logs.
54
+ *
55
+ * - The ANSI-framed version is rendered **lazily** via `toString()` and
56
+ * `[util.inspect.custom]`. When the error is thrown and Node prints it
57
+ * via `util.inspect`, the user sees the colored, framed box. When it's
58
+ * attached to a structured log field, the consumer sees plain text.
59
+ *
60
+ * - `fatal = true` marks these as non-retryable. Calling `createHook()`
61
+ * from a step function will never succeed no matter how many retries —
62
+ * burning attempts just produces duplicated log output. The runtime's
63
+ * `FatalError.is(err)` gate recognizes any error with `fatal: true`.
64
+ */
65
+ export class ContextViolationError extends Error {
66
+ /** Non-retryable — see class doc. */
67
+ fatal = true;
68
+ #content;
69
+ constructor(content) {
70
+ super(renderPlain(content));
71
+ this.#content = content;
72
+ }
73
+ /**
74
+ * `console.log(err)` and most Node internals route through `util.inspect`,
75
+ * which respects this symbol. Returning a custom string here means the
76
+ * thrown error prints as a pretty frame in the terminal while `.message`
77
+ * and `.stack` stay plain.
78
+ */
79
+ [INSPECT_CUSTOM]() {
80
+ const pretty = renderPretty(this.#content);
81
+ // `stack` starts with `${name}: ${message}\n at ...`. Our message is
82
+ // multi-line (`title\n╰▶ docs: …`), so slicing only the first line glues
83
+ // the framed-detail tail of the message onto the prepended pretty form
84
+ // and renders every detail line twice. Slice past *all* message lines.
85
+ const messageLineCount = this.message.split('\n').length;
86
+ const tail = (this.stack ?? '')
87
+ .split('\n')
88
+ .slice(messageLineCount)
89
+ .join('\n');
90
+ return tail
91
+ ? `${this.name}: ${pretty}\n${tail}`
92
+ : `${this.name}: ${pretty}`;
93
+ }
94
+ toString() {
95
+ return `${this.name}: ${renderPretty(this.#content)}`;
96
+ }
97
+ }
98
+ /**
99
+ * Thrown when an API that must run inside a workflow function is called
100
+ * from outside a workflow context (e.g. from a step function or from
101
+ * regular application code).
102
+ */
103
+ export class NotInWorkflowContextError extends ContextViolationError {
104
+ name = 'NotInWorkflowContextError';
105
+ constructor(functionName, docsUrl) {
106
+ super({
107
+ title: [
108
+ { code: functionName },
109
+ { text: ' can only be called inside a workflow function' },
110
+ ],
111
+ details: [{ type: 'docs', url: docsUrl }],
112
+ });
113
+ }
114
+ }
115
+ /**
116
+ * Thrown when an API that must run inside a step function is called from
117
+ * outside a step context.
118
+ */
119
+ export class NotInStepContextError extends ContextViolationError {
120
+ name = 'NotInStepContextError';
121
+ constructor(functionName, docsUrl) {
122
+ super({
123
+ title: [
124
+ { code: functionName },
125
+ { text: ' can only be called inside a step function' },
126
+ ],
127
+ details: [{ type: 'docs', url: docsUrl }],
128
+ });
129
+ }
130
+ }
131
+ /**
132
+ * Thrown when an API that must run inside either a workflow or step function
133
+ * is called from regular application code.
134
+ */
135
+ export class NotInWorkflowOrStepContextError extends ContextViolationError {
136
+ name = 'NotInWorkflowOrStepContextError';
137
+ constructor(functionName, docsUrl) {
138
+ super({
139
+ title: [
140
+ { code: functionName },
141
+ { text: ' can only be called inside a workflow or step function' },
142
+ ],
143
+ details: [{ type: 'docs', url: docsUrl }],
144
+ });
145
+ }
146
+ }
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC12aW9sYXRpb24tZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29udGV4dC12aW9sYXRpb24tZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLElBQUksTUFBTSx1QkFBdUIsQ0FBQztBQVE5QyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7QUEwQmhFLFNBQVMsa0JBQWtCLENBQUMsQ0FBVTtJQUNwQyxJQUFJLE1BQU0sSUFBSSxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUN4QyxJQUFJLEtBQUssSUFBSSxDQUFDO1FBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQzdCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxDQUFVO0lBQ3JDLElBQUksTUFBTSxJQUFJLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLElBQUksS0FBSyxJQUFJLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxDQUFTO0lBQ2xDLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNO1FBQUUsT0FBTyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUMvQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLENBQVM7SUFDbkMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU07UUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsQ0FBZ0I7SUFDMUMsdUVBQXVFO0lBQ3ZFLDBCQUEwQjtJQUMxQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RCxNQUFNLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ2xDLE1BQU0sTUFBTSxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDOUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxDQUFnQjtJQUMzQyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLE9BQWdCLHFCQUFzQixTQUFRLEtBQUs7SUFDdkQscUNBQXFDO0lBQzVCLEtBQUssR0FBRyxJQUFJLENBQUM7SUFFYixRQUFRLENBQWdCO0lBRWpDLFlBQVksT0FBc0I7UUFDaEMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILENBQUMsY0FBYyxDQUFDO1FBQ2QsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyx3RUFBd0U7UUFDeEUseUVBQXlFO1FBQ3pFLHVFQUF1RTtRQUN2RSx1RUFBdUU7UUFDdkUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDekQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQzthQUM1QixLQUFLLENBQUMsSUFBSSxDQUFDO2FBQ1gsS0FBSyxDQUFDLGdCQUFnQixDQUFDO2FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNkLE9BQU8sSUFBSTtZQUNULENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxLQUFLLElBQUksRUFBRTtZQUNwQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO0lBQ3hELENBQUM7Q0FDRjtBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8seUJBQTBCLFNBQVEscUJBQXFCO0lBQ2xFLElBQUksR0FBRywyQkFBMkIsQ0FBQztJQUVuQyxZQUFZLFlBQW9CLEVBQUUsT0FBZ0I7UUFDaEQsS0FBSyxDQUFDO1lBQ0osS0FBSyxFQUFFO2dCQUNMLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRTtnQkFDdEIsRUFBRSxJQUFJLEVBQUUsZ0RBQWdELEVBQUU7YUFDM0Q7WUFDRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDO1NBQzFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQUVEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxxQkFBcUI7SUFDOUQsSUFBSSxHQUFHLHVCQUF1QixDQUFDO0lBRS9CLFlBQVksWUFBb0IsRUFBRSxPQUFnQjtRQUNoRCxLQUFLLENBQUM7WUFDSixLQUFLLEVBQUU7Z0JBQ0wsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFO2dCQUN0QixFQUFFLElBQUksRUFBRSw0Q0FBNEMsRUFBRTthQUN2RDtZQUNELE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUM7U0FDMUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLCtCQUFnQyxTQUFRLHFCQUFxQjtJQUN4RSxJQUFJLEdBQUcsaUNBQWlDLENBQUM7SUFFekMsWUFBWSxZQUFvQixFQUFFLE9BQWdCO1FBQ2hELEtBQUssQ0FBQztZQUNKLEtBQUssRUFBRTtnQkFDTCxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBQ3RCLEVBQUUsSUFBSSxFQUFFLHdEQUF3RCxFQUFFO2FBQ25FO1lBQ0QsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQztTQUMxQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBBbnNpIGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMvYW5zaSc7XG5cbi8qKlxuICogQSBgZG9jczpgIGxpbmUgVVJMLiBUaGUgbGVhZGluZyBwcm90b2NvbCBpcyBwYXJ0IG9mIHRoZSB0eXBlIHNvIGNhbGwgc2l0ZXNcbiAqIGNhbid0IGFjY2lkZW50YWxseSBwYXNzIGEgcHJvdG9jb2wtcmVsYXRpdmUgb3IgYmFyZSBwYXRoLlxuICovXG5leHBvcnQgdHlwZSBEb2NzVXJsID0gYGh0dHBzOi8vJHtzdHJpbmd9YDtcblxuY29uc3QgSU5TUEVDVF9DVVNUT00gPSBTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpO1xuXG4vKipcbiAqIFN0cnVjdHVyZWQgZGF0YSBmb3IgYSBmcmFtZWQgZXJyb3IuIFRoZSBiYXNlIGNsYXNzIHRha2VzIHRoaXMgYW5kIHJlbmRlcnNcbiAqIGl0IHRvIHBsYWluIHRleHQgKGZvciBgLm1lc3NhZ2VgIC8gYC5zdGFja2AgLyBzdHJ1Y3R1cmVkIGxvZ3MpIG9yIHRvIGFuXG4gKiBBTlNJLWZyYW1lZCBzdHJpbmcgKGZvciB0ZXJtaW5hbCBkaXNwbGF5IHZpYSBgdXRpbC5pbnNwZWN0YCAvIGB0b1N0cmluZ2ApLlxuICpcbiAqIEtlZXBpbmcgdGhlIHBpZWNlcyBzdHJ1Y3R1cmVkIG1lYW5zIHdlIG5ldmVyIGhhdmUgdG8gc3RyaXAgQU5TSSBiYWNrIG91dFxuICogb25jZSBpdCdzIGluIHRoZSBtZXNzYWdlIOKAlCB3ZSBqdXN0IGRvbid0IHB1dCBpdCB0aGVyZSBpbiB0aGUgZmlyc3QgcGxhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnJhbWVkQ29udGVudCB7XG4gIC8qKiBIZWFkbGluZS4gYHsgY29kZTogJ2ZvbygpJyB9YCBzZWdtZW50cyByZW5kZXIgYXMgYmFja3RpY2tlZCBpbmxpbmUgY29kZS4gKi9cbiAgcmVhZG9ubHkgdGl0bGU6IHJlYWRvbmx5IFNlZ21lbnRbXTtcbiAgLyoqIE9uZSBmcmFtZWQgYnJhbmNoIHBlciBlbnRyeS4gVGhlIGxhc3QgdXNlcyBg4pWw4pa2YCwgb3RoZXJzIHVzZSBg4pSc4pa2YC4gKi9cbiAgcmVhZG9ubHkgZGV0YWlsczogcmVhZG9ubHkgRGV0YWlsW107XG59XG5cbmV4cG9ydCB0eXBlIFNlZ21lbnQgPVxuICB8IHsgcmVhZG9ubHkgdGV4dDogc3RyaW5nIH1cbiAgfCB7IHJlYWRvbmx5IGNvZGU6IHN0cmluZyB9XG4gIHwgeyByZWFkb25seSBkaW06IHN0cmluZyB9O1xuXG5leHBvcnQgdHlwZSBEZXRhaWwgPVxuICB8IHsgcmVhZG9ubHkgdHlwZTogJ3BsYWluJzsgcmVhZG9ubHkgc2VnbWVudHM6IHJlYWRvbmx5IFNlZ21lbnRbXSB9XG4gIHwgeyByZWFkb25seSB0eXBlOiAnZG9jcyc7IHJlYWRvbmx5IHVybDogRG9jc1VybCB9O1xuXG5mdW5jdGlvbiByZW5kZXJTZWdtZW50UGxhaW4oczogU2VnbWVudCk6IHN0cmluZyB7XG4gIGlmICgnY29kZScgaW4gcykgcmV0dXJuIGBcXGAke3MuY29kZX1cXGBgO1xuICBpZiAoJ2RpbScgaW4gcykgcmV0dXJuIHMuZGltO1xuICByZXR1cm4gcy50ZXh0O1xufVxuXG5mdW5jdGlvbiByZW5kZXJTZWdtZW50UHJldHR5KHM6IFNlZ21lbnQpOiBzdHJpbmcge1xuICBpZiAoJ2NvZGUnIGluIHMpIHJldHVybiBBbnNpLmNvZGUocy5jb2RlKTtcbiAgaWYgKCdkaW0nIGluIHMpIHJldHVybiBBbnNpLmRpbShzLmRpbSk7XG4gIHJldHVybiBzLnRleHQ7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckRldGFpbFBsYWluKGQ6IERldGFpbCk6IHN0cmluZyB7XG4gIGlmIChkLnR5cGUgPT09ICdkb2NzJykgcmV0dXJuIGBkb2NzOiAke2QudXJsfWA7XG4gIHJldHVybiBkLnNlZ21lbnRzLm1hcChyZW5kZXJTZWdtZW50UGxhaW4pLmpvaW4oJycpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJEZXRhaWxQcmV0dHkoZDogRGV0YWlsKTogc3RyaW5nIHtcbiAgaWYgKGQudHlwZSA9PT0gJ2RvY3MnKSByZXR1cm4gQW5zaS5kb2NzKGQudXJsKTtcbiAgcmV0dXJuIGQuc2VnbWVudHMubWFwKHJlbmRlclNlZ21lbnRQcmV0dHkpLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyUGxhaW4oYzogRnJhbWVkQ29udGVudCk6IHN0cmluZyB7XG4gIC8vIE1pbWljIGBBbnNpLmZyYW1lYCBzdHJ1Y3R1cmUgc28gYC5tZXNzYWdlYCBpcyBzdGlsbCByZWFkYWJsZSBpbiBsb2dzXG4gIC8vIGV2ZW4gd2l0aG91dCB0aGUgY29sb3IuXG4gIGNvbnN0IHRpdGxlID0gYy50aXRsZS5tYXAocmVuZGVyU2VnbWVudFBsYWluKS5qb2luKCcnKTtcbiAgY29uc3QgbGluZXMgPSBbdGl0bGVdO1xuICBjLmRldGFpbHMuZm9yRWFjaCgoZGV0YWlsLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID09PSBjLmRldGFpbHMubGVuZ3RoIC0gMTtcbiAgICBjb25zdCBmaXJzdCA9IGlzTGFzdCA/ICfilbDilrYgJyA6ICfilJzilrYgJztcbiAgICBjb25zdCBjb250ID0gaXNMYXN0ID8gJyAgICcgOiAn4pSCICAnO1xuICAgIGNvbnN0IHJhdyA9IHJlbmRlckRldGFpbFBsYWluKGRldGFpbCkuc3BsaXQoJ1xcbicpO1xuICAgIHJhdy5mb3JFYWNoKChsaW5lLCBpKSA9PiBsaW5lcy5wdXNoKGAke2kgPT09IDAgPyBmaXJzdCA6IGNvbnR9JHtsaW5lfWApKTtcbiAgfSk7XG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclByZXR0eShjOiBGcmFtZWRDb250ZW50KTogc3RyaW5nIHtcbiAgY29uc3QgdGl0bGUgPSBjLnRpdGxlLm1hcChyZW5kZXJTZWdtZW50UHJldHR5KS5qb2luKCcnKTtcbiAgcmV0dXJuIEFuc2kuZnJhbWUodGl0bGUsIGMuZGV0YWlscy5tYXAocmVuZGVyRGV0YWlsUHJldHR5KSk7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3Igc3RydWN0dXJlZCBjb250ZXh0LXZpb2xhdGlvbiBlcnJvcnMuXG4gKlxuICogRGVzaWduIG5vdGVzOlxuICpcbiAqIC0gYC5tZXNzYWdlYCBpcyAqKnBsYWluIHRleHQqKiAobm8gQU5TSSBlc2NhcGUgYnl0ZXMpLiBTdHJ1Y3R1cmVkIGxvZ3MsXG4gKiAgIGxvZyBkcmFpbnMsIENCT1Itc2VyaWFsaXplZCBldmVudCBkYXRhLCBhbmQgYW55dGhpbmcgZWxzZSB0aGF0IHJlYWRzXG4gKiAgIGBlcnIubWVzc2FnZWAgLyBgZXJyLnN0YWNrYCBhcyBhIHN0cmluZyBnZXRzIGNsZWFuIG91dHB1dCDigJQgbm8gbW9qaWJha2VcbiAqICAgaW4gSlNPTiwgbm8gYFxceDFCWy4uLm1gIG5vaXNlIGluIFZlcmNlbCBsb2dzLlxuICpcbiAqIC0gVGhlIEFOU0ktZnJhbWVkIHZlcnNpb24gaXMgcmVuZGVyZWQgKipsYXppbHkqKiB2aWEgYHRvU3RyaW5nKClgIGFuZFxuICogICBgW3V0aWwuaW5zcGVjdC5jdXN0b21dYC4gV2hlbiB0aGUgZXJyb3IgaXMgdGhyb3duIGFuZCBOb2RlIHByaW50cyBpdFxuICogICB2aWEgYHV0aWwuaW5zcGVjdGAsIHRoZSB1c2VyIHNlZXMgdGhlIGNvbG9yZWQsIGZyYW1lZCBib3guIFdoZW4gaXQnc1xuICogICBhdHRhY2hlZCB0byBhIHN0cnVjdHVyZWQgbG9nIGZpZWxkLCB0aGUgY29uc3VtZXIgc2VlcyBwbGFpbiB0ZXh0LlxuICpcbiAqIC0gYGZhdGFsID0gdHJ1ZWAgbWFya3MgdGhlc2UgYXMgbm9uLXJldHJ5YWJsZS4gQ2FsbGluZyBgY3JlYXRlSG9vaygpYFxuICogICBmcm9tIGEgc3RlcCBmdW5jdGlvbiB3aWxsIG5ldmVyIHN1Y2NlZWQgbm8gbWF0dGVyIGhvdyBtYW55IHJldHJpZXMg4oCUXG4gKiAgIGJ1cm5pbmcgYXR0ZW1wdHMganVzdCBwcm9kdWNlcyBkdXBsaWNhdGVkIGxvZyBvdXRwdXQuIFRoZSBydW50aW1lJ3NcbiAqICAgYEZhdGFsRXJyb3IuaXMoZXJyKWAgZ2F0ZSByZWNvZ25pemVzIGFueSBlcnJvciB3aXRoIGBmYXRhbDogdHJ1ZWAuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb250ZXh0VmlvbGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKiBOb24tcmV0cnlhYmxlIOKAlCBzZWUgY2xhc3MgZG9jLiAqL1xuICByZWFkb25seSBmYXRhbCA9IHRydWU7XG5cbiAgcmVhZG9ubHkgI2NvbnRlbnQ6IEZyYW1lZENvbnRlbnQ7XG5cbiAgY29uc3RydWN0b3IoY29udGVudDogRnJhbWVkQ29udGVudCkge1xuICAgIHN1cGVyKHJlbmRlclBsYWluKGNvbnRlbnQpKTtcbiAgICB0aGlzLiNjb250ZW50ID0gY29udGVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBgY29uc29sZS5sb2coZXJyKWAgYW5kIG1vc3QgTm9kZSBpbnRlcm5hbHMgcm91dGUgdGhyb3VnaCBgdXRpbC5pbnNwZWN0YCxcbiAgICogd2hpY2ggcmVzcGVjdHMgdGhpcyBzeW1ib2wuIFJldHVybmluZyBhIGN1c3RvbSBzdHJpbmcgaGVyZSBtZWFucyB0aGVcbiAgICogdGhyb3duIGVycm9yIHByaW50cyBhcyBhIHByZXR0eSBmcmFtZSBpbiB0aGUgdGVybWluYWwgd2hpbGUgYC5tZXNzYWdlYFxuICAgKiBhbmQgYC5zdGFja2Agc3RheSBwbGFpbi5cbiAgICovXG4gIFtJTlNQRUNUX0NVU1RPTV0oKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcmV0dHkgPSByZW5kZXJQcmV0dHkodGhpcy4jY29udGVudCk7XG4gICAgLy8gYHN0YWNrYCBzdGFydHMgd2l0aCBgJHtuYW1lfTogJHttZXNzYWdlfVxcbiAgICBhdCAuLi5gLiBPdXIgbWVzc2FnZSBpc1xuICAgIC8vIG11bHRpLWxpbmUgKGB0aXRsZVxcbuKVsOKWtiBkb2NzOiDigKZgKSwgc28gc2xpY2luZyBvbmx5IHRoZSBmaXJzdCBsaW5lIGdsdWVzXG4gICAgLy8gdGhlIGZyYW1lZC1kZXRhaWwgdGFpbCBvZiB0aGUgbWVzc2FnZSBvbnRvIHRoZSBwcmVwZW5kZWQgcHJldHR5IGZvcm1cbiAgICAvLyBhbmQgcmVuZGVycyBldmVyeSBkZXRhaWwgbGluZSB0d2ljZS4gU2xpY2UgcGFzdCAqYWxsKiBtZXNzYWdlIGxpbmVzLlxuICAgIGNvbnN0IG1lc3NhZ2VMaW5lQ291bnQgPSB0aGlzLm1lc3NhZ2Uuc3BsaXQoJ1xcbicpLmxlbmd0aDtcbiAgICBjb25zdCB0YWlsID0gKHRoaXMuc3RhY2sgPz8gJycpXG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAuc2xpY2UobWVzc2FnZUxpbmVDb3VudClcbiAgICAgIC5qb2luKCdcXG4nKTtcbiAgICByZXR1cm4gdGFpbFxuICAgICAgPyBgJHt0aGlzLm5hbWV9OiAke3ByZXR0eX1cXG4ke3RhaWx9YFxuICAgICAgOiBgJHt0aGlzLm5hbWV9OiAke3ByZXR0eX1gO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfTogJHtyZW5kZXJQcmV0dHkodGhpcy4jY29udGVudCl9YDtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGFuIEFQSSB0aGF0IG11c3QgcnVuIGluc2lkZSBhIHdvcmtmbG93IGZ1bmN0aW9uIGlzIGNhbGxlZFxuICogZnJvbSBvdXRzaWRlIGEgd29ya2Zsb3cgY29udGV4dCAoZS5nLiBmcm9tIGEgc3RlcCBmdW5jdGlvbiBvciBmcm9tXG4gKiByZWd1bGFyIGFwcGxpY2F0aW9uIGNvZGUpLlxuICovXG5leHBvcnQgY2xhc3MgTm90SW5Xb3JrZmxvd0NvbnRleHRFcnJvciBleHRlbmRzIENvbnRleHRWaW9sYXRpb25FcnJvciB7XG4gIG5hbWUgPSAnTm90SW5Xb3JrZmxvd0NvbnRleHRFcnJvcic7XG5cbiAgY29uc3RydWN0b3IoZnVuY3Rpb25OYW1lOiBzdHJpbmcsIGRvY3NVcmw6IERvY3NVcmwpIHtcbiAgICBzdXBlcih7XG4gICAgICB0aXRsZTogW1xuICAgICAgICB7IGNvZGU6IGZ1bmN0aW9uTmFtZSB9LFxuICAgICAgICB7IHRleHQ6ICcgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBhIHdvcmtmbG93IGZ1bmN0aW9uJyB9LFxuICAgICAgXSxcbiAgICAgIGRldGFpbHM6IFt7IHR5cGU6ICdkb2NzJywgdXJsOiBkb2NzVXJsIH1dLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYW4gQVBJIHRoYXQgbXVzdCBydW4gaW5zaWRlIGEgc3RlcCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbVxuICogb3V0c2lkZSBhIHN0ZXAgY29udGV4dC5cbiAqL1xuZXhwb3J0IGNsYXNzIE5vdEluU3RlcENvbnRleHRFcnJvciBleHRlbmRzIENvbnRleHRWaW9sYXRpb25FcnJvciB7XG4gIG5hbWUgPSAnTm90SW5TdGVwQ29udGV4dEVycm9yJztcblxuICBjb25zdHJ1Y3RvcihmdW5jdGlvbk5hbWU6IHN0cmluZywgZG9jc1VybDogRG9jc1VybCkge1xuICAgIHN1cGVyKHtcbiAgICAgIHRpdGxlOiBbXG4gICAgICAgIHsgY29kZTogZnVuY3Rpb25OYW1lIH0sXG4gICAgICAgIHsgdGV4dDogJyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIGEgc3RlcCBmdW5jdGlvbicgfSxcbiAgICAgIF0sXG4gICAgICBkZXRhaWxzOiBbeyB0eXBlOiAnZG9jcycsIHVybDogZG9jc1VybCB9XSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGFuIEFQSSB0aGF0IG11c3QgcnVuIGluc2lkZSBlaXRoZXIgYSB3b3JrZmxvdyBvciBzdGVwIGZ1bmN0aW9uXG4gKiBpcyBjYWxsZWQgZnJvbSByZWd1bGFyIGFwcGxpY2F0aW9uIGNvZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dEVycm9yIGV4dGVuZHMgQ29udGV4dFZpb2xhdGlvbkVycm9yIHtcbiAgbmFtZSA9ICdOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dEVycm9yJztcblxuICBjb25zdHJ1Y3RvcihmdW5jdGlvbk5hbWU6IHN0cmluZywgZG9jc1VybDogRG9jc1VybCkge1xuICAgIHN1cGVyKHtcbiAgICAgIHRpdGxlOiBbXG4gICAgICAgIHsgY29kZTogZnVuY3Rpb25OYW1lIH0sXG4gICAgICAgIHsgdGV4dDogJyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIGEgd29ya2Zsb3cgb3Igc3RlcCBmdW5jdGlvbicgfSxcbiAgICAgIF0sXG4gICAgICBkZXRhaWxzOiBbeyB0eXBlOiAnZG9jcycsIHVybDogZG9jc1VybCB9XSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,3 +1,4 @@
1
+ import type { Run } from './runtime/run.js';
1
2
  import type { Serializable } from './schemas.js';
2
3
  /**
3
4
  * An object that can be awaited to receive a value.
@@ -24,6 +25,42 @@ export interface Hook<T = any> extends AsyncIterable<T>, Thenable<T> {
24
25
  * The token used to identify this hook.
25
26
  */
26
27
  token: string;
28
+ /**
29
+ * Returns a promise that resolves with the conflicting {@link Run} if
30
+ * another active hook already owns this hook's token, or `null` once
31
+ * the hook has been registered and is ready to receive payloads.
32
+ *
33
+ * Calling `createHook()` alone does not register the hook — registration
34
+ * only happens when the workflow suspends. Awaiting `getConflict()`
35
+ * suspends the workflow to commit the hook registration, so it can be
36
+ * used to claim the token (and detect token conflicts early) without
37
+ * waiting for payload data.
38
+ *
39
+ * When a conflict is detected, the resolved `Run` is the run that
40
+ * currently owns the token. The workflow can decide how to handle the
41
+ * duplicate in code: return or log `conflict.runId`, inspect
42
+ * `await conflict.status`, await `conflict.returnValue`, or cancel the
43
+ * owner with `await conflict.cancel()` and continue in the current run.
44
+ *
45
+ * Note that awaiting the hook's payload (`await hook`) when the token is
46
+ * already owned by another active hook still rejects with
47
+ * `HookConflictError`. In the rare case where the conflicting run cannot
48
+ * be identified (a `hook_conflict` event persisted by an old world that
49
+ * did not record the owning run's ID), `getConflict()` also rejects with
50
+ * `HookConflictError` rather than resolving with an incomplete value.
51
+ *
52
+ * @example
53
+ * ```ts
54
+ * using hook = createHook({ token: `order:${orderId}` });
55
+ * const conflict = await hook.getConflict();
56
+ * if (conflict) {
57
+ * // another run already owns this token
58
+ * return { dedupedTo: conflict.runId };
59
+ * }
60
+ * // token is now claimed, without waiting for payload data
61
+ * ```
62
+ */
63
+ getConflict(): Promise<Run<unknown> | null>;
27
64
  /**
28
65
  * Disposes the hook, releasing its token for reuse by other workflows.
29
66
  *
@@ -86,7 +123,9 @@ export interface HookOptions {
86
123
  * tokens are always randomly generated to prevent unauthorized access
87
124
  * to the public webhook endpoint.
88
125
  *
89
- * If not provided, a randomly generated token will be assigned.
126
+ * If provided, the token must be a non-empty string; passing an empty
127
+ * string throws. If not provided (or `undefined`), a randomly generated
128
+ * token will be assigned.
90
129
  *
91
130
  * @example
92
131
  *
@@ -117,8 +156,8 @@ export interface HookOptions {
117
156
  * Whether this hook can be resumed via the public webhook endpoint.
118
157
  *
119
158
  * When `true`, the hook can be triggered by sending an HTTP request to the
120
- * public `/.well-known/workflow/v1/webhook/{token}` URL. This is automatically
121
- * set when using `createWebhook()`.
159
+ * public workflow webhook URL. This is automatically set when using
160
+ * `createWebhook()`.
122
161
  *
123
162
  * When `false` (the default), the hook can only be resumed server-side
124
163
  * via `resumeHook()`.
@@ -1 +1 @@
1
- {"version":3,"file":"create-hook.d.ts","sourceRoot":"","sources":["../src/create-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD;;GAEG;AACH,UAAU,QAAQ,CAAC,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,OAAO;IAClD,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD;AAED;;;;;;GAMG;AACH,MAAM,WAAW,IAAI,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClE;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,IAAI,IAAI,CAAC;IAEhB;;;;;;;;;;;;OAYG;IACH,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,OAAO,CAAE,SAAQ,IAAI,CAAC,CAAC,CAAC;IACzD;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IAExB;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,cACf,SAAQ,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,WAAW,CAAC;IAChD;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,wBAAgB,UAAU,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAIlE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,GAAG;IAAE,WAAW,EAAE,QAAQ,CAAA;CAAE,GAClD,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAChC,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"create-hook.d.ts","sourceRoot":"","sources":["../src/create-hook.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD;;GAEG;AACH,UAAU,QAAQ,CAAC,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,OAAO;IAClD,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD;AAED;;;;;;GAMG;AACH,MAAM,WAAW,IAAI,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClE;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACH,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAE5C;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,IAAI,IAAI,CAAC;IAEhB;;;;;;;;;;;;OAYG;IACH,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,OAAO,CAAE,SAAQ,IAAI,CAAC,CAAC,CAAC;IACzD;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IAExB;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,cACf,SAAQ,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,WAAW,CAAC;IAChD;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,wBAAgB,UAAU,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAMlE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,GAAG;IAAE,WAAW,EAAE,QAAQ,CAAA;CAAE,GAClD,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAChC,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { throwNotInWorkflowContext } from './context-errors.js';
1
2
  /**
2
3
  * Creates a {@link Hook} that can be used to suspend and resume the workflow run with a payload.
3
4
  *
@@ -22,11 +23,11 @@
22
23
  */
23
24
  // @ts-expect-error `options` is here for types/docs
24
25
  export function createHook(options) {
25
- throw new Error('`createHook()` can only be called inside a workflow function');
26
+ throwNotInWorkflowContext('createHook()', 'https://workflow-sdk.dev/docs/api-reference/workflow/create-hook', createHook);
26
27
  }
27
28
  export function createWebhook(
28
29
  // @ts-expect-error `options` is here for types/docs
29
30
  options) {
30
- throw new Error('`createWebhook()` can only be called inside a workflow function');
31
+ throwNotInWorkflowContext('createWebhook()', 'https://workflow-sdk.dev/docs/api-reference/workflow/create-webhook', createWebhook);
31
32
  }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY3JlYXRlLWhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkpBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxvREFBb0Q7QUFDcEQsTUFBTSxVQUFVLFVBQVUsQ0FBVSxPQUFxQjtJQUN2RCxNQUFNLElBQUksS0FBSyxDQUNiLDhEQUE4RCxDQUMvRCxDQUFDO0FBQ0osQ0FBQztBQWFELE1BQU0sVUFBVSxhQUFhO0FBQzNCLG9EQUFvRDtBQUNwRCxPQUF3QjtJQUV4QixNQUFNLElBQUksS0FBSyxDQUNiLGlFQUFpRSxDQUNsRSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2VyaWFsaXphYmxlIH0gZnJvbSAnLi9zY2hlbWFzLmpzJztcblxuLyoqXG4gKiBBbiBvYmplY3QgdGhhdCBjYW4gYmUgYXdhaXRlZCB0byByZWNlaXZlIGEgdmFsdWUuXG4gKi9cbmludGVyZmFjZSBUaGVuYWJsZTxUPiB7XG4gIHRoZW46IFByb21pc2U8VD5bJ3RoZW4nXTtcbn1cblxuLyoqXG4gKiBBIGBSZXF1ZXN0YCB0aGF0IGNhbiBiZSByZXNwb25kZWQgdG8gd2l0aGluIGEgd29ya2Zsb3dcbiAqIHN0ZXAgZnVuY3Rpb24gYnkgY2FsbGluZyB0aGUgYHJlc3BvbmRXaXRoKClgIG1ldGhvZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0V2l0aFJlc3BvbnNlIGV4dGVuZHMgUmVxdWVzdCB7XG4gIHJlc3BvbmRXaXRoOiAocmVzcG9uc2U6IFJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIEEgaG9vayB0aGF0IGNhbiBiZSBhd2FpdGVkIGFuZC9vciBpdGVyYXRlZCBvdmVyIHRvIHJlY2VpdmVcbiAqIGEgdmFsdWUgd2l0aGluIGEgd29ya2Zsb3cgZnJvbSBhbiBleHRlcm5hbCBzeXN0ZW0uXG4gKlxuICogSG9va3MgaW1wbGVtZW50IHRoZSBUQzM5IEV4cGxpY2l0IFJlc291cmNlIE1hbmFnZW1lbnQgcHJvcG9zYWwsXG4gKiBhbGxvd2luZyB0aGVtIHRvIGJlIHVzZWQgd2l0aCB0aGUgYHVzaW5nYCBrZXl3b3JkIGZvciBhdXRvbWF0aWMgZGlzcG9zYWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG9vazxUID0gYW55PiBleHRlbmRzIEFzeW5jSXRlcmFibGU8VD4sIFRoZW5hYmxlPFQ+IHtcbiAgLyoqXG4gICAqIFRoZSB0b2tlbiB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgaG9vay5cbiAgICovXG4gIHRva2VuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBob29rLCByZWxlYXNpbmcgaXRzIHRva2VuIGZvciByZXVzZSBieSBvdGhlciB3b3JrZmxvd3MuXG4gICAqXG4gICAqIEFmdGVyIGNhbGxpbmcgYGRpc3Bvc2UoKWAsIHRoZSBob29rIHdpbGwgbm8gbG9uZ2VyIHJlY2VpdmUgYW55IGV2ZW50cy5cbiAgICogVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBleHBsaWNpdGx5IHJlbGVhc2UgYSBob29rIHRva2VuIGJlZm9yZVxuICAgKiB0aGUgd29ya2Zsb3cgY29tcGxldGVzLCBhbGxvd2luZyBhbm90aGVyIHdvcmtmbG93IHRvIHJlZ2lzdGVyIGEgaG9va1xuICAgKiB3aXRoIHRoZSBzYW1lIHRva2VuLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBob29rID0gY3JlYXRlSG9vazx7IG1lc3NhZ2U6IHN0cmluZyB9Pih7IHRva2VuOiAnbXktdG9rZW4nIH0pO1xuICAgKlxuICAgKiBmb3IgYXdhaXQgKGNvbnN0IHBheWxvYWQgb2YgaG9vaykge1xuICAgKiAgIGlmIChwYXlsb2FkLm1lc3NhZ2UgPT09ICdkb25lJykge1xuICAgKiAgICAgaG9vay5kaXNwb3NlKCk7IC8vIFJlbGVhc2UgdGhlIHRva2VuIGVhcmx5XG4gICAqICAgICBicmVhaztcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBkaXNwb3NlKCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudHMgdGhlIFRDMzkgRXhwbGljaXQgUmVzb3VyY2UgTWFuYWdlbWVudCBwcm9wb3NhbC5cbiAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2luZyB0aGUgYHVzaW5nYCBrZXl3b3JkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiB7XG4gICAqICAgdXNpbmcgaG9vayA9IGNyZWF0ZUhvb2s8eyBtZXNzYWdlOiBzdHJpbmcgfT4oeyB0b2tlbjogJ215LXRva2VuJyB9KTtcbiAgICogICBjb25zdCBwYXlsb2FkID0gYXdhaXQgaG9vaztcbiAgICogICAvLyBob29rIGlzIGF1dG9tYXRpY2FsbHkgZGlzcG9zZWQgd2hlbiB0aGUgYmxvY2sgZXhpdHNcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZDtcbn1cblxuLyoqXG4gKiBBIHdlYmhvb2sgdGhhdCBjYW4gYmUgdXNlZCB0byBzdXNwZW5kIGFuZCByZXN1bWUgdGhlIHdvcmtmbG93IHJ1blxuICogdXBvbiByZWNlaXZpbmcgYW4gSFRUUCByZXF1ZXN0IHRvIHRoZSBzcGVjaWZpZWQgVVJMLlxuICpcbiAqIEBzZWUge0BsaW5rIGNyZWF0ZVdlYmhvb2t9XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXF1ZXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9vazxUIGV4dGVuZHMgUmVxdWVzdD4gZXh0ZW5kcyBIb29rPFQ+IHtcbiAgLyoqXG4gICAqIFRoZSBVUkwgdGhhdCBleHRlcm5hbCBzeXN0ZW1zIGNhbiBjYWxsIHRvIHNlbmQgZGF0YSB0byB0aGUgd29ya2Zsb3cuXG4gICAqL1xuICB1cmw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIb29rT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBVbmlxdWUgdG9rZW4gdGhhdCBpcyB1c2VkIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBob29rLlxuICAgKlxuICAgKiBXaGVuIHNwZWNpZnlpbmcgYW4gZXhwbGljaXQgdG9rZW4sIHRoZSB0b2tlbiBzaG91bGQgYmUgY29uc3RydWN0ZWRcbiAgICogd2l0aCBpbmZvcm1hdGlvbiB0aGF0IHRoZSBkaXNwYXRjaGluZyBzaWRlIGNhbiByZWxpYWJseSByZWNvbnN0cnVjdFxuICAgKiB0aGUgdG9rZW4gd2l0aCB0aGUgaW5mb3JtYXRpb24gaXQgaGFzIGF2YWlsYWJsZS5cbiAgICpcbiAgICogRGV0ZXJtaW5pc3RpYyB0b2tlbnMgYXJlIGludGVuZGVkIGZvciB1c2Ugd2l0aCBgY3JlYXRlSG9vaygpYCBhbmRcbiAgICogc2VydmVyLXNpZGUgYHJlc3VtZUhvb2soKWAgb25seS4gRm9yIHdlYmhvb2tzIChgY3JlYXRlV2ViaG9vaygpYCksXG4gICAqIHRva2VucyBhcmUgYWx3YXlzIHJhbmRvbWx5IGdlbmVyYXRlZCB0byBwcmV2ZW50IHVuYXV0aG9yaXplZCBhY2Nlc3NcbiAgICogdG8gdGhlIHB1YmxpYyB3ZWJob29rIGVuZHBvaW50LlxuICAgKlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGEgcmFuZG9tbHkgZ2VuZXJhdGVkIHRva2VuIHdpbGwgYmUgYXNzaWduZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIGBgYHRzXG4gICAqIC8vIEV4cGxpY2l0IHRva2VuIGZvciBhIFNsYWNrIGJvdCAob25lIHdvcmtmbG93IHJ1biBwZXIgY2hhbm5lbClcbiAgICogY29uc3QgaG9vayA9IGNyZWF0ZUhvb2s8U2xhY2tNZXNzYWdlPih7XG4gICAqICAgdG9rZW46IGBzbGFja193ZWJob29rOiR7Y2hhbm5lbElkfWAsXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHRva2VuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHVzZXItZGVmaW5lZCBkYXRhIHRvIGluY2x1ZGUgd2l0aCB0aGUgaG9vayBwYXlsb2FkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBob29rID0gY3JlYXRlSG9vazx7IG5hbWU6IHN0cmluZyB9Pih7XG4gICAqICAgbWV0YWRhdGE6IHtcbiAgICogICAgIHR5cGU6IFwiY2F0XCIsXG4gICAqICAgICBjb2xvcjogXCJvcmFuZ2VcIixcbiAgICogICB9LFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBtZXRhZGF0YT86IFNlcmlhbGl6YWJsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGhvb2sgY2FuIGJlIHJlc3VtZWQgdmlhIHRoZSBwdWJsaWMgd2ViaG9vayBlbmRwb2ludC5cbiAgICpcbiAgICogV2hlbiBgdHJ1ZWAsIHRoZSBob29rIGNhbiBiZSB0cmlnZ2VyZWQgYnkgc2VuZGluZyBhbiBIVFRQIHJlcXVlc3QgdG8gdGhlXG4gICAqIHB1YmxpYyBgLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL3dlYmhvb2sve3Rva2VufWAgVVJMLiBUaGlzIGlzIGF1dG9tYXRpY2FsbHlcbiAgICogc2V0IHdoZW4gdXNpbmcgYGNyZWF0ZVdlYmhvb2soKWAuXG4gICAqXG4gICAqIFdoZW4gYGZhbHNlYCAodGhlIGRlZmF1bHQpLCB0aGUgaG9vayBjYW4gb25seSBiZSByZXN1bWVkIHNlcnZlci1zaWRlXG4gICAqIHZpYSBgcmVzdW1lSG9vaygpYC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGlzV2ViaG9vaz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va09wdGlvbnNcbiAgZXh0ZW5kcyBPbWl0PEhvb2tPcHRpb25zLCAndG9rZW4nIHwgJ2lzV2ViaG9vayc+IHtcbiAgLyoqXG4gICAqIElmIHNldCB0byBhIGBSZXNwb25zZWAgb2JqZWN0LCB0aGUgd2ViaG9vayB3aWxsIGF1dG9tYXRpY2FsbHlcbiAgICogcmVzcG9uZCB3aXRoIHRoZSBzcGVjaWZpZWQgcmVzcG9uc2UuXG4gICAqXG4gICAqIElmIHNldCB0byBgXCJtYW51YWxcImAsIGVhY2ggaW5kaXZpZHVhbCByZXF1ZXN0IHdpbGwgbmVlZCB0b1xuICAgKiBiZSByZXNwb25kZWQgdG8gbWFudWFsbHkgZnJvbSB3aXRoaW4gdGhlIHdvcmtmbG93IGJ5IGNhbGxpbmcgdGhlXG4gICAqIGByZXNwb25kV2l0aCgpYCBtZXRob2QuXG4gICAqXG4gICAqIElmIG5vdCBzZXQgdGhlbiB0aGUgd2ViaG9vayB3aWxsIGF1dG9tYXRpY2FsbHkgcmVzcG9uZCB3aXRoXG4gICAqIGEgYDIwMiBBY2NlcHRlZGAgcmVzcG9uc2UuXG4gICAqL1xuICByZXNwb25kV2l0aD86IFJlc3BvbnNlIHwgJ21hbnVhbCc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBIb29rfSB0aGF0IGNhbiBiZSB1c2VkIHRvIHN1c3BlbmQgYW5kIHJlc3VtZSB0aGUgd29ya2Zsb3cgcnVuIHdpdGggYSBwYXlsb2FkLlxuICpcbiAqIEhvb2tzIGFsbG93IGV4dGVybmFsIHN5c3RlbXMgdG8gc2VuZCBhcmJpdHJhcnkgc2VyaWFsaXphYmxlIGRhdGEgaW50byBhIHdvcmtmbG93LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgaG9vay5cbiAqIEByZXR1cm5zIEEgYEhvb2tgIHRoYXQgY2FuIGJlIGF3YWl0ZWQgdG8gcmVjZWl2ZSBvbmUgb3IgbW9yZSBwYXlsb2Fkcy5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzXG4gKiBleHBvcnQgYXN5bmMgZnVuY3Rpb24gd29ya2Zsb3dXaXRoSG9vaygpIHtcbiAqICAgXCJ1c2Ugd29ya2Zsb3dcIjtcbiAqXG4gKiAgIGNvbnN0IGhvb2sgPSBjcmVhdGVIb29rPHsgbWVzc2FnZTogc3RyaW5nIH0+KCk7XG4gKiAgIGNvbnNvbGUubG9nKCdIb29rIHRva2VuOicsIGhvb2sudG9rZW4pO1xuICpcbiAqICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IGhvb2s7XG4gKiAgIGNvbnNvbGUubG9nKCdSZWNlaXZlZDonLCBwYXlsb2FkLm1lc3NhZ2UpO1xuICogfVxuICogYGBgXG4gKi9cbi8vIEB0cy1leHBlY3QtZXJyb3IgYG9wdGlvbnNgIGlzIGhlcmUgZm9yIHR5cGVzL2RvY3NcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIb29rPFQgPSBhbnk+KG9wdGlvbnM/OiBIb29rT3B0aW9ucyk6IEhvb2s8VD4ge1xuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ2BjcmVhdGVIb29rKClgIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgYSB3b3JrZmxvdyBmdW5jdGlvbidcbiAgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIFdlYmhvb2t9IHRoYXQgY2FuIGJlIHVzZWQgdG8gc3VzcGVuZCBhbmQgcmVzdW1lIHRoZSB3b3JrZmxvd1xuICogcnVuIHVwb24gcmVjZWl2aW5nIGFuIEhUVFAgcmVxdWVzdCB0byB0aGUgc3BlY2lmaWVkIFVSTC5cbiAqXG4gKiBXZWJob29rcyB3aWxsIHJlc3VsdCBpbiBhIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVxdWVzdCB8IFJlcXVlc3R9IG9iamVjdFxuICogdGhhdCBjYW4gYmUgaW50ZXJhY3RlZCB3aXRoIGluIHdvcmtmbG93IGZ1bmN0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdlYmhvb2soXG4gIG9wdGlvbnM6IFdlYmhvb2tPcHRpb25zICYgeyByZXNwb25kV2l0aDogJ21hbnVhbCcgfVxuKTogV2ViaG9vazxSZXF1ZXN0V2l0aFJlc3BvbnNlPjtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXZWJob29rKG9wdGlvbnM/OiBXZWJob29rT3B0aW9ucyk6IFdlYmhvb2s8UmVxdWVzdD47XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2ViaG9vayhcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBgb3B0aW9uc2AgaXMgaGVyZSBmb3IgdHlwZXMvZG9jc1xuICBvcHRpb25zPzogV2ViaG9va09wdGlvbnNcbik6IFdlYmhvb2s8UmVxdWVzdD4gfCBXZWJob29rPFJlcXVlc3RXaXRoUmVzcG9uc2U+IHtcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICdgY3JlYXRlV2ViaG9vaygpYCBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIGEgd29ya2Zsb3cgZnVuY3Rpb24nXG4gICk7XG59XG4iXX0=
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY3JlYXRlLWhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFvTWhFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxvREFBb0Q7QUFDcEQsTUFBTSxVQUFVLFVBQVUsQ0FBVSxPQUFxQjtJQUN2RCx5QkFBeUIsQ0FDdkIsY0FBYyxFQUNkLGtFQUFrRSxFQUNsRSxVQUFVLENBQ1gsQ0FBQztBQUNKLENBQUM7QUFhRCxNQUFNLFVBQVUsYUFBYTtBQUMzQixvREFBb0Q7QUFDcEQsT0FBd0I7SUFFeEIseUJBQXlCLENBQ3ZCLGlCQUFpQixFQUNqQixxRUFBcUUsRUFDckUsYUFBYSxDQUNkLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdGhyb3dOb3RJbldvcmtmbG93Q29udGV4dCB9IGZyb20gJy4vY29udGV4dC1lcnJvcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBSdW4gfSBmcm9tICcuL3J1bnRpbWUvcnVuLmpzJztcbmltcG9ydCB0eXBlIHsgU2VyaWFsaXphYmxlIH0gZnJvbSAnLi9zY2hlbWFzLmpzJztcblxuLyoqXG4gKiBBbiBvYmplY3QgdGhhdCBjYW4gYmUgYXdhaXRlZCB0byByZWNlaXZlIGEgdmFsdWUuXG4gKi9cbmludGVyZmFjZSBUaGVuYWJsZTxUPiB7XG4gIHRoZW46IFByb21pc2U8VD5bJ3RoZW4nXTtcbn1cblxuLyoqXG4gKiBBIGBSZXF1ZXN0YCB0aGF0IGNhbiBiZSByZXNwb25kZWQgdG8gd2l0aGluIGEgd29ya2Zsb3dcbiAqIHN0ZXAgZnVuY3Rpb24gYnkgY2FsbGluZyB0aGUgYHJlc3BvbmRXaXRoKClgIG1ldGhvZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0V2l0aFJlc3BvbnNlIGV4dGVuZHMgUmVxdWVzdCB7XG4gIHJlc3BvbmRXaXRoOiAocmVzcG9uc2U6IFJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIEEgaG9vayB0aGF0IGNhbiBiZSBhd2FpdGVkIGFuZC9vciBpdGVyYXRlZCBvdmVyIHRvIHJlY2VpdmVcbiAqIGEgdmFsdWUgd2l0aGluIGEgd29ya2Zsb3cgZnJvbSBhbiBleHRlcm5hbCBzeXN0ZW0uXG4gKlxuICogSG9va3MgaW1wbGVtZW50IHRoZSBUQzM5IEV4cGxpY2l0IFJlc291cmNlIE1hbmFnZW1lbnQgcHJvcG9zYWwsXG4gKiBhbGxvd2luZyB0aGVtIHRvIGJlIHVzZWQgd2l0aCB0aGUgYHVzaW5nYCBrZXl3b3JkIGZvciBhdXRvbWF0aWMgZGlzcG9zYWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG9vazxUID0gYW55PiBleHRlbmRzIEFzeW5jSXRlcmFibGU8VD4sIFRoZW5hYmxlPFQ+IHtcbiAgLyoqXG4gICAqIFRoZSB0b2tlbiB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgaG9vay5cbiAgICovXG4gIHRva2VuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgY29uZmxpY3Rpbmcge0BsaW5rIFJ1bn0gaWZcbiAgICogYW5vdGhlciBhY3RpdmUgaG9vayBhbHJlYWR5IG93bnMgdGhpcyBob29rJ3MgdG9rZW4sIG9yIGBudWxsYCBvbmNlXG4gICAqIHRoZSBob29rIGhhcyBiZWVuIHJlZ2lzdGVyZWQgYW5kIGlzIHJlYWR5IHRvIHJlY2VpdmUgcGF5bG9hZHMuXG4gICAqXG4gICAqIENhbGxpbmcgYGNyZWF0ZUhvb2soKWAgYWxvbmUgZG9lcyBub3QgcmVnaXN0ZXIgdGhlIGhvb2sg4oCUIHJlZ2lzdHJhdGlvblxuICAgKiBvbmx5IGhhcHBlbnMgd2hlbiB0aGUgd29ya2Zsb3cgc3VzcGVuZHMuIEF3YWl0aW5nIGBnZXRDb25mbGljdCgpYFxuICAgKiBzdXNwZW5kcyB0aGUgd29ya2Zsb3cgdG8gY29tbWl0IHRoZSBob29rIHJlZ2lzdHJhdGlvbiwgc28gaXQgY2FuIGJlXG4gICAqIHVzZWQgdG8gY2xhaW0gdGhlIHRva2VuIChhbmQgZGV0ZWN0IHRva2VuIGNvbmZsaWN0cyBlYXJseSkgd2l0aG91dFxuICAgKiB3YWl0aW5nIGZvciBwYXlsb2FkIGRhdGEuXG4gICAqXG4gICAqIFdoZW4gYSBjb25mbGljdCBpcyBkZXRlY3RlZCwgdGhlIHJlc29sdmVkIGBSdW5gIGlzIHRoZSBydW4gdGhhdFxuICAgKiBjdXJyZW50bHkgb3ducyB0aGUgdG9rZW4uIFRoZSB3b3JrZmxvdyBjYW4gZGVjaWRlIGhvdyB0byBoYW5kbGUgdGhlXG4gICAqIGR1cGxpY2F0ZSBpbiBjb2RlOiByZXR1cm4gb3IgbG9nIGBjb25mbGljdC5ydW5JZGAsIGluc3BlY3RcbiAgICogYGF3YWl0IGNvbmZsaWN0LnN0YXR1c2AsIGF3YWl0IGBjb25mbGljdC5yZXR1cm5WYWx1ZWAsIG9yIGNhbmNlbCB0aGVcbiAgICogb3duZXIgd2l0aCBgYXdhaXQgY29uZmxpY3QuY2FuY2VsKClgIGFuZCBjb250aW51ZSBpbiB0aGUgY3VycmVudCBydW4uXG4gICAqXG4gICAqIE5vdGUgdGhhdCBhd2FpdGluZyB0aGUgaG9vaydzIHBheWxvYWQgKGBhd2FpdCBob29rYCkgd2hlbiB0aGUgdG9rZW4gaXNcbiAgICogYWxyZWFkeSBvd25lZCBieSBhbm90aGVyIGFjdGl2ZSBob29rIHN0aWxsIHJlamVjdHMgd2l0aFxuICAgKiBgSG9va0NvbmZsaWN0RXJyb3JgLiBJbiB0aGUgcmFyZSBjYXNlIHdoZXJlIHRoZSBjb25mbGljdGluZyBydW4gY2Fubm90XG4gICAqIGJlIGlkZW50aWZpZWQgKGEgYGhvb2tfY29uZmxpY3RgIGV2ZW50IHBlcnNpc3RlZCBieSBhbiBvbGQgd29ybGQgdGhhdFxuICAgKiBkaWQgbm90IHJlY29yZCB0aGUgb3duaW5nIHJ1bidzIElEKSwgYGdldENvbmZsaWN0KClgIGFsc28gcmVqZWN0cyB3aXRoXG4gICAqIGBIb29rQ29uZmxpY3RFcnJvcmAgcmF0aGVyIHRoYW4gcmVzb2x2aW5nIHdpdGggYW4gaW5jb21wbGV0ZSB2YWx1ZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogdXNpbmcgaG9vayA9IGNyZWF0ZUhvb2soeyB0b2tlbjogYG9yZGVyOiR7b3JkZXJJZH1gIH0pO1xuICAgKiBjb25zdCBjb25mbGljdCA9IGF3YWl0IGhvb2suZ2V0Q29uZmxpY3QoKTtcbiAgICogaWYgKGNvbmZsaWN0KSB7XG4gICAqICAgLy8gYW5vdGhlciBydW4gYWxyZWFkeSBvd25zIHRoaXMgdG9rZW5cbiAgICogICByZXR1cm4geyBkZWR1cGVkVG86IGNvbmZsaWN0LnJ1bklkIH07XG4gICAqIH1cbiAgICogLy8gdG9rZW4gaXMgbm93IGNsYWltZWQsIHdpdGhvdXQgd2FpdGluZyBmb3IgcGF5bG9hZCBkYXRhXG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0Q29uZmxpY3QoKTogUHJvbWlzZTxSdW48dW5rbm93bj4gfCBudWxsPjtcblxuICAvKipcbiAgICogRGlzcG9zZXMgdGhlIGhvb2ssIHJlbGVhc2luZyBpdHMgdG9rZW4gZm9yIHJldXNlIGJ5IG90aGVyIHdvcmtmbG93cy5cbiAgICpcbiAgICogQWZ0ZXIgY2FsbGluZyBgZGlzcG9zZSgpYCwgdGhlIGhvb2sgd2lsbCBubyBsb25nZXIgcmVjZWl2ZSBhbnkgZXZlbnRzLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIGV4cGxpY2l0bHkgcmVsZWFzZSBhIGhvb2sgdG9rZW4gYmVmb3JlXG4gICAqIHRoZSB3b3JrZmxvdyBjb21wbGV0ZXMsIGFsbG93aW5nIGFub3RoZXIgd29ya2Zsb3cgdG8gcmVnaXN0ZXIgYSBob29rXG4gICAqIHdpdGggdGhlIHNhbWUgdG9rZW4uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IGhvb2sgPSBjcmVhdGVIb29rPHsgbWVzc2FnZTogc3RyaW5nIH0+KHsgdG9rZW46ICdteS10b2tlbicgfSk7XG4gICAqXG4gICAqIGZvciBhd2FpdCAoY29uc3QgcGF5bG9hZCBvZiBob29rKSB7XG4gICAqICAgaWYgKHBheWxvYWQubWVzc2FnZSA9PT0gJ2RvbmUnKSB7XG4gICAqICAgICBob29rLmRpc3Bvc2UoKTsgLy8gUmVsZWFzZSB0aGUgdG9rZW4gZWFybHlcbiAgICogICAgIGJyZWFrO1xuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGRpc3Bvc2UoKTogdm9pZDtcblxuICAvKipcbiAgICogSW1wbGVtZW50cyB0aGUgVEMzOSBFeHBsaWNpdCBSZXNvdXJjZSBNYW5hZ2VtZW50IHByb3Bvc2FsLlxuICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIHVzaW5nIHRoZSBgdXNpbmdgIGtleXdvcmQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIHtcbiAgICogICB1c2luZyBob29rID0gY3JlYXRlSG9vazx7IG1lc3NhZ2U6IHN0cmluZyB9Pih7IHRva2VuOiAnbXktdG9rZW4nIH0pO1xuICAgKiAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBob29rO1xuICAgKiAgIC8vIGhvb2sgaXMgYXV0b21hdGljYWxseSBkaXNwb3NlZCB3aGVuIHRoZSBibG9jayBleGl0c1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIEEgd2ViaG9vayB0aGF0IGNhbiBiZSB1c2VkIHRvIHN1c3BlbmQgYW5kIHJlc3VtZSB0aGUgd29ya2Zsb3cgcnVuXG4gKiB1cG9uIHJlY2VpdmluZyBhbiBIVFRQIHJlcXVlc3QgdG8gdGhlIHNwZWNpZmllZCBVUkwuXG4gKlxuICogQHNlZSB7QGxpbmsgY3JlYXRlV2ViaG9va31cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1JlcXVlc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rPFQgZXh0ZW5kcyBSZXF1ZXN0PiBleHRlbmRzIEhvb2s8VD4ge1xuICAvKipcbiAgICogVGhlIFVSTCB0aGF0IGV4dGVybmFsIHN5c3RlbXMgY2FuIGNhbGwgdG8gc2VuZCBkYXRhIHRvIHRoZSB3b3JrZmxvdy5cbiAgICovXG4gIHVybDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvb2tPcHRpb25zIHtcbiAgLyoqXG4gICAqIFVuaXF1ZSB0b2tlbiB0aGF0IGlzIHVzZWQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGhvb2suXG4gICAqXG4gICAqIFdoZW4gc3BlY2lmeWluZyBhbiBleHBsaWNpdCB0b2tlbiwgdGhlIHRva2VuIHNob3VsZCBiZSBjb25zdHJ1Y3RlZFxuICAgKiB3aXRoIGluZm9ybWF0aW9uIHRoYXQgdGhlIGRpc3BhdGNoaW5nIHNpZGUgY2FuIHJlbGlhYmx5IHJlY29uc3RydWN0XG4gICAqIHRoZSB0b2tlbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBpdCBoYXMgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBEZXRlcm1pbmlzdGljIHRva2VucyBhcmUgaW50ZW5kZWQgZm9yIHVzZSB3aXRoIGBjcmVhdGVIb29rKClgIGFuZFxuICAgKiBzZXJ2ZXItc2lkZSBgcmVzdW1lSG9vaygpYCBvbmx5LiBGb3Igd2ViaG9va3MgKGBjcmVhdGVXZWJob29rKClgKSxcbiAgICogdG9rZW5zIGFyZSBhbHdheXMgcmFuZG9tbHkgZ2VuZXJhdGVkIHRvIHByZXZlbnQgdW5hdXRob3JpemVkIGFjY2Vzc1xuICAgKiB0byB0aGUgcHVibGljIHdlYmhvb2sgZW5kcG9pbnQuXG4gICAqXG4gICAqIElmIHByb3ZpZGVkLCB0aGUgdG9rZW4gbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmc7IHBhc3NpbmcgYW4gZW1wdHlcbiAgICogc3RyaW5nIHRocm93cy4gSWYgbm90IHByb3ZpZGVkIChvciBgdW5kZWZpbmVkYCksIGEgcmFuZG9tbHkgZ2VuZXJhdGVkXG4gICAqIHRva2VuIHdpbGwgYmUgYXNzaWduZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIGBgYHRzXG4gICAqIC8vIEV4cGxpY2l0IHRva2VuIGZvciBhIFNsYWNrIGJvdCAob25lIHdvcmtmbG93IHJ1biBwZXIgY2hhbm5lbClcbiAgICogY29uc3QgaG9vayA9IGNyZWF0ZUhvb2s8U2xhY2tNZXNzYWdlPih7XG4gICAqICAgdG9rZW46IGBzbGFja193ZWJob29rOiR7Y2hhbm5lbElkfWAsXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHRva2VuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHVzZXItZGVmaW5lZCBkYXRhIHRvIGluY2x1ZGUgd2l0aCB0aGUgaG9vayBwYXlsb2FkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBob29rID0gY3JlYXRlSG9vazx7IG5hbWU6IHN0cmluZyB9Pih7XG4gICAqICAgbWV0YWRhdGE6IHtcbiAgICogICAgIHR5cGU6IFwiY2F0XCIsXG4gICAqICAgICBjb2xvcjogXCJvcmFuZ2VcIixcbiAgICogICB9LFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBtZXRhZGF0YT86IFNlcmlhbGl6YWJsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGhvb2sgY2FuIGJlIHJlc3VtZWQgdmlhIHRoZSBwdWJsaWMgd2ViaG9vayBlbmRwb2ludC5cbiAgICpcbiAgICogV2hlbiBgdHJ1ZWAsIHRoZSBob29rIGNhbiBiZSB0cmlnZ2VyZWQgYnkgc2VuZGluZyBhbiBIVFRQIHJlcXVlc3QgdG8gdGhlXG4gICAqIHB1YmxpYyB3b3JrZmxvdyB3ZWJob29rIFVSTC4gVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHNldCB3aGVuIHVzaW5nXG4gICAqIGBjcmVhdGVXZWJob29rKClgLlxuICAgKlxuICAgKiBXaGVuIGBmYWxzZWAgKHRoZSBkZWZhdWx0KSwgdGhlIGhvb2sgY2FuIG9ubHkgYmUgcmVzdW1lZCBzZXJ2ZXItc2lkZVxuICAgKiB2aWEgYHJlc3VtZUhvb2soKWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpc1dlYmhvb2s/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tPcHRpb25zXG4gIGV4dGVuZHMgT21pdDxIb29rT3B0aW9ucywgJ3Rva2VuJyB8ICdpc1dlYmhvb2snPiB7XG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gYSBgUmVzcG9uc2VgIG9iamVjdCwgdGhlIHdlYmhvb2sgd2lsbCBhdXRvbWF0aWNhbGx5XG4gICAqIHJlc3BvbmQgd2l0aCB0aGUgc3BlY2lmaWVkIHJlc3BvbnNlLlxuICAgKlxuICAgKiBJZiBzZXQgdG8gYFwibWFudWFsXCJgLCBlYWNoIGluZGl2aWR1YWwgcmVxdWVzdCB3aWxsIG5lZWQgdG9cbiAgICogYmUgcmVzcG9uZGVkIHRvIG1hbnVhbGx5IGZyb20gd2l0aGluIHRoZSB3b3JrZmxvdyBieSBjYWxsaW5nIHRoZVxuICAgKiBgcmVzcG9uZFdpdGgoKWAgbWV0aG9kLlxuICAgKlxuICAgKiBJZiBub3Qgc2V0IHRoZW4gdGhlIHdlYmhvb2sgd2lsbCBhdXRvbWF0aWNhbGx5IHJlc3BvbmQgd2l0aFxuICAgKiBhIGAyMDIgQWNjZXB0ZWRgIHJlc3BvbnNlLlxuICAgKi9cbiAgcmVzcG9uZFdpdGg/OiBSZXNwb25zZSB8ICdtYW51YWwnO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgSG9va30gdGhhdCBjYW4gYmUgdXNlZCB0byBzdXNwZW5kIGFuZCByZXN1bWUgdGhlIHdvcmtmbG93IHJ1biB3aXRoIGEgcGF5bG9hZC5cbiAqXG4gKiBIb29rcyBhbGxvdyBleHRlcm5hbCBzeXN0ZW1zIHRvIHNlbmQgYXJiaXRyYXJ5IHNlcmlhbGl6YWJsZSBkYXRhIGludG8gYSB3b3JrZmxvdy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGhvb2suXG4gKiBAcmV0dXJucyBBIGBIb29rYCB0aGF0IGNhbiBiZSBhd2FpdGVkIHRvIHJlY2VpdmUgb25lIG9yIG1vcmUgcGF5bG9hZHMuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGB0c1xuICogZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdvcmtmbG93V2l0aEhvb2soKSB7XG4gKiAgIFwidXNlIHdvcmtmbG93XCI7XG4gKlxuICogICBjb25zdCBob29rID0gY3JlYXRlSG9vazx7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICogICBjb25zb2xlLmxvZygnSG9vayB0b2tlbjonLCBob29rLnRva2VuKTtcbiAqXG4gKiAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBob29rO1xuICogICBjb25zb2xlLmxvZygnUmVjZWl2ZWQ6JywgcGF5bG9hZC5tZXNzYWdlKTtcbiAqIH1cbiAqIGBgYFxuICovXG4vLyBAdHMtZXhwZWN0LWVycm9yIGBvcHRpb25zYCBpcyBoZXJlIGZvciB0eXBlcy9kb2NzXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSG9vazxUID0gYW55PihvcHRpb25zPzogSG9va09wdGlvbnMpOiBIb29rPFQ+IHtcbiAgdGhyb3dOb3RJbldvcmtmbG93Q29udGV4dChcbiAgICAnY3JlYXRlSG9vaygpJyxcbiAgICAnaHR0cHM6Ly93b3JrZmxvdy1zZGsuZGV2L2RvY3MvYXBpLXJlZmVyZW5jZS93b3JrZmxvdy9jcmVhdGUtaG9vaycsXG4gICAgY3JlYXRlSG9va1xuICApO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgV2ViaG9va30gdGhhdCBjYW4gYmUgdXNlZCB0byBzdXNwZW5kIGFuZCByZXN1bWUgdGhlIHdvcmtmbG93XG4gKiBydW4gdXBvbiByZWNlaXZpbmcgYW4gSFRUUCByZXF1ZXN0IHRvIHRoZSBzcGVjaWZpZWQgVVJMLlxuICpcbiAqIFdlYmhvb2tzIHdpbGwgcmVzdWx0IGluIGEge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXF1ZXN0IHwgUmVxdWVzdH0gb2JqZWN0XG4gKiB0aGF0IGNhbiBiZSBpbnRlcmFjdGVkIHdpdGggaW4gd29ya2Zsb3cgZnVuY3Rpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2ViaG9vayhcbiAgb3B0aW9uczogV2ViaG9va09wdGlvbnMgJiB7IHJlc3BvbmRXaXRoOiAnbWFudWFsJyB9XG4pOiBXZWJob29rPFJlcXVlc3RXaXRoUmVzcG9uc2U+O1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdlYmhvb2sob3B0aW9ucz86IFdlYmhvb2tPcHRpb25zKTogV2ViaG9vazxSZXF1ZXN0PjtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXZWJob29rKFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGBvcHRpb25zYCBpcyBoZXJlIGZvciB0eXBlcy9kb2NzXG4gIG9wdGlvbnM/OiBXZWJob29rT3B0aW9uc1xuKTogV2ViaG9vazxSZXF1ZXN0PiB8IFdlYmhvb2s8UmVxdWVzdFdpdGhSZXNwb25zZT4ge1xuICB0aHJvd05vdEluV29ya2Zsb3dDb250ZXh0KFxuICAgICdjcmVhdGVXZWJob29rKCknLFxuICAgICdodHRwczovL3dvcmtmbG93LXNkay5kZXYvZG9jcy9hcGktcmVmZXJlbmNlL3dvcmtmbG93L2NyZWF0ZS13ZWJob29rJyxcbiAgICBjcmVhdGVXZWJob29rXG4gICk7XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"define-hook.d.ts","sourceRoot":"","sources":["../src/define-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG1D;;GAEG;AACH,MAAM,WAAW,SAAS,CAAC,MAAM,EAAE,OAAO;IACxC;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC7D;AAED,yBAAiB,SAAS,CAAC;IACzB;;OAEG;IACH,KAAY,KAAK,CAAC,CAAC,SAAS,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,IAC7C,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;CACjD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,EACnD,MAAM,GACP,GAAE;IACD,MAAM,CAAC,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAyBlC"}
1
+ {"version":3,"file":"define-hook.d.ts","sourceRoot":"","sources":["../src/define-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG1D;;GAEG;AACH,MAAM,WAAW,SAAS,CAAC,MAAM,EAAE,OAAO;IACxC;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC7D;AAED,yBAAiB,SAAS,CAAC;IACzB;;OAEG;IACH,KAAY,KAAK,CAAC,CAAC,SAAS,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,IAC7C,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;CACjD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,EACnD,MAAM,GACP,GAAE;IACD,MAAM,CAAC,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CA8ClC"}
@@ -1,3 +1,4 @@
1
+ import { throwNotInWorkflowContext } from './context-errors.js';
1
2
  import { resumeHook } from './runtime/resume-hook.js';
2
3
  /**
3
4
  * Defines a typed hook for type-safe hook creation and resumption.
@@ -31,10 +32,14 @@ import { resumeHook } from './runtime/resume-hook.js';
31
32
  * ```
32
33
  */
33
34
  export function defineHook({ schema, } = {}) {
35
+ function create(_options) {
36
+ // NOTE: `create` is referenced by name (not `this.create`) so the stack
37
+ // strip still works if the caller destructured the hook (`const { create }
38
+ // = defineHook(); create()`) — in that case `this` is undefined.
39
+ throwNotInWorkflowContext('defineHook().create()', 'https://workflow-sdk.dev/docs/api-reference/workflow/define-hook', create);
40
+ }
34
41
  return {
35
- create(_options) {
36
- throw new Error('`defineHook().create()` can only be called inside a workflow function.');
37
- },
42
+ create,
38
43
  async resume(token, payload) {
39
44
  if (!schema?.['~standard']) {
40
45
  return await resumeHook(token, payload);
@@ -45,10 +50,20 @@ export function defineHook({ schema, } = {}) {
45
50
  }
46
51
  // if the `issues` field exists, the validation failed
47
52
  if (result.issues) {
48
- throw new Error(JSON.stringify(result.issues, null, 2));
53
+ const lines = result.issues.map((issue) => {
54
+ const path = issue.path
55
+ ?.map((segment) => typeof segment === 'object' && segment !== null
56
+ ? String(segment.key)
57
+ : String(segment))
58
+ .join('.');
59
+ return path
60
+ ? ` at "${path}": ${issue.message}`
61
+ : ` ${issue.message}`;
62
+ });
63
+ throw new Error(`Hook payload did not match the defined schema:\n${lines.join('\n')}`);
49
64
  }
50
65
  return await resumeHook(token, result.value);
51
66
  },
52
67
  };
53
68
  }
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5lLWhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGVmaW5lLWhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBbUN0RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBMkIsRUFDbkQsTUFBTSxNQUdKLEVBQUU7SUFDSixPQUFPO1FBQ0wsTUFBTSxDQUFDLFFBQXNCO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQ2Isd0VBQXdFLENBQ3pFLENBQUM7UUFDSixDQUFDO1FBQ0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFhLEVBQUUsT0FBZTtZQUN6QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsT0FBTyxNQUFNLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDMUMsQ0FBQztZQUVELElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkQsSUFBSSxNQUFNLFlBQVksT0FBTyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQztZQUN4QixDQUFDO1lBRUQsc0RBQXNEO1lBQ3RELElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRCxDQUFDO1lBRUQsT0FBTyxNQUFNLFVBQVUsQ0FBVSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hELENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3RhbmRhcmRTY2hlbWFWMSB9IGZyb20gJ0BzdGFuZGFyZC1zY2hlbWEvc3BlYyc7XG5pbXBvcnQgdHlwZSB7IEhvb2sgYXMgSG9va0VudGl0eSB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IEhvb2ssIEhvb2tPcHRpb25zIH0gZnJvbSAnLi9jcmVhdGUtaG9vay5qcyc7XG5pbXBvcnQgeyByZXN1bWVIb29rIH0gZnJvbSAnLi9ydW50aW1lL3Jlc3VtZS1ob29rLmpzJztcblxuLyoqXG4gKiBBIHR5cGVkIGhvb2sgaW50ZXJmYWNlIGZvciB0eXBlLXNhZmUgaG9vayBjcmVhdGlvbiBhbmQgcmVzdW1wdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeXBlZEhvb2s8VElucHV0LCBUT3V0cHV0PiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGhvb2sgd2l0aCB0aGUgZGVmaW5lZCBvdXRwdXQgdHlwZS5cbiAgICpcbiAgICogTm90ZTogVGhpcyBtZXRob2QgaXMgbm90IGF2YWlsYWJsZSBpbiBydW50aW1lIGJ1bmRsZXMuIFVzZSBpdCBmcm9tIHdvcmtmbG93IGNvbnRleHRzIG9ubHkuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgaG9vayBjb25maWd1cmF0aW9uXG4gICAqIEByZXR1cm5zIEEgSG9vayB0aGF0IHJlc29sdmVzIHRvIHRoZSBkZWZpbmVkIG91dHB1dCB0eXBlXG4gICAqL1xuICBjcmVhdGUob3B0aW9ucz86IEhvb2tPcHRpb25zKTogSG9vazxUT3V0cHV0PjtcbiAgLyoqXG4gICAqIFJlc3VtZXMgYSBob29rIGJ5IHNlbmRpbmcgYSBwYXlsb2FkIHdpdGggdGhlIGRlZmluZWQgaW5wdXQgdHlwZS5cbiAgICogVGhpcyBpcyBhIHR5cGUtc2FmZSB3cmFwcGVyIGFyb3VuZCB0aGUgYHJlc3VtZUhvb2tgIHJ1bnRpbWUgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB1bmlxdWUgdG9rZW4gaWRlbnRpZnlpbmcgdGhlIGhvb2tcbiAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCB0byBzZW5kOyBpZiBhIGBzY2hlbWFgIGlzIGNvbmZpZ3VyZWQgaXQgaXMgdmFsaWRhdGVkL3RyYW5zZm9ybWVkIGJlZm9yZSByZXN1bWluZ1xuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgaG9vayBlbnRpdHlcbiAgICogQHRocm93cyBFcnJvciBpZiB0aGUgaG9vayBpcyBub3QgZm91bmQgb3IgaWYgdGhlcmUncyBhbiBlcnJvciBkdXJpbmcgdGhlIHByb2Nlc3NcbiAgICovXG4gIHJlc3VtZSh0b2tlbjogc3RyaW5nLCBwYXlsb2FkOiBUSW5wdXQpOiBQcm9taXNlPEhvb2tFbnRpdHk+O1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFR5cGVkSG9vayB7XG4gIC8qKlxuICAgKiBFeHRyYWN0cyB0aGUgaW5wdXQgdHlwZSBmcm9tIGEge0BsaW5rIFR5cGVkSG9va31cbiAgICovXG4gIGV4cG9ydCB0eXBlIElucHV0PFQgZXh0ZW5kcyBUeXBlZEhvb2s8YW55LCBhbnk+PiA9XG4gICAgVCBleHRlbmRzIFR5cGVkSG9vazxpbmZlciBJLCBhbnk+ID8gSSA6IG5ldmVyO1xufVxuXG4vKipcbiAqIERlZmluZXMgYSB0eXBlZCBob29rIGZvciB0eXBlLXNhZmUgaG9vayBjcmVhdGlvbiBhbmQgcmVzdW1wdGlvbi5cbiAqXG4gKiBUaGlzIGhlbHBlciBwcm92aWRlcyB0eXBlIHNhZmV0eSBieSBhbGxvd2luZyB5b3UgdG8gZGVmaW5lIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHR5cGVzXG4gKiBmb3IgdGhlIGhvb2sncyBwYXlsb2FkLCB3aXRoIG9wdGlvbmFsIHZhbGlkYXRpb24gYW5kIHRyYW5zZm9ybWF0aW9uIHZpYSBhIHNjaGVtYS5cbiAqXG4gKiBAcGFyYW0gc2NoZW1hIC0gU2NoZW1hIHVzZWQgdG8gdmFsaWRhdGUgYW5kIHRyYW5zZm9ybSB0aGUgaW5wdXQgcGF5bG9hZCBiZWZvcmUgcmVzdW1pbmdcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGBjcmVhdGVgIGFuZCBgcmVzdW1lYCBmdW5jdGlvbnMgcHJlLXR5cGVkIHdpdGggdGhlIGlucHV0IGFuZCBvdXRwdXQgdHlwZXNcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzXG4gKiAvLyBEZWZpbmUgYSBob29rIHdpdGggYSBzcGVjaWZpYyBwYXlsb2FkIHR5cGVcbiAqIGNvbnN0IGFwcHJvdmFsSG9vayA9IGRlZmluZUhvb2s8eyBhcHByb3ZlZDogYm9vbGVhbjsgY29tbWVudDogc3RyaW5nIH0+KCk7XG4gKlxuICogLy8gSW4gYSB3b3JrZmxvd1xuICogZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdvcmtmbG93V2l0aEFwcHJvdmFsKCkge1xuICogICBcInVzZSB3b3JrZmxvd1wiO1xuICpcbiAqICAgY29uc3QgaG9vayA9IGFwcHJvdmFsSG9vay5jcmVhdGUoKTtcbiAqICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaG9vazsgLy8gRnVsbHkgdHlwZWQgYXMgeyBhcHByb3ZlZDogYm9vbGVhbjsgY29tbWVudDogc3RyaW5nOyB9XG4gKiB9XG4gKlxuICogLy8gSW4gYW4gQVBJIHJvdXRlXG4gKiBleHBvcnQgYXN5bmMgZnVuY3Rpb24gUE9TVChyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gKiAgIGNvbnN0IHsgdG9rZW4sIGFwcHJvdmVkLCBjb21tZW50IH0gPSBhd2FpdCByZXF1ZXN0Lmpzb24oKTtcbiAqICAgYXdhaXQgYXBwcm92YWxIb29rLnJlc3VtZSh0b2tlbiwgeyBhcHByb3ZlZCwgY29tbWVudCB9KTsgLy8gSW5wdXQgdHlwZVxuICogICByZXR1cm4gUmVzcG9uc2UuanNvbih7IHN1Y2Nlc3M6IHRydWUgfSk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUhvb2s8VElucHV0LCBUT3V0cHV0ID0gVElucHV0Pih7XG4gIHNjaGVtYSxcbn06IHtcbiAgc2NoZW1hPzogU3RhbmRhcmRTY2hlbWFWMTxUSW5wdXQsIFRPdXRwdXQ+O1xufSA9IHt9KTogVHlwZWRIb29rPFRJbnB1dCwgVE91dHB1dD4ge1xuICByZXR1cm4ge1xuICAgIGNyZWF0ZShfb3B0aW9ucz86IEhvb2tPcHRpb25zKTogSG9vazxUT3V0cHV0PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdgZGVmaW5lSG9vaygpLmNyZWF0ZSgpYCBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIGEgd29ya2Zsb3cgZnVuY3Rpb24uJ1xuICAgICAgKTtcbiAgICB9LFxuICAgIGFzeW5jIHJlc3VtZSh0b2tlbjogc3RyaW5nLCBwYXlsb2FkOiBUSW5wdXQpOiBQcm9taXNlPEhvb2tFbnRpdHk+IHtcbiAgICAgIGlmICghc2NoZW1hPy5bJ35zdGFuZGFyZCddKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZXN1bWVIb29rKHRva2VuLCBwYXlsb2FkKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlc3VsdCA9IHNjaGVtYVsnfnN0YW5kYXJkJ10udmFsaWRhdGUocGF5bG9hZCk7XG4gICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHRoZSBgaXNzdWVzYCBmaWVsZCBleGlzdHMsIHRoZSB2YWxpZGF0aW9uIGZhaWxlZFxuICAgICAgaWYgKHJlc3VsdC5pc3N1ZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHJlc3VsdC5pc3N1ZXMsIG51bGwsIDIpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3VtZUhvb2s8VE91dHB1dD4odG9rZW4sIHJlc3VsdC52YWx1ZSk7XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5lLWhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGVmaW5lLWhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBbUN0RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBMkIsRUFDbkQsTUFBTSxNQUdKLEVBQUU7SUFDSixTQUFTLE1BQU0sQ0FBQyxRQUFzQjtRQUNwQyx3RUFBd0U7UUFDeEUsMkVBQTJFO1FBQzNFLGlFQUFpRTtRQUNqRSx5QkFBeUIsQ0FDdkIsdUJBQXVCLEVBQ3ZCLGtFQUFrRSxFQUNsRSxNQUFNLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTTtRQUNOLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBYSxFQUFFLE9BQWU7WUFDekMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sTUFBTSxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLENBQUM7WUFFRCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25ELElBQUksTUFBTSxZQUFZLE9BQU8sRUFBRSxDQUFDO2dCQUM5QixNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUM7WUFDeEIsQ0FBQztZQUVELHNEQUFzRDtZQUN0RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDeEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUk7d0JBQ3JCLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDaEIsT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxJQUFJO3dCQUM3QyxDQUFDLENBQUMsTUFBTSxDQUFFLE9BQWdDLENBQUMsR0FBRyxDQUFDO3dCQUMvQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUNwQjt5QkFDQSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2IsT0FBTyxJQUFJO3dCQUNULENBQUMsQ0FBQyxTQUFTLElBQUksTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFO3dCQUNwQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzNCLENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU0sSUFBSSxLQUFLLENBQ2IsbURBQW1ELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDdEUsQ0FBQztZQUNKLENBQUM7WUFFRCxPQUFPLE1BQU0sVUFBVSxDQUFVLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEQsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTdGFuZGFyZFNjaGVtYVYxIH0gZnJvbSAnQHN0YW5kYXJkLXNjaGVtYS9zcGVjJztcbmltcG9ydCB0eXBlIHsgSG9vayBhcyBIb29rRW50aXR5IH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IHRocm93Tm90SW5Xb3JrZmxvd0NvbnRleHQgfSBmcm9tICcuL2NvbnRleHQtZXJyb3JzLmpzJztcbmltcG9ydCB0eXBlIHsgSG9vaywgSG9va09wdGlvbnMgfSBmcm9tICcuL2NyZWF0ZS1ob29rLmpzJztcbmltcG9ydCB7IHJlc3VtZUhvb2sgfSBmcm9tICcuL3J1bnRpbWUvcmVzdW1lLWhvb2suanMnO1xuXG4vKipcbiAqIEEgdHlwZWQgaG9vayBpbnRlcmZhY2UgZm9yIHR5cGUtc2FmZSBob29rIGNyZWF0aW9uIGFuZCByZXN1bXB0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVkSG9vazxUSW5wdXQsIFRPdXRwdXQ+IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaG9vayB3aXRoIHRoZSBkZWZpbmVkIG91dHB1dCB0eXBlLlxuICAgKlxuICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBpcyBub3QgYXZhaWxhYmxlIGluIHJ1bnRpbWUgYnVuZGxlcy4gVXNlIGl0IGZyb20gd29ya2Zsb3cgY29udGV4dHMgb25seS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBob29rIGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybnMgQSBIb29rIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGRlZmluZWQgb3V0cHV0IHR5cGVcbiAgICovXG4gIGNyZWF0ZShvcHRpb25zPzogSG9va09wdGlvbnMpOiBIb29rPFRPdXRwdXQ+O1xuICAvKipcbiAgICogUmVzdW1lcyBhIGhvb2sgYnkgc2VuZGluZyBhIHBheWxvYWQgd2l0aCB0aGUgZGVmaW5lZCBpbnB1dCB0eXBlLlxuICAgKiBUaGlzIGlzIGEgdHlwZS1zYWZlIHdyYXBwZXIgYXJvdW5kIHRoZSBgcmVzdW1lSG9va2AgcnVudGltZSBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHVuaXF1ZSB0b2tlbiBpZGVudGlmeWluZyB0aGUgaG9va1xuICAgKiBAcGFyYW0gcGF5bG9hZCAtIFRoZSBwYXlsb2FkIHRvIHNlbmQ7IGlmIGEgYHNjaGVtYWAgaXMgY29uZmlndXJlZCBpdCBpcyB2YWxpZGF0ZWQvdHJhbnNmb3JtZWQgYmVmb3JlIHJlc3VtaW5nXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBob29rIGVudGl0eVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBob29rIGlzIG5vdCBmb3VuZCBvciBpZiB0aGVyZSdzIGFuIGVycm9yIGR1cmluZyB0aGUgcHJvY2Vzc1xuICAgKi9cbiAgcmVzdW1lKHRva2VuOiBzdHJpbmcsIHBheWxvYWQ6IFRJbnB1dCk6IFByb21pc2U8SG9va0VudGl0eT47XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgVHlwZWRIb29rIHtcbiAgLyoqXG4gICAqIEV4dHJhY3RzIHRoZSBpbnB1dCB0eXBlIGZyb20gYSB7QGxpbmsgVHlwZWRIb29rfVxuICAgKi9cbiAgZXhwb3J0IHR5cGUgSW5wdXQ8VCBleHRlbmRzIFR5cGVkSG9vazxhbnksIGFueT4+ID1cbiAgICBUIGV4dGVuZHMgVHlwZWRIb29rPGluZmVyIEksIGFueT4gPyBJIDogbmV2ZXI7XG59XG5cbi8qKlxuICogRGVmaW5lcyBhIHR5cGVkIGhvb2sgZm9yIHR5cGUtc2FmZSBob29rIGNyZWF0aW9uIGFuZCByZXN1bXB0aW9uLlxuICpcbiAqIFRoaXMgaGVscGVyIHByb3ZpZGVzIHR5cGUgc2FmZXR5IGJ5IGFsbG93aW5nIHlvdSB0byBkZWZpbmUgdGhlIGlucHV0IGFuZCBvdXRwdXQgdHlwZXNcbiAqIGZvciB0aGUgaG9vaydzIHBheWxvYWQsIHdpdGggb3B0aW9uYWwgdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb24gdmlhIGEgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSBzY2hlbWEgLSBTY2hlbWEgdXNlZCB0byB2YWxpZGF0ZSBhbmQgdHJhbnNmb3JtIHRoZSBpbnB1dCBwYXlsb2FkIGJlZm9yZSByZXN1bWluZ1xuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggYGNyZWF0ZWAgYW5kIGByZXN1bWVgIGZ1bmN0aW9ucyBwcmUtdHlwZWQgd2l0aCB0aGUgaW5wdXQgYW5kIG91dHB1dCB0eXBlc1xuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHNcbiAqIC8vIERlZmluZSBhIGhvb2sgd2l0aCBhIHNwZWNpZmljIHBheWxvYWQgdHlwZVxuICogY29uc3QgYXBwcm92YWxIb29rID0gZGVmaW5lSG9vazx7IGFwcHJvdmVkOiBib29sZWFuOyBjb21tZW50OiBzdHJpbmcgfT4oKTtcbiAqXG4gKiAvLyBJbiBhIHdvcmtmbG93XG4gKiBleHBvcnQgYXN5bmMgZnVuY3Rpb24gd29ya2Zsb3dXaXRoQXBwcm92YWwoKSB7XG4gKiAgIFwidXNlIHdvcmtmbG93XCI7XG4gKlxuICogICBjb25zdCBob29rID0gYXBwcm92YWxIb29rLmNyZWF0ZSgpO1xuICogICBjb25zdCByZXN1bHQgPSBhd2FpdCBob29rOyAvLyBGdWxseSB0eXBlZCBhcyB7IGFwcHJvdmVkOiBib29sZWFuOyBjb21tZW50OiBzdHJpbmc7IH1cbiAqIH1cbiAqXG4gKiAvLyBJbiBhbiBBUEkgcm91dGVcbiAqIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBQT1NUKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAqICAgY29uc3QgeyB0b2tlbiwgYXBwcm92ZWQsIGNvbW1lbnQgfSA9IGF3YWl0IHJlcXVlc3QuanNvbigpO1xuICogICBhd2FpdCBhcHByb3ZhbEhvb2sucmVzdW1lKHRva2VuLCB7IGFwcHJvdmVkLCBjb21tZW50IH0pOyAvLyBJbnB1dCB0eXBlXG4gKiAgIHJldHVybiBSZXNwb25zZS5qc29uKHsgc3VjY2VzczogdHJ1ZSB9KTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lSG9vazxUSW5wdXQsIFRPdXRwdXQgPSBUSW5wdXQ+KHtcbiAgc2NoZW1hLFxufToge1xuICBzY2hlbWE/OiBTdGFuZGFyZFNjaGVtYVYxPFRJbnB1dCwgVE91dHB1dD47XG59ID0ge30pOiBUeXBlZEhvb2s8VElucHV0LCBUT3V0cHV0PiB7XG4gIGZ1bmN0aW9uIGNyZWF0ZShfb3B0aW9ucz86IEhvb2tPcHRpb25zKTogSG9vazxUT3V0cHV0PiB7XG4gICAgLy8gTk9URTogYGNyZWF0ZWAgaXMgcmVmZXJlbmNlZCBieSBuYW1lIChub3QgYHRoaXMuY3JlYXRlYCkgc28gdGhlIHN0YWNrXG4gICAgLy8gc3RyaXAgc3RpbGwgd29ya3MgaWYgdGhlIGNhbGxlciBkZXN0cnVjdHVyZWQgdGhlIGhvb2sgKGBjb25zdCB7IGNyZWF0ZSB9XG4gICAgLy8gPSBkZWZpbmVIb29rKCk7IGNyZWF0ZSgpYCkg4oCUIGluIHRoYXQgY2FzZSBgdGhpc2AgaXMgdW5kZWZpbmVkLlxuICAgIHRocm93Tm90SW5Xb3JrZmxvd0NvbnRleHQoXG4gICAgICAnZGVmaW5lSG9vaygpLmNyZWF0ZSgpJyxcbiAgICAgICdodHRwczovL3dvcmtmbG93LXNkay5kZXYvZG9jcy9hcGktcmVmZXJlbmNlL3dvcmtmbG93L2RlZmluZS1ob29rJyxcbiAgICAgIGNyZWF0ZVxuICAgICk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNyZWF0ZSxcbiAgICBhc3luYyByZXN1bWUodG9rZW46IHN0cmluZywgcGF5bG9hZDogVElucHV0KTogUHJvbWlzZTxIb29rRW50aXR5PiB7XG4gICAgICBpZiAoIXNjaGVtYT8uWyd+c3RhbmRhcmQnXSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVzdW1lSG9vayh0b2tlbiwgcGF5bG9hZCk7XG4gICAgICB9XG5cbiAgICAgIGxldCByZXN1bHQgPSBzY2hlbWFbJ35zdGFuZGFyZCddLnZhbGlkYXRlKHBheWxvYWQpO1xuICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgYGlzc3Vlc2AgZmllbGQgZXhpc3RzLCB0aGUgdmFsaWRhdGlvbiBmYWlsZWRcbiAgICAgIGlmIChyZXN1bHQuaXNzdWVzKSB7XG4gICAgICAgIGNvbnN0IGxpbmVzID0gcmVzdWx0Lmlzc3Vlcy5tYXAoKGlzc3VlKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IGlzc3VlLnBhdGhcbiAgICAgICAgICAgID8ubWFwKChzZWdtZW50KSA9PlxuICAgICAgICAgICAgICB0eXBlb2Ygc2VnbWVudCA9PT0gJ29iamVjdCcgJiYgc2VnbWVudCAhPT0gbnVsbFxuICAgICAgICAgICAgICAgID8gU3RyaW5nKChzZWdtZW50IGFzIHsga2V5OiBQcm9wZXJ0eUtleSB9KS5rZXkpXG4gICAgICAgICAgICAgICAgOiBTdHJpbmcoc2VnbWVudClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5qb2luKCcuJyk7XG4gICAgICAgICAgcmV0dXJuIHBhdGhcbiAgICAgICAgICAgID8gYCAgYXQgXCIke3BhdGh9XCI6ICR7aXNzdWUubWVzc2FnZX1gXG4gICAgICAgICAgICA6IGAgICR7aXNzdWUubWVzc2FnZX1gO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBIb29rIHBheWxvYWQgZGlkIG5vdCBtYXRjaCB0aGUgZGVmaW5lZCBzY2hlbWE6XFxuJHtsaW5lcy5qb2luKCdcXG4nKX1gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN1bWVIb29rPFRPdXRwdXQ+KHRva2VuLCByZXN1bHQudmFsdWUpO1xuICAgIH0sXG4gIH07XG59XG4iXX0=