@workflow/core 5.0.0-beta.4 → 5.0.0-beta.41

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 (322) 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 +33 -1
  5. package/dist/capabilities.d.ts.map +1 -1
  6. package/dist/capabilities.js +71 -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 +109 -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 +149 -0
  22. package/dist/create-hook.d.ts +62 -4
  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 +189 -0
  30. package/dist/encryption.d.ts +37 -3
  31. package/dist/encryption.d.ts.map +1 -1
  32. package/dist/encryption.js +97 -31
  33. package/dist/events-consumer.d.ts +147 -1
  34. package/dist/events-consumer.d.ts.map +1 -1
  35. package/dist/events-consumer.js +444 -43
  36. package/dist/flushable-stream.d.ts +65 -10
  37. package/dist/flushable-stream.d.ts.map +1 -1
  38. package/dist/flushable-stream.js +131 -18
  39. package/dist/global.d.ts +37 -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 +246 -8
  52. package/dist/private.d.ts.map +1 -1
  53. package/dist/private.js +345 -9
  54. package/dist/replay-payload-cache.d.ts +68 -0
  55. package/dist/replay-payload-cache.d.ts.map +1 -0
  56. package/dist/replay-payload-cache.js +160 -0
  57. package/dist/runtime/compute-instance.d.ts +12 -0
  58. package/dist/runtime/compute-instance.d.ts.map +1 -0
  59. package/dist/runtime/compute-instance.js +13 -0
  60. package/dist/runtime/constants.d.ts +251 -0
  61. package/dist/runtime/constants.d.ts.map +1 -1
  62. package/dist/runtime/constants.js +425 -16
  63. package/dist/runtime/count-step-started-events.d.ts +52 -0
  64. package/dist/runtime/count-step-started-events.d.ts.map +1 -0
  65. package/dist/runtime/count-step-started-events.js +72 -0
  66. package/dist/runtime/deployment-guard.d.ts +99 -0
  67. package/dist/runtime/deployment-guard.d.ts.map +1 -0
  68. package/dist/runtime/deployment-guard.js +154 -0
  69. package/dist/runtime/get-port-lazy.d.ts +25 -0
  70. package/dist/runtime/get-port-lazy.d.ts.map +1 -0
  71. package/dist/runtime/get-port-lazy.js +92 -0
  72. package/dist/runtime/get-world-lazy.d.ts +23 -0
  73. package/dist/runtime/get-world-lazy.d.ts.map +1 -0
  74. package/dist/runtime/get-world-lazy.js +46 -0
  75. package/dist/runtime/helpers.d.ts +327 -10
  76. package/dist/runtime/helpers.d.ts.map +1 -1
  77. package/dist/runtime/helpers.js +586 -40
  78. package/dist/runtime/quickjs-assets.generated.d.ts +14 -0
  79. package/dist/runtime/quickjs-assets.generated.d.ts.map +1 -0
  80. package/dist/runtime/quickjs-assets.generated.js +30 -0
  81. package/dist/runtime/quickjs-entrypoint.d.ts +124 -0
  82. package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -0
  83. package/dist/runtime/quickjs-entrypoint.js +1437 -0
  84. package/dist/runtime/quickjs-runtime.d.ts +228 -0
  85. package/dist/runtime/quickjs-runtime.d.ts.map +1 -0
  86. package/dist/runtime/quickjs-runtime.js +2372 -0
  87. package/dist/runtime/quickjs-serde.d.ts +107 -0
  88. package/dist/runtime/quickjs-serde.d.ts.map +1 -0
  89. package/dist/runtime/quickjs-serde.js +2098 -0
  90. package/dist/runtime/replay-budget.d.ts +89 -0
  91. package/dist/runtime/replay-budget.d.ts.map +1 -0
  92. package/dist/runtime/replay-budget.js +139 -0
  93. package/dist/runtime/replay-recovery-reporter.d.ts +36 -0
  94. package/dist/runtime/replay-recovery-reporter.d.ts.map +1 -0
  95. package/dist/runtime/replay-recovery-reporter.js +64 -0
  96. package/dist/runtime/resume-hook.d.ts +27 -4
  97. package/dist/runtime/resume-hook.d.ts.map +1 -1
  98. package/dist/runtime/resume-hook.js +452 -76
  99. package/dist/runtime/run-id-time.d.ts +19 -0
  100. package/dist/runtime/run-id-time.d.ts.map +1 -0
  101. package/dist/runtime/run-id-time.js +42 -0
  102. package/dist/runtime/run.d.ts +8 -2
  103. package/dist/runtime/run.d.ts.map +1 -1
  104. package/dist/runtime/run.js +62 -15
  105. package/dist/runtime/runs.d.ts +54 -3
  106. package/dist/runtime/runs.d.ts.map +1 -1
  107. package/dist/runtime/runs.js +119 -13
  108. package/dist/runtime/start.d.ts +70 -1
  109. package/dist/runtime/start.d.ts.map +1 -1
  110. package/dist/runtime/start.js +313 -60
  111. package/dist/runtime/step-executor.d.ts +177 -0
  112. package/dist/runtime/step-executor.d.ts.map +1 -0
  113. package/dist/runtime/step-executor.js +946 -0
  114. package/dist/runtime/step-latency.d.ts +197 -0
  115. package/dist/runtime/step-latency.d.ts.map +1 -0
  116. package/dist/runtime/step-latency.js +207 -0
  117. package/dist/runtime/step-ownership.d.ts +72 -0
  118. package/dist/runtime/step-ownership.d.ts.map +1 -0
  119. package/dist/runtime/step-ownership.js +114 -0
  120. package/dist/runtime/step-single-flight.d.ts +12 -0
  121. package/dist/runtime/step-single-flight.d.ts.map +1 -0
  122. package/dist/runtime/step-single-flight.js +69 -0
  123. package/dist/runtime/suspension-handler.d.ts +109 -7
  124. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  125. package/dist/runtime/suspension-handler.js +486 -140
  126. package/dist/runtime/vm-mode.d.ts +44 -0
  127. package/dist/runtime/vm-mode.d.ts.map +1 -0
  128. package/dist/runtime/vm-mode.js +62 -0
  129. package/dist/runtime/vm-serde-bundle.generated.d.ts +14 -0
  130. package/dist/runtime/vm-serde-bundle.generated.d.ts.map +1 -0
  131. package/dist/runtime/vm-serde-bundle.generated.js +16 -0
  132. package/dist/runtime/wait-continuation.d.ts +84 -0
  133. package/dist/runtime/wait-continuation.d.ts.map +1 -0
  134. package/dist/runtime/wait-continuation.js +105 -0
  135. package/dist/runtime/wait-until.d.ts +18 -0
  136. package/dist/runtime/wait-until.d.ts.map +1 -0
  137. package/dist/runtime/wait-until.js +42 -0
  138. package/dist/runtime/world-compatibility.d.ts +20 -0
  139. package/dist/runtime/world-compatibility.d.ts.map +1 -0
  140. package/dist/runtime/world-compatibility.js +32 -0
  141. package/dist/runtime/world-init.d.ts +50 -0
  142. package/dist/runtime/world-init.d.ts.map +1 -0
  143. package/dist/runtime/world-init.js +50 -0
  144. package/dist/runtime/world.d.ts +14 -2
  145. package/dist/runtime/world.d.ts.map +1 -1
  146. package/dist/runtime/world.js +101 -26
  147. package/dist/runtime.d.ts +17 -12
  148. package/dist/runtime.d.ts.map +1 -1
  149. package/dist/runtime.js +3135 -328
  150. package/dist/schemas.d.ts +1 -1
  151. package/dist/schemas.d.ts.map +1 -1
  152. package/dist/schemas.js +1 -1
  153. package/dist/sealed-box.d.ts +167 -0
  154. package/dist/sealed-box.d.ts.map +1 -0
  155. package/dist/sealed-box.js +571 -0
  156. package/dist/serialization/client.d.ts +17 -0
  157. package/dist/serialization/client.d.ts.map +1 -0
  158. package/dist/serialization/client.js +48 -0
  159. package/dist/serialization/codec-devalue-vm.d.ts +16 -0
  160. package/dist/serialization/codec-devalue-vm.d.ts.map +1 -0
  161. package/dist/serialization/codec-devalue-vm.js +148 -0
  162. package/dist/serialization/codec-devalue.d.ts +14 -0
  163. package/dist/serialization/codec-devalue.d.ts.map +1 -0
  164. package/dist/serialization/codec-devalue.js +105 -0
  165. package/dist/serialization/codec.d.ts +125 -0
  166. package/dist/serialization/codec.d.ts.map +1 -0
  167. package/dist/serialization/codec.js +17 -0
  168. package/dist/serialization/compression.d.ts +104 -0
  169. package/dist/serialization/compression.d.ts.map +1 -0
  170. package/dist/serialization/compression.js +260 -0
  171. package/dist/serialization/encryption.d.ts +134 -0
  172. package/dist/serialization/encryption.d.ts.map +1 -0
  173. package/dist/serialization/encryption.js +186 -0
  174. package/dist/serialization/errors.d.ts +34 -0
  175. package/dist/serialization/errors.d.ts.map +1 -0
  176. package/dist/serialization/errors.js +59 -0
  177. package/dist/serialization/format.d.ts +60 -0
  178. package/dist/serialization/format.d.ts.map +1 -0
  179. package/dist/serialization/format.js +97 -0
  180. package/dist/serialization/hardened.d.ts +155 -0
  181. package/dist/serialization/hardened.d.ts.map +1 -0
  182. package/dist/serialization/hardened.js +523 -0
  183. package/dist/serialization/index.d.ts +20 -0
  184. package/dist/serialization/index.d.ts.map +1 -0
  185. package/dist/serialization/index.js +22 -0
  186. package/dist/serialization/reducers/class-vm.d.ts +20 -0
  187. package/dist/serialization/reducers/class-vm.d.ts.map +1 -0
  188. package/dist/serialization/reducers/class-vm.js +77 -0
  189. package/dist/serialization/reducers/class.d.ts +11 -0
  190. package/dist/serialization/reducers/class.d.ts.map +1 -0
  191. package/dist/serialization/reducers/class.js +73 -0
  192. package/dist/serialization/reducers/common-vm.d.ts +15 -0
  193. package/dist/serialization/reducers/common-vm.d.ts.map +1 -0
  194. package/dist/serialization/reducers/common-vm.js +579 -0
  195. package/dist/serialization/reducers/common.d.ts +16 -0
  196. package/dist/serialization/reducers/common.d.ts.map +1 -0
  197. package/dist/serialization/reducers/common.js +478 -0
  198. package/dist/serialization/reducers/step-function-vm.d.ts +44 -0
  199. package/dist/serialization/reducers/step-function-vm.d.ts.map +1 -0
  200. package/dist/serialization/reducers/step-function-vm.js +97 -0
  201. package/dist/serialization/reducers/step-function.d.ts +35 -0
  202. package/dist/serialization/reducers/step-function.d.ts.map +1 -0
  203. package/dist/serialization/reducers/step-function.js +104 -0
  204. package/dist/serialization/step.d.ts +17 -0
  205. package/dist/serialization/step.d.ts.map +1 -0
  206. package/dist/serialization/step.js +48 -0
  207. package/dist/serialization/types.d.ts +273 -0
  208. package/dist/serialization/types.d.ts.map +1 -0
  209. package/dist/serialization/types.js +35 -0
  210. package/dist/serialization/workflow-vm.d.ts +29 -0
  211. package/dist/serialization/workflow-vm.d.ts.map +1 -0
  212. package/dist/serialization/workflow-vm.js +71 -0
  213. package/dist/serialization/workflow.d.ts +29 -0
  214. package/dist/serialization/workflow.d.ts.map +1 -0
  215. package/dist/serialization/workflow.js +54 -0
  216. package/dist/serialization-format.d.ts +60 -4
  217. package/dist/serialization-format.d.ts.map +1 -1
  218. package/dist/serialization-format.js +276 -56
  219. package/dist/serialization.d.ts +374 -221
  220. package/dist/serialization.d.ts.map +1 -1
  221. package/dist/serialization.js +2300 -783
  222. package/dist/set-attributes.d.ts +13 -0
  223. package/dist/set-attributes.d.ts.map +1 -0
  224. package/dist/set-attributes.js +60 -0
  225. package/dist/sleep.d.ts.map +1 -1
  226. package/dist/sleep.js +3 -2
  227. package/dist/source-map.d.ts +25 -0
  228. package/dist/source-map.d.ts.map +1 -1
  229. package/dist/source-map.js +148 -10
  230. package/dist/step/context-storage.d.ts +61 -2
  231. package/dist/step/context-storage.d.ts.map +1 -1
  232. package/dist/step/context-storage.js +7 -5
  233. package/dist/step/get-closure-vars.d.ts.map +1 -1
  234. package/dist/step/get-closure-vars.js +3 -2
  235. package/dist/step/get-step-metadata.d.ts.map +1 -1
  236. package/dist/step/get-step-metadata.js +3 -2
  237. package/dist/step/get-workflow-metadata.d.ts.map +1 -1
  238. package/dist/step/get-workflow-metadata.js +3 -2
  239. package/dist/step/writable-stream.d.ts.map +1 -1
  240. package/dist/step/writable-stream.js +71 -7
  241. package/dist/step.d.ts.map +1 -1
  242. package/dist/step.js +225 -29
  243. package/dist/symbols.d.ts +54 -0
  244. package/dist/symbols.d.ts.map +1 -1
  245. package/dist/symbols.js +55 -1
  246. package/dist/telemetry/semantic-conventions.d.ts +265 -2
  247. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  248. package/dist/telemetry/semantic-conventions.js +190 -1
  249. package/dist/telemetry.d.ts +73 -0
  250. package/dist/telemetry.d.ts.map +1 -1
  251. package/dist/telemetry.js +153 -16
  252. package/dist/types.d.ts +6 -0
  253. package/dist/types.d.ts.map +1 -1
  254. package/dist/types.js +23 -1
  255. package/dist/util.d.ts +16 -6
  256. package/dist/util.d.ts.map +1 -1
  257. package/dist/util.js +25 -16
  258. package/dist/version.d.ts +1 -1
  259. package/dist/version.d.ts.map +1 -1
  260. package/dist/version.js +2 -2
  261. package/dist/vm/index.d.ts.map +1 -1
  262. package/dist/vm/index.js +85 -14
  263. package/dist/vm/script-cache.d.ts +28 -0
  264. package/dist/vm/script-cache.d.ts.map +1 -0
  265. package/dist/vm/script-cache.js +140 -0
  266. package/dist/workflow/abort-controller.d.ts +65 -0
  267. package/dist/workflow/abort-controller.d.ts.map +1 -0
  268. package/dist/workflow/abort-controller.js +312 -0
  269. package/dist/workflow/attribute-dispatcher.d.ts +6 -0
  270. package/dist/workflow/attribute-dispatcher.d.ts.map +1 -0
  271. package/dist/workflow/attribute-dispatcher.js +48 -0
  272. package/dist/workflow/create-hook.d.ts.map +1 -1
  273. package/dist/workflow/create-hook.js +25 -3
  274. package/dist/workflow/define-hook.d.ts +1 -1
  275. package/dist/workflow/define-hook.d.ts.map +1 -1
  276. package/dist/workflow/define-hook.js +8 -4
  277. package/dist/workflow/get-workflow-metadata.d.ts.map +1 -1
  278. package/dist/workflow/get-workflow-metadata.js +14 -3
  279. package/dist/workflow/hook.d.ts.map +1 -1
  280. package/dist/workflow/hook.js +302 -36
  281. package/dist/workflow/index.d.ts +1 -0
  282. package/dist/workflow/index.d.ts.map +1 -1
  283. package/dist/workflow/index.js +5 -3
  284. package/dist/workflow/set-attributes.d.ts +68 -0
  285. package/dist/workflow/set-attributes.d.ts.map +1 -0
  286. package/dist/workflow/set-attributes.js +60 -0
  287. package/dist/workflow/sleep.d.ts.map +1 -1
  288. package/dist/workflow/sleep.js +57 -8
  289. package/dist/workflow/world-init-stub.d.ts +15 -0
  290. package/dist/workflow/world-init-stub.d.ts.map +1 -0
  291. package/dist/workflow/world-init-stub.js +15 -0
  292. package/dist/workflow.d.ts +79 -3
  293. package/dist/workflow.d.ts.map +1 -1
  294. package/dist/workflow.js +831 -553
  295. package/docs/api-reference/create-hook.mdx +79 -0
  296. package/docs/api-reference/create-webhook.mdx +1 -0
  297. package/docs/api-reference/define-hook.mdx +26 -24
  298. package/docs/api-reference/fatal-error.mdx +29 -7
  299. package/docs/api-reference/fetch.mdx +8 -4
  300. package/docs/api-reference/index.mdx +3 -0
  301. package/docs/api-reference/set-attributes.mdx +61 -0
  302. package/docs/api-reference/sleep.mdx +1 -1
  303. package/docs/foundations/cancellation.mdx +459 -0
  304. package/docs/foundations/errors-and-retries.mdx +7 -3
  305. package/docs/foundations/hooks.mdx +29 -0
  306. package/docs/foundations/idempotency.mdx +243 -11
  307. package/docs/foundations/index.mdx +1 -23
  308. package/docs/foundations/meta.json +3 -1
  309. package/docs/foundations/serialization.mdx +77 -41
  310. package/docs/foundations/starting-workflows.mdx +79 -2
  311. package/docs/foundations/streaming.mdx +14 -23
  312. package/docs/foundations/versioning.mdx +263 -0
  313. package/docs/how-it-works/cancellation.mdx +287 -0
  314. package/docs/how-it-works/code-transform.mdx +21 -17
  315. package/docs/how-it-works/encryption.mdx +5 -5
  316. package/docs/how-it-works/event-sourcing.mdx +17 -9
  317. package/docs/how-it-works/framework-integrations.mdx +96 -337
  318. package/docs/how-it-works/meta.json +2 -1
  319. package/package.json +31 -13
  320. package/dist/runtime/step-handler.d.ts +0 -2
  321. package/dist/runtime/step-handler.d.ts.map +0 -1
  322. package/dist/runtime/step-handler.js +0 -678
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Extracts the run's creation timestamp (epoch milliseconds) from a `wrun_`
3
+ * run ID by decoding the embedded ULID time component.
4
+ *
5
+ * `@workflow/world-vercel`'s region-tagged run IDs mark an ID as carrying
6
+ * metadata by setting the most-significant bit of the ULID's 48-bit
7
+ * timestamp, which would otherwise skew the decoded time past the year 6400.
8
+ * The tag-bit handling is delegated to the scheme's own codec —
9
+ * `decode()` returns the ULID with the tag bit cleared — so if the tagged
10
+ * layout ever evolves (the scheme carries a 5-bit version field for exactly
11
+ * that), this anchor keeps tracking the codec instead of silently diverging.
12
+ * For untagged input `decode()` is a passthrough.
13
+ *
14
+ * Returns `undefined` when `runId` is not a decodable `wrun_<ulid>` (e.g. a
15
+ * legacy/non-ULID id, or a test fixture like `wrun_test`); callers fall back to
16
+ * an authoritative timestamp from the run snapshot (`createdAt`) in that case.
17
+ */
18
+ export declare function runIdCreatedAt(runId: string): number | undefined;
19
+ //# sourceMappingURL=run-id-time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-id-time.d.ts","sourceRoot":"","sources":["../../src/runtime/run-id-time.ts"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAShE"}
@@ -0,0 +1,42 @@
1
+ import { decode } from '@workflow/world-vercel/run-id';
2
+ import { decodeTime } from 'ulid';
3
+ /**
4
+ * Run IDs are minted client-side in `start()` as `wrun_<ulid>` (via
5
+ * `World.createRunId()` when the world provides one, else a plain ULID — see
6
+ * `runtime/helpers.ts`). A ULID encodes its creation time in its first 48 bits,
7
+ * so the run's creation timestamp is recoverable from the run ID alone —
8
+ * without any server round-trip or run-snapshot load. This is the earliest
9
+ * replay-stable timestamp a delivery has (the run ID arrives in the queue
10
+ * payload), which lets the workflow VM be seeded and clock-initialized before
11
+ * `run_started`.
12
+ */
13
+ const RUN_ID_PREFIX = 'wrun_';
14
+ /**
15
+ * Extracts the run's creation timestamp (epoch milliseconds) from a `wrun_`
16
+ * run ID by decoding the embedded ULID time component.
17
+ *
18
+ * `@workflow/world-vercel`'s region-tagged run IDs mark an ID as carrying
19
+ * metadata by setting the most-significant bit of the ULID's 48-bit
20
+ * timestamp, which would otherwise skew the decoded time past the year 6400.
21
+ * The tag-bit handling is delegated to the scheme's own codec —
22
+ * `decode()` returns the ULID with the tag bit cleared — so if the tagged
23
+ * layout ever evolves (the scheme carries a 5-bit version field for exactly
24
+ * that), this anchor keeps tracking the codec instead of silently diverging.
25
+ * For untagged input `decode()` is a passthrough.
26
+ *
27
+ * Returns `undefined` when `runId` is not a decodable `wrun_<ulid>` (e.g. a
28
+ * legacy/non-ULID id, or a test fixture like `wrun_test`); callers fall back to
29
+ * an authoritative timestamp from the run snapshot (`createdAt`) in that case.
30
+ */
31
+ export function runIdCreatedAt(runId) {
32
+ const ulidPart = runId.startsWith(RUN_ID_PREFIX)
33
+ ? runId.slice(RUN_ID_PREFIX.length)
34
+ : runId;
35
+ try {
36
+ return decodeTime(decode(ulidPart).ulid);
37
+ }
38
+ catch {
39
+ return undefined;
40
+ }
41
+ }
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLWlkLXRpbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9ydW4taWQtdGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsQzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUM7QUFFOUI7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWE7SUFDMUMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFDOUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUNuQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ1YsSUFBSSxDQUFDO1FBQ0gsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlY29kZSB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZC12ZXJjZWwvcnVuLWlkJztcbmltcG9ydCB7IGRlY29kZVRpbWUgfSBmcm9tICd1bGlkJztcblxuLyoqXG4gKiBSdW4gSURzIGFyZSBtaW50ZWQgY2xpZW50LXNpZGUgaW4gYHN0YXJ0KClgIGFzIGB3cnVuXzx1bGlkPmAgKHZpYVxuICogYFdvcmxkLmNyZWF0ZVJ1bklkKClgIHdoZW4gdGhlIHdvcmxkIHByb3ZpZGVzIG9uZSwgZWxzZSBhIHBsYWluIFVMSUQg4oCUIHNlZVxuICogYHJ1bnRpbWUvaGVscGVycy50c2ApLiBBIFVMSUQgZW5jb2RlcyBpdHMgY3JlYXRpb24gdGltZSBpbiBpdHMgZmlyc3QgNDggYml0cyxcbiAqIHNvIHRoZSBydW4ncyBjcmVhdGlvbiB0aW1lc3RhbXAgaXMgcmVjb3ZlcmFibGUgZnJvbSB0aGUgcnVuIElEIGFsb25lIOKAlFxuICogd2l0aG91dCBhbnkgc2VydmVyIHJvdW5kLXRyaXAgb3IgcnVuLXNuYXBzaG90IGxvYWQuIFRoaXMgaXMgdGhlIGVhcmxpZXN0XG4gKiByZXBsYXktc3RhYmxlIHRpbWVzdGFtcCBhIGRlbGl2ZXJ5IGhhcyAodGhlIHJ1biBJRCBhcnJpdmVzIGluIHRoZSBxdWV1ZVxuICogcGF5bG9hZCksIHdoaWNoIGxldHMgdGhlIHdvcmtmbG93IFZNIGJlIHNlZWRlZCBhbmQgY2xvY2staW5pdGlhbGl6ZWQgYmVmb3JlXG4gKiBgcnVuX3N0YXJ0ZWRgLlxuICovXG5jb25zdCBSVU5fSURfUFJFRklYID0gJ3dydW5fJztcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgcnVuJ3MgY3JlYXRpb24gdGltZXN0YW1wIChlcG9jaCBtaWxsaXNlY29uZHMpIGZyb20gYSBgd3J1bl9gXG4gKiBydW4gSUQgYnkgZGVjb2RpbmcgdGhlIGVtYmVkZGVkIFVMSUQgdGltZSBjb21wb25lbnQuXG4gKlxuICogYEB3b3JrZmxvdy93b3JsZC12ZXJjZWxgJ3MgcmVnaW9uLXRhZ2dlZCBydW4gSURzIG1hcmsgYW4gSUQgYXMgY2FycnlpbmdcbiAqIG1ldGFkYXRhIGJ5IHNldHRpbmcgdGhlIG1vc3Qtc2lnbmlmaWNhbnQgYml0IG9mIHRoZSBVTElEJ3MgNDgtYml0XG4gKiB0aW1lc3RhbXAsIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBza2V3IHRoZSBkZWNvZGVkIHRpbWUgcGFzdCB0aGUgeWVhciA2NDAwLlxuICogVGhlIHRhZy1iaXQgaGFuZGxpbmcgaXMgZGVsZWdhdGVkIHRvIHRoZSBzY2hlbWUncyBvd24gY29kZWMg4oCUXG4gKiBgZGVjb2RlKClgIHJldHVybnMgdGhlIFVMSUQgd2l0aCB0aGUgdGFnIGJpdCBjbGVhcmVkIOKAlCBzbyBpZiB0aGUgdGFnZ2VkXG4gKiBsYXlvdXQgZXZlciBldm9sdmVzICh0aGUgc2NoZW1lIGNhcnJpZXMgYSA1LWJpdCB2ZXJzaW9uIGZpZWxkIGZvciBleGFjdGx5XG4gKiB0aGF0KSwgdGhpcyBhbmNob3Iga2VlcHMgdHJhY2tpbmcgdGhlIGNvZGVjIGluc3RlYWQgb2Ygc2lsZW50bHkgZGl2ZXJnaW5nLlxuICogRm9yIHVudGFnZ2VkIGlucHV0IGBkZWNvZGUoKWAgaXMgYSBwYXNzdGhyb3VnaC5cbiAqXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gYHJ1bklkYCBpcyBub3QgYSBkZWNvZGFibGUgYHdydW5fPHVsaWQ+YCAoZS5nLiBhXG4gKiBsZWdhY3kvbm9uLVVMSUQgaWQsIG9yIGEgdGVzdCBmaXh0dXJlIGxpa2UgYHdydW5fdGVzdGApOyBjYWxsZXJzIGZhbGwgYmFjayB0b1xuICogYW4gYXV0aG9yaXRhdGl2ZSB0aW1lc3RhbXAgZnJvbSB0aGUgcnVuIHNuYXBzaG90IChgY3JlYXRlZEF0YCkgaW4gdGhhdCBjYXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuSWRDcmVhdGVkQXQocnVuSWQ6IHN0cmluZyk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHVsaWRQYXJ0ID0gcnVuSWQuc3RhcnRzV2l0aChSVU5fSURfUFJFRklYKVxuICAgID8gcnVuSWQuc2xpY2UoUlVOX0lEX1BSRUZJWC5sZW5ndGgpXG4gICAgOiBydW5JZDtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVGltZShkZWNvZGUodWxpZFBhcnQpLnVsaWQpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
@@ -1,6 +1,8 @@
1
1
  import { WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE } from '@workflow/serde';
2
2
  import { type WorkflowRunStatus } from '@workflow/world';
3
- import { type StopSleepOptions, type StopSleepResult } from './runs.js';
3
+ import { type CancelRunOptions, type StopSleepOptions, type StopSleepResult } from './runs.js';
4
+ /** @internal */
5
+ export declare function getReturnValuePollIntervalMs(): number;
4
6
  /**
5
7
  * A `ReadableStream` extended with workflow-specific helpers.
6
8
  */
@@ -72,8 +74,12 @@ export declare class Run<TResult> {
72
74
  wakeUp(options?: StopSleepOptions): Promise<StopSleepResult>;
73
75
  /**
74
76
  * Cancels the workflow run.
77
+ *
78
+ * @param options - Optional cancellation settings. `cancelReason` records a
79
+ * free-text reason (max 512 chars) on the run_cancelled event, surfaced in
80
+ * the run detail view.
75
81
  */
76
- cancel(): Promise<void>;
82
+ cancel(options?: CancelRunOptions): Promise<void>;
77
83
  /**
78
84
  * Whether the workflow run exists.
79
85
  */
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EAErB,MAAM,WAAW,CAAC;AAGnB;;GAEG;AACH,MAAM,MAAM,sBAAsB,CAAC,CAAC,GAAG,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG;IAChE;;;;;;;OAOG;IACH,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,GAAG,CAAC,OAAO;;IACtB,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;;;;IAIlD,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE;QAClC,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B;IAID;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;gBA4BF,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE;IAuB9D;;;;;;OAMG;IACG,MAAM,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAKlE;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAS7B;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAa7B;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAKvC;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAGlC;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAKlC;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAK7B;IAED;;;OAGG;IACH,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAKzC;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAK3C;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,sBAAsB,CAErC;IAED;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,CAAC,GAAG,GAAG,EACjB,OAAO,GAAE,6BAAkC,GAC1C,sBAAsB,CAAC,CAAC,CAAC;CAqF7B;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAE3D"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAGL,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;AAYzB,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EAErB,MAAM,WAAW,CAAC;AAInB,gBAAgB;AAChB,wBAAgB,4BAA4B,IAAI,MAAM,CAMrD;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,CAAC,CAAC,GAAG,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG;IAChE;;;;;;;OAOG;IACH,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,GAAG,CAAC,OAAO;;IACtB,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;;;;IAIlD,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE;QAClC,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B;IAID;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;gBA4BF,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE;IAiC9D;;;;;;OAMG;IACG,MAAM,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAKlE;;;;;;OAMG;IACG,MAAM,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvD;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAa7B;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAKvC;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAGlC;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAKlC;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAK7B;IAED;;;OAGG;IACH,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAKzC;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAK3C;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,sBAAsB,CAErC;IAED;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,CAAC,GAAG,GAAG,EACjB,OAAO,GAAE,6BAAkC,GAC1C,sBAAsB,CAAC,CAAC,CAAC;CA+G7B;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAE3D"}
@@ -1,11 +1,16 @@
1
1
  import { WorkflowRunCancelledError, WorkflowRunFailedError, WorkflowRunNotCompletedError, WorkflowRunNotFoundError, } from '@workflow/errors';
2
2
  import { WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE } from '@workflow/serde';
3
- import { SPEC_VERSION_CURRENT, } from '@workflow/world';
4
- import { importKey } from '../encryption.js';
5
- import { getExternalRevivers, hydrateWorkflowReturnValue, } from '../serialization.js';
3
+ import { envNumber, SPEC_VERSION_CURRENT, } from '@workflow/world';
4
+ import { deriveRunPayloadKeys, } from '../serialization/encryption.js';
5
+ import { getExternalRevivers, hydrateRunError, hydrateWorkflowReturnValue, } from '../serialization.js';
6
6
  import { getWorkflowRunStreamId } from '../util.js';
7
+ import { getWorldLazy } from './get-world-lazy.js';
7
8
  import { wakeUpRun, } from './runs.js';
8
- import { getWorld } from './world.js';
9
+ const RETURN_VALUE_POLL_INTERVAL_MS = 1_000;
10
+ /** @internal */
11
+ export function getReturnValuePollIntervalMs() {
12
+ return envNumber('WORKFLOW_RETURN_VALUE_POLL_INTERVAL_MS', RETURN_VALUE_POLL_INTERVAL_MS, { integer: true, min: 1 });
13
+ }
9
14
  /**
10
15
  * A handler class for a workflow run.
11
16
  */
@@ -27,7 +32,7 @@ export class Run {
27
32
  #worldPromise;
28
33
  get #lazyWorldPromise() {
29
34
  if (!this.#worldPromise)
30
- this.#worldPromise = getWorld();
35
+ this.#worldPromise = getWorldLazy();
31
36
  return this.#worldPromise;
32
37
  }
33
38
  /**
@@ -60,11 +65,20 @@ export class Run {
60
65
  const world = await this.#lazyWorldPromise;
61
66
  const run = await world.runs.get(this.runId);
62
67
  const rawKey = await world.getEncryptionKeyForRun?.(run);
63
- return rawKey ? await importKey(rawKey) : undefined;
68
+ return rawKey ? await deriveRunPayloadKeys(rawKey) : undefined;
64
69
  })();
65
70
  }
66
71
  return this.#encryptionKeyPromise;
67
72
  }
73
+ /**
74
+ * Defer fetching the run and its encryption key until serialized stream data
75
+ * is actually read. An empty or metadata-only stream must not start an
76
+ * unobserved run lookup.
77
+ * @internal
78
+ */
79
+ #getEncryptionKeyLazily() {
80
+ return () => this.#getEncryptionKey();
81
+ }
68
82
  /**
69
83
  * Interrupts pending `sleep()` calls, resuming the workflow early.
70
84
  *
@@ -78,13 +92,20 @@ export class Run {
78
92
  }
79
93
  /**
80
94
  * Cancels the workflow run.
95
+ *
96
+ * @param options - Optional cancellation settings. `cancelReason` records a
97
+ * free-text reason (max 512 chars) on the run_cancelled event, surfaced in
98
+ * the run detail view.
81
99
  */
82
- async cancel() {
100
+ async cancel(options) {
83
101
  'use step';
84
102
  const world = await this.#lazyWorldPromise;
85
103
  await world.events.create(this.runId, {
86
104
  eventType: 'run_cancelled',
87
105
  specVersion: SPEC_VERSION_CURRENT,
106
+ ...(options?.cancelReason !== undefined
107
+ ? { eventData: { cancelReason: options.cancelReason } }
108
+ : {}),
88
109
  });
89
110
  }
90
111
  /**
@@ -169,10 +190,12 @@ export class Run {
169
190
  'use step';
170
191
  const { ops = [], global = globalThis, startIndex, namespace } = options;
171
192
  const name = getWorkflowRunStreamId(this.runId, namespace);
172
- // Pass the key as a promise it will be resolved lazily inside
173
- // the first async transform() call of the deserialize stream.
174
- const encryptionKey = this.#getEncryptionKey();
175
- const stream = getExternalRevivers(global, ops, this.runId, encryptionKey).ReadableStream({
193
+ // The resolver starts only when the deserialize stream sees its first
194
+ // chunk, so creating or probing an empty stream cannot reject in the
195
+ // background.
196
+ const encryptionKey = this.#getEncryptionKeyLazily();
197
+ const stream = getExternalRevivers(global, ops, this.runId, encryptionKey)
198
+ .ReadableStream({
176
199
  name,
177
200
  startIndex,
178
201
  });
@@ -187,7 +210,7 @@ export class Run {
187
210
  });
188
211
  }
189
212
  /**
190
- * Polls the workflow return value every 1 second until it is completed.
213
+ * Polls the workflow return value until it is completed.
191
214
  * @internal
192
215
  * @returns The workflow return value.
193
216
  */
@@ -201,6 +224,13 @@ export class Run {
201
224
  let notFoundRetries = 0;
202
225
  const NOT_FOUND_MAX_RETRIES = this.#resilientStart ? 3 : 0;
203
226
  const NOT_FOUND_DELAYS = [1_000, 3_000, 6_000];
227
+ // NOTE: when this poll runs inside a step (e.g. the step that a parent
228
+ // workflow uses to await a child workflow's `returnValue`), it blocks
229
+ // a queue worker slot for as long as the child run takes to finish.
230
+ // Worker-based worlds like `world-postgres` must be sized to cover the
231
+ // peak number of such polls in flight — see the `queueConcurrency`
232
+ // default on the Postgres world and the notes in the eager-processing
233
+ // changelog for details.
204
234
  while (true) {
205
235
  try {
206
236
  const run = await world.runs.get(this.runId);
@@ -212,13 +242,30 @@ export class Run {
212
242
  throw new WorkflowRunCancelledError(this.runId);
213
243
  }
214
244
  if (run.status === 'failed') {
215
- throw new WorkflowRunFailedError(this.runId, run.error);
245
+ // Hydrate the serialized run error so the original thrown value
246
+ // (with its type identity, cause chain, etc.) is set as the
247
+ // `cause` on WorkflowRunFailedError.
248
+ const encryptionKey = await this.#getEncryptionKey();
249
+ let hydratedError;
250
+ try {
251
+ hydratedError = await hydrateRunError(run.error, this.runId, encryptionKey);
252
+ }
253
+ catch {
254
+ // If hydration fails, surface a generic fallback rather than
255
+ // leaving the user with a raw Uint8Array. The run's errorCode
256
+ // is still preserved on the thrown WorkflowRunFailedError.
257
+ hydratedError = new Error('Failed to hydrate workflow run error');
258
+ }
259
+ throw new WorkflowRunFailedError(this.runId, hydratedError, {
260
+ errorCode: run.errorCode,
261
+ });
216
262
  }
263
+ // Run not completed yet — sleep and poll again.
217
264
  throw new WorkflowRunNotCompletedError(this.runId, run.status);
218
265
  }
219
266
  catch (error) {
220
267
  if (WorkflowRunNotCompletedError.is(error)) {
221
- await new Promise((resolve) => setTimeout(resolve, 1_000));
268
+ await new Promise((resolve) => setTimeout(resolve, getReturnValuePollIntervalMs()));
222
269
  continue;
223
270
  }
224
271
  if (WorkflowRunNotFoundError.is(error) &&
@@ -243,4 +290,4 @@ export class Run {
243
290
  export function getRun(runId) {
244
291
  return new Run(runId);
245
292
  }
246
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvcnVuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsc0JBQXNCLEVBQ3RCLDRCQUE0QixFQUM1Qix3QkFBd0IsR0FDekIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRSxPQUFPLEVBQ0wsb0JBQW9CLEdBR3JCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFrQixTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLDBCQUEwQixHQUMzQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwRCxPQUFPLEVBR0wsU0FBUyxHQUNWLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUE2Q3RDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLEdBQUc7SUFDZCxNQUFNLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQXNCO1FBQ2hELE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzdFLENBQUM7SUFFRCxNQUFNLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLElBRzdCO1FBQ0MsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBUztJQUVkOzs7T0FHRztJQUNILGFBQWEsQ0FBNkI7SUFDMUMsSUFBSSxp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LENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUM1QixNQUFNLElBQUksc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFELENBQUM7Z0JBRUQsTUFBTSxJQUFJLDRCQUE0QixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pFLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLElBQUksNEJBQTRCLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQzNDLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDM0QsU0FBUztnQkFDWCxDQUFDO2dCQUNELElBQ0Usd0JBQXdCLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztvQkFDbEMsZUFBZSxHQUFHLHFCQUFxQixFQUN2QyxDQUFDO29CQUNELE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLGVBQWUsQ0FBRSxDQUFDO29CQUNqRCxlQUFlLEVBQUUsQ0FBQztvQkFDbEIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUMzRCxTQUFTO2dCQUNYLENBQUM7Z0JBQ0QsTUFBTSxLQUFLLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQVUsS0FBYTtJQUMzQyxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBXb3JrZmxvd1J1bkNhbmNlbGxlZEVycm9yLFxuICBXb3JrZmxvd1J1bkZhaWxlZEVycm9yLFxuICBXb3JrZmxvd1J1bk5vdENvbXBsZXRlZEVycm9yLFxuICBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IsXG59IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgV09SS0ZMT1dfREVTRVJJQUxJWkUsIFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gJ0B3b3JrZmxvdy9zZXJkZSc7XG5pbXBvcnQge1xuICBTUEVDX1ZFUlNJT05fQ1VSUkVOVCxcbiAgdHlwZSBXb3JrZmxvd1J1blN0YXR1cyxcbiAgdHlwZSBXb3JsZCxcbn0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IHR5cGUgQ3J5cHRvS2V5LCBpbXBvcnRLZXkgfSBmcm9tICcuLi9lbmNyeXB0aW9uLmpzJztcbmltcG9ydCB7XG4gIGdldEV4dGVybmFsUmV2aXZlcnMsXG4gIGh5ZHJhdGVXb3JrZmxvd1JldHVyblZhbHVlLFxufSBmcm9tICcuLi9zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IGdldFdvcmtmbG93UnVuU3RyZWFtSWQgfSBmcm9tICcuLi91dGlsLmpzJztcbmltcG9ydCB7XG4gIHR5cGUgU3RvcFNsZWVwT3B0aW9ucyxcbiAgdHlwZSBTdG9wU2xlZXBSZXN1bHQsXG4gIHdha2VVcFJ1bixcbn0gZnJvbSAnLi9ydW5zLmpzJztcbmltcG9ydCB7IGdldFdvcmxkIH0gZnJvbSAnLi93b3JsZC5qcyc7XG5cbi8qKlxuICogQSBgUmVhZGFibGVTdHJlYW1gIGV4dGVuZGVkIHdpdGggd29ya2Zsb3ctc3BlY2lmaWMgaGVscGVycy5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya2Zsb3dSZWFkYWJsZVN0cmVhbTxSID0gYW55PiA9IFJlYWRhYmxlU3RyZWFtPFI+ICYge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFpbCBpbmRleCAoaW5kZXggb2YgdGhlIGxhc3Qga25vd24gY2h1bmssIDAtYmFzZWQpIG9mIHRoZVxuICAgKiB1bmRlcmx5aW5nIHdvcmtmbG93IHN0cmVhbS4gVXNlZnVsIGZvciByZXNvbHZpbmcgYSBuZWdhdGl2ZSBgc3RhcnRJbmRleGBcbiAgICogaW50byBhbiBhYnNvbHV0ZSBwb3NpdGlvbiDigJQgZm9yIGV4YW1wbGUsIHdoZW4gYnVpbGRpbmcgcmVjb25uZWN0aW9uXG4gICAqIGVuZHBvaW50cyB0aGF0IG5lZWQgdG8gaW5mb3JtIHRoZSBjbGllbnQgd2hlcmUgdGhlIHN0cmVhbSBzdGFydHMuXG4gICAqXG4gICAqIFJldHVybnMgYC0xYCB3aGVuIG5vIGNodW5rcyBoYXZlIGJlZW4gd3JpdHRlbiB5ZXQuXG4gICAqL1xuICBnZXRUYWlsSW5kZXgoKTogUHJvbWlzZTxudW1iZXI+O1xufTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBhIHdvcmtmbG93J3MgcmVhZGFibGUgc3RyZWFtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93UmVhZGFibGVTdHJlYW1PcHRpb25zIHtcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIG5hbWVzcGFjZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG11bHRpcGxlIHN0cmVhbXMgYXNzb2NpYXRlZFxuICAgKiB3aXRoIHRoZSBzYW1lIHdvcmtmbG93IHJ1bi5cbiAgICovXG4gIG5hbWVzcGFjZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBudW1iZXIgb2YgdGhlIHN0YXJ0aW5nIGNodW5rIHRvIGJlZ2luIHJlYWRpbmcgdGhlIHN0cmVhbSBmcm9tLlxuICAgKiBOZWdhdGl2ZSB2YWx1ZXMgc3RhcnQgZnJvbSB0aGUgZW5kIChlLmcuIC0zIHJlYWRzIHRoZSBsYXN0IDMgY2h1bmtzKS5cbiAgICovXG4gIHN0YXJ0SW5kZXg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBBbnkgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGV4ZWN1dGlvblxuICAgKiBlbnZpcm9ubWVudCBpcyBwYXVzZWQgLyB0ZXJtaW5hdGVkXG4gICAqIChpLmUuIHVzaW5nIFtgd2FpdFVudGlsKClgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvRXh0ZW5kYWJsZUV2ZW50L3dhaXRVbnRpbCkgb3Igc2ltaWxhcikuXG4gICAqL1xuICBvcHM/OiBQcm9taXNlPGFueT5bXTtcbiAgLyoqXG4gICAqIFRoZSBnbG9iYWwgb2JqZWN0IHRvIHVzZSBmb3IgaHlkcmF0aW5nIHR5cGVzIGZyb20gdGhlIGdsb2JhbCBzY29wZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8ge0BsaW5rIFtgZ2xvYmFsVGhpc2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2dsb2JhbFRoaXMpfS5cbiAgICovXG4gIGdsb2JhbD86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGNsYXNzIGZvciBhIHdvcmtmbG93IHJ1bi5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bjxUUmVzdWx0PiB7XG4gIHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZTogUnVuPHVua25vd24+KSB7XG4gICAgcmV0dXJuIHsgcnVuSWQ6IGluc3RhbmNlLnJ1bklkLCByZXNpbGllbnRTdGFydDogaW5zdGFuY2UuI3Jlc2lsaWVudFN0YXJ0IH07XG4gIH1cblxuICBzdGF0aWMgW1dPUktGTE9XX0RFU0VSSUFMSVpFXShkYXRhOiB7XG4gICAgcnVuSWQ6IHN0cmluZztcbiAgICByZXNpbGllbnRTdGFydD86IGJvb2xlYW47XG4gIH0pIHtcbiAgICByZXR1cm4gbmV3IFJ1bihkYXRhLnJ1bklkLCB7IHJlc2lsaWVudFN0YXJ0OiBkYXRhLnJlc2lsaWVudFN0YXJ0IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgcnVuSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHdvcmxkIG9iamVjdC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICAjd29ybGRQcm9taXNlOiBQcm9taXNlPFdvcmxkPiB8IHVuZGVmaW5lZDtcbiAgZ2V0ICNsYXp5V29ybGRQcm9taXNlKCkge1xuICAgIGlmICghdGhpcy4jd29ybGRQcm9taXNlKSB0aGlzLiN3b3JsZFByb21pc2UgPSBnZXRXb3JsZCgpO1xuICAgIHJldHVybiB0aGlzLiN3b3JsZFByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2FjaGVkIGVuY3J5cHRpb24ga2V5IHJlc29sdXRpb24uIFJlc29sdmVkIG9uY2Ugb24gZmlyc3QgdXNlIGFuZFxuICAgKiByZXVzZWQgZm9yIHJldHVyblZhbHVlLCBnZXRSZWFkYWJsZSgpLCBldGMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgI2VuY3J5cHRpb25LZXlQcm9taXNlOiBQcm9taXNlPENyeXB0b0tleSB8IHVuZGVmaW5lZD4gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogV2hlbiB0cnVlLCBydW5fY3JlYXRlZCBmYWlsZWQgYW5kIHRoZSBydW4gbWF5IG5vdCBleGlzdCB5ZXQgKHRoZVxuICAgKiByZXNpbGllbnQgc3RhcnQgcGF0aCB3aWxsIGNyZWF0ZSBpdCB2aWEgcnVuX3N0YXJ0ZWQpLiBwb2xsUmV0dXJuVmFsdWVcbiAgICogcmV0cmllcyBvbiBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3Igb25seSB3aGVuIHRoaXMgZmxhZyBpcyBzZXQgc29cbiAgICogdGhhdCBub3JtYWwgcnVucyBmYWlsIGZhc3Qgb24gNDA0LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gICNyZXNpbGllbnRTdGFydCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHJ1bklkOiBzdHJpbmcsIG9wdHM/OiB7IHJlc2lsaWVudFN0YXJ0PzogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5ydW5JZCA9IHJ1bklkO1xuICAgIHRoaXMuI3Jlc2lsaWVudFN0YXJ0ID0gb3B0cz8ucmVzaWxpZW50U3RhcnQgPz8gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYW5kIGNhY2hlcyB0aGUgZW5jcnlwdGlvbiBrZXkgZm9yIHRoaXMgcnVuLlxuICAgKiBUaGUga2V5IGlzIHRoZSBzYW1lIGZvciB0aGUgbGlmZXRpbWUgb2YgYSBydW4sIHNvIGl0IG9ubHkgbmVlZHNcbiAgICogdG8gYmUgcmVzb2x2ZWQgb25jZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICAjZ2V0RW5jcnlwdGlvbktleSgpOiBQcm9taXNlPENyeXB0b0tleSB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy4jZW5jcnlwdGlvbktleVByb21pc2UpIHtcbiAgICAgIHRoaXMuI2VuY3J5cHRpb25LZXlQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgd29ybGQgPSBhd2FpdCB0aGlzLiNsYXp5V29ybGRQcm9taXNlO1xuICAgICAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKTtcbiAgICAgICAgY29uc3QgcmF3S2V5ID0gYXdhaXQgd29ybGQuZ2V0RW5jcnlwdGlvbktleUZvclJ1bj8uKHJ1bik7XG4gICAgICAgIHJldHVybiByYXdLZXkgPyBhd2FpdCBpbXBvcnRLZXkocmF3S2V5KSA6IHVuZGVmaW5lZDtcbiAgICAgIH0pKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNlbmNyeXB0aW9uS2V5UHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcnJ1cHRzIHBlbmRpbmcgYHNsZWVwKClgIGNhbGxzLCByZXN1bWluZyB0aGUgd29ya2Zsb3cgZWFybHkuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgc2V0dGluZ3MgdG8gdGFyZ2V0IHNwZWNpZmljIHNsZWVwIGNhbGxzIGJ5IGNvcnJlbGF0aW9uIElELlxuICAgKiAgIElmIG5vdCBwcm92aWRlZCwgYWxsIHBlbmRpbmcgc2xlZXAgY2FsbHMgd2lsbCBiZSBpbnRlcnJ1cHRlZC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgU3RvcFNsZWVwUmVzdWx0fSBvYmplY3QgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIHNsZWVwIGNhbGxzIHRoYXQgd2VyZSBpbnRlcnJ1cHRlZC5cbiAgICovXG4gIGFzeW5jIHdha2VVcChvcHRpb25zPzogU3RvcFNsZWVwT3B0aW9ucyk6IFByb21pc2U8U3RvcFNsZWVwUmVzdWx0PiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gd2FrZVVwUnVuKGF3YWl0IHRoaXMuI2xhenlXb3JsZFByb21pc2UsIHRoaXMucnVuSWQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgdGhlIHdvcmtmbG93IHJ1bi5cbiAgICovXG4gIGFzeW5jIGNhbmNlbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIGNvbnN0IHdvcmxkID0gYXdhaXQgdGhpcy4jbGF6eVdvcmxkUHJvbWlzZTtcbiAgICBhd2FpdCB3b3JsZC5ldmVudHMuY3JlYXRlKHRoaXMucnVuSWQsIHtcbiAgICAgIGV2ZW50VHlwZTogJ3J1bl9jYW5jZWxsZWQnLFxuICAgICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHdvcmtmbG93IHJ1biBleGlzdHMuXG4gICAqL1xuICBnZXQgZXhpc3RzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI2xhenlXb3JsZFByb21pc2UudGhlbigod29ybGQpID0+XG4gICAgICB3b3JsZC5ydW5zXG4gICAgICAgIC5nZXQodGhpcy5ydW5JZCwgeyByZXNvbHZlRGF0YTogJ25vbmUnIH0pXG4gICAgICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAoV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yLmlzKGVycm9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIHdvcmtmbG93IHJ1bi5cbiAgICovXG4gIGdldCBzdGF0dXMoKTogUHJvbWlzZTxXb3JrZmxvd1J1blN0YXR1cz4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI2xhenlXb3JsZFByb21pc2UudGhlbigod29ybGQpID0+XG4gICAgICB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKS50aGVuKChydW4pID0+IHJ1bi5zdGF0dXMpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB3b3JrZmxvdyBydW4uXG4gICAqIFBvbGxzIHRoZSB3b3JrZmxvdyByZXR1cm4gdmFsdWUgdW50aWwgaXQgaXMgY29tcGxldGVkLlxuICAgKi9cbiAgZ2V0IHJldHVyblZhbHVlKCk6IFByb21pc2U8VFJlc3VsdD4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI3BvbGxSZXR1cm5WYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB3b3JrZmxvdy5cbiAgICovXG4gIGdldCB3b3JrZmxvd05hbWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB0aGlzLiNsYXp5V29ybGRQcm9taXNlLnRoZW4oKHdvcmxkKSA9PlxuICAgICAgd29ybGQucnVucy5nZXQodGhpcy5ydW5JZCkudGhlbigocnVuKSA9PiBydW4ud29ya2Zsb3dOYW1lKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSB3b3JrZmxvdyBydW4gd2FzIGNyZWF0ZWQuXG4gICAqL1xuICBnZXQgY3JlYXRlZEF0KCk6IFByb21pc2U8RGF0ZT4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI2xhenlXb3JsZFByb21pc2UudGhlbigod29ybGQpID0+XG4gICAgICB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKS50aGVuKChydW4pID0+IHJ1bi5jcmVhdGVkQXQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIHdvcmtmbG93IHJ1biBzdGFydGVkIGV4ZWN1dGlvbi5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIHdvcmtmbG93IGhhcyBub3Qgc3RhcnRlZCB5ZXQuXG4gICAqL1xuICBnZXQgc3RhcnRlZEF0KCk6IFByb21pc2U8RGF0ZSB8IHVuZGVmaW5lZD4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI2xhenlXb3JsZFByb21pc2UudGhlbigod29ybGQpID0+XG4gICAgICB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKS50aGVuKChydW4pID0+IHJ1bi5zdGFydGVkQXQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIHdvcmtmbG93IHJ1biBjb21wbGV0ZWQuXG4gICAqIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSB3b3JrZmxvdyBoYXMgbm90IGNvbXBsZXRlZCB5ZXQuXG4gICAqL1xuICBnZXQgY29tcGxldGVkQXQoKTogUHJvbWlzZTxEYXRlIHwgdW5kZWZpbmVkPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZS50aGVuKCh3b3JsZCkgPT5cbiAgICAgIHdvcmxkLnJ1bnMuZ2V0KHRoaXMucnVuSWQpLnRoZW4oKHJ1bikgPT4gcnVuLmNvbXBsZXRlZEF0KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlYWRhYmxlIHN0cmVhbSBvZiB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgZ2V0IHJlYWRhYmxlKCk6IFdvcmtmbG93UmVhZGFibGVTdHJlYW0ge1xuICAgIHJldHVybiB0aGlzLmdldFJlYWRhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB3b3JrZmxvdyBydW4ncyBkZWZhdWx0IHJlYWRhYmxlIHN0cmVhbSwgd2hpY2ggcmVhZHMgY2h1bmtzXG4gICAqIHdyaXR0ZW4gdG8gdGhlIGNvcnJlc3BvbmRpbmcgd3JpdGFibGUgc3RyZWFtIHtAbGluayBnZXRXcml0YWJsZX0uXG4gICAqXG4gICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaGFzIGFuIGFkZGl0aW9uYWwge0BsaW5rIFdvcmtmbG93UmVhZGFibGVTdHJlYW0uZ2V0VGFpbEluZGV4IHwgZ2V0VGFpbEluZGV4KCl9XG4gICAqIGhlbHBlciB0aGF0IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGtub3duIGNodW5rLiBUaGlzIGlzIHVzZWZ1bCB3aGVuXG4gICAqIGJ1aWxkaW5nIHJlY29ubmVjdGlvbiBlbmRwb2ludHMgdGhhdCBuZWVkIHRvIGluZm9ybSBjbGllbnRzIHdoZXJlIHRoZVxuICAgKiBzdHJlYW0gc3RhcnRzLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgcmVhZGFibGUgc3RyZWFtLlxuICAgKiBAcmV0dXJucyBBIGBXb3JrZmxvd1JlYWRhYmxlU3RyZWFtYCBmb3IgdGhlIHdvcmtmbG93IHJ1bi5cbiAgICovXG4gIGdldFJlYWRhYmxlPFIgPSBhbnk+KFxuICAgIG9wdGlvbnM6IFdvcmtmbG93UmVhZGFibGVTdHJlYW1PcHRpb25zID0ge31cbiAgKTogV29ya2Zsb3dSZWFkYWJsZVN0cmVhbTxSPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICBjb25zdCB7IG9wcyA9IFtdLCBnbG9iYWwgPSBnbG9iYWxUaGlzLCBzdGFydEluZGV4LCBuYW1lc3BhY2UgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgbmFtZSA9IGdldFdvcmtmbG93UnVuU3RyZWFtSWQodGhpcy5ydW5JZCwgbmFtZXNwYWNlKTtcbiAgICAvLyBQYXNzIHRoZSBrZXkgYXMgYSBwcm9taXNlIOKAlCBpdCB3aWxsIGJlIHJlc29sdmVkIGxhemlseSBpbnNpZGVcbiAgICAvLyB0aGUgZmlyc3QgYXN5bmMgdHJhbnNmb3JtKCkgY2FsbCBvZiB0aGUgZGVzZXJpYWxpemUgc3RyZWFtLlxuICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSB0aGlzLiNnZXRFbmNyeXB0aW9uS2V5KCk7XG4gICAgY29uc3Qgc3RyZWFtID0gZ2V0RXh0ZXJuYWxSZXZpdmVycyhcbiAgICAgIGdsb2JhbCxcbiAgICAgIG9wcyxcbiAgICAgIHRoaXMucnVuSWQsXG4gICAgICBlbmNyeXB0aW9uS2V5XG4gICAgKS5SZWFkYWJsZVN0cmVhbSh7XG4gICAgICBuYW1lLFxuICAgICAgc3RhcnRJbmRleCxcbiAgICB9KSBhcyBSZWFkYWJsZVN0cmVhbTxSPjtcblxuICAgIGNvbnN0IHdvcmxkUHJvbWlzZSA9IHRoaXMuI2xhenlXb3JsZFByb21pc2U7XG4gICAgY29uc3QgcnVuSWQgPSB0aGlzLnJ1bklkO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHN0cmVhbSwge1xuICAgICAgZ2V0VGFpbEluZGV4OiBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgICAgICAgY29uc3Qgd29ybGQgPSBhd2FpdCB3b3JsZFByb21pc2U7XG4gICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCB3b3JsZC5zdHJlYW1zLmdldEluZm8ocnVuSWQsIG5hbWUpO1xuICAgICAgICByZXR1cm4gaW5mby50YWlsSW5kZXg7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvbGxzIHRoZSB3b3JrZmxvdyByZXR1cm4gdmFsdWUgZXZlcnkgMSBzZWNvbmQgdW50aWwgaXQgaXMgY29tcGxldGVkLlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHJldHVybnMgVGhlIHdvcmtmbG93IHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGFzeW5jICNwb2xsUmV0dXJuVmFsdWUoKTogUHJvbWlzZTxUUmVzdWx0PiB7XG4gICAgY29uc3Qgd29ybGQgPSBhd2FpdCB0aGlzLiNsYXp5V29ybGRQcm9taXNlO1xuXG4gICAgLy8gV2hlbiByZXNpbGllbnRTdGFydCBpcyB0cnVlLCBydW5fY3JlYXRlZCBmYWlsZWQgYW5kIHRoZSBydW4gbWF5XG4gICAgLy8gbm90IGV4aXN0IHlldC4gUmV0cnkgb24gV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yIHVwIHRvIDMgdGltZXNcbiAgICAvLyAoMXMgKyAzcyArIDZzID0gMTBzIHRvdGFsKSB0byBnaXZlIHRoZSBxdWV1ZSB0aW1lIHRvIGRlbGl2ZXJcbiAgICAvLyBhbmQgdGhlIHJ1bnRpbWUgdG8gY3JlYXRlIHRoZSBydW4gdmlhIHJ1bl9zdGFydGVkLlxuICAgIC8vIFdoZW4gcmVzaWxpZW50U3RhcnQgaXMgZmFsc2UsIDQwNCBpcyBhIHJlYWwgZXJyb3Ig4oCUIGZhaWwgZmFzdC5cbiAgICBsZXQgbm90Rm91bmRSZXRyaWVzID0gMDtcbiAgICBjb25zdCBOT1RfRk9VTkRfTUFYX1JFVFJJRVMgPSB0aGlzLiNyZXNpbGllbnRTdGFydCA/IDMgOiAwO1xuICAgIGNvbnN0IE5PVF9GT1VORF9ERUxBWVMgPSBbMV8wMDAsIDNfMDAwLCA2XzAwMF07XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgd29ybGQucnVucy5nZXQodGhpcy5ydW5JZCk7XG5cbiAgICAgICAgaWYgKHJ1bi5zdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XG4gICAgICAgICAgY29uc3QgZW5jcnlwdGlvbktleSA9IGF3YWl0IHRoaXMuI2dldEVuY3J5cHRpb25LZXkoKTtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUoXG4gICAgICAgICAgICBydW4ub3V0cHV0LFxuICAgICAgICAgICAgdGhpcy5ydW5JZCxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJ1bi5zdGF0dXMgPT09ICdjYW5jZWxsZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVuQ2FuY2VsbGVkRXJyb3IodGhpcy5ydW5JZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocnVuLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW5GYWlsZWRFcnJvcih0aGlzLnJ1bklkLCBydW4uZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVuTm90Q29tcGxldGVkRXJyb3IodGhpcy5ydW5JZCwgcnVuLnN0YXR1cyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoV29ya2Zsb3dSdW5Ob3RDb21wbGV0ZWRFcnJvci5pcyhlcnJvcikpIHtcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxXzAwMCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IuaXMoZXJyb3IpICYmXG4gICAgICAgICAgbm90Rm91bmRSZXRyaWVzIDwgTk9UX0ZPVU5EX01BWF9SRVRSSUVTXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGRlbGF5ID0gTk9UX0ZPVU5EX0RFTEFZU1tub3RGb3VuZFJldHJpZXNdITtcbiAgICAgICAgICBub3RGb3VuZFJldHJpZXMrKztcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBkZWxheSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIGBSdW5gIG9iamVjdCBmb3IgYSBnaXZlbiBydW4gSUQuXG4gKlxuICogQHBhcmFtIHJ1bklkIC0gVGhlIHdvcmtmbG93IHJ1biBJRCBvYnRhaW5lZCBmcm9tIHtAbGluayBzdGFydH0uXG4gKiBAcmV0dXJucyBBIGBSdW5gIG9iamVjdC5cbiAqIEB0aHJvd3MgV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yIGlmIHRoZSBydW4gSUQgaXMgbm90IGZvdW5kLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UnVuPFRSZXN1bHQ+KHJ1bklkOiBzdHJpbmcpOiBSdW48VFJlc3VsdD4ge1xuICByZXR1cm4gbmV3IFJ1bihydW5JZCk7XG59XG4iXX0=
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvcnVuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsc0JBQXNCLEVBQ3RCLDRCQUE0QixFQUM1Qix3QkFBd0IsR0FDekIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRSxPQUFPLEVBQ0wsU0FBUyxFQUNULG9CQUFvQixHQUdyQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxvQkFBb0IsR0FFckIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZiwwQkFBMEIsR0FDM0IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFJTCxTQUFTLEdBQ1YsTUFBTSxXQUFXLENBQUM7QUFFbkIsTUFBTSw2QkFBNkIsR0FBRyxLQUFLLENBQUM7QUFFNUMsZ0JBQWdCO0FBQ2hCLE1BQU0sVUFBVSw0QkFBNEI7SUFDMUMsT0FBTyxTQUFTLENBQ2Qsd0NBQXdDLEVBQ3hDLDZCQUE2QixFQUM3QixFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUMxQixDQUFDO0FBQ0osQ0FBQztBQTZDRDs7R0FFRztBQUNILE1BQU0sT0FBTyxHQUFHO0lBQ2QsTUFBTSxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxRQUFzQjtRQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM3RSxDQUFDO0lBRUQs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ICBXb3JrZmxvd1J1bkNhbmNlbGxlZEVycm9yLFxuICBXb3JrZmxvd1J1bkZhaWxlZEVycm9yLFxuICBXb3JrZmxvd1J1bk5vdENvbXBsZXRlZEVycm9yLFxuICBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IsXG59IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgV09SS0ZMT1dfREVTRVJJQUxJWkUsIFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gJ0B3b3JrZmxvdy9zZXJkZSc7XG5pbXBvcnQge1xuICBlbnZOdW1iZXIsXG4gIFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICB0eXBlIFdvcmtmbG93UnVuU3RhdHVzLFxuICB0eXBlIFdvcmxkLFxufSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHtcbiAgZGVyaXZlUnVuUGF5bG9hZEtleXMsXG4gIHR5cGUgUGF5bG9hZEtleSxcbn0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi9lbmNyeXB0aW9uLmpzJztcbmltcG9ydCB7XG4gIGdldEV4dGVybmFsUmV2aXZlcnMsXG4gIGh5ZHJhdGVSdW5FcnJvcixcbiAgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUsXG59IGZyb20gJy4uL3NlcmlhbGl6YXRpb24uanMnO1xuaW1wb3J0IHsgZ2V0V29ya2Zsb3dSdW5TdHJlYW1JZCB9IGZyb20gJy4uL3V0aWwuanMnO1xuaW1wb3J0IHsgZ2V0V29ybGRMYXp5IH0gZnJvbSAnLi9nZXQtd29ybGQtbGF6eS5qcyc7XG5pbXBvcnQge1xuICB0eXBlIENhbmNlbFJ1bk9wdGlvbnMsXG4gIHR5cGUgU3RvcFNsZWVwT3B0aW9ucyxcbiAgdHlwZSBTdG9wU2xlZXBSZXN1bHQsXG4gIHdha2VVcFJ1bixcbn0gZnJvbSAnLi9ydW5zLmpzJztcblxuY29uc3QgUkVUVVJOX1ZBTFVFX1BPTExfSU5URVJWQUxfTVMgPSAxXzAwMDtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJldHVyblZhbHVlUG9sbEludGVydmFsTXMoKTogbnVtYmVyIHtcbiAgcmV0dXJuIGVudk51bWJlcihcbiAgICAnV09SS0ZMT1dfUkVUVVJOX1ZBTFVFX1BPTExfSU5URVJWQUxfTVMnLFxuICAgIFJFVFVSTl9WQUxVRV9QT0xMX0lOVEVSVkFMX01TLFxuICAgIHsgaW50ZWdlcjogdHJ1ZSwgbWluOiAxIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBBIGBSZWFkYWJsZVN0cmVhbWAgZXh0ZW5kZWQgd2l0aCB3b3JrZmxvdy1zcGVjaWZpYyBoZWxwZXJzLlxuICovXG5leHBvcnQgdHlwZSBXb3JrZmxvd1JlYWRhYmxlU3RyZWFtPFIgPSBhbnk+ID0gUmVhZGFibGVTdHJlYW08Uj4gJiB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0YWlsIGluZGV4IChpbmRleCBvZiB0aGUgbGFzdCBrbm93biBjaHVuaywgMC1iYXNlZCkgb2YgdGhlXG4gICAqIHVuZGVybHlpbmcgd29ya2Zsb3cgc3RyZWFtLiBVc2VmdWwgZm9yIHJlc29sdmluZyBhIG5lZ2F0aXZlIGBzdGFydEluZGV4YFxuICAgKiBpbnRvIGFuIGFic29sdXRlIHBvc2l0aW9uIOKAlCBmb3IgZXhhbXBsZSwgd2hlbiBidWlsZGluZyByZWNvbm5lY3Rpb25cbiAgICogZW5kcG9pbnRzIHRoYXQgbmVlZCB0byBpbmZvcm0gdGhlIGNsaWVudCB3aGVyZSB0aGUgc3RyZWFtIHN0YXJ0cy5cbiAgICpcbiAgICogUmV0dXJucyBgLTFgIHdoZW4gbm8gY2h1bmtzIGhhdmUgYmVlbiB3cml0dGVuIHlldC5cbiAgICovXG4gIGdldFRhaWxJbmRleCgpOiBQcm9taXNlPG51bWJlcj47XG59O1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGEgd29ya2Zsb3cncyByZWFkYWJsZSBzdHJlYW0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dSZWFkYWJsZVN0cmVhbU9wdGlvbnMge1xuICAvKipcbiAgICogQW4gb3B0aW9uYWwgbmFtZXNwYWNlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gbXVsdGlwbGUgc3RyZWFtcyBhc3NvY2lhdGVkXG4gICAqIHdpdGggdGhlIHNhbWUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgbmFtZXNwYWNlPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGluZGV4IG51bWJlciBvZiB0aGUgc3RhcnRpbmcgY2h1bmsgdG8gYmVnaW4gcmVhZGluZyB0aGUgc3RyZWFtIGZyb20uXG4gICAqIE5lZ2F0aXZlIHZhbHVlcyBzdGFydCBmcm9tIHRoZSBlbmQgKGUuZy4gLTMgcmVhZHMgdGhlIGxhc3QgMyBjaHVua3MpLlxuICAgKi9cbiAgc3RhcnRJbmRleD86IG51bWJlcjtcbiAgLyoqXG4gICAqIEFueSBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgZXhlY3V0aW9uXG4gICAqIGVudmlyb25tZW50IGlzIHBhdXNlZCAvIHRlcm1pbmF0ZWRcbiAgICogKGkuZS4gdXNpbmcgW2B3YWl0VW50aWwoKWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9FeHRlbmRhYmxlRXZlbnQvd2FpdFVudGlsKSBvciBzaW1pbGFyKS5cbiAgICovXG4gIG9wcz86IFByb21pc2U8YW55PltdO1xuICAvKipcbiAgICogVGhlIGdsb2JhbCBvYmplY3QgdG8gdXNlIGZvciBoeWRyYXRpbmcgdHlwZXMgZnJvbSB0aGUgZ2xvYmFsIHNjb3BlLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB7QGxpbmsgW2BnbG9iYWxUaGlzYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvZ2xvYmFsVGhpcyl9LlxuICAgKi9cbiAgZ2xvYmFsPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgY2xhc3MgZm9yIGEgd29ya2Zsb3cgcnVuLlxuICovXG5leHBvcnQgY2xhc3MgUnVuPFRSZXN1bHQ+IHtcbiAgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKGluc3RhbmNlOiBSdW48dW5rbm93bj4pIHtcbiAgICByZXR1cm4geyBydW5JZDogaW5zdGFuY2UucnVuSWQsIHJlc2lsaWVudFN0YXJ0OiBpbnN0YW5jZS4jcmVzaWxpZW50U3RhcnQgfTtcbiAgfVxuXG4gIHN0YXRpYyBbV09SS0ZMT1dfREVTRVJJQUxJWkVdKGRhdGE6IHtcbiAgICBydW5JZDogc3RyaW5nO1xuICAgIHJlc2lsaWVudFN0YXJ0PzogYm9vbGVhbjtcbiAgfSkge1xuICAgIHJldHVybiBuZXcgUnVuKGRhdGEucnVuSWQsIHsgcmVzaWxpZW50U3RhcnQ6IGRhdGEucmVzaWxpZW50U3RhcnQgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSB3b3JrZmxvdyBydW4uXG4gICAqL1xuICBydW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ybGQgb2JqZWN0LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gICN3b3JsZFByb21pc2U6IFByb21pc2U8V29ybGQ+IHwgdW5kZWZpbmVkO1xuICBnZXQgI2xhenlXb3JsZFByb21pc2UoKSB7XG4gICAgaWYgKCF0aGlzLiN3b3JsZFByb21pc2UpIHRoaXMuI3dvcmxkUHJvbWlzZSA9IGdldFdvcmxkTGF6eSgpO1xuICAgIHJldHVybiB0aGlzLiN3b3JsZFByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2FjaGVkIGVuY3J5cHRpb24ga2V5IHJlc29sdXRpb24uIFJlc29sdmVkIG9uY2Ugb24gZmlyc3QgdXNlIGFuZFxuICAgKiByZXVzZWQgZm9yIHJldHVyblZhbHVlLCBnZXRSZWFkYWJsZSgpLCBldGMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgI2VuY3J5cHRpb25LZXlQcm9taXNlOiBQcm9taXNlPFBheWxvYWRLZXkgfCB1bmRlZmluZWQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgcnVuX2NyZWF0ZWQgZmFpbGVkIGFuZCB0aGUgcnVuIG1heSBub3QgZXhpc3QgeWV0ICh0aGVcbiAgICogcmVzaWxpZW50IHN0YXJ0IHBhdGggd2lsbCBjcmVhdGUgaXQgdmlhIHJ1bl9zdGFydGVkKS4gcG9sbFJldHVyblZhbHVlXG4gICAqIHJldHJpZXMgb24gV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yIG9ubHkgd2hlbiB0aGlzIGZsYWcgaXMgc2V0IHNvXG4gICAqIHRoYXQgbm9ybWFsIHJ1bnMgZmFpbCBmYXN0IG9uIDQwNC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICAjcmVzaWxpZW50U3RhcnQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihydW5JZDogc3RyaW5nLCBvcHRzPzogeyByZXNpbGllbnRTdGFydD86IGJvb2xlYW4gfSkge1xuICAgIHRoaXMucnVuSWQgPSBydW5JZDtcbiAgICB0aGlzLiNyZXNpbGllbnRTdGFydCA9IG9wdHM/LnJlc2lsaWVudFN0YXJ0ID8/IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGFuZCBjYWNoZXMgdGhlIGVuY3J5cHRpb24ga2V5IGZvciB0aGlzIHJ1bi5cbiAgICogVGhlIGtleSBpcyB0aGUgc2FtZSBmb3IgdGhlIGxpZmV0aW1lIG9mIGEgcnVuLCBzbyBpdCBvbmx5IG5lZWRzXG4gICAqIHRvIGJlIHJlc29sdmVkIG9uY2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgI2dldEVuY3J5cHRpb25LZXkoKTogUHJvbWlzZTxQYXlsb2FkS2V5IHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCF0aGlzLiNlbmNyeXB0aW9uS2V5UHJvbWlzZSkge1xuICAgICAgdGhpcy4jZW5jcnlwdGlvbktleVByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB3b3JsZCA9IGF3YWl0IHRoaXMuI2xhenlXb3JsZFByb21pc2U7XG4gICAgICAgIGNvbnN0IHJ1biA9IGF3YWl0IHdvcmxkLnJ1bnMuZ2V0KHRoaXMucnVuSWQpO1xuICAgICAgICBjb25zdCByYXdLZXkgPSBhd2FpdCB3b3JsZC5nZXRFbmNyeXB0aW9uS2V5Rm9yUnVuPy4ocnVuKTtcbiAgICAgICAgcmV0dXJuIHJhd0tleSA/IGF3YWl0IGRlcml2ZVJ1blBheWxvYWRLZXlzKHJhd0tleSkgOiB1bmRlZmluZWQ7XG4gICAgICB9KSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy4jZW5jcnlwdGlvbktleVByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogRGVmZXIgZmV0Y2hpbmcgdGhlIHJ1biBhbmQgaXRzIGVuY3J5cHRpb24ga2V5IHVudGlsIHNlcmlhbGl6ZWQgc3RyZWFtIGRhdGFcbiAgICogaXMgYWN0dWFsbHkgcmVhZC4gQW4gZW1wdHkgb3IgbWV0YWRhdGEtb25seSBzdHJlYW0gbXVzdCBub3Qgc3RhcnQgYW5cbiAgICogdW5vYnNlcnZlZCBydW4gbG9va3VwLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gICNnZXRFbmNyeXB0aW9uS2V5TGF6aWx5KCk6ICgpID0+IFByb21pc2U8UGF5bG9hZEtleSB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiAoKSA9PiB0aGlzLiNnZXRFbmNyeXB0aW9uS2V5KCk7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJydXB0cyBwZW5kaW5nIGBzbGVlcCgpYCBjYWxscywgcmVzdW1pbmcgdGhlIHdvcmtmbG93IGVhcmx5LlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHNldHRpbmdzIHRvIHRhcmdldCBzcGVjaWZpYyBzbGVlcCBjYWxscyBieSBjb3JyZWxhdGlvbiBJRC5cbiAgICogICBJZiBub3QgcHJvdmlkZWQsIGFsbCBwZW5kaW5nIHNsZWVwIGNhbGxzIHdpbGwgYmUgaW50ZXJydXB0ZWQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFN0b3BTbGVlcFJlc3VsdH0gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBzbGVlcCBjYWxscyB0aGF0IHdlcmUgaW50ZXJydXB0ZWQuXG4gICAqL1xuICBhc3luYyB3YWtlVXAob3B0aW9ucz86IFN0b3BTbGVlcE9wdGlvbnMpOiBQcm9taXNlPFN0b3BTbGVlcFJlc3VsdD4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHdha2VVcFJ1bihhd2FpdCB0aGlzLiNsYXp5V29ybGRQcm9taXNlLCB0aGlzLnJ1bklkLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWxzIHRoZSB3b3JrZmxvdyBydW4uXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY2FuY2VsbGF0aW9uIHNldHRpbmdzLiBgY2FuY2VsUmVhc29uYCByZWNvcmRzIGFcbiAgICogICBmcmVlLXRleHQgcmVhc29uIChtYXggNTEyIGNoYXJzKSBvbiB0aGUgcnVuX2NhbmNlbGxlZCBldmVudCwgc3VyZmFjZWQgaW5cbiAgICogICB0aGUgcnVuIGRldGFpbCB2aWV3LlxuICAgKi9cbiAgYXN5bmMgY2FuY2VsKG9wdGlvbnM/OiBDYW5jZWxSdW5PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICBjb25zdCB3b3JsZCA9IGF3YWl0IHRoaXMuI2xhenlXb3JsZFByb21pc2U7XG4gICAgYXdhaXQgd29ybGQuZXZlbnRzLmNyZWF0ZSh0aGlzLnJ1bklkLCB7XG4gICAgICBldmVudFR5cGU6ICdydW5fY2FuY2VsbGVkJyxcbiAgICAgIHNwZWNWZXJzaW9uOiBTUEVDX1ZFUlNJT05fQ1VSUkVOVCxcbiAgICAgIC4uLihvcHRpb25zPy5jYW5jZWxSZWFzb24gIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHsgZXZlbnREYXRhOiB7IGNhbmNlbFJlYXNvbjogb3B0aW9ucy5jYW5jZWxSZWFzb24gfSB9XG4gICAgICAgIDoge30pLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHdvcmtmbG93IHJ1biBleGlzdHMuXG4gICAqL1xuICBnZXQgZXhpc3RzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI2xhenlXb3JsZFByb21pc2UudGhlbigod29ybGQpID0+XG4gICAgICB3b3JsZC5ydW5zXG4gICAgICAgIC5nZXQodGhpcy5ydW5JZCwgeyByZXNvbHZlRGF0YTogJ25vbmUnIH0pXG4gICAgICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAoV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yLmlzKGVycm9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIHdvcmtmbG93IHJ1bi5cbiAgICovXG4gIGdldCBzdGF0dXMoKTogUHJvbWlzZTxXb3JrZmxvd1J1blN0YXR1cz4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI2xhenlXb3JsZFByb21pc2UudGhlbigod29ybGQpID0+XG4gICAgICB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKS50aGVuKChydW4pID0+IHJ1bi5zdGF0dXMpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB3b3JrZmxvdyBydW4uXG4gICAqIFBvbGxzIHRoZSB3b3JrZmxvdyByZXR1cm4gdmFsdWUgdW50aWwgaXQgaXMgY29tcGxldGVkLlxuICAgKi9cbiAgZ2V0IHJldHVyblZhbHVlKCk6IFByb21pc2U8VFJlc3VsdD4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI3BvbGxSZXR1cm5WYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB3b3JrZmxvdy5cbiAgICovXG4gIGdldCB3b3JrZmxvd05hbWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB0aGlzLiNsYXp5V29ybGRQcm9taXNlLnRoZW4oKHdvcmxkKSA9PlxuICAgICAgd29ybGQucnVucy5nZXQodGhpcy5ydW5JZCkudGhlbigocnVuKSA9PiBydW4ud29ya2Zsb3dOYW1lKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSB3b3JrZmxvdyBydW4gd2FzIGNyZWF0ZWQuXG4gICAqL1xuICBnZXQgY3JlYXRlZEF0KCk6IFByb21pc2U8RGF0ZT4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI2xhenlXb3JsZFByb21pc2UudGhlbigod29ybGQpID0+XG4gICAgICB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKS50aGVuKChydW4pID0+IHJ1bi5jcmVhdGVkQXQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIHdvcmtmbG93IHJ1biBzdGFydGVkIGV4ZWN1dGlvbi5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIHdvcmtmbG93IGhhcyBub3Qgc3RhcnRlZCB5ZXQuXG4gICAqL1xuICBnZXQgc3RhcnRlZEF0KCk6IFByb21pc2U8RGF0ZSB8IHVuZGVmaW5lZD4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI2xhenlXb3JsZFByb21pc2UudGhlbigod29ybGQpID0+XG4gICAgICB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKS50aGVuKChydW4pID0+IHJ1bi5zdGFydGVkQXQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIHdvcmtmbG93IHJ1biBjb21wbGV0ZWQuXG4gICAqIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSB3b3JrZmxvdyBoYXMgbm90IGNvbXBsZXRlZCB5ZXQuXG4gICAqL1xuICBnZXQgY29tcGxldGVkQXQoKTogUHJvbWlzZTxEYXRlIHwgdW5kZWZpbmVkPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZS50aGVuKCh3b3JsZCkgPT5cbiAgICAgIHdvcmxkLnJ1bnMuZ2V0KHRoaXMucnVuSWQpLnRoZW4oKHJ1bikgPT4gcnVuLmNvbXBsZXRlZEF0KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlYWRhYmxlIHN0cmVhbSBvZiB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgZ2V0IHJlYWRhYmxlKCk6IFdvcmtmbG93UmVhZGFibGVTdHJlYW0ge1xuICAgIHJldHVybiB0aGlzLmdldFJlYWRhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB3b3JrZmxvdyBydW4ncyBkZWZhdWx0IHJlYWRhYmxlIHN0cmVhbSwgd2hpY2ggcmVhZHMgY2h1bmtzXG4gICAqIHdyaXR0ZW4gdG8gdGhlIGNvcnJlc3BvbmRpbmcgd3JpdGFibGUgc3RyZWFtIHtAbGluayBnZXRXcml0YWJsZX0uXG4gICAqXG4gICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaGFzIGFuIGFkZGl0aW9uYWwge0BsaW5rIFdvcmtmbG93UmVhZGFibGVTdHJlYW0uZ2V0VGFpbEluZGV4IHwgZ2V0VGFpbEluZGV4KCl9XG4gICAqIGhlbHBlciB0aGF0IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGtub3duIGNodW5rLiBUaGlzIGlzIHVzZWZ1bCB3aGVuXG4gICAqIGJ1aWxkaW5nIHJlY29ubmVjdGlvbiBlbmRwb2ludHMgdGhhdCBuZWVkIHRvIGluZm9ybSBjbGllbnRzIHdoZXJlIHRoZVxuICAgKiBzdHJlYW0gc3RhcnRzLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgcmVhZGFibGUgc3RyZWFtLlxuICAgKiBAcmV0dXJucyBBIGBXb3JrZmxvd1JlYWRhYmxlU3RyZWFtYCBmb3IgdGhlIHdvcmtmbG93IHJ1bi5cbiAgICovXG4gIGdldFJlYWRhYmxlPFIgPSBhbnk+KFxuICAgIG9wdGlvbnM6IFdvcmtmbG93UmVhZGFibGVTdHJlYW1PcHRpb25zID0ge31cbiAgKTogV29ya2Zsb3dSZWFkYWJsZVN0cmVhbTxSPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICBjb25zdCB7IG9wcyA9IFtdLCBnbG9iYWwgPSBnbG9iYWxUaGlzLCBzdGFydEluZGV4LCBuYW1lc3BhY2UgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgbmFtZSA9IGdldFdvcmtmbG93UnVuU3RyZWFtSWQodGhpcy5ydW5JZCwgbmFtZXNwYWNlKTtcbiAgICAvLyBUaGUgcmVzb2x2ZXIgc3RhcnRzIG9ubHkgd2hlbiB0aGUgZGVzZXJpYWxpemUgc3RyZWFtIHNlZXMgaXRzIGZpcnN0XG4gICAgLy8gY2h1bmssIHNvIGNyZWF0aW5nIG9yIHByb2JpbmcgYW4gZW1wdHkgc3RyZWFtIGNhbm5vdCByZWplY3QgaW4gdGhlXG4gICAgLy8gYmFja2dyb3VuZC5cbiAgICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gdGhpcy4jZ2V0RW5jcnlwdGlvbktleUxhemlseSgpO1xuICAgIGNvbnN0IHN0cmVhbSA9IGdldEV4dGVybmFsUmV2aXZlcnMoZ2xvYmFsLCBvcHMsIHRoaXMucnVuSWQsIGVuY3J5cHRpb25LZXkpXG4gICAgICAuUmVhZGFibGVTdHJlYW0hKHtcbiAgICAgIG5hbWUsXG4gICAgICBzdGFydEluZGV4LFxuICAgIH0pIGFzIFJlYWRhYmxlU3RyZWFtPFI+O1xuXG4gICAgY29uc3Qgd29ybGRQcm9taXNlID0gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZTtcbiAgICBjb25zdCBydW5JZCA9IHRoaXMucnVuSWQ7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oc3RyZWFtLCB7XG4gICAgICBnZXRUYWlsSW5kZXg6IGFzeW5jICgpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICAgICAgICBjb25zdCB3b3JsZCA9IGF3YWl0IHdvcmxkUHJvbWlzZTtcbiAgICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IHdvcmxkLnN0cmVhbXMuZ2V0SW5mbyhydW5JZCwgbmFtZSk7XG4gICAgICAgIHJldHVybiBpbmZvLnRhaWxJbmRleDtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUG9sbHMgdGhlIHdvcmtmbG93IHJldHVybiB2YWx1ZSB1bnRpbCBpdCBpcyBjb21wbGV0ZWQuXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAcmV0dXJucyBUaGUgd29ya2Zsb3cgcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgYXN5bmMgI3BvbGxSZXR1cm5WYWx1ZSgpOiBQcm9taXNlPFRSZXN1bHQ+IHtcbiAgICBjb25zdCB3b3JsZCA9IGF3YWl0IHRoaXMuI2xhenlXb3JsZFByb21pc2U7XG5cbiAgICAvLyBXaGVuIHJlc2lsaWVudFN0YXJ0IGlzIHRydWUsIHJ1bl9jcmVhdGVkIGZhaWxlZCBhbmQgdGhlIHJ1biBtYXlcbiAgICAvLyBub3QgZXhpc3QgeWV0LiBSZXRyeSBvbiBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IgdXAgdG8gMyB0aW1lc1xuICAgIC8vICgxcyArIDNzICsgNnMgPSAxMHMgdG90YWwpIHRvIGdpdmUgdGhlIHF1ZXVlIHRpbWUgdG8gZGVsaXZlclxuICAgIC8vIGFuZCB0aGUgcnVudGltZSB0byBjcmVhdGUgdGhlIHJ1biB2aWEgcnVuX3N0YXJ0ZWQuXG4gICAgLy8gV2hlbiByZXNpbGllbnRTdGFydCBpcyBmYWxzZSwgNDA0IGlzIGEgcmVhbCBlcnJvciDigJQgZmFpbCBmYXN0LlxuICAgIGxldCBub3RGb3VuZFJldHJpZXMgPSAwO1xuICAgIGNvbnN0IE5PVF9GT1VORF9NQVhfUkVUUklFUyA9IHRoaXMuI3Jlc2lsaWVudFN0YXJ0ID8gMyA6IDA7XG4gICAgY29uc3QgTk9UX0ZPVU5EX0RFTEFZUyA9IFsxXzAwMCwgM18wMDAsIDZfMDAwXTtcblxuICAgIC8vIE5PVEU6IHdoZW4gdGhpcyBwb2xsIHJ1bnMgaW5zaWRlIGEgc3RlcCAoZS5nLiB0aGUgc3RlcCB0aGF0IGEgcGFyZW50XG4gICAgLy8gd29ya2Zsb3cgdXNlcyB0byBhd2FpdCBhIGNoaWxkIHdvcmtmbG93J3MgYHJldHVyblZhbHVlYCksIGl0IGJsb2Nrc1xuICAgIC8vIGEgcXVldWUgd29ya2VyIHNsb3QgZm9yIGFzIGxvbmcgYXMgdGhlIGNoaWxkIHJ1biB0YWtlcyB0byBmaW5pc2guXG4gICAgLy8gV29ya2VyLWJhc2VkIHdvcmxkcyBsaWtlIGB3b3JsZC1wb3N0Z3Jlc2AgbXVzdCBiZSBzaXplZCB0byBjb3ZlciB0aGVcbiAgICAvLyBwZWFrIG51bWJlciBvZiBzdWNoIHBvbGxzIGluIGZsaWdodCDigJQgc2VlIHRoZSBgcXVldWVDb25jdXJyZW5jeWBcbiAgICAvLyBkZWZhdWx0IG9uIHRoZSBQb3N0Z3JlcyB3b3JsZCBhbmQgdGhlIG5vdGVzIGluIHRoZSBlYWdlci1wcm9jZXNzaW5nXG4gICAgLy8gY2hhbmdlbG9nIGZvciBkZXRhaWxzLlxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKTtcblxuICAgICAgICBpZiAocnVuLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpIHtcbiAgICAgICAgICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gYXdhaXQgdGhpcy4jZ2V0RW5jcnlwdGlvbktleSgpO1xuICAgICAgICAgIHJldHVybiBhd2FpdCBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZShcbiAgICAgICAgICAgIHJ1bi5vdXRwdXQsXG4gICAgICAgICAgICB0aGlzLnJ1bklkLFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocnVuLnN0YXR1cyA9PT0gJ2NhbmNlbGxlZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW5DYW5jZWxsZWRFcnJvcih0aGlzLnJ1bklkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChydW4uc3RhdHVzID09PSAnZmFpbGVkJykge1xuICAgICAgICAgIC8vIEh5ZHJhdGUgdGhlIHNlcmlhbGl6ZWQgcnVuIGVycm9yIHNvIHRoZSBvcmlnaW5hbCB0aHJvd24gdmFsdWVcbiAgICAgICAgICAvLyAod2l0aCBpdHMgdHlwZSBpZGVudGl0eSwgY2F1c2UgY2hhaW4sIGV0Yy4pIGlzIHNldCBhcyB0aGVcbiAgICAgICAgICAvLyBgY2F1c2VgIG9uIFdvcmtmbG93UnVuRmFpbGVkRXJyb3IuXG4gICAgICAgICAgY29uc3QgZW5jcnlwdGlvbktleSA9IGF3YWl0IHRoaXMuI2dldEVuY3J5cHRpb25LZXkoKTtcbiAgICAgICAgICBsZXQgaHlkcmF0ZWRFcnJvcjogdW5rbm93bjtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaHlkcmF0ZWRFcnJvciA9IGF3YWl0IGh5ZHJhdGVSdW5FcnJvcihcbiAgICAgICAgICAgICAgcnVuLmVycm9yLFxuICAgICAgICAgICAgICB0aGlzLnJ1bklkLFxuICAgICAgICAgICAgICBlbmNyeXB0aW9uS2V5XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gSWYgaHlkcmF0aW9uIGZhaWxzLCBzdXJmYWNlIGEgZ2VuZXJpYyBmYWxsYmFjayByYXRoZXIgdGhhblxuICAgICAgICAgICAgLy8gbGVhdmluZyB0aGUgdXNlciB3aXRoIGEgcmF3IFVpbnQ4QXJyYXkuIFRoZSBydW4ncyBlcnJvckNvZGVcbiAgICAgICAgICAgIC8vIGlzIHN0aWxsIHByZXNlcnZlZCBvbiB0aGUgdGhyb3duIFdvcmtmbG93UnVuRmFpbGVkRXJyb3IuXG4gICAgICAgICAgICBoeWRyYXRlZEVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gaHlkcmF0ZSB3b3JrZmxvdyBydW4gZXJyb3InKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVuRmFpbGVkRXJyb3IodGhpcy5ydW5JZCwgaHlkcmF0ZWRFcnJvciwge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiBydW4uZXJyb3JDb2RlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUnVuIG5vdCBjb21wbGV0ZWQgeWV0IOKAlCBzbGVlcCBhbmQgcG9sbCBhZ2Fpbi5cbiAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVuTm90Q29tcGxldGVkRXJyb3IodGhpcy5ydW5JZCwgcnVuLnN0YXR1cyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoV29ya2Zsb3dSdW5Ob3RDb21wbGV0ZWRFcnJvci5pcyhlcnJvcikpIHtcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT5cbiAgICAgICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgZ2V0UmV0dXJuVmFsdWVQb2xsSW50ZXJ2YWxNcygpKVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIFdvcmtmbG93UnVuTm90Rm91bmRFcnJvci5pcyhlcnJvcikgJiZcbiAgICAgICAgICBub3RGb3VuZFJldHJpZXMgPCBOT1RfRk9VTkRfTUFYX1JFVFJJRVNcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgZGVsYXkgPSBOT1RfRk9VTkRfREVMQVlTW25vdEZvdW5kUmV0cmllc10hO1xuICAgICAgICAgIG5vdEZvdW5kUmV0cmllcysrO1xuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5KSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGEgYFJ1bmAgb2JqZWN0IGZvciBhIGdpdmVuIHJ1biBJRC5cbiAqXG4gKiBAcGFyYW0gcnVuSWQgLSBUaGUgd29ya2Zsb3cgcnVuIElEIG9idGFpbmVkIGZyb20ge0BsaW5rIHN0YXJ0fS5cbiAqIEByZXR1cm5zIEEgYFJ1bmAgb2JqZWN0LlxuICogQHRocm93cyBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IgaWYgdGhlIHJ1biBJRCBpcyBub3QgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSdW48VFJlc3VsdD4ocnVuSWQ6IHN0cmluZyk6IFJ1bjxUUmVzdWx0PiB7XG4gIHJldHVybiBuZXcgUnVuKHJ1bklkKTtcbn1cbiJdfQ==
@@ -1,7 +1,16 @@
1
- import { type World } from '@workflow/world';
1
+ import { type BulkCancelWorkflowRunsResult, type World } from '@workflow/world';
2
2
  export interface RecreateRunOptions {
3
3
  deploymentId?: string;
4
4
  specVersion?: number;
5
+ /**
6
+ * Queue namespace of the target deployment (e.g. `'eve'` for topics like
7
+ * `__eve_wkf_workflow_*`). Falls back to `WORKFLOW_QUEUE_NAMESPACE` in
8
+ * the calling process. Cross-context callers (e.g. the observability
9
+ * dashboard) must pass the target deployment's namespace explicitly —
10
+ * a run enqueued to a topic the target deployment has no consumer for
11
+ * is never picked up.
12
+ */
13
+ namespace?: string;
5
14
  }
6
15
  export interface StopSleepResult {
7
16
  /** Number of pending sleeps that were stopped */
@@ -21,6 +30,28 @@ export interface StopSleepOptions {
21
30
  * If not provided, all pending sleep calls will be interrupted.
22
31
  */
23
32
  correlationIds?: string[];
33
+ /**
34
+ * Queue namespace of the run's deployment (e.g. `'eve'`), used when
35
+ * re-enqueueing the run after completing its waits. Falls back to
36
+ * `WORKFLOW_QUEUE_NAMESPACE` in the calling process. Cross-context
37
+ * callers (e.g. the observability dashboard) must pass it explicitly.
38
+ */
39
+ namespace?: string;
40
+ }
41
+ export interface ReenqueueRunOptions {
42
+ /**
43
+ * Queue namespace of the run's deployment (e.g. `'eve'`). Falls back to
44
+ * `WORKFLOW_QUEUE_NAMESPACE` in the calling process. Cross-context
45
+ * callers (e.g. the observability dashboard) must pass it explicitly.
46
+ */
47
+ namespace?: string;
48
+ }
49
+ export interface CancelRunOptions {
50
+ /**
51
+ * Optional free-text reason for the cancellation (max 512 chars), recorded
52
+ * on the run_cancelled event and surfaced in the run detail view.
53
+ */
54
+ cancelReason?: string;
24
55
  }
25
56
  /**
26
57
  * Start a new workflow run based on an existing run.
@@ -28,12 +59,32 @@ export interface StopSleepOptions {
28
59
  export declare function recreateRunFromExisting(world: World, runId: string, options?: RecreateRunOptions): Promise<string>;
29
60
  /**
30
61
  * Cancel a workflow run.
62
+ *
63
+ * @param options - Optional cancellation settings. `cancelReason` records a
64
+ * free-text reason (max 512 chars) on the run_cancelled event.
65
+ */
66
+ export declare function cancelRun(world: World, runId: string, options?: CancelRunOptions): Promise<void>;
67
+ /**
68
+ * Cancel many runs in one call.
69
+ *
70
+ * Fast path: if the world implements `runs.cancelMany`, the whole batch is
71
+ * delegated to it in a single operation (one backend round-trip on
72
+ * `@workflow/world-vercel`).
73
+ *
74
+ * Fallback: for worlds without `cancelMany`, this issues single-run
75
+ * `cancelRun()` calls with at most {@link CANCEL_RUNS_FALLBACK_CONCURRENCY}
76
+ * in flight at a time. Fallback successes are reported as `cancelled`;
77
+ * failures are reported as `failed` with `code: 'internal_error'` and
78
+ * `retryable: true` — deliberately without per-world error classification.
79
+ *
80
+ * @throws if `runIds` is empty, contains duplicates, or exceeds
81
+ * {@link BULK_CANCEL_MAX_RUN_IDS}.
31
82
  */
32
- export declare function cancelRun(world: World, runId: string): Promise<void>;
83
+ export declare function cancelRuns(world: World, runIds: string[], options?: CancelRunOptions): Promise<BulkCancelWorkflowRunsResult>;
33
84
  /**
34
85
  * Re-enqueue a workflow run.
35
86
  */
36
- export declare function reenqueueRun(world: World, runId: string): Promise<void>;
87
+ export declare function reenqueueRun(world: World, runId: string, options?: ReenqueueRunOptions): Promise<void>;
37
88
  /**
38
89
  * Wake up a workflow run by interrupting pending sleep() calls.
39
90
  */
@@ -1 +1 @@
1
- {"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/runtime/runs.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,KAAK,EACX,MAAM,iBAAiB,CAAC;AAMzB,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAMD;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAiCjB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB1E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB7E;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC,CAiG1B;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CASrC;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB"}
1
+ {"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/runtime/runs.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,4BAA4B,EAIjC,KAAK,KAAK,EACX,MAAM,iBAAiB,CAAC;AAMzB,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAqCjB;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,IAAI,CAAC,CAmBf;AAQD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,4BAA4B,CAAC,CA8EvC;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC,CAmG1B;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CASrC;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB"}