@workflow/core 5.0.0-beta.43 → 5.0.0-beta.44

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 (217) hide show
  1. package/dist/capabilities.d.ts +4 -4
  2. package/dist/capabilities.js +5 -5
  3. package/dist/capture-stack.d.ts +1 -1
  4. package/dist/capture-stack.js +2 -2
  5. package/dist/class-serialization.d.ts +8 -8
  6. package/dist/class-serialization.js +9 -9
  7. package/dist/classify-error.js +5 -5
  8. package/dist/context-violation-error.d.ts +5 -5
  9. package/dist/context-violation-error.d.ts.map +1 -1
  10. package/dist/context-violation-error.js +5 -5
  11. package/dist/create-hook.d.ts +2 -2
  12. package/dist/create-hook.js +1 -1
  13. package/dist/define-hook.js +2 -2
  14. package/dist/describe-error.d.ts +7 -7
  15. package/dist/describe-error.js +8 -8
  16. package/dist/encryption.d.ts +5 -5
  17. package/dist/encryption.js +7 -7
  18. package/dist/events-consumer.d.ts +19 -7
  19. package/dist/events-consumer.d.ts.map +1 -1
  20. package/dist/events-consumer.js +33 -12
  21. package/dist/flushable-stream.d.ts +4 -4
  22. package/dist/flushable-stream.js +12 -12
  23. package/dist/global.d.ts +1 -1
  24. package/dist/global.js +1 -1
  25. package/dist/index.d.ts +1 -1
  26. package/dist/index.js +2 -2
  27. package/dist/log-format.d.ts +2 -2
  28. package/dist/log-format.js +5 -5
  29. package/dist/logger.js +4 -4
  30. package/dist/private.d.ts +21 -65
  31. package/dist/private.d.ts.map +1 -1
  32. package/dist/private.js +160 -38
  33. package/dist/replay-payload-cache.d.ts +1 -1
  34. package/dist/replay-payload-cache.js +4 -4
  35. package/dist/runtime/compute-instance.d.ts +4 -3
  36. package/dist/runtime/compute-instance.d.ts.map +1 -1
  37. package/dist/runtime/compute-instance.js +5 -4
  38. package/dist/runtime/constants.d.ts +24 -24
  39. package/dist/runtime/constants.d.ts.map +1 -1
  40. package/dist/runtime/constants.js +49 -43
  41. package/dist/runtime/count-step-started-events.d.ts +7 -7
  42. package/dist/runtime/count-step-started-events.js +4 -4
  43. package/dist/runtime/deployment-guard.d.ts +7 -7
  44. package/dist/runtime/deployment-guard.js +8 -8
  45. package/dist/runtime/get-port-lazy.d.ts +2 -2
  46. package/dist/runtime/get-port-lazy.d.ts.map +1 -1
  47. package/dist/runtime/get-port-lazy.js +37 -30
  48. package/dist/runtime/get-world-lazy.d.ts +2 -2
  49. package/dist/runtime/get-world-lazy.js +3 -3
  50. package/dist/runtime/helpers.d.ts +18 -18
  51. package/dist/runtime/helpers.js +27 -27
  52. package/dist/runtime/quickjs-entrypoint.d.ts +21 -10
  53. package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -1
  54. package/dist/runtime/quickjs-entrypoint.js +199 -81
  55. package/dist/runtime/quickjs-runtime.d.ts +31 -15
  56. package/dist/runtime/quickjs-runtime.d.ts.map +1 -1
  57. package/dist/runtime/quickjs-runtime.js +126 -77
  58. package/dist/runtime/quickjs-serde.d.ts +10 -10
  59. package/dist/runtime/quickjs-serde.js +20 -20
  60. package/dist/runtime/replay-budget.d.ts +4 -4
  61. package/dist/runtime/replay-budget.js +5 -5
  62. package/dist/runtime/replay-recovery-reporter.d.ts +1 -1
  63. package/dist/runtime/replay-recovery-reporter.js +2 -2
  64. package/dist/runtime/resume-hook.d.ts +2 -2
  65. package/dist/runtime/resume-hook.js +27 -27
  66. package/dist/runtime/resume-latency.d.ts +25 -25
  67. package/dist/runtime/resume-latency.d.ts.map +1 -1
  68. package/dist/runtime/resume-latency.js +4 -4
  69. package/dist/runtime/run-id-time.d.ts +2 -2
  70. package/dist/runtime/run-id-time.js +5 -5
  71. package/dist/runtime/run.d.ts +21 -4
  72. package/dist/runtime/run.d.ts.map +1 -1
  73. package/dist/runtime/run.js +104 -10
  74. package/dist/runtime/runs.d.ts +4 -4
  75. package/dist/runtime/runs.js +2 -2
  76. package/dist/runtime/start.d.ts +3 -3
  77. package/dist/runtime/start.d.ts.map +1 -1
  78. package/dist/runtime/start.js +27 -23
  79. package/dist/runtime/step-executor.d.ts +14 -14
  80. package/dist/runtime/step-executor.d.ts.map +1 -1
  81. package/dist/runtime/step-executor.js +54 -39
  82. package/dist/runtime/step-latency.d.ts +14 -14
  83. package/dist/runtime/step-latency.js +11 -11
  84. package/dist/runtime/step-ownership.d.ts +6 -6
  85. package/dist/runtime/step-ownership.js +8 -8
  86. package/dist/runtime/step-single-flight.d.ts +1 -1
  87. package/dist/runtime/step-single-flight.d.ts.map +1 -1
  88. package/dist/runtime/step-single-flight.js +17 -11
  89. package/dist/runtime/suspension-handler.d.ts +29 -17
  90. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  91. package/dist/runtime/suspension-handler.js +206 -71
  92. package/dist/runtime/unserializable-step.d.ts +34 -0
  93. package/dist/runtime/unserializable-step.d.ts.map +1 -0
  94. package/dist/runtime/unserializable-step.js +52 -0
  95. package/dist/runtime/vm-mode.d.ts +1 -1
  96. package/dist/runtime/vm-mode.js +2 -2
  97. package/dist/runtime/wait-continuation.d.ts +31 -9
  98. package/dist/runtime/wait-continuation.d.ts.map +1 -1
  99. package/dist/runtime/wait-continuation.js +44 -13
  100. package/dist/runtime/wait-until.d.ts +1 -1
  101. package/dist/runtime/wait-until.js +2 -2
  102. package/dist/runtime/world-compatibility.d.ts +20 -9
  103. package/dist/runtime/world-compatibility.d.ts.map +1 -1
  104. package/dist/runtime/world-compatibility.js +24 -13
  105. package/dist/runtime/world-init.d.ts +5 -5
  106. package/dist/runtime/world-init.js +6 -6
  107. package/dist/runtime/world.d.ts.map +1 -1
  108. package/dist/runtime/world.js +13 -3
  109. package/dist/runtime.d.ts.map +1 -1
  110. package/dist/runtime.js +300 -206
  111. package/dist/sealed-box.d.ts +7 -7
  112. package/dist/sealed-box.js +15 -15
  113. package/dist/serialization/client.js +2 -2
  114. package/dist/serialization/codec-devalue-vm.d.ts +1 -1
  115. package/dist/serialization/codec-devalue-vm.js +4 -4
  116. package/dist/serialization/codec-devalue.d.ts +1 -1
  117. package/dist/serialization/codec-devalue.js +2 -2
  118. package/dist/serialization/codec.d.ts +4 -4
  119. package/dist/serialization/codec.js +2 -2
  120. package/dist/serialization/compression.d.ts +12 -11
  121. package/dist/serialization/compression.d.ts.map +1 -1
  122. package/dist/serialization/compression.js +16 -15
  123. package/dist/serialization/encryption.d.ts +7 -7
  124. package/dist/serialization/encryption.d.ts.map +1 -1
  125. package/dist/serialization/encryption.js +8 -8
  126. package/dist/serialization/errors.js +2 -2
  127. package/dist/serialization/format.d.ts +6 -6
  128. package/dist/serialization/format.js +7 -7
  129. package/dist/serialization/hardened.d.ts +18 -18
  130. package/dist/serialization/hardened.d.ts.map +1 -1
  131. package/dist/serialization/hardened.js +41 -32
  132. package/dist/serialization/index.d.ts +1 -1
  133. package/dist/serialization/index.js +2 -2
  134. package/dist/serialization/reducers/class-vm.d.ts +1 -1
  135. package/dist/serialization/reducers/class-vm.js +2 -2
  136. package/dist/serialization/reducers/class.js +2 -2
  137. package/dist/serialization/reducers/common-vm.js +12 -12
  138. package/dist/serialization/reducers/common.js +12 -12
  139. package/dist/serialization/reducers/step-function-vm.d.ts +1 -1
  140. package/dist/serialization/reducers/step-function-vm.js +2 -2
  141. package/dist/serialization/reducers/step-function.js +2 -2
  142. package/dist/serialization/step.js +2 -2
  143. package/dist/serialization/types.d.ts +5 -5
  144. package/dist/serialization/types.js +2 -2
  145. package/dist/serialization/workflow-vm.d.ts +1 -1
  146. package/dist/serialization/workflow-vm.d.ts.map +1 -1
  147. package/dist/serialization/workflow-vm.js +13 -10
  148. package/dist/serialization-format.d.ts +11 -11
  149. package/dist/serialization-format.d.ts.map +1 -1
  150. package/dist/serialization-format.js +29 -23
  151. package/dist/serialization.d.ts +10 -10
  152. package/dist/serialization.js +98 -98
  153. package/dist/set-attributes.js +2 -2
  154. package/dist/source-map.d.ts +1 -1
  155. package/dist/source-map.d.ts.map +1 -1
  156. package/dist/source-map.js +18 -12
  157. package/dist/step/context-storage.d.ts +5 -5
  158. package/dist/step/context-storage.js +1 -1
  159. package/dist/step/writable-stream.d.ts +3 -3
  160. package/dist/step/writable-stream.js +7 -7
  161. package/dist/step.js +12 -12
  162. package/dist/symbols.d.ts +2 -2
  163. package/dist/symbols.js +3 -3
  164. package/dist/telemetry/semantic-conventions.d.ts +21 -13
  165. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  166. package/dist/telemetry/semantic-conventions.js +21 -15
  167. package/dist/telemetry.d.ts +3 -3
  168. package/dist/telemetry.d.ts.map +1 -1
  169. package/dist/telemetry.js +19 -10
  170. package/dist/test-support/orchestrator-context.d.ts.map +1 -1
  171. package/dist/test-support/orchestrator-context.js +12 -2
  172. package/dist/version.d.ts +1 -1
  173. package/dist/version.js +2 -2
  174. package/dist/vm/index.js +4 -4
  175. package/dist/vm/script-cache.d.ts.map +1 -1
  176. package/dist/vm/script-cache.js +23 -17
  177. package/dist/vm/uint8array-base64.js +1 -1
  178. package/dist/workflow/abort-controller.d.ts +1 -1
  179. package/dist/workflow/abort-controller.js +12 -12
  180. package/dist/workflow/create-hook.js +2 -2
  181. package/dist/workflow/get-workflow-metadata.js +2 -2
  182. package/dist/workflow/hook.js +16 -16
  183. package/dist/workflow/set-attributes.d.ts +1 -1
  184. package/dist/workflow/set-attributes.js +2 -2
  185. package/dist/workflow/sleep.js +2 -2
  186. package/dist/workflow/world-init-stub.d.ts +1 -1
  187. package/dist/workflow/world-init-stub.js +2 -2
  188. package/dist/workflow.d.ts +2 -2
  189. package/dist/workflow.js +21 -7
  190. package/docs/api-reference/create-hook.mdx +15 -15
  191. package/docs/api-reference/create-webhook.mdx +15 -15
  192. package/docs/api-reference/define-hook.mdx +10 -10
  193. package/docs/api-reference/fatal-error.mdx +2 -2
  194. package/docs/api-reference/fetch.mdx +7 -7
  195. package/docs/api-reference/get-step-metadata.mdx +2 -2
  196. package/docs/api-reference/get-workflow-metadata.mdx +3 -3
  197. package/docs/api-reference/get-writable.mdx +7 -7
  198. package/docs/api-reference/index.mdx +1 -1
  199. package/docs/api-reference/retryable-error.mdx +1 -1
  200. package/docs/api-reference/set-attributes.mdx +2 -2
  201. package/docs/api-reference/sleep.mdx +3 -3
  202. package/docs/foundations/cancellation.mdx +31 -31
  203. package/docs/foundations/errors-and-retries.mdx +42 -11
  204. package/docs/foundations/hooks.mdx +35 -35
  205. package/docs/foundations/idempotency.mdx +9 -9
  206. package/docs/foundations/serialization.mdx +21 -22
  207. package/docs/foundations/starting-workflows.mdx +36 -37
  208. package/docs/foundations/streaming.mdx +46 -41
  209. package/docs/foundations/versioning.mdx +3 -3
  210. package/docs/foundations/workflows-and-steps.mdx +9 -9
  211. package/docs/how-it-works/cancellation.mdx +62 -62
  212. package/docs/how-it-works/code-transform.mdx +66 -54
  213. package/docs/how-it-works/encryption.mdx +25 -21
  214. package/docs/how-it-works/event-sourcing.mdx +53 -35
  215. package/docs/how-it-works/framework-integrations.mdx +12 -12
  216. package/docs/how-it-works/understanding-directives.mdx +21 -21
  217. package/package.json +7 -7
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Shared shape for finalizing a step whose arguments failed to serialize
3
+ * (used by both the node:vm suspension handler and the QuickJS entrypoint).
4
+ *
5
+ * The world requires a `step_created` before any terminal step event, and
6
+ * the step's real input is precisely what refused to serialize, so the
7
+ * finalization writes a placeholder input. The marker string makes the
8
+ * placeholder distinguishable from a genuine zero-argument step in
9
+ * `workflow inspect steps` and the observability UI: a reader sees
10
+ * "input unavailable" instead of "no arguments".
11
+ */
12
+ export declare const UNSERIALIZABLE_STEP_INPUT_MARKER = "[input unavailable: step argument serialization failed]";
13
+ /**
14
+ * The placeholder value serialized into the failed step's `step_created`
15
+ * input. Matches the `{ args, closureVars, thisVal }` triple
16
+ * `dehydrateStepArguments` / the QuickJS bootstrap produce for real steps,
17
+ * so every consumer hydrates it uniformly, plus the structural flag the
18
+ * step executor checks before running user code (see
19
+ * {@link isUnserializableStepInputPlaceholder}).
20
+ */
21
+ export declare function unserializableStepInputPlaceholder(): Record<string, unknown>;
22
+ /**
23
+ * Whether a hydrated step input is the finalization placeholder.
24
+ *
25
+ * Finalization writes `step_created` (placeholder) and `step_failed` as two
26
+ * separate durable writes; a crash or transient failure between them leaves
27
+ * a pending step whose stored input is the placeholder. Redelivery then
28
+ * dispatches that step through normal crash recovery: the executor calls
29
+ * this before running user code and completes the intended failure (a fatal
30
+ * SerializationError → `step_failed`) instead of silently invoking the step
31
+ * body with placeholder arguments.
32
+ */
33
+ export declare function isUnserializableStepInputPlaceholder(hydratedInput: unknown): boolean;
34
+ //# sourceMappingURL=unserializable-step.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unserializable-step.d.ts","sourceRoot":"","sources":["../../src/runtime/unserializable-step.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gCAAgC,4DACc,CAAC;AAU5D;;;;;;;GAOG;AACH,wBAAgB,kCAAkC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAO5E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oCAAoC,CAClD,aAAa,EAAE,OAAO,GACrB,OAAO,CAMT"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Shared shape for finalizing a step whose arguments failed to serialize
3
+ * (used by both the node:vm suspension handler and the QuickJS entrypoint).
4
+ *
5
+ * The world requires a `step_created` before any terminal step event, and
6
+ * the step's real input is precisely what refused to serialize, so the
7
+ * finalization writes a placeholder input. The marker string makes the
8
+ * placeholder distinguishable from a genuine zero-argument step in
9
+ * `workflow inspect steps` and the observability UI: a reader sees
10
+ * "input unavailable" instead of "no arguments".
11
+ */
12
+ export const UNSERIALIZABLE_STEP_INPUT_MARKER = '[input unavailable: step argument serialization failed]';
13
+ /**
14
+ * Structural discriminator on the placeholder's top level. The
15
+ * `{ args, closureVars, thisVal }` triple is built by the SDK (user code
16
+ * never controls its top-level keys), so this flag cannot false-positive on
17
+ * a legitimate input, unlike the display marker inside `args`.
18
+ */
19
+ const UNSERIALIZABLE_FLAG = '__workflowUnserializableStepInput';
20
+ /**
21
+ * The placeholder value serialized into the failed step's `step_created`
22
+ * input. Matches the `{ args, closureVars, thisVal }` triple
23
+ * `dehydrateStepArguments` / the QuickJS bootstrap produce for real steps,
24
+ * so every consumer hydrates it uniformly, plus the structural flag the
25
+ * step executor checks before running user code (see
26
+ * {@link isUnserializableStepInputPlaceholder}).
27
+ */
28
+ export function unserializableStepInputPlaceholder() {
29
+ return {
30
+ args: [UNSERIALIZABLE_STEP_INPUT_MARKER],
31
+ closureVars: [],
32
+ thisVal: undefined,
33
+ [UNSERIALIZABLE_FLAG]: true,
34
+ };
35
+ }
36
+ /**
37
+ * Whether a hydrated step input is the finalization placeholder.
38
+ *
39
+ * Finalization writes `step_created` (placeholder) and `step_failed` as two
40
+ * separate durable writes; a crash or transient failure between them leaves
41
+ * a pending step whose stored input is the placeholder. Redelivery then
42
+ * dispatches that step through normal crash recovery: the executor calls
43
+ * this before running user code and completes the intended failure (a fatal
44
+ * SerializationError → `step_failed`) instead of silently invoking the step
45
+ * body with placeholder arguments.
46
+ */
47
+ export function isUnserializableStepInputPlaceholder(hydratedInput) {
48
+ return (typeof hydratedInput === 'object' &&
49
+ hydratedInput !== null &&
50
+ hydratedInput[UNSERIALIZABLE_FLAG] === true);
51
+ }
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zZXJpYWxpemFibGUtc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3Vuc2VyaWFsaXphYmxlLXN0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUMzQyx5REFBeUQsQ0FBQztBQUU1RDs7Ozs7R0FLRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsbUNBQW1DLENBQUM7QUFFaEU7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxrQ0FBa0M7SUFDaEQsT0FBTztRQUNMLElBQUksRUFBRSxDQUFDLGdDQUFnQyxDQUFDO1FBQ3hDLFdBQVcsRUFBRSxFQUFFO1FBQ2YsT0FBTyxFQUFFLFNBQVM7UUFDbEIsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLElBQUk7S0FDNUIsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLG9DQUFvQyxDQUNsRCxhQUFzQjtJQUV0QixPQUFPLENBQ0wsT0FBTyxhQUFhLEtBQUssUUFBUTtRQUNqQyxhQUFhLEtBQUssSUFBSTtRQUNyQixhQUF5QyxDQUFDLG1CQUFtQixDQUFDLEtBQUssSUFBSSxDQUN6RSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2hhcmVkIHNoYXBlIGZvciBmaW5hbGl6aW5nIGEgc3RlcCB3aG9zZSBhcmd1bWVudHMgZmFpbGVkIHRvIHNlcmlhbGl6ZVxuICogKHVzZWQgYnkgYm90aCB0aGUgbm9kZTp2bSBzdXNwZW5zaW9uIGhhbmRsZXIgYW5kIHRoZSBRdWlja0pTIGVudHJ5cG9pbnQpLlxuICpcbiAqIFRoZSB3b3JsZCByZXF1aXJlcyBhIGBzdGVwX2NyZWF0ZWRgIGJlZm9yZSBhbnkgdGVybWluYWwgc3RlcCBldmVudCwgYW5kXG4gKiB0aGUgc3RlcCdzIHJlYWwgaW5wdXQgaXMgcHJlY2lzZWx5IHdoYXQgcmVmdXNlZCB0byBzZXJpYWxpemUsIHNvIHRoZVxuICogZmluYWxpemF0aW9uIHdyaXRlcyBhIHBsYWNlaG9sZGVyIGlucHV0LiBUaGUgbWFya2VyIHN0cmluZyBtYWtlcyB0aGVcbiAqIHBsYWNlaG9sZGVyIGRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgZ2VudWluZSB6ZXJvLWFyZ3VtZW50IHN0ZXAgaW5cbiAqIGB3b3JrZmxvdyBpbnNwZWN0IHN0ZXBzYCBhbmQgdGhlIG9ic2VydmFiaWxpdHkgVUk6IGEgcmVhZGVyIHNlZXNcbiAqIFwiaW5wdXQgdW5hdmFpbGFibGVcIiBpbnN0ZWFkIG9mIFwibm8gYXJndW1lbnRzXCIuXG4gKi9cbmV4cG9ydCBjb25zdCBVTlNFUklBTElaQUJMRV9TVEVQX0lOUFVUX01BUktFUiA9XG4gICdbaW5wdXQgdW5hdmFpbGFibGU6IHN0ZXAgYXJndW1lbnQgc2VyaWFsaXphdGlvbiBmYWlsZWRdJztcblxuLyoqXG4gKiBTdHJ1Y3R1cmFsIGRpc2NyaW1pbmF0b3Igb24gdGhlIHBsYWNlaG9sZGVyJ3MgdG9wIGxldmVsLiBUaGVcbiAqIGB7IGFyZ3MsIGNsb3N1cmVWYXJzLCB0aGlzVmFsIH1gIHRyaXBsZSBpcyBidWlsdCBieSB0aGUgU0RLICh1c2VyIGNvZGVcbiAqIG5ldmVyIGNvbnRyb2xzIGl0cyB0b3AtbGV2ZWwga2V5cyksIHNvIHRoaXMgZmxhZyBjYW5ub3QgZmFsc2UtcG9zaXRpdmUgb25cbiAqIGEgbGVnaXRpbWF0ZSBpbnB1dCwgdW5saWtlIHRoZSBkaXNwbGF5IG1hcmtlciBpbnNpZGUgYGFyZ3NgLlxuICovXG5jb25zdCBVTlNFUklBTElaQUJMRV9GTEFHID0gJ19fd29ya2Zsb3dVbnNlcmlhbGl6YWJsZVN0ZXBJbnB1dCc7XG5cbi8qKlxuICogVGhlIHBsYWNlaG9sZGVyIHZhbHVlIHNlcmlhbGl6ZWQgaW50byB0aGUgZmFpbGVkIHN0ZXAncyBgc3RlcF9jcmVhdGVkYFxuICogaW5wdXQuIE1hdGNoZXMgdGhlIGB7IGFyZ3MsIGNsb3N1cmVWYXJzLCB0aGlzVmFsIH1gIHRyaXBsZVxuICogYGRlaHlkcmF0ZVN0ZXBBcmd1bWVudHNgIC8gdGhlIFF1aWNrSlMgYm9vdHN0cmFwIHByb2R1Y2UgZm9yIHJlYWwgc3RlcHMsXG4gKiBzbyBldmVyeSBjb25zdW1lciBoeWRyYXRlcyBpdCB1bmlmb3JtbHksIHBsdXMgdGhlIHN0cnVjdHVyYWwgZmxhZyB0aGVcbiAqIHN0ZXAgZXhlY3V0b3IgY2hlY2tzIGJlZm9yZSBydW5uaW5nIHVzZXIgY29kZSAoc2VlXG4gKiB7QGxpbmsgaXNVbnNlcmlhbGl6YWJsZVN0ZXBJbnB1dFBsYWNlaG9sZGVyfSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnNlcmlhbGl6YWJsZVN0ZXBJbnB1dFBsYWNlaG9sZGVyKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHtcbiAgICBhcmdzOiBbVU5TRVJJQUxJWkFCTEVfU1RFUF9JTlBVVF9NQVJLRVJdLFxuICAgIGNsb3N1cmVWYXJzOiBbXSxcbiAgICB0aGlzVmFsOiB1bmRlZmluZWQsXG4gICAgW1VOU0VSSUFMSVpBQkxFX0ZMQUddOiB0cnVlLFxuICB9O1xufVxuXG4vKipcbiAqIFdoZXRoZXIgYSBoeWRyYXRlZCBzdGVwIGlucHV0IGlzIHRoZSBmaW5hbGl6YXRpb24gcGxhY2Vob2xkZXIuXG4gKlxuICogRmluYWxpemF0aW9uIHdyaXRlcyBgc3RlcF9jcmVhdGVkYCAocGxhY2Vob2xkZXIpIGFuZCBgc3RlcF9mYWlsZWRgIGFzIHR3b1xuICogc2VwYXJhdGUgZHVyYWJsZSB3cml0ZXM7IGEgY3Jhc2ggb3IgdHJhbnNpZW50IGZhaWx1cmUgYmV0d2VlbiB0aGVtIGxlYXZlc1xuICogYSBwZW5kaW5nIHN0ZXAgd2hvc2Ugc3RvcmVkIGlucHV0IGlzIHRoZSBwbGFjZWhvbGRlci4gUmVkZWxpdmVyeSB0aGVuXG4gKiBkaXNwYXRjaGVzIHRoYXQgc3RlcCB0aHJvdWdoIG5vcm1hbCBjcmFzaCByZWNvdmVyeTogdGhlIGV4ZWN1dG9yIGNhbGxzXG4gKiB0aGlzIGJlZm9yZSBydW5uaW5nIHVzZXIgY29kZSBhbmQgY29tcGxldGVzIHRoZSBpbnRlbmRlZCBmYWlsdXJlIChhIGZhdGFsXG4gKiBTZXJpYWxpemF0aW9uRXJyb3Ig4oaSIGBzdGVwX2ZhaWxlZGApIGluc3RlYWQgb2Ygc2lsZW50bHkgaW52b2tpbmcgdGhlIHN0ZXBcbiAqIGJvZHkgd2l0aCBwbGFjZWhvbGRlciBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Vuc2VyaWFsaXphYmxlU3RlcElucHV0UGxhY2Vob2xkZXIoXG4gIGh5ZHJhdGVkSW5wdXQ6IHVua25vd25cbik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBoeWRyYXRlZElucHV0ID09PSAnb2JqZWN0JyAmJlxuICAgIGh5ZHJhdGVkSW5wdXQgIT09IG51bGwgJiZcbiAgICAoaHlkcmF0ZWRJbnB1dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbVU5TRVJJQUxJWkFCTEVfRkxBR10gPT09IHRydWVcbiAgKTtcbn1cbiJdfQ==
@@ -24,7 +24,7 @@ export type WorkflowVmMode = (typeof WORKFLOW_VMS)[number];
24
24
  *
25
25
  * Returns the configured engine, or `undefined` if unset/empty.
26
26
  * Throws {@link WorkflowRuntimeError} if the value is set but not one of
27
- * the known engines catching misconfiguration early is better than
27
+ * the known engines, since catching misconfiguration early is better than
28
28
  * silently falling back to the default.
29
29
  */
30
30
  export declare function getWorkflowVmFromEnv(env?: NodeJS.ProcessEnv): WorkflowVmMode | undefined;
@@ -23,7 +23,7 @@ export const WORKFLOW_VMS = ['node', 'quickjs'];
23
23
  *
24
24
  * Returns the configured engine, or `undefined` if unset/empty.
25
25
  * Throws {@link WorkflowRuntimeError} if the value is set but not one of
26
- * the known engines catching misconfiguration early is better than
26
+ * the known engines, since catching misconfiguration early is better than
27
27
  * silently falling back to the default.
28
28
  */
29
29
  export function getWorkflowVmFromEnv(env = process.env) {
@@ -59,4 +59,4 @@ export function useQuickJSVm(workflowRun) {
59
59
  }
60
60
  return getWorkflowVmFromEnv() === 'quickjs';
61
61
  }
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm0tbW9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3ZtLW1vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUVILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR3hEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQVUsQ0FBQztBQUl6RDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxNQUF5QixPQUFPLENBQUMsR0FBRztJQUVwQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDO0lBQzVCLElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3RELElBQUssWUFBa0MsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0RCxPQUFPLEdBQXFCLENBQUM7SUFDL0IsQ0FBQztJQUNELE1BQU0sSUFBSSxvQkFBb0IsQ0FDNUIsK0JBQStCLEdBQUcsS0FBSztRQUNyQyxvQkFBb0IsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNqRCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxXQUF3QjtJQUNuRCxNQUFNLFNBQVMsR0FDYixXQUFXLENBQUMsZ0JBQ2IsRUFBRSxVQUFVLENBQUM7SUFDZCxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUUsWUFBa0MsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM3RCxNQUFNLElBQUksb0JBQW9CLENBQzVCLCtDQUErQyxTQUFTLEtBQUs7Z0JBQzNELG9CQUFvQixZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2pELENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxTQUFTLEtBQUssU0FBUyxDQUFDO0lBQ2pDLENBQUM7SUFDRCxPQUFPLG9CQUFvQixFQUFFLEtBQUssU0FBUyxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZNIGVuZ2luZSBzZWxlY3Rpb24gZm9yIHdvcmtmbG93IGV4ZWN1dGlvbi5cbiAqXG4gKiBUaGUgTm9kZS5qcyBgbm9kZTp2bWAgZW5naW5lIGlzIHRoZSBkZWZhdWx0LiBUaGUgUXVpY2tKUyBXQVNNIGVuZ2luZSBpc1xuICogb3B0LWluIHZpYSB0aGUgYFdPUktGTE9XX1ZNYCBlbnYgdmFyIG9yIGBleGVjdXRpb25Db250ZXh0LndvcmtmbG93Vm1gLlxuICpcbiAqIEJvdGggZW5naW5lcyBpbXBsZW1lbnQgdGhlIHNhbWUgZXZlbnQtcmVwbGF5IGV4ZWN1dGlvbiBtb2RlbDogb24gZXZlcnlcbiAqIHdvcmtmbG93IGhhbmRsZXIgaW52b2NhdGlvbiB0aGUgd29ya2Zsb3cgZnVuY3Rpb24gaXMgcmUtZXhlY3V0ZWQgZnJvbSB0aGVcbiAqIHRvcCBhbmQgdGhlIHJlY29yZGVkIGV2ZW50IGxvZyByZXNvbHZlcyBhd2FpdGVkIHByaW1pdGl2ZXMuIFRoZSBRdWlja0pTXG4gKiBlbmdpbmUgcnVucyB0aGUgd29ya2Zsb3cgY29kZSBpbiBhIFF1aWNrSlMgV0FTTSBWTSAodmlhIHF1aWNranMtd2FzaSlcbiAqIGluc3RlYWQgb2YgYSBgbm9kZTp2bWAgY29udGV4dCwgd2hpY2ggbWFrZXMgaXQgdXNhYmxlIG9uIHBsYXRmb3JtcyB0aGF0XG4gKiBkbyBub3QgaW1wbGVtZW50IGBub2RlOnZtYCAoZS5nLiBDbG91ZGZsYXJlIFdvcmtlcnMpIGFuZCBpcyB0aGVcbiAqIGZvdW5kYXRpb24gZm9yIFZNLW1lbW9yeSBzbmFwc2hvdHRpbmcuXG4gKi9cblxuaW1wb3J0IHsgV29ya2Zsb3dSdW50aW1lRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3dSdW4gfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuXG4vKipcbiAqIEtub3duIHdvcmtmbG93IFZNIGVuZ2luZXMuIEFueSBvdGhlciBgV09SS0ZMT1dfVk1gIHZhbHVlIGlzIHRyZWF0ZWQgYXNcbiAqIGEgbWlzY29uZmlndXJhdGlvbiBhbmQgcmVqZWN0ZWQgYXQgc3RhcnR1cC5cbiAqL1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1ZNUyA9IFsnbm9kZScsICdxdWlja2pzJ10gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFdvcmtmbG93Vm1Nb2RlID0gKHR5cGVvZiBXT1JLRkxPV19WTVMpW251bWJlcl07XG5cbi8qKlxuICogUmVhZCBhbmQgdmFsaWRhdGUgdGhlIGBXT1JLRkxPV19WTWAgZW52IHZhci5cbiAqXG4gKiBSZXR1cm5zIHRoZSBjb25maWd1cmVkIGVuZ2luZSwgb3IgYHVuZGVmaW5lZGAgaWYgdW5zZXQvZW1wdHkuXG4gKiBUaHJvd3Mge0BsaW5rIFdvcmtmbG93UnVudGltZUVycm9yfSBpZiB0aGUgdmFsdWUgaXMgc2V0IGJ1dCBub3Qgb25lIG9mXG4gKiB0aGUga25vd24gZW5naW5lcyDigJQgY2F0Y2hpbmcgbWlzY29uZmlndXJhdGlvbiBlYXJseSBpcyBiZXR0ZXIgdGhhblxuICogc2lsZW50bHkgZmFsbGluZyBiYWNrIHRvIHRoZSBkZWZhdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya2Zsb3dWbUZyb21FbnYoXG4gIGVudjogTm9kZUpTLlByb2Nlc3NFbnYgPSBwcm9jZXNzLmVudlxuKTogV29ya2Zsb3dWbU1vZGUgfCB1bmRlZmluZWQge1xuICBjb25zdCByYXcgPSBlbnYuV09SS0ZMT1dfVk07XG4gIGlmIChyYXcgPT09IHVuZGVmaW5lZCB8fCByYXcgPT09ICcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoKFdPUktGTE9XX1ZNUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMocmF3KSkge1xuICAgIHJldHVybiByYXcgYXMgV29ya2Zsb3dWbU1vZGU7XG4gIH1cbiAgdGhyb3cgbmV3IFdvcmtmbG93UnVudGltZUVycm9yKFxuICAgIGBJbnZhbGlkIFdPUktGTE9XX1ZNIHZhbHVlOiBcIiR7cmF3fVwiLiBgICtcbiAgICAgIGBFeHBlY3RlZCBvbmUgb2Y6ICR7V09SS0ZMT1dfVk1TLmpvaW4oJywgJyl9LmBcbiAgKTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRvIHVzZSB0aGUgUXVpY2tKUyBXQVNNIFZNIGZvciBhIGdpdmVuIHJ1bi5cbiAqXG4gKiBUaGUgcnVuJ3MgYGV4ZWN1dGlvbkNvbnRleHQud29ya2Zsb3dWbWAgKHN0YW1wZWQgYnkgdGhlIFNESyBhdCBgc3RhcnQoKWBcbiAqIHdoZW4gYFdPUktGTE9XX1ZNYCBpcyBzZXQgb24gdGhlIGNsaWVudCkgdGFrZXMgcHJlY2VkZW5jZSBzbyBhIHJ1biBrZWVwc1xuICogZXhlY3V0aW5nIG9uIHRoZSBlbmdpbmUgaXQgc3RhcnRlZCBvbi4gV2hlbiB0aGUgcnVuIGRvZXNuJ3Qgc3BlY2lmeSBhblxuICogZW5naW5lLCB0aGUgYFdPUktGTE9XX1ZNYCBlbnYgdmFyIG9uIHRoZSB3b3JrZmxvdyBoYW5kbGVyIGRlY2lkZXMuXG4gKiBUaGUgZGVmYXVsdCBpcyB0aGUgYG5vZGU6dm1gIGVuZ2luZS5cbiAqXG4gKiBUaHJvd3MgaWYgYFdPUktGTE9XX1ZNYCBvciBgZXhlY3V0aW9uQ29udGV4dC53b3JrZmxvd1ZtYCBpcyBzZXQgdG8gYW5cbiAqIHVua25vd24gdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VRdWlja0pTVm0od29ya2Zsb3dSdW46IFdvcmtmbG93UnVuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHZtRnJvbVJ1biA9IChcbiAgICB3b3JrZmxvd1J1bi5leGVjdXRpb25Db250ZXh0IGFzIHsgd29ya2Zsb3dWbT86IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICk/LndvcmtmbG93Vm07XG4gIGlmICh2bUZyb21SdW4gIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICghKFdPUktGTE9XX1ZNUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModm1Gcm9tUnVuKSkge1xuICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVudGltZUVycm9yKFxuICAgICAgICBgSW52YWxpZCBleGVjdXRpb25Db250ZXh0LndvcmtmbG93Vm0gdmFsdWU6IFwiJHt2bUZyb21SdW59XCIuIGAgK1xuICAgICAgICAgIGBFeHBlY3RlZCBvbmUgb2Y6ICR7V09SS0ZMT1dfVk1TLmpvaW4oJywgJyl9LmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB2bUZyb21SdW4gPT09ICdxdWlja2pzJztcbiAgfVxuICByZXR1cm4gZ2V0V29ya2Zsb3dWbUZyb21FbnYoKSA9PT0gJ3F1aWNranMnO1xufVxuIl19
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm0tbW9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3ZtLW1vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUVILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR3hEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQVUsQ0FBQztBQUl6RDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxNQUF5QixPQUFPLENBQUMsR0FBRztJQUVwQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDO0lBQzVCLElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3RELElBQUssWUFBa0MsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0RCxPQUFPLEdBQXFCLENBQUM7SUFDL0IsQ0FBQztJQUNELE1BQU0sSUFBSSxvQkFBb0IsQ0FDNUIsK0JBQStCLEdBQUcsS0FBSztRQUNyQyxvQkFBb0IsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNqRCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxXQUF3QjtJQUNuRCxNQUFNLFNBQVMsR0FDYixXQUFXLENBQUMsZ0JBQ2IsRUFBRSxVQUFVLENBQUM7SUFDZCxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUUsWUFBa0MsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM3RCxNQUFNLElBQUksb0JBQW9CLENBQzVCLCtDQUErQyxTQUFTLEtBQUs7Z0JBQzNELG9CQUFvQixZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2pELENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxTQUFTLEtBQUssU0FBUyxDQUFDO0lBQ2pDLENBQUM7SUFDRCxPQUFPLG9CQUFvQixFQUFFLEtBQUssU0FBUyxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZNIGVuZ2luZSBzZWxlY3Rpb24gZm9yIHdvcmtmbG93IGV4ZWN1dGlvbi5cbiAqXG4gKiBUaGUgTm9kZS5qcyBgbm9kZTp2bWAgZW5naW5lIGlzIHRoZSBkZWZhdWx0LiBUaGUgUXVpY2tKUyBXQVNNIGVuZ2luZSBpc1xuICogb3B0LWluIHZpYSB0aGUgYFdPUktGTE9XX1ZNYCBlbnYgdmFyIG9yIGBleGVjdXRpb25Db250ZXh0LndvcmtmbG93Vm1gLlxuICpcbiAqIEJvdGggZW5naW5lcyBpbXBsZW1lbnQgdGhlIHNhbWUgZXZlbnQtcmVwbGF5IGV4ZWN1dGlvbiBtb2RlbDogb24gZXZlcnlcbiAqIHdvcmtmbG93IGhhbmRsZXIgaW52b2NhdGlvbiB0aGUgd29ya2Zsb3cgZnVuY3Rpb24gaXMgcmUtZXhlY3V0ZWQgZnJvbSB0aGVcbiAqIHRvcCBhbmQgdGhlIHJlY29yZGVkIGV2ZW50IGxvZyByZXNvbHZlcyBhd2FpdGVkIHByaW1pdGl2ZXMuIFRoZSBRdWlja0pTXG4gKiBlbmdpbmUgcnVucyB0aGUgd29ya2Zsb3cgY29kZSBpbiBhIFF1aWNrSlMgV0FTTSBWTSAodmlhIHF1aWNranMtd2FzaSlcbiAqIGluc3RlYWQgb2YgYSBgbm9kZTp2bWAgY29udGV4dCwgd2hpY2ggbWFrZXMgaXQgdXNhYmxlIG9uIHBsYXRmb3JtcyB0aGF0XG4gKiBkbyBub3QgaW1wbGVtZW50IGBub2RlOnZtYCAoZS5nLiBDbG91ZGZsYXJlIFdvcmtlcnMpIGFuZCBpcyB0aGVcbiAqIGZvdW5kYXRpb24gZm9yIFZNLW1lbW9yeSBzbmFwc2hvdHRpbmcuXG4gKi9cblxuaW1wb3J0IHsgV29ya2Zsb3dSdW50aW1lRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3dSdW4gfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuXG4vKipcbiAqIEtub3duIHdvcmtmbG93IFZNIGVuZ2luZXMuIEFueSBvdGhlciBgV09SS0ZMT1dfVk1gIHZhbHVlIGlzIHRyZWF0ZWQgYXNcbiAqIGEgbWlzY29uZmlndXJhdGlvbiBhbmQgcmVqZWN0ZWQgYXQgc3RhcnR1cC5cbiAqL1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1ZNUyA9IFsnbm9kZScsICdxdWlja2pzJ10gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFdvcmtmbG93Vm1Nb2RlID0gKHR5cGVvZiBXT1JLRkxPV19WTVMpW251bWJlcl07XG5cbi8qKlxuICogUmVhZCBhbmQgdmFsaWRhdGUgdGhlIGBXT1JLRkxPV19WTWAgZW52IHZhci5cbiAqXG4gKiBSZXR1cm5zIHRoZSBjb25maWd1cmVkIGVuZ2luZSwgb3IgYHVuZGVmaW5lZGAgaWYgdW5zZXQvZW1wdHkuXG4gKiBUaHJvd3Mge0BsaW5rIFdvcmtmbG93UnVudGltZUVycm9yfSBpZiB0aGUgdmFsdWUgaXMgc2V0IGJ1dCBub3Qgb25lIG9mXG4gKiB0aGUga25vd24gZW5naW5lcywgc2luY2UgY2F0Y2hpbmcgbWlzY29uZmlndXJhdGlvbiBlYXJseSBpcyBiZXR0ZXIgdGhhblxuICogc2lsZW50bHkgZmFsbGluZyBiYWNrIHRvIHRoZSBkZWZhdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya2Zsb3dWbUZyb21FbnYoXG4gIGVudjogTm9kZUpTLlByb2Nlc3NFbnYgPSBwcm9jZXNzLmVudlxuKTogV29ya2Zsb3dWbU1vZGUgfCB1bmRlZmluZWQge1xuICBjb25zdCByYXcgPSBlbnYuV09SS0ZMT1dfVk07XG4gIGlmIChyYXcgPT09IHVuZGVmaW5lZCB8fCByYXcgPT09ICcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoKFdPUktGTE9XX1ZNUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMocmF3KSkge1xuICAgIHJldHVybiByYXcgYXMgV29ya2Zsb3dWbU1vZGU7XG4gIH1cbiAgdGhyb3cgbmV3IFdvcmtmbG93UnVudGltZUVycm9yKFxuICAgIGBJbnZhbGlkIFdPUktGTE9XX1ZNIHZhbHVlOiBcIiR7cmF3fVwiLiBgICtcbiAgICAgIGBFeHBlY3RlZCBvbmUgb2Y6ICR7V09SS0ZMT1dfVk1TLmpvaW4oJywgJyl9LmBcbiAgKTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRvIHVzZSB0aGUgUXVpY2tKUyBXQVNNIFZNIGZvciBhIGdpdmVuIHJ1bi5cbiAqXG4gKiBUaGUgcnVuJ3MgYGV4ZWN1dGlvbkNvbnRleHQud29ya2Zsb3dWbWAgKHN0YW1wZWQgYnkgdGhlIFNESyBhdCBgc3RhcnQoKWBcbiAqIHdoZW4gYFdPUktGTE9XX1ZNYCBpcyBzZXQgb24gdGhlIGNsaWVudCkgdGFrZXMgcHJlY2VkZW5jZSBzbyBhIHJ1biBrZWVwc1xuICogZXhlY3V0aW5nIG9uIHRoZSBlbmdpbmUgaXQgc3RhcnRlZCBvbi4gV2hlbiB0aGUgcnVuIGRvZXNuJ3Qgc3BlY2lmeSBhblxuICogZW5naW5lLCB0aGUgYFdPUktGTE9XX1ZNYCBlbnYgdmFyIG9uIHRoZSB3b3JrZmxvdyBoYW5kbGVyIGRlY2lkZXMuXG4gKiBUaGUgZGVmYXVsdCBpcyB0aGUgYG5vZGU6dm1gIGVuZ2luZS5cbiAqXG4gKiBUaHJvd3MgaWYgYFdPUktGTE9XX1ZNYCBvciBgZXhlY3V0aW9uQ29udGV4dC53b3JrZmxvd1ZtYCBpcyBzZXQgdG8gYW5cbiAqIHVua25vd24gdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VRdWlja0pTVm0od29ya2Zsb3dSdW46IFdvcmtmbG93UnVuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHZtRnJvbVJ1biA9IChcbiAgICB3b3JrZmxvd1J1bi5leGVjdXRpb25Db250ZXh0IGFzIHsgd29ya2Zsb3dWbT86IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICk/LndvcmtmbG93Vm07XG4gIGlmICh2bUZyb21SdW4gIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICghKFdPUktGTE9XX1ZNUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModm1Gcm9tUnVuKSkge1xuICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVudGltZUVycm9yKFxuICAgICAgICBgSW52YWxpZCBleGVjdXRpb25Db250ZXh0LndvcmtmbG93Vm0gdmFsdWU6IFwiJHt2bUZyb21SdW59XCIuIGAgK1xuICAgICAgICAgIGBFeHBlY3RlZCBvbmUgb2Y6ICR7V09SS0ZMT1dfVk1TLmpvaW4oJywgJyl9LmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB2bUZyb21SdW4gPT09ICdxdWlja2pzJztcbiAgfVxuICByZXR1cm4gZ2V0V29ya2Zsb3dWbUZyb21FbnYoKSA9PT0gJ3F1aWNranMnO1xufVxuIl19
@@ -10,7 +10,7 @@
10
10
  * The continuation is keyed on the wait's correlationId: while a wait is
11
11
  * pending, every replay pass over the run re-observes it (e.g., once per
12
12
  * step completion in `Promise.all([steps..., sleep()])`), and without
13
- * dedupe each pass would enqueue another delayed continuation each one
13
+ * dedupe each pass would enqueue another delayed continuation: each one
14
14
  * a spurious full replay when the wait elapses, and each a fresh message
15
15
  * that resets the delivery-attempt runaway guard. A key is attached in
16
16
  * all cases: some worlds (e.g. world-postgres) serialize key-less
@@ -29,7 +29,7 @@
29
29
  * situations exist, each with its own key variation:
30
30
  *
31
31
  * - Waits longer than the maximum queue delay are chained: the delay is
32
- * clamped to `WAIT_CONTINUATION_MAX_DELAY_SECONDS` (23h VQS messages
32
+ * clamped to `WAIT_CONTINUATION_MAX_DELAY_SECONDS` (23h: VQS messages
33
33
  * have a 24h retention limit, and one hour of buffer matches
34
34
  * world-vercel's own clamp for delayed re-enqueues), so the
35
35
  * continuation intentionally fires early, re-observes the wait, and
@@ -37,7 +37,7 @@
37
37
  * (`ceil(timeoutSeconds / maxDelay)`): stable for every re-observation
38
38
  * within the same hop window (so passes dedupe), decremented at each
39
39
  * hop delivery (so the chain always advances). Worlds without a delay
40
- * limit (world-postgres, world-local) simply take the same ≤23h hops.
40
+ * limit (world-postgres, world-local) take the same ≤23h hops.
41
41
  *
42
42
  * - Near-elapsed waits (≤2s remaining) get a second-bucketed suffix. A
43
43
  * continuation delivered marginally early (clock skew between the
@@ -50,11 +50,25 @@
50
50
  * Mid-range waits (more than the near-elapsed threshold, at most one
51
51
  * hop) use the bare correlationId: every re-observation targets the same
52
52
  * deadline, so deduping to the first message is semantically lossless.
53
- * Host clock skew beyond the near-elapsed threshold could in principle
54
- * deliver such a continuation early enough to re-observe its wait and
55
- * lose the re-enqueue to the burnt key; the threshold is the skew
56
- * tolerance we accept for the benefit of exactly-one continuation per
57
- * wait.
53
+ *
54
+ * That last case used to be the one hole in the scheme, and it was not
55
+ * theoretical. Any delivery early enough to re-observe its own wait as
56
+ * pending burns the bare key on the way in: the re-enqueue is dropped by
57
+ * the dedupe window, nothing else is scheduled to wake the run, and no
58
+ * backstop exists for a wait the way inline step ownership provides one
59
+ * for a step. The run sleeps forever. Waits over the threshold have zero
60
+ * tolerance for it, which is why an infrastructure change in delivery
61
+ * timing was able to strand runs across every published SDK version at
62
+ * once, all of them keyed this way.
63
+ *
64
+ * So the key is no longer derived from the wait alone. A continuation
65
+ * carries the wait it was armed for and its attempt number
66
+ * ({@link WorkflowInvokePayload.waitContinuation}), and an invocation
67
+ * that recognizes itself as the continuation for a wait that is still
68
+ * pending arms the next one at `attempt + 1`. Attempts advance ONLY when
69
+ * an early delivery actually happens, so the normal path is untouched:
70
+ * attempt 0 keys exactly as before, and every re-observation within one
71
+ * attempt still collapses to a single message.
58
72
  */
59
73
  /**
60
74
  * Maximum `delaySeconds` for a single wait-continuation message. Waits
@@ -79,6 +93,14 @@ export interface WaitContinuationDispatch {
79
93
  * message. `timeoutSeconds` is the time until the wait's `resumeAt`
80
94
  * (floored at 1s by the suspension handler); `waitCorrelationId`
81
95
  * identifies the wait so repeated suspension passes dedupe.
96
+ *
97
+ * `attempt` is the number of continuations already spent on this wait, taken
98
+ * from the incoming message when this invocation IS one of them (see
99
+ * {@link WorkflowInvokePayload.waitContinuation}). It only ever moves when a
100
+ * continuation arrived before its wait elapsed, which is exactly when the
101
+ * previous key is spent and re-using it would drop the message. Attempt 0
102
+ * keys identically to the scheme before attempts existed, so the ordinary
103
+ * path — arm once, deliver once, complete — is byte-for-byte unchanged.
82
104
  */
83
- export declare function getWaitContinuationDispatch(timeoutSeconds: number, waitCorrelationId: string, now?: number): WaitContinuationDispatch;
105
+ export declare function getWaitContinuationDispatch(timeoutSeconds: number, waitCorrelationId: string, now?: number, attempt?: number): WaitContinuationDispatch;
84
106
  //# sourceMappingURL=wait-continuation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wait-continuation.d.ts","sourceRoot":"","sources":["../../src/runtime/wait-continuation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAIH;;;;;GAKG;AACH,eAAO,MAAM,mCAAmC,QAAS,CAAC;AAE1D;;;;;GAKG;AACH,eAAO,MAAM,mCAAmC,IAAI,CAAC;AAiBrD,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,MAAM,EACzB,GAAG,GAAE,MAAmB,GACvB,wBAAwB,CAyB1B"}
1
+ {"version":3,"file":"wait-continuation.d.ts","sourceRoot":"","sources":["../../src/runtime/wait-continuation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuEG;AAIH;;;;;GAKG;AACH,eAAO,MAAM,mCAAmC,QAAS,CAAC;AAE1D;;;;;GAKG;AACH,eAAO,MAAM,mCAAmC,IAAI,CAAC;AAiBrD,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CACzC,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,MAAM,EACzB,GAAG,GAAE,MAAmB,EACxB,OAAO,SAAI,GACV,wBAAwB,CAW1B"}
@@ -10,7 +10,7 @@
10
10
  * The continuation is keyed on the wait's correlationId: while a wait is
11
11
  * pending, every replay pass over the run re-observes it (e.g., once per
12
12
  * step completion in `Promise.all([steps..., sleep()])`), and without
13
- * dedupe each pass would enqueue another delayed continuation each one
13
+ * dedupe each pass would enqueue another delayed continuation: each one
14
14
  * a spurious full replay when the wait elapses, and each a fresh message
15
15
  * that resets the delivery-attempt runaway guard. A key is attached in
16
16
  * all cases: some worlds (e.g. world-postgres) serialize key-less
@@ -29,7 +29,7 @@
29
29
  * situations exist, each with its own key variation:
30
30
  *
31
31
  * - Waits longer than the maximum queue delay are chained: the delay is
32
- * clamped to `WAIT_CONTINUATION_MAX_DELAY_SECONDS` (23h VQS messages
32
+ * clamped to `WAIT_CONTINUATION_MAX_DELAY_SECONDS` (23h: VQS messages
33
33
  * have a 24h retention limit, and one hour of buffer matches
34
34
  * world-vercel's own clamp for delayed re-enqueues), so the
35
35
  * continuation intentionally fires early, re-observes the wait, and
@@ -37,7 +37,7 @@
37
37
  * (`ceil(timeoutSeconds / maxDelay)`): stable for every re-observation
38
38
  * within the same hop window (so passes dedupe), decremented at each
39
39
  * hop delivery (so the chain always advances). Worlds without a delay
40
- * limit (world-postgres, world-local) simply take the same ≤23h hops.
40
+ * limit (world-postgres, world-local) take the same ≤23h hops.
41
41
  *
42
42
  * - Near-elapsed waits (≤2s remaining) get a second-bucketed suffix. A
43
43
  * continuation delivered marginally early (clock skew between the
@@ -50,11 +50,25 @@
50
50
  * Mid-range waits (more than the near-elapsed threshold, at most one
51
51
  * hop) use the bare correlationId: every re-observation targets the same
52
52
  * deadline, so deduping to the first message is semantically lossless.
53
- * Host clock skew beyond the near-elapsed threshold could in principle
54
- * deliver such a continuation early enough to re-observe its wait and
55
- * lose the re-enqueue to the burnt key; the threshold is the skew
56
- * tolerance we accept for the benefit of exactly-one continuation per
57
- * wait.
53
+ *
54
+ * That last case used to be the one hole in the scheme, and it was not
55
+ * theoretical. Any delivery early enough to re-observe its own wait as
56
+ * pending burns the bare key on the way in: the re-enqueue is dropped by
57
+ * the dedupe window, nothing else is scheduled to wake the run, and no
58
+ * backstop exists for a wait the way inline step ownership provides one
59
+ * for a step. The run sleeps forever. Waits over the threshold have zero
60
+ * tolerance for it, which is why an infrastructure change in delivery
61
+ * timing was able to strand runs across every published SDK version at
62
+ * once, all of them keyed this way.
63
+ *
64
+ * So the key is no longer derived from the wait alone. A continuation
65
+ * carries the wait it was armed for and its attempt number
66
+ * ({@link WorkflowInvokePayload.waitContinuation}), and an invocation
67
+ * that recognizes itself as the continuation for a wait that is still
68
+ * pending arms the next one at `attempt + 1`. Attempts advance ONLY when
69
+ * an early delivery actually happens, so the normal path is untouched:
70
+ * attempt 0 keys exactly as before, and every re-observation within one
71
+ * attempt still collapses to a single message.
58
72
  */
59
73
  import { envNumber } from '@workflow/world';
60
74
  /**
@@ -80,15 +94,32 @@ const getNearElapsedWaitThresholdSeconds = () => envNumber('WORKFLOW_NEAR_ELAPSE
80
94
  * message. `timeoutSeconds` is the time until the wait's `resumeAt`
81
95
  * (floored at 1s by the suspension handler); `waitCorrelationId`
82
96
  * identifies the wait so repeated suspension passes dedupe.
97
+ *
98
+ * `attempt` is the number of continuations already spent on this wait, taken
99
+ * from the incoming message when this invocation IS one of them (see
100
+ * {@link WorkflowInvokePayload.waitContinuation}). It only ever moves when a
101
+ * continuation arrived before its wait elapsed, which is exactly when the
102
+ * previous key is spent and re-using it would drop the message. Attempt 0
103
+ * keys identically to the scheme before attempts existed, so the ordinary
104
+ * path — arm once, deliver once, complete — is byte-for-byte unchanged.
83
105
  */
84
- export function getWaitContinuationDispatch(timeoutSeconds, waitCorrelationId, now = Date.now()) {
106
+ export function getWaitContinuationDispatch(timeoutSeconds, waitCorrelationId, now = Date.now(), attempt = 0) {
107
+ const dispatch = waitContinuationDispatchForAttemptZero(timeoutSeconds, waitCorrelationId, now);
108
+ if (attempt <= 0)
109
+ return dispatch;
110
+ return {
111
+ delaySeconds: dispatch.delaySeconds,
112
+ idempotencyKey: `${dispatch.idempotencyKey}:a${attempt}`,
113
+ };
114
+ }
115
+ function waitContinuationDispatchForAttemptZero(timeoutSeconds, waitCorrelationId, now) {
85
116
  const maxDelaySeconds = getWaitContinuationMaxDelaySeconds();
86
117
  // The near-elapsed branch returns the full remaining time as the delay, so
87
- // its threshold can never exceed the max delay otherwise a wait between the
118
+ // its threshold can never exceed the max delay. Otherwise a wait between the
88
119
  // max and the threshold would be dispatched with a delay above the max. Cap
89
120
  // the threshold at the max so every branch yields a delay within it. (With
90
- // defaults threshold 2s, max 82_800s this is a no-op; it only bites when
91
- // the max is tuned down below the threshold for testing.)
121
+ // defaults, threshold 2s and max 82_800s, this is a no-op; it only bites
122
+ // when the max is tuned down below the threshold for testing.)
92
123
  const nearElapsedThreshold = Math.min(getNearElapsedWaitThresholdSeconds(), maxDelaySeconds);
93
124
  if (timeoutSeconds <= nearElapsedThreshold) {
94
125
  return {
@@ -102,4 +133,4 @@ export function getWaitContinuationDispatch(timeoutSeconds, waitCorrelationId, n
102
133
  idempotencyKey: hop === 1 ? waitCorrelationId : `${waitCorrelationId}:hop-${hop}`,
103
134
  };
104
135
  }
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdC1jb250aW51YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS93YWl0LWNvbnRpbnVhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeURHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTVDOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUcsTUFBTSxDQUFDO0FBRTFEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUcsQ0FBQyxDQUFDO0FBRXJELGtHQUFrRztBQUNsRyxNQUFNLGtDQUFrQyxHQUFHLEdBQVcsRUFBRSxDQUN0RCxTQUFTLENBQ1AsOENBQThDLEVBQzlDLG1DQUFtQyxFQUNuQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUMxQixDQUFDO0FBRUosa0dBQWtHO0FBQ2xHLE1BQU0sa0NBQWtDLEdBQUcsR0FBVyxFQUFFLENBQ3RELFNBQVMsQ0FDUCw4Q0FBOEMsRUFDOUMsbUNBQW1DLENBQ3BDLENBQUM7QUFPSjs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSwyQkFBMkIsQ0FDekMsY0FBc0IsRUFDdEIsaUJBQXlCLEVBQ3pCLE1BQWMsSUFBSSxDQUFDLEdBQUcsRUFBRTtJQUV4QixNQUFNLGVBQWUsR0FBRyxrQ0FBa0MsRUFBRSxDQUFDO0lBQzdELDJFQUEyRTtJQUMzRSw4RUFBOEU7SUFDOUUsNEVBQTRFO0lBQzVFLDJFQUEyRTtJQUMzRSw2RUFBNkU7SUFDN0UsMERBQTBEO0lBQzFELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDbkMsa0NBQWtDLEVBQUUsRUFDcEMsZUFBZSxDQUNoQixDQUFDO0lBQ0YsSUFBSSxjQUFjLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUMzQyxPQUFPO1lBQ0wsWUFBWSxFQUFFLGNBQWM7WUFDNUIsY0FBYyxFQUFFLEdBQUcsaUJBQWlCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUU7U0FDakUsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxlQUFlLENBQUMsQ0FBQztJQUN4RCxPQUFPO1FBQ0wsWUFBWSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLGVBQWUsQ0FBQztRQUN2RCxjQUFjLEVBQ1osR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLFFBQVEsR0FBRyxFQUFFO0tBQ3BFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXYWl0LWNvbnRpbnVhdGlvbiBkaXNwYXRjaDogZGVsYXkgKyBpZGVtcG90ZW5jeS1rZXkgc2VsZWN0aW9uLlxuICpcbiAqIFdoZW4gVjIgc3VzcGVuc2lvbiBwcm9jZXNzaW5nIG9ic2VydmVzIGEgcGVuZGluZyB3YWl0LCBpdCBlbnF1ZXVlcyBhXG4gKiBkZWxheWVkIFwiY29udGludWF0aW9uXCIgbWVzc2FnZSB0aGF0IGZpcmVzIG9uY2UgdGhlIHdhaXQgZWxhcHNlcyBhbmRcbiAqIGRyaXZlcyB0aGUgbmV4dCByZXBsYXkgKHdoaWNoIGNvbXBsZXRlcyB0aGUgd2FpdCB2aWEgdGhlIFwiY29tcGxldGVcbiAqIGVsYXBzZWQgd2FpdHNcIiBwYXNzKS4gVGhpcyBtb2R1bGUgZGVjaWRlcyB0aGUgbWVzc2FnZSdzIGBkZWxheVNlY29uZHNgXG4gKiBhbmQgYGlkZW1wb3RlbmN5S2V5YC5cbiAqXG4gKiBUaGUgY29udGludWF0aW9uIGlzIGtleWVkIG9uIHRoZSB3YWl0J3MgY29ycmVsYXRpb25JZDogd2hpbGUgYSB3YWl0IGlzXG4gKiBwZW5kaW5nLCBldmVyeSByZXBsYXkgcGFzcyBvdmVyIHRoZSBydW4gcmUtb2JzZXJ2ZXMgaXQgKGUuZy4sIG9uY2UgcGVyXG4gKiBzdGVwIGNvbXBsZXRpb24gaW4gYFByb21pc2UuYWxsKFtzdGVwcy4uLiwgc2xlZXAoKV0pYCksIGFuZCB3aXRob3V0XG4gKiBkZWR1cGUgZWFjaCBwYXNzIHdvdWxkIGVucXVldWUgYW5vdGhlciBkZWxheWVkIGNvbnRpbnVhdGlvbiDigJQgZWFjaCBvbmVcbiAqIGEgc3B1cmlvdXMgZnVsbCByZXBsYXkgd2hlbiB0aGUgd2FpdCBlbGFwc2VzLCBhbmQgZWFjaCBhIGZyZXNoIG1lc3NhZ2VcbiAqIHRoYXQgcmVzZXRzIHRoZSBkZWxpdmVyeS1hdHRlbXB0IHJ1bmF3YXkgZ3VhcmQuIEEga2V5IGlzIGF0dGFjaGVkIGluXG4gKiBhbGwgY2FzZXM6IHNvbWUgd29ybGRzIChlLmcuIHdvcmxkLXBvc3RncmVzKSBzZXJpYWxpemUga2V5LWxlc3NcbiAqIHdvcmtmbG93IG1lc3NhZ2VzIHBlciBydW4sIHdoaWNoIHdvdWxkIHBhcmsgdGhlIGNvbnRpbnVhdGlvbiBiZWhpbmRcbiAqIHRoZSBoYW5kbGVyJ3Mgb3duIGlubGluZSBzdGVwIGV4ZWN1dGlvbiBhbmQgZGVmZWF0IHRoZSByYWNlIHNlbWFudGljc1xuICogdGhlIGNvbnRpbnVhdGlvbiBleGlzdHMgdG8gcHJvdmlkZS5cbiAqXG4gKiBUaGUgYmFyZSBjb3JyZWxhdGlvbklkIGNhbm5vdCBiZSB0aGUga2V5IGluIGV2ZXJ5IGNhc2UsIHRob3VnaDogd29ybGRcbiAqIGRlZHVwZSB3aW5kb3dzIG91dGxpdmUgdGhlIGZpcnN0IGRlbGl2ZXJ5IChWUVMga2VlcHMgaWRlbXBvdGVuY3lcbiAqIHJlY29yZHMgdW50aWwgbWVzc2FnZS1yZXRlbnRpb24gVFRMOyB3b3JsZC1wb3N0Z3JlcyBrZWVwcyBhXG4gKiBjb21wbGV0ZWQta2V5cyBjYWNoZSksIHNvIG9uY2UgYSBrZXkgaGFzIGJlZW4gdXNlZCwgYSBsYXRlciBlbnF1ZXVlXG4gKiB1bmRlciB0aGUgc2FtZSBrZXkgaXMgc2lsZW50bHkgZHJvcHBlZC4gQW55IHNpdHVhdGlvbiB3aGVyZSBhXG4gKiBjb250aW51YXRpb24gaXMgZGVsaXZlcmVkIHdoaWxlIGl0cyB3YWl0IGlzIHN0aWxsIHBlbmRpbmcgdGhlcmVmb3JlXG4gKiBuZWVkcyBhIGZyZXNoIGtleSBmb3IgdGhlIHJlLWVucXVldWUsIG9yIHRoZSB3YWl0J3MgdGltZXIgaXMgbG9zdCBhbmRcbiAqIHRoZSBydW4gc3RhbGxzIHVudGlsIHVucmVsYXRlZCB0cmFmZmljIGhhcHBlbnMgdG8gd2FrZSBpdC4gVHdvIHN1Y2hcbiAqIHNpdHVhdGlvbnMgZXhpc3QsIGVhY2ggd2l0aCBpdHMgb3duIGtleSB2YXJpYXRpb246XG4gKlxuICogLSBXYWl0cyBsb25nZXIgdGhhbiB0aGUgbWF4aW11bSBxdWV1ZSBkZWxheSBhcmUgY2hhaW5lZDogdGhlIGRlbGF5IGlzXG4gKiAgIGNsYW1wZWQgdG8gYFdBSVRfQ09OVElOVUFUSU9OX01BWF9ERUxBWV9TRUNPTkRTYCAoMjNoIOKAlCBWUVMgbWVzc2FnZXNcbiAqICAgaGF2ZSBhIDI0aCByZXRlbnRpb24gbGltaXQsIGFuZCBvbmUgaG91ciBvZiBidWZmZXIgbWF0Y2hlc1xuICogICB3b3JsZC12ZXJjZWwncyBvd24gY2xhbXAgZm9yIGRlbGF5ZWQgcmUtZW5xdWV1ZXMpLCBzbyB0aGVcbiAqICAgY29udGludWF0aW9uIGludGVudGlvbmFsbHkgZmlyZXMgZWFybHksIHJlLW9ic2VydmVzIHRoZSB3YWl0LCBhbmRcbiAqICAgbXVzdCBlbnF1ZXVlIHRoZSBuZXh0IGhvcC4gVGhlIGtleSBpcyBzdWZmaXhlZCB3aXRoIHRoZSBob3AgaW5kZXhcbiAqICAgKGBjZWlsKHRpbWVvdXRTZWNvbmRzIC8gbWF4RGVsYXkpYCk6IHN0YWJsZSBmb3IgZXZlcnkgcmUtb2JzZXJ2YXRpb25cbiAqICAgd2l0aGluIHRoZSBzYW1lIGhvcCB3aW5kb3cgKHNvIHBhc3NlcyBkZWR1cGUpLCBkZWNyZW1lbnRlZCBhdCBlYWNoXG4gKiAgIGhvcCBkZWxpdmVyeSAoc28gdGhlIGNoYWluIGFsd2F5cyBhZHZhbmNlcykuIFdvcmxkcyB3aXRob3V0IGEgZGVsYXlcbiAqICAgbGltaXQgKHdvcmxkLXBvc3RncmVzLCB3b3JsZC1sb2NhbCkgc2ltcGx5IHRha2UgdGhlIHNhbWUg4omkMjNoIGhvcHMuXG4gKlxuICogLSBOZWFyLWVsYXBzZWQgd2FpdHMgKOKJpDJzIHJlbWFpbmluZykgZ2V0IGEgc2Vjb25kLWJ1Y2tldGVkIHN1ZmZpeC4gQVxuICogICBjb250aW51YXRpb24gZGVsaXZlcmVkIG1hcmdpbmFsbHkgZWFybHkgKGNsb2NrIHNrZXcgYmV0d2VlbiB0aGVcbiAqICAgZW5xdWV1aW5nIGFuZCBoYW5kbGluZyBob3N0czsgdGhlIGNlaWwoKSBvbiB0aGUgZGVsYXkgY2FuIGxlYXZlIGEgfjBcbiAqICAgbWFyZ2luKSByZS1vYnNlcnZlcyB0aGUgd2FpdCBhcyBwZW5kaW5nIHdpdGggfjFzIHJlbWFpbmluZyBhbmQgbXVzdFxuICogICBiZSBhYmxlIHRvIGVucXVldWUgYSBmcmVzaCBzaG9ydC1kZWxheSByZXRyeS4gVGhlIGJ1Y2tldCBzdWZmaXhcbiAqICAga2VlcHMgdGhhdCByZXRyeSBlbnF1ZXVlYWJsZSAoaXRzIOKJpTFzIGRlbGF5IGd1YXJhbnRlZXMgYSBsYXRlclxuICogICBidWNrZXQpIHdoaWxlIHN0aWxsIGNvbGxhcHNpbmcgc2FtZS1pbnN0YW50IGR1cGxpY2F0ZXMuXG4gKlxuICogTWlkLXJhbmdlIHdhaXRzIChtb3JlIHRoYW4gdGhlIG5lYXItZWxhcHNlZCB0aHJlc2hvbGQsIGF0IG1vc3Qgb25lXG4gKiBob3ApIHVzZSB0aGUgYmFyZSBjb3JyZWxhdGlvbklkOiBldmVyeSByZS1vYnNlcnZhdGlvbiB0YXJnZXRzIHRoZSBzYW1lXG4gKiBkZWFkbGluZSwgc28gZGVkdXBpbmcgdG8gdGhlIGZpcnN0IG1lc3NhZ2UgaXMgc2VtYW50aWNhbGx5IGxvc3NsZXNzLlxuICogSG9zdCBjbG9jayBza2V3IGJleW9uZCB0aGUgbmVhci1lbGFwc2VkIHRocmVzaG9sZCBjb3VsZCBpbiBwcmluY2lwbGVcbiAqIGRlbGl2ZXIgc3VjaCBhIGNvbnRpbnVhdGlvbiBlYXJseSBlbm91Z2ggdG8gcmUtb2JzZXJ2ZSBpdHMgd2FpdCBhbmRcbiAqIGxvc2UgdGhlIHJlLWVucXVldWUgdG8gdGhlIGJ1cm50IGtleTsgdGhlIHRocmVzaG9sZCBpcyB0aGUgc2tld1xuICogdG9sZXJhbmNlIHdlIGFjY2VwdCBmb3IgdGhlIGJlbmVmaXQgb2YgZXhhY3RseS1vbmUgY29udGludWF0aW9uIHBlclxuICogd2FpdC5cbiAqL1xuXG5pbXBvcnQgeyBlbnZOdW1iZXIgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuXG4vKipcbiAqIE1heGltdW0gYGRlbGF5U2Vjb25kc2AgZm9yIGEgc2luZ2xlIHdhaXQtY29udGludWF0aW9uIG1lc3NhZ2UuIFdhaXRzXG4gKiBsb25nZXIgdGhhbiB0aGlzIGFyZSBjaGFpbmVkIGFjcm9zcyBtdWx0aXBsZSBob3BzLiAyMyBob3VycyBsZWF2ZXMgYSAxaFxuICogYnVmZmVyIHVuZGVyIFZlcmNlbCBRdWV1ZXMnIGRlZmF1bHQgMjRoIG1lc3NhZ2UgVFRMIGFuZCBtaXJyb3JzXG4gKiB3b3JsZC12ZXJjZWwncyBgTUFYX0RFTEFZX1NFQ09ORFNgLlxuICovXG5leHBvcnQgY29uc3QgV0FJVF9DT05USU5VQVRJT05fTUFYX0RFTEFZX1NFQ09ORFMgPSA4Ml84MDA7XG5cbi8qKlxuICogV2FpdHMgd2l0aCBhdCBtb3N0IHRoaXMgbWFueSBzZWNvbmRzIHJlbWFpbmluZyB1c2UgYSBzZWNvbmQtYnVja2V0ZWRcbiAqIGlkZW1wb3RlbmN5IGtleSBzbyBhbiBlYXJseS1kZWxpdmVyZWQgY29udGludWF0aW9uIGNhbiByZS1lbnF1ZXVlIGl0c1xuICogc2hvcnQtZGVsYXkgcmV0cnkuIFRoaXMgaXMgYWxzbyB0aGUgaG9zdCBjbG9jay1za2V3IHRvbGVyYW5jZSBmb3JcbiAqIG1pZC1yYW5nZSB3YWl0cyBrZXllZCBvbiB0aGUgYmFyZSBjb3JyZWxhdGlvbklkLlxuICovXG5leHBvcnQgY29uc3QgTkVBUl9FTEFQU0VEX1dBSVRfVEhSRVNIT0xEX1NFQ09ORFMgPSAyO1xuXG4vKiogRWZmZWN0aXZlIG1heCBjb250aW51YXRpb24gZGVsYXkuIE92ZXJyaWRlOiBgV09SS0ZMT1dfV0FJVF9DT05USU5VQVRJT05fTUFYX0RFTEFZX1NFQ09ORFNgLiAqL1xuY29uc3QgZ2V0V2FpdENvbnRpbnVhdGlvbk1heERlbGF5U2Vjb25kcyA9ICgpOiBudW1iZXIgPT5cbiAgZW52TnVtYmVyKFxuICAgICdXT1JLRkxPV19XQUlUX0NPTlRJTlVBVElPTl9NQVhfREVMQVlfU0VDT05EUycsXG4gICAgV0FJVF9DT05USU5VQVRJT05fTUFYX0RFTEFZX1NFQ09ORFMsXG4gICAgeyBpbnRlZ2VyOiB0cnVlLCBtaW46IDEgfVxuICApO1xuXG4vKiogRWZmZWN0aXZlIG5lYXItZWxhcHNlZCB0aHJlc2hvbGQuIE92ZXJyaWRlOiBgV09SS0ZMT1dfTkVBUl9FTEFQU0VEX1dBSVRfVEhSRVNIT0xEX1NFQ09ORFNgLiAqL1xuY29uc3QgZ2V0TmVhckVsYXBzZWRXYWl0VGhyZXNob2xkU2Vjb25kcyA9ICgpOiBudW1iZXIgPT5cbiAgZW52TnVtYmVyKFxuICAgICdXT1JLRkxPV19ORUFSX0VMQVBTRURfV0FJVF9USFJFU0hPTERfU0VDT05EUycsXG4gICAgTkVBUl9FTEFQU0VEX1dBSVRfVEhSRVNIT0xEX1NFQ09ORFNcbiAgKTtcblxuZXhwb3J0IGludGVyZmFjZSBXYWl0Q29udGludWF0aW9uRGlzcGF0Y2gge1xuICBkZWxheVNlY29uZHM6IG51bWJlcjtcbiAgaWRlbXBvdGVuY3lLZXk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgcXVldWUgZGVsYXkgYW5kIGlkZW1wb3RlbmN5IGtleSBmb3IgYSB3YWl0LWNvbnRpbnVhdGlvblxuICogbWVzc2FnZS4gYHRpbWVvdXRTZWNvbmRzYCBpcyB0aGUgdGltZSB1bnRpbCB0aGUgd2FpdCdzIGByZXN1bWVBdGBcbiAqIChmbG9vcmVkIGF0IDFzIGJ5IHRoZSBzdXNwZW5zaW9uIGhhbmRsZXIpOyBgd2FpdENvcnJlbGF0aW9uSWRgXG4gKiBpZGVudGlmaWVzIHRoZSB3YWl0IHNvIHJlcGVhdGVkIHN1c3BlbnNpb24gcGFzc2VzIGRlZHVwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdhaXRDb250aW51YXRpb25EaXNwYXRjaChcbiAgdGltZW91dFNlY29uZHM6IG51bWJlcixcbiAgd2FpdENvcnJlbGF0aW9uSWQ6IHN0cmluZyxcbiAgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpXG4pOiBXYWl0Q29udGludWF0aW9uRGlzcGF0Y2gge1xuICBjb25zdCBtYXhEZWxheVNlY29uZHMgPSBnZXRXYWl0Q29udGludWF0aW9uTWF4RGVsYXlTZWNvbmRzKCk7XG4gIC8vIFRoZSBuZWFyLWVsYXBzZWQgYnJhbmNoIHJldHVybnMgdGhlIGZ1bGwgcmVtYWluaW5nIHRpbWUgYXMgdGhlIGRlbGF5LCBzb1xuICAvLyBpdHMgdGhyZXNob2xkIGNhbiBuZXZlciBleGNlZWQgdGhlIG1heCBkZWxheSDigJQgb3RoZXJ3aXNlIGEgd2FpdCBiZXR3ZWVuIHRoZVxuICAvLyBtYXggYW5kIHRoZSB0aHJlc2hvbGQgd291bGQgYmUgZGlzcGF0Y2hlZCB3aXRoIGEgZGVsYXkgYWJvdmUgdGhlIG1heC4gQ2FwXG4gIC8vIHRoZSB0aHJlc2hvbGQgYXQgdGhlIG1heCBzbyBldmVyeSBicmFuY2ggeWllbGRzIGEgZGVsYXkgd2l0aGluIGl0LiAoV2l0aFxuICAvLyBkZWZhdWx0cyDigJQgdGhyZXNob2xkIDJzLCBtYXggODJfODAwcyDigJQgdGhpcyBpcyBhIG5vLW9wOyBpdCBvbmx5IGJpdGVzIHdoZW5cbiAgLy8gdGhlIG1heCBpcyB0dW5lZCBkb3duIGJlbG93IHRoZSB0aHJlc2hvbGQgZm9yIHRlc3RpbmcuKVxuICBjb25zdCBuZWFyRWxhcHNlZFRocmVzaG9sZCA9IE1hdGgubWluKFxuICAgIGdldE5lYXJFbGFwc2VkV2FpdFRocmVzaG9sZFNlY29uZHMoKSxcbiAgICBtYXhEZWxheVNlY29uZHNcbiAgKTtcbiAgaWYgKHRpbWVvdXRTZWNvbmRzIDw9IG5lYXJFbGFwc2VkVGhyZXNob2xkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlbGF5U2Vjb25kczogdGltZW91dFNlY29uZHMsXG4gICAgICBpZGVtcG90ZW5jeUtleTogYCR7d2FpdENvcnJlbGF0aW9uSWR9OiR7TWF0aC5mbG9vcihub3cgLyAxMDAwKX1gLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBob3AgPSBNYXRoLmNlaWwodGltZW91dFNlY29uZHMgLyBtYXhEZWxheVNlY29uZHMpO1xuICByZXR1cm4ge1xuICAgIGRlbGF5U2Vjb25kczogTWF0aC5taW4odGltZW91dFNlY29uZHMsIG1heERlbGF5U2Vjb25kcyksXG4gICAgaWRlbXBvdGVuY3lLZXk6XG4gICAgICBob3AgPT09IDEgPyB3YWl0Q29ycmVsYXRpb25JZCA6IGAke3dhaXRDb3JyZWxhdGlvbklkfTpob3AtJHtob3B9YCxcbiAgfTtcbn1cbiJdfQ==
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdC1jb250aW51YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS93YWl0LWNvbnRpbnVhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1RUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFNUM7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxNQUFNLENBQUM7QUFFMUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxDQUFDLENBQUM7QUFFckQsa0dBQWtHO0FBQ2xHLE1BQU0sa0NBQWtDLEdBQUcsR0FBVyxFQUFFLENBQ3RELFNBQVMsQ0FDUCw4Q0FBOEMsRUFDOUMsbUNBQW1DLEVBQ25DLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQzFCLENBQUM7QUFFSixrR0FBa0c7QUFDbEcsTUFBTSxrQ0FBa0MsR0FBRyxHQUFXLEVBQUUsQ0FDdEQsU0FBUyxDQUNQLDhDQUE4QyxFQUM5QyxtQ0FBbUMsQ0FDcEMsQ0FBQztBQU9KOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsMkJBQTJCLENBQ3pDLGNBQXNCLEVBQ3RCLGlCQUF5QixFQUN6QixNQUFjLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFDeEIsT0FBTyxHQUFHLENBQUM7SUFFWCxNQUFNLFFBQVEsR0FBRyxzQ0FBc0MsQ0FDckQsY0FBYyxFQUNkLGlCQUFpQixFQUNqQixHQUFHLENBQ0osQ0FBQztJQUNGLElBQUksT0FBTyxJQUFJLENBQUM7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUNsQyxPQUFPO1FBQ0wsWUFBWSxFQUFFLFFBQVEsQ0FBQyxZQUFZO1FBQ25DLGNBQWMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxjQUFjLEtBQUssT0FBTyxFQUFFO0tBQ3pELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxzQ0FBc0MsQ0FDN0MsY0FBc0IsRUFDdEIsaUJBQXlCLEVBQ3pCLEdBQVc7SUFFWCxNQUFNLGVBQWUsR0FBRyxrQ0FBa0MsRUFBRSxDQUFDO0lBQzdELDJFQUEyRTtJQUMzRSw2RUFBNkU7SUFDN0UsNEVBQTRFO0lBQzVFLDJFQUEyRTtJQUMzRSx5RUFBeUU7SUFDekUsK0RBQStEO0lBQy9ELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDbkMsa0NBQWtDLEVBQUUsRUFDcEMsZUFBZSxDQUNoQixDQUFDO0lBQ0YsSUFBSSxjQUFjLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUMzQyxPQUFPO1lBQ0wsWUFBWSxFQUFFLGNBQWM7WUFDNUIsY0FBYyxFQUFFLEdBQUcsaUJBQWlCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUU7U0FDakUsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxlQUFlLENBQUMsQ0FBQztJQUN4RCxPQUFPO1FBQ0wsWUFBWSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLGVBQWUsQ0FBQztRQUN2RCxjQUFjLEVBQ1osR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLFFBQVEsR0FBRyxFQUFFO0tBQ3BFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXYWl0LWNvbnRpbnVhdGlvbiBkaXNwYXRjaDogZGVsYXkgKyBpZGVtcG90ZW5jeS1rZXkgc2VsZWN0aW9uLlxuICpcbiAqIFdoZW4gVjIgc3VzcGVuc2lvbiBwcm9jZXNzaW5nIG9ic2VydmVzIGEgcGVuZGluZyB3YWl0LCBpdCBlbnF1ZXVlcyBhXG4gKiBkZWxheWVkIFwiY29udGludWF0aW9uXCIgbWVzc2FnZSB0aGF0IGZpcmVzIG9uY2UgdGhlIHdhaXQgZWxhcHNlcyBhbmRcbiAqIGRyaXZlcyB0aGUgbmV4dCByZXBsYXkgKHdoaWNoIGNvbXBsZXRlcyB0aGUgd2FpdCB2aWEgdGhlIFwiY29tcGxldGVcbiAqIGVsYXBzZWQgd2FpdHNcIiBwYXNzKS4gVGhpcyBtb2R1bGUgZGVjaWRlcyB0aGUgbWVzc2FnZSdzIGBkZWxheVNlY29uZHNgXG4gKiBhbmQgYGlkZW1wb3RlbmN5S2V5YC5cbiAqXG4gKiBUaGUgY29udGludWF0aW9uIGlzIGtleWVkIG9uIHRoZSB3YWl0J3MgY29ycmVsYXRpb25JZDogd2hpbGUgYSB3YWl0IGlzXG4gKiBwZW5kaW5nLCBldmVyeSByZXBsYXkgcGFzcyBvdmVyIHRoZSBydW4gcmUtb2JzZXJ2ZXMgaXQgKGUuZy4sIG9uY2UgcGVyXG4gKiBzdGVwIGNvbXBsZXRpb24gaW4gYFByb21pc2UuYWxsKFtzdGVwcy4uLiwgc2xlZXAoKV0pYCksIGFuZCB3aXRob3V0XG4gKiBkZWR1cGUgZWFjaCBwYXNzIHdvdWxkIGVucXVldWUgYW5vdGhlciBkZWxheWVkIGNvbnRpbnVhdGlvbjogZWFjaCBvbmVcbiAqIGEgc3B1cmlvdXMgZnVsbCByZXBsYXkgd2hlbiB0aGUgd2FpdCBlbGFwc2VzLCBhbmQgZWFjaCBhIGZyZXNoIG1lc3NhZ2VcbiAqIHRoYXQgcmVzZXRzIHRoZSBkZWxpdmVyeS1hdHRlbXB0IHJ1bmF3YXkgZ3VhcmQuIEEga2V5IGlzIGF0dGFjaGVkIGluXG4gKiBhbGwgY2FzZXM6IHNvbWUgd29ybGRzIChlLmcuIHdvcmxkLXBvc3RncmVzKSBzZXJpYWxpemUga2V5LWxlc3NcbiAqIHdvcmtmbG93IG1lc3NhZ2VzIHBlciBydW4sIHdoaWNoIHdvdWxkIHBhcmsgdGhlIGNvbnRpbnVhdGlvbiBiZWhpbmRcbiAqIHRoZSBoYW5kbGVyJ3Mgb3duIGlubGluZSBzdGVwIGV4ZWN1dGlvbiBhbmQgZGVmZWF0IHRoZSByYWNlIHNlbWFudGljc1xuICogdGhlIGNvbnRpbnVhdGlvbiBleGlzdHMgdG8gcHJvdmlkZS5cbiAqXG4gKiBUaGUgYmFyZSBjb3JyZWxhdGlvbklkIGNhbm5vdCBiZSB0aGUga2V5IGluIGV2ZXJ5IGNhc2UsIHRob3VnaDogd29ybGRcbiAqIGRlZHVwZSB3aW5kb3dzIG91dGxpdmUgdGhlIGZpcnN0IGRlbGl2ZXJ5IChWUVMga2VlcHMgaWRlbXBvdGVuY3lcbiAqIHJlY29yZHMgdW50aWwgbWVzc2FnZS1yZXRlbnRpb24gVFRMOyB3b3JsZC1wb3N0Z3JlcyBrZWVwcyBhXG4gKiBjb21wbGV0ZWQta2V5cyBjYWNoZSksIHNvIG9uY2UgYSBrZXkgaGFzIGJlZW4gdXNlZCwgYSBsYXRlciBlbnF1ZXVlXG4gKiB1bmRlciB0aGUgc2FtZSBrZXkgaXMgc2lsZW50bHkgZHJvcHBlZC4gQW55IHNpdHVhdGlvbiB3aGVyZSBhXG4gKiBjb250aW51YXRpb24gaXMgZGVsaXZlcmVkIHdoaWxlIGl0cyB3YWl0IGlzIHN0aWxsIHBlbmRpbmcgdGhlcmVmb3JlXG4gKiBuZWVkcyBhIGZyZXNoIGtleSBmb3IgdGhlIHJlLWVucXVldWUsIG9yIHRoZSB3YWl0J3MgdGltZXIgaXMgbG9zdCBhbmRcbiAqIHRoZSBydW4gc3RhbGxzIHVudGlsIHVucmVsYXRlZCB0cmFmZmljIGhhcHBlbnMgdG8gd2FrZSBpdC4gVHdvIHN1Y2hcbiAqIHNpdHVhdGlvbnMgZXhpc3QsIGVhY2ggd2l0aCBpdHMgb3duIGtleSB2YXJpYXRpb246XG4gKlxuICogLSBXYWl0cyBsb25nZXIgdGhhbiB0aGUgbWF4aW11bSBxdWV1ZSBkZWxheSBhcmUgY2hhaW5lZDogdGhlIGRlbGF5IGlzXG4gKiAgIGNsYW1wZWQgdG8gYFdBSVRfQ09OVElOVUFUSU9OX01BWF9ERUxBWV9TRUNPTkRTYCAoMjNoOiBWUVMgbWVzc2FnZXNcbiAqICAgaGF2ZSBhIDI0aCByZXRlbnRpb24gbGltaXQsIGFuZCBvbmUgaG91ciBvZiBidWZmZXIgbWF0Y2hlc1xuICogICB3b3JsZC12ZXJjZWwncyBvd24gY2xhbXAgZm9yIGRlbGF5ZWQgcmUtZW5xdWV1ZXMpLCBzbyB0aGVcbiAqICAgY29udGludWF0aW9uIGludGVudGlvbmFsbHkgZmlyZXMgZWFybHksIHJlLW9ic2VydmVzIHRoZSB3YWl0LCBhbmRcbiAqICAgbXVzdCBlbnF1ZXVlIHRoZSBuZXh0IGhvcC4gVGhlIGtleSBpcyBzdWZmaXhlZCB3aXRoIHRoZSBob3AgaW5kZXhcbiAqICAgKGBjZWlsKHRpbWVvdXRTZWNvbmRzIC8gbWF4RGVsYXkpYCk6IHN0YWJsZSBmb3IgZXZlcnkgcmUtb2JzZXJ2YXRpb25cbiAqICAgd2l0aGluIHRoZSBzYW1lIGhvcCB3aW5kb3cgKHNvIHBhc3NlcyBkZWR1cGUpLCBkZWNyZW1lbnRlZCBhdCBlYWNoXG4gKiAgIGhvcCBkZWxpdmVyeSAoc28gdGhlIGNoYWluIGFsd2F5cyBhZHZhbmNlcykuIFdvcmxkcyB3aXRob3V0IGEgZGVsYXlcbiAqICAgbGltaXQgKHdvcmxkLXBvc3RncmVzLCB3b3JsZC1sb2NhbCkgdGFrZSB0aGUgc2FtZSDiiaQyM2ggaG9wcy5cbiAqXG4gKiAtIE5lYXItZWxhcHNlZCB3YWl0cyAo4omkMnMgcmVtYWluaW5nKSBnZXQgYSBzZWNvbmQtYnVja2V0ZWQgc3VmZml4LiBBXG4gKiAgIGNvbnRpbnVhdGlvbiBkZWxpdmVyZWQgbWFyZ2luYWxseSBlYXJseSAoY2xvY2sgc2tldyBiZXR3ZWVuIHRoZVxuICogICBlbnF1ZXVpbmcgYW5kIGhhbmRsaW5nIGhvc3RzOyB0aGUgY2VpbCgpIG9uIHRoZSBkZWxheSBjYW4gbGVhdmUgYSB+MFxuICogICBtYXJnaW4pIHJlLW9ic2VydmVzIHRoZSB3YWl0IGFzIHBlbmRpbmcgd2l0aCB+MXMgcmVtYWluaW5nIGFuZCBtdXN0XG4gKiAgIGJlIGFibGUgdG8gZW5xdWV1ZSBhIGZyZXNoIHNob3J0LWRlbGF5IHJldHJ5LiBUaGUgYnVja2V0IHN1ZmZpeFxuICogICBrZWVwcyB0aGF0IHJldHJ5IGVucXVldWVhYmxlIChpdHMg4omlMXMgZGVsYXkgZ3VhcmFudGVlcyBhIGxhdGVyXG4gKiAgIGJ1Y2tldCkgd2hpbGUgc3RpbGwgY29sbGFwc2luZyBzYW1lLWluc3RhbnQgZHVwbGljYXRlcy5cbiAqXG4gKiBNaWQtcmFuZ2Ugd2FpdHMgKG1vcmUgdGhhbiB0aGUgbmVhci1lbGFwc2VkIHRocmVzaG9sZCwgYXQgbW9zdCBvbmVcbiAqIGhvcCkgdXNlIHRoZSBiYXJlIGNvcnJlbGF0aW9uSWQ6IGV2ZXJ5IHJlLW9ic2VydmF0aW9uIHRhcmdldHMgdGhlIHNhbWVcbiAqIGRlYWRsaW5lLCBzbyBkZWR1cGluZyB0byB0aGUgZmlyc3QgbWVzc2FnZSBpcyBzZW1hbnRpY2FsbHkgbG9zc2xlc3MuXG4gKlxuICogVGhhdCBsYXN0IGNhc2UgdXNlZCB0byBiZSB0aGUgb25lIGhvbGUgaW4gdGhlIHNjaGVtZSwgYW5kIGl0IHdhcyBub3RcbiAqIHRoZW9yZXRpY2FsLiBBbnkgZGVsaXZlcnkgZWFybHkgZW5vdWdoIHRvIHJlLW9ic2VydmUgaXRzIG93biB3YWl0IGFzXG4gKiBwZW5kaW5nIGJ1cm5zIHRoZSBiYXJlIGtleSBvbiB0aGUgd2F5IGluOiB0aGUgcmUtZW5xdWV1ZSBpcyBkcm9wcGVkIGJ5XG4gKiB0aGUgZGVkdXBlIHdpbmRvdywgbm90aGluZyBlbHNlIGlzIHNjaGVkdWxlZCB0byB3YWtlIHRoZSBydW4sIGFuZCBub1xuICogYmFja3N0b3AgZXhpc3RzIGZvciBhIHdhaXQgdGhlIHdheSBpbmxpbmUgc3RlcCBvd25lcnNoaXAgcHJvdmlkZXMgb25lXG4gKiBmb3IgYSBzdGVwLiBUaGUgcnVuIHNsZWVwcyBmb3JldmVyLiBXYWl0cyBvdmVyIHRoZSB0aHJlc2hvbGQgaGF2ZSB6ZXJvXG4gKiB0b2xlcmFuY2UgZm9yIGl0LCB3aGljaCBpcyB3aHkgYW4gaW5mcmFzdHJ1Y3R1cmUgY2hhbmdlIGluIGRlbGl2ZXJ5XG4gKiB0aW1pbmcgd2FzIGFibGUgdG8gc3RyYW5kIHJ1bnMgYWNyb3NzIGV2ZXJ5IHB1Ymxpc2hlZCBTREsgdmVyc2lvbiBhdFxuICogb25jZSwgYWxsIG9mIHRoZW0ga2V5ZWQgdGhpcyB3YXkuXG4gKlxuICogU28gdGhlIGtleSBpcyBubyBsb25nZXIgZGVyaXZlZCBmcm9tIHRoZSB3YWl0IGFsb25lLiBBIGNvbnRpbnVhdGlvblxuICogY2FycmllcyB0aGUgd2FpdCBpdCB3YXMgYXJtZWQgZm9yIGFuZCBpdHMgYXR0ZW1wdCBudW1iZXJcbiAqICh7QGxpbmsgV29ya2Zsb3dJbnZva2VQYXlsb2FkLndhaXRDb250aW51YXRpb259KSwgYW5kIGFuIGludm9jYXRpb25cbiAqIHRoYXQgcmVjb2duaXplcyBpdHNlbGYgYXMgdGhlIGNvbnRpbnVhdGlvbiBmb3IgYSB3YWl0IHRoYXQgaXMgc3RpbGxcbiAqIHBlbmRpbmcgYXJtcyB0aGUgbmV4dCBvbmUgYXQgYGF0dGVtcHQgKyAxYC4gQXR0ZW1wdHMgYWR2YW5jZSBPTkxZIHdoZW5cbiAqIGFuIGVhcmx5IGRlbGl2ZXJ5IGFjdHVhbGx5IGhhcHBlbnMsIHNvIHRoZSBub3JtYWwgcGF0aCBpcyB1bnRvdWNoZWQ6XG4gKiBhdHRlbXB0IDAga2V5cyBleGFjdGx5IGFzIGJlZm9yZSwgYW5kIGV2ZXJ5IHJlLW9ic2VydmF0aW9uIHdpdGhpbiBvbmVcbiAqIGF0dGVtcHQgc3RpbGwgY29sbGFwc2VzIHRvIGEgc2luZ2xlIG1lc3NhZ2UuXG4gKi9cblxuaW1wb3J0IHsgZW52TnVtYmVyIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcblxuLyoqXG4gKiBNYXhpbXVtIGBkZWxheVNlY29uZHNgIGZvciBhIHNpbmdsZSB3YWl0LWNvbnRpbnVhdGlvbiBtZXNzYWdlLiBXYWl0c1xuICogbG9uZ2VyIHRoYW4gdGhpcyBhcmUgY2hhaW5lZCBhY3Jvc3MgbXVsdGlwbGUgaG9wcy4gMjMgaG91cnMgbGVhdmVzIGEgMWhcbiAqIGJ1ZmZlciB1bmRlciBWZXJjZWwgUXVldWVzJyBkZWZhdWx0IDI0aCBtZXNzYWdlIFRUTCBhbmQgbWlycm9yc1xuICogd29ybGQtdmVyY2VsJ3MgYE1BWF9ERUxBWV9TRUNPTkRTYC5cbiAqL1xuZXhwb3J0IGNvbnN0IFdBSVRfQ09OVElOVUFUSU9OX01BWF9ERUxBWV9TRUNPTkRTID0gODJfODAwO1xuXG4vKipcbiAqIFdhaXRzIHdpdGggYXQgbW9zdCB0aGlzIG1hbnkgc2Vjb25kcyByZW1haW5pbmcgdXNlIGEgc2Vjb25kLWJ1Y2tldGVkXG4gKiBpZGVtcG90ZW5jeSBrZXkgc28gYW4gZWFybHktZGVsaXZlcmVkIGNvbnRpbnVhdGlvbiBjYW4gcmUtZW5xdWV1ZSBpdHNcbiAqIHNob3J0LWRlbGF5IHJldHJ5LiBUaGlzIGlzIGFsc28gdGhlIGhvc3QgY2xvY2stc2tldyB0b2xlcmFuY2UgZm9yXG4gKiBtaWQtcmFuZ2Ugd2FpdHMga2V5ZWQgb24gdGhlIGJhcmUgY29ycmVsYXRpb25JZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE5FQVJfRUxBUFNFRF9XQUlUX1RIUkVTSE9MRF9TRUNPTkRTID0gMjtcblxuLyoqIEVmZmVjdGl2ZSBtYXggY29udGludWF0aW9uIGRlbGF5LiBPdmVycmlkZTogYFdPUktGTE9XX1dBSVRfQ09OVElOVUFUSU9OX01BWF9ERUxBWV9TRUNPTkRTYC4gKi9cbmNvbnN0IGdldFdhaXRDb250aW51YXRpb25NYXhEZWxheVNlY29uZHMgPSAoKTogbnVtYmVyID0+XG4gIGVudk51bWJlcihcbiAgICAnV09SS0ZMT1dfV0FJVF9DT05USU5VQVRJT05fTUFYX0RFTEFZX1NFQ09ORFMnLFxuICAgIFdBSVRfQ09OVElOVUFUSU9OX01BWF9ERUxBWV9TRUNPTkRTLFxuICAgIHsgaW50ZWdlcjogdHJ1ZSwgbWluOiAxIH1cbiAgKTtcblxuLyoqIEVmZmVjdGl2ZSBuZWFyLWVsYXBzZWQgdGhyZXNob2xkLiBPdmVycmlkZTogYFdPUktGTE9XX05FQVJfRUxBUFNFRF9XQUlUX1RIUkVTSE9MRF9TRUNPTkRTYC4gKi9cbmNvbnN0IGdldE5lYXJFbGFwc2VkV2FpdFRocmVzaG9sZFNlY29uZHMgPSAoKTogbnVtYmVyID0+XG4gIGVudk51bWJlcihcbiAgICAnV09SS0ZMT1dfTkVBUl9FTEFQU0VEX1dBSVRfVEhSRVNIT0xEX1NFQ09ORFMnLFxuICAgIE5FQVJfRUxBUFNFRF9XQUlUX1RIUkVTSE9MRF9TRUNPTkRTXG4gICk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdENvbnRpbnVhdGlvbkRpc3BhdGNoIHtcbiAgZGVsYXlTZWNvbmRzOiBudW1iZXI7XG4gIGlkZW1wb3RlbmN5S2V5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIHF1ZXVlIGRlbGF5IGFuZCBpZGVtcG90ZW5jeSBrZXkgZm9yIGEgd2FpdC1jb250aW51YXRpb25cbiAqIG1lc3NhZ2UuIGB0aW1lb3V0U2Vjb25kc2AgaXMgdGhlIHRpbWUgdW50aWwgdGhlIHdhaXQncyBgcmVzdW1lQXRgXG4gKiAoZmxvb3JlZCBhdCAxcyBieSB0aGUgc3VzcGVuc2lvbiBoYW5kbGVyKTsgYHdhaXRDb3JyZWxhdGlvbklkYFxuICogaWRlbnRpZmllcyB0aGUgd2FpdCBzbyByZXBlYXRlZCBzdXNwZW5zaW9uIHBhc3NlcyBkZWR1cGUuXG4gKlxuICogYGF0dGVtcHRgIGlzIHRoZSBudW1iZXIgb2YgY29udGludWF0aW9ucyBhbHJlYWR5IHNwZW50IG9uIHRoaXMgd2FpdCwgdGFrZW5cbiAqIGZyb20gdGhlIGluY29taW5nIG1lc3NhZ2Ugd2hlbiB0aGlzIGludm9jYXRpb24gSVMgb25lIG9mIHRoZW0gKHNlZVxuICoge0BsaW5rIFdvcmtmbG93SW52b2tlUGF5bG9hZC53YWl0Q29udGludWF0aW9ufSkuIEl0IG9ubHkgZXZlciBtb3ZlcyB3aGVuIGFcbiAqIGNvbnRpbnVhdGlvbiBhcnJpdmVkIGJlZm9yZSBpdHMgd2FpdCBlbGFwc2VkLCB3aGljaCBpcyBleGFjdGx5IHdoZW4gdGhlXG4gKiBwcmV2aW91cyBrZXkgaXMgc3BlbnQgYW5kIHJlLXVzaW5nIGl0IHdvdWxkIGRyb3AgdGhlIG1lc3NhZ2UuIEF0dGVtcHQgMFxuICoga2V5cyBpZGVudGljYWxseSB0byB0aGUgc2NoZW1lIGJlZm9yZSBhdHRlbXB0cyBleGlzdGVkLCBzbyB0aGUgb3JkaW5hcnlcbiAqIHBhdGgg4oCUIGFybSBvbmNlLCBkZWxpdmVyIG9uY2UsIGNvbXBsZXRlIOKAlCBpcyBieXRlLWZvci1ieXRlIHVuY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdhaXRDb250aW51YXRpb25EaXNwYXRjaChcbiAgdGltZW91dFNlY29uZHM6IG51bWJlcixcbiAgd2FpdENvcnJlbGF0aW9uSWQ6IHN0cmluZyxcbiAgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpLFxuICBhdHRlbXB0ID0gMFxuKTogV2FpdENvbnRpbnVhdGlvbkRpc3BhdGNoIHtcbiAgY29uc3QgZGlzcGF0Y2ggPSB3YWl0Q29udGludWF0aW9uRGlzcGF0Y2hGb3JBdHRlbXB0WmVybyhcbiAgICB0aW1lb3V0U2Vjb25kcyxcbiAgICB3YWl0Q29ycmVsYXRpb25JZCxcbiAgICBub3dcbiAgKTtcbiAgaWYgKGF0dGVtcHQgPD0gMCkgcmV0dXJuIGRpc3BhdGNoO1xuICByZXR1cm4ge1xuICAgIGRlbGF5U2Vjb25kczogZGlzcGF0Y2guZGVsYXlTZWNvbmRzLFxuICAgIGlkZW1wb3RlbmN5S2V5OiBgJHtkaXNwYXRjaC5pZGVtcG90ZW5jeUtleX06YSR7YXR0ZW1wdH1gLFxuICB9O1xufVxuXG5mdW5jdGlvbiB3YWl0Q29udGludWF0aW9uRGlzcGF0Y2hGb3JBdHRlbXB0WmVybyhcbiAgdGltZW91dFNlY29uZHM6IG51bWJlcixcbiAgd2FpdENvcnJlbGF0aW9uSWQ6IHN0cmluZyxcbiAgbm93OiBudW1iZXJcbik6IFdhaXRDb250aW51YXRpb25EaXNwYXRjaCB7XG4gIGNvbnN0IG1heERlbGF5U2Vjb25kcyA9IGdldFdhaXRDb250aW51YXRpb25NYXhEZWxheVNlY29uZHMoKTtcbiAgLy8gVGhlIG5lYXItZWxhcHNlZCBicmFuY2ggcmV0dXJucyB0aGUgZnVsbCByZW1haW5pbmcgdGltZSBhcyB0aGUgZGVsYXksIHNvXG4gIC8vIGl0cyB0aHJlc2hvbGQgY2FuIG5ldmVyIGV4Y2VlZCB0aGUgbWF4IGRlbGF5LiBPdGhlcndpc2UgYSB3YWl0IGJldHdlZW4gdGhlXG4gIC8vIG1heCBhbmQgdGhlIHRocmVzaG9sZCB3b3VsZCBiZSBkaXNwYXRjaGVkIHdpdGggYSBkZWxheSBhYm92ZSB0aGUgbWF4LiBDYXBcbiAgLy8gdGhlIHRocmVzaG9sZCBhdCB0aGUgbWF4IHNvIGV2ZXJ5IGJyYW5jaCB5aWVsZHMgYSBkZWxheSB3aXRoaW4gaXQuIChXaXRoXG4gIC8vIGRlZmF1bHRzLCB0aHJlc2hvbGQgMnMgYW5kIG1heCA4Ml84MDBzLCB0aGlzIGlzIGEgbm8tb3A7IGl0IG9ubHkgYml0ZXNcbiAgLy8gd2hlbiB0aGUgbWF4IGlzIHR1bmVkIGRvd24gYmVsb3cgdGhlIHRocmVzaG9sZCBmb3IgdGVzdGluZy4pXG4gIGNvbnN0IG5lYXJFbGFwc2VkVGhyZXNob2xkID0gTWF0aC5taW4oXG4gICAgZ2V0TmVhckVsYXBzZWRXYWl0VGhyZXNob2xkU2Vjb25kcygpLFxuICAgIG1heERlbGF5U2Vjb25kc1xuICApO1xuICBpZiAodGltZW91dFNlY29uZHMgPD0gbmVhckVsYXBzZWRUaHJlc2hvbGQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVsYXlTZWNvbmRzOiB0aW1lb3V0U2Vjb25kcyxcbiAgICAgIGlkZW1wb3RlbmN5S2V5OiBgJHt3YWl0Q29ycmVsYXRpb25JZH06JHtNYXRoLmZsb29yKG5vdyAvIDEwMDApfWAsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGhvcCA9IE1hdGguY2VpbCh0aW1lb3V0U2Vjb25kcyAvIG1heERlbGF5U2Vjb25kcyk7XG4gIHJldHVybiB7XG4gICAgZGVsYXlTZWNvbmRzOiBNYXRoLm1pbih0aW1lb3V0U2Vjb25kcywgbWF4RGVsYXlTZWNvbmRzKSxcbiAgICBpZGVtcG90ZW5jeUtleTpcbiAgICAgIGhvcCA9PT0gMSA/IHdhaXRDb3JyZWxhdGlvbklkIDogYCR7d2FpdENvcnJlbGF0aW9uSWR9OmhvcC0ke2hvcH1gLFxuICB9O1xufVxuIl19
@@ -3,7 +3,7 @@ export declare function waitUntil(promise: Promise<unknown>): void;
3
3
  * Schedule a background promise via `waitUntil`, guaranteeing that the
4
4
  * promise handed to `waitUntil` can never reject. Nothing consumes a
5
5
  * `waitUntil` promise, so a rejection surfaces as an `unhandledRejection`
6
- * and can crash the process even when the same underlying error is
6
+ * and can crash the process, even when the same underlying error is
7
7
  * correctly handled by an awaited copy elsewhere.
8
8
  *
9
9
  * Expected client-disconnect errors (`AbortError` / `ResponseAborted`)
@@ -7,7 +7,7 @@ export function waitUntil(promise) {
7
7
  * Schedule a background promise via `waitUntil`, guaranteeing that the
8
8
  * promise handed to `waitUntil` can never reject. Nothing consumes a
9
9
  * `waitUntil` promise, so a rejection surfaces as an `unhandledRejection`
10
- * and can crash the process even when the same underlying error is
10
+ * and can crash the process, even when the same underlying error is
11
11
  * correctly handled by an awaited copy elsewhere.
12
12
  *
13
13
  * Expected client-disconnect errors (`AbortError` / `ResponseAborted`)
@@ -39,4 +39,4 @@ export async function waitedUntil(fn) {
39
39
  }));
40
40
  return result;
41
41
  }
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdC11bnRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3dhaXQtdW50aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLFNBQVMsQ0FBQyxPQUF5QjtJQUNqRCxLQUFLLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtRQUN0RCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsT0FBeUIsRUFDekIsT0FBK0I7SUFFL0IsU0FBUyxDQUNQLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNwQixNQUFNLFlBQVksR0FDaEIsR0FBRyxFQUFFLElBQUksS0FBSyxZQUFZLElBQUksR0FBRyxFQUFFLElBQUksS0FBSyxpQkFBaUIsQ0FBQztRQUNoRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDO2dCQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNmLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsbURBQW1EO1lBQ3JELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FBSSxFQUFvQjtJQUN2RCxNQUFNLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNwQixTQUFTLENBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDaEIsZ0RBQWdEO1FBQ2hELGtEQUFrRDtRQUNsRCx5QkFBeUI7SUFDM0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNGLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gd2FpdFVudGlsKHByb21pc2U6IFByb21pc2U8dW5rbm93bj4pOiB2b2lkIHtcbiAgdm9pZCBpbXBvcnQoJ0B2ZXJjZWwvZnVuY3Rpb25zJykudGhlbigoeyB3YWl0VW50aWwgfSkgPT4ge1xuICAgIHdhaXRVbnRpbChwcm9taXNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogU2NoZWR1bGUgYSBiYWNrZ3JvdW5kIHByb21pc2UgdmlhIGB3YWl0VW50aWxgLCBndWFyYW50ZWVpbmcgdGhhdCB0aGVcbiAqIHByb21pc2UgaGFuZGVkIHRvIGB3YWl0VW50aWxgIGNhbiBuZXZlciByZWplY3QuIE5vdGhpbmcgY29uc3VtZXMgYVxuICogYHdhaXRVbnRpbGAgcHJvbWlzZSwgc28gYSByZWplY3Rpb24gc3VyZmFjZXMgYXMgYW4gYHVuaGFuZGxlZFJlamVjdGlvbmBcbiAqIGFuZCBjYW4gY3Jhc2ggdGhlIHByb2Nlc3Mg4oCUIGV2ZW4gd2hlbiB0aGUgc2FtZSB1bmRlcmx5aW5nIGVycm9yIGlzXG4gKiBjb3JyZWN0bHkgaGFuZGxlZCBieSBhbiBhd2FpdGVkIGNvcHkgZWxzZXdoZXJlLlxuICpcbiAqIEV4cGVjdGVkIGNsaWVudC1kaXNjb25uZWN0IGVycm9ycyAoYEFib3J0RXJyb3JgIC8gYFJlc3BvbnNlQWJvcnRlZGApXG4gKiBhcmUgaWdub3JlZC4gQW55IG90aGVyIGVycm9yIGlzIHBhc3NlZCB0byBgb25FcnJvcmAgYW5kIHN3YWxsb3dlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhZmVXYWl0VW50aWwoXG4gIHByb21pc2U6IFByb21pc2U8dW5rbm93bj4sXG4gIG9uRXJyb3I6IChlcnI6IHVua25vd24pID0+IHZvaWRcbik6IHZvaWQge1xuICB3YWl0VW50aWwoXG4gICAgcHJvbWlzZS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBjb25zdCBpc0Fib3J0RXJyb3IgPVxuICAgICAgICBlcnI/Lm5hbWUgPT09ICdBYm9ydEVycm9yJyB8fCBlcnI/Lm5hbWUgPT09ICdSZXNwb25zZUFib3J0ZWQnO1xuICAgICAgaWYgKCFpc0Fib3J0RXJyb3IpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvbkVycm9yKGVycik7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIE5ldmVyIGxldCBvbkVycm9yIGJyZWFrIHRoZSBuby1yZWplY3QgZ3VhcmFudGVlLlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBBIHNtYWxsIHdyYXBwZXIgYXJvdW5kIGB3YWl0VW50aWxgIHRoYXQgYWxzbyByZXR1cm5zXG4gKiB0aGUgcmVzdWx0IG9mIHRoZSBhd2FpdGVkIHByb21pc2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0ZWRVbnRpbDxUPihmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBjb25zdCByZXN1bHQgPSBmbigpO1xuICB3YWl0VW50aWwoXG4gICAgcmVzdWx0LmNhdGNoKCgpID0+IHtcbiAgICAgIC8vIElnbm9yZSBlcnJvciBmcm9tIHRoZSBwcm9taXNlIGJlaW5nIHJlamVjdGVkLlxuICAgICAgLy8gSXQncyBleHBlY3RlZCB0aGF0IHRoZSBpbnZva2VyIG9mIGB3YWl0ZWRVbnRpbGBcbiAgICAgIC8vIHdpbGwgaGFuZGxlIHRoZSBlcnJvci5cbiAgICB9KVxuICApO1xuICByZXR1cm4gcmVzdWx0O1xufVxuIl19
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdC11bnRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3dhaXQtdW50aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLFNBQVMsQ0FBQyxPQUF5QjtJQUNqRCxLQUFLLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtRQUN0RCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsT0FBeUIsRUFDekIsT0FBK0I7SUFFL0IsU0FBUyxDQUNQLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNwQixNQUFNLFlBQVksR0FDaEIsR0FBRyxFQUFFLElBQUksS0FBSyxZQUFZLElBQUksR0FBRyxFQUFFLElBQUksS0FBSyxpQkFBaUIsQ0FBQztRQUNoRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDO2dCQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNmLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsbURBQW1EO1lBQ3JELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FBSSxFQUFvQjtJQUN2RCxNQUFNLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNwQixTQUFTLENBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDaEIsZ0RBQWdEO1FBQ2hELGtEQUFrRDtRQUNsRCx5QkFBeUI7SUFDM0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNGLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gd2FpdFVudGlsKHByb21pc2U6IFByb21pc2U8dW5rbm93bj4pOiB2b2lkIHtcbiAgdm9pZCBpbXBvcnQoJ0B2ZXJjZWwvZnVuY3Rpb25zJykudGhlbigoeyB3YWl0VW50aWwgfSkgPT4ge1xuICAgIHdhaXRVbnRpbChwcm9taXNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogU2NoZWR1bGUgYSBiYWNrZ3JvdW5kIHByb21pc2UgdmlhIGB3YWl0VW50aWxgLCBndWFyYW50ZWVpbmcgdGhhdCB0aGVcbiAqIHByb21pc2UgaGFuZGVkIHRvIGB3YWl0VW50aWxgIGNhbiBuZXZlciByZWplY3QuIE5vdGhpbmcgY29uc3VtZXMgYVxuICogYHdhaXRVbnRpbGAgcHJvbWlzZSwgc28gYSByZWplY3Rpb24gc3VyZmFjZXMgYXMgYW4gYHVuaGFuZGxlZFJlamVjdGlvbmBcbiAqIGFuZCBjYW4gY3Jhc2ggdGhlIHByb2Nlc3MsIGV2ZW4gd2hlbiB0aGUgc2FtZSB1bmRlcmx5aW5nIGVycm9yIGlzXG4gKiBjb3JyZWN0bHkgaGFuZGxlZCBieSBhbiBhd2FpdGVkIGNvcHkgZWxzZXdoZXJlLlxuICpcbiAqIEV4cGVjdGVkIGNsaWVudC1kaXNjb25uZWN0IGVycm9ycyAoYEFib3J0RXJyb3JgIC8gYFJlc3BvbnNlQWJvcnRlZGApXG4gKiBhcmUgaWdub3JlZC4gQW55IG90aGVyIGVycm9yIGlzIHBhc3NlZCB0byBgb25FcnJvcmAgYW5kIHN3YWxsb3dlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhZmVXYWl0VW50aWwoXG4gIHByb21pc2U6IFByb21pc2U8dW5rbm93bj4sXG4gIG9uRXJyb3I6IChlcnI6IHVua25vd24pID0+IHZvaWRcbik6IHZvaWQge1xuICB3YWl0VW50aWwoXG4gICAgcHJvbWlzZS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBjb25zdCBpc0Fib3J0RXJyb3IgPVxuICAgICAgICBlcnI/Lm5hbWUgPT09ICdBYm9ydEVycm9yJyB8fCBlcnI/Lm5hbWUgPT09ICdSZXNwb25zZUFib3J0ZWQnO1xuICAgICAgaWYgKCFpc0Fib3J0RXJyb3IpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvbkVycm9yKGVycik7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIE5ldmVyIGxldCBvbkVycm9yIGJyZWFrIHRoZSBuby1yZWplY3QgZ3VhcmFudGVlLlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBBIHNtYWxsIHdyYXBwZXIgYXJvdW5kIGB3YWl0VW50aWxgIHRoYXQgYWxzbyByZXR1cm5zXG4gKiB0aGUgcmVzdWx0IG9mIHRoZSBhd2FpdGVkIHByb21pc2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0ZWRVbnRpbDxUPihmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBjb25zdCByZXN1bHQgPSBmbigpO1xuICB3YWl0VW50aWwoXG4gICAgcmVzdWx0LmNhdGNoKCgpID0+IHtcbiAgICAgIC8vIElnbm9yZSBlcnJvciBmcm9tIHRoZSBwcm9taXNlIGJlaW5nIHJlamVjdGVkLlxuICAgICAgLy8gSXQncyBleHBlY3RlZCB0aGF0IHRoZSBpbnZva2VyIG9mIGB3YWl0ZWRVbnRpbGBcbiAgICAgIC8vIHdpbGwgaGFuZGxlIHRoZSBlcnJvci5cbiAgICB9KVxuICApO1xuICByZXR1cm4gcmVzdWx0O1xufVxuIl19
@@ -3,18 +3,29 @@ type WorldSpecVersionMetadata = Pick<World, 'specVersion'>;
3
3
  /**
4
4
  * Rejects a World this runtime cannot speak to.
5
5
  *
6
- * The accepted range is `[SPEC_VERSION_CURRENT, SPEC_VERSION_MAX_SUPPORTED]`.
7
- * Below the current version means an old World package paired with a new
8
- * runtime, which cannot serve the protocol this runtime speaks. Above the
6
+ * The accepted range is
7
+ * `[SPEC_VERSION_SUPPORTS_SLOT_IDENTITY, SPEC_VERSION_MAX_SUPPORTED]`. Below
8
+ * the floor means an old World package paired with a new runtime, which cannot
9
+ * serve the protocol this runtime speaks. A World that does not number events
10
+ * by position allocates ids the runtime cannot read positions out of. Above the
9
11
  * ceiling means a World built against a newer spec than this runtime knows how
10
12
  * to read.
11
13
  *
12
- * Both bounds are the same version today, so this currently admits exactly one.
13
- * It stays written as a range because the two constants answer different
14
- * questions and come apart while a spec bump is staged: the ceiling rises when
15
- * this runtime learns to read the next version, the floor when that version
16
- * becomes the one Worlds stamp. An equality check against either constant alone
17
- * would reject a World during that window.
14
+ * The floor is deliberately the slot-identity version rather than
15
+ * `SPEC_VERSION_CURRENT`, which now sits one above it at the sealed log. Two
16
+ * reasons, and both are about the window a spec bump is staged over:
17
+ *
18
+ * - `WORKFLOW_SEALED_LOG=0` puts a deployment back on slot identity, so its
19
+ * World declares the lower version. Flooring at the version we stamp by
20
+ * default would make that kill switch reject the very World it selects,
21
+ * turning a rollback into a startup failure.
22
+ * - A World package one version behind the runtime it ships alongside is the
23
+ * normal state mid-bump, and it can still serve the protocol: slot identity
24
+ * is what the runtime actually requires, and sealed logs are a capability on
25
+ * top of it that only the backend implements.
26
+ *
27
+ * The range narrows again when the sealed log becomes mandatory and the flag
28
+ * goes away, exactly as slot identity's own floor did.
18
29
  */
19
30
  export declare function assertWorldSupportsRuntimeProtocol(world: WorldSpecVersionMetadata): void;
20
31
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"world-compatibility.d.ts","sourceRoot":"","sources":["../../src/runtime/world-compatibility.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAM7C,KAAK,wBAAwB,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AAE3D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,wBAAwB,GAC9B,IAAI,CAkBN"}
1
+ {"version":3,"file":"world-compatibility.d.ts","sourceRoot":"","sources":["../../src/runtime/world-compatibility.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAM7C,KAAK,wBAAwB,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,wBAAwB,GAC9B,IAAI,CAkBN"}
@@ -1,33 +1,44 @@
1
1
  import { WorkflowRuntimeError } from '@workflow/errors';
2
- import { SPEC_VERSION_CURRENT, SPEC_VERSION_MAX_SUPPORTED, } from '@workflow/world';
2
+ import { SPEC_VERSION_MAX_SUPPORTED, SPEC_VERSION_SUPPORTS_SLOT_IDENTITY, } from '@workflow/world';
3
3
  /**
4
4
  * Rejects a World this runtime cannot speak to.
5
5
  *
6
- * The accepted range is `[SPEC_VERSION_CURRENT, SPEC_VERSION_MAX_SUPPORTED]`.
7
- * Below the current version means an old World package paired with a new
8
- * runtime, which cannot serve the protocol this runtime speaks. Above the
6
+ * The accepted range is
7
+ * `[SPEC_VERSION_SUPPORTS_SLOT_IDENTITY, SPEC_VERSION_MAX_SUPPORTED]`. Below
8
+ * the floor means an old World package paired with a new runtime, which cannot
9
+ * serve the protocol this runtime speaks. A World that does not number events
10
+ * by position allocates ids the runtime cannot read positions out of. Above the
9
11
  * ceiling means a World built against a newer spec than this runtime knows how
10
12
  * to read.
11
13
  *
12
- * Both bounds are the same version today, so this currently admits exactly one.
13
- * It stays written as a range because the two constants answer different
14
- * questions and come apart while a spec bump is staged: the ceiling rises when
15
- * this runtime learns to read the next version, the floor when that version
16
- * becomes the one Worlds stamp. An equality check against either constant alone
17
- * would reject a World during that window.
14
+ * The floor is deliberately the slot-identity version rather than
15
+ * `SPEC_VERSION_CURRENT`, which now sits one above it at the sealed log. Two
16
+ * reasons, and both are about the window a spec bump is staged over:
17
+ *
18
+ * - `WORKFLOW_SEALED_LOG=0` puts a deployment back on slot identity, so its
19
+ * World declares the lower version. Flooring at the version we stamp by
20
+ * default would make that kill switch reject the very World it selects,
21
+ * turning a rollback into a startup failure.
22
+ * - A World package one version behind the runtime it ships alongside is the
23
+ * normal state mid-bump, and it can still serve the protocol: slot identity
24
+ * is what the runtime actually requires, and sealed logs are a capability on
25
+ * top of it that only the backend implements.
26
+ *
27
+ * The range narrows again when the sealed log becomes mandatory and the flag
28
+ * goes away, exactly as slot identity's own floor did.
18
29
  */
19
30
  export function assertWorldSupportsRuntimeProtocol(world) {
20
31
  const declared = world.specVersion;
21
32
  if (declared !== undefined &&
22
33
  declared !== null &&
23
- declared >= SPEC_VERSION_CURRENT &&
34
+ declared >= SPEC_VERSION_SUPPORTS_SLOT_IDENTITY &&
24
35
  declared <= SPEC_VERSION_MAX_SUPPORTED) {
25
36
  return;
26
37
  }
27
38
  const supportedVersion = declared ?? 'none';
28
- throw new WorkflowRuntimeError(`This Workflow runtime supports Worlds with spec version ${SPEC_VERSION_CURRENT} ` +
39
+ throw new WorkflowRuntimeError(`This Workflow runtime supports Worlds with spec version ${SPEC_VERSION_SUPPORTS_SLOT_IDENTITY} ` +
29
40
  `through ${SPEC_VERSION_MAX_SUPPORTED}, ` +
30
41
  `but the configured World declares spec version ${supportedVersion}. ` +
31
42
  'Install a World package version compatible with the current Workflow runtime.');
32
43
  }
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ybGQtY29tcGF0aWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3dvcmxkLWNvbXBhdGliaWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFeEQsT0FBTyxFQUNMLG9CQUFvQixFQUNwQiwwQkFBMEIsR0FDM0IsTUFBTSxpQkFBaUIsQ0FBQztBQUl6Qjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLFVBQVUsa0NBQWtDLENBQ2hELEtBQStCO0lBRS9CLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7SUFDbkMsSUFDRSxRQUFRLEtBQUssU0FBUztRQUN0QixRQUFRLEtBQUssSUFBSTtRQUNqQixRQUFRLElBQUksb0JBQW9CO1FBQ2hDLFFBQVEsSUFBSSwwQkFBMEIsRUFDdEMsQ0FBQztRQUNELE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLElBQUksTUFBTSxDQUFDO0lBQzVDLE1BQU0sSUFBSSxvQkFBb0IsQ0FDNUIsMkRBQTJELG9CQUFvQixHQUFHO1FBQ2hGLFdBQVcsMEJBQTBCLElBQUk7UUFDekMsa0RBQWtELGdCQUFnQixJQUFJO1FBQ3RFLCtFQUErRSxDQUNsRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdvcmtmbG93UnVudGltZUVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgdHlwZSB7IFdvcmxkIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7XG4gIFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICBTUEVDX1ZFUlNJT05fTUFYX1NVUFBPUlRFRCxcbn0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcblxudHlwZSBXb3JsZFNwZWNWZXJzaW9uTWV0YWRhdGEgPSBQaWNrPFdvcmxkLCAnc3BlY1ZlcnNpb24nPjtcblxuLyoqXG4gKiBSZWplY3RzIGEgV29ybGQgdGhpcyBydW50aW1lIGNhbm5vdCBzcGVhayB0by5cbiAqXG4gKiBUaGUgYWNjZXB0ZWQgcmFuZ2UgaXMgYFtTUEVDX1ZFUlNJT05fQ1VSUkVOVCwgU1BFQ19WRVJTSU9OX01BWF9TVVBQT1JURURdYC5cbiAqIEJlbG93IHRoZSBjdXJyZW50IHZlcnNpb24gbWVhbnMgYW4gb2xkIFdvcmxkIHBhY2thZ2UgcGFpcmVkIHdpdGggYSBuZXdcbiAqIHJ1bnRpbWUsIHdoaWNoIGNhbm5vdCBzZXJ2ZSB0aGUgcHJvdG9jb2wgdGhpcyBydW50aW1lIHNwZWFrcy4gQWJvdmUgdGhlXG4gKiBjZWlsaW5nIG1lYW5zIGEgV29ybGQgYnVpbHQgYWdhaW5zdCBhIG5ld2VyIHNwZWMgdGhhbiB0aGlzIHJ1bnRpbWUga25vd3MgaG93XG4gKiB0byByZWFkLlxuICpcbiAqIEJvdGggYm91bmRzIGFyZSB0aGUgc2FtZSB2ZXJzaW9uIHRvZGF5LCBzbyB0aGlzIGN1cnJlbnRseSBhZG1pdHMgZXhhY3RseSBvbmUuXG4gKiBJdCBzdGF5cyB3cml0dGVuIGFzIGEgcmFuZ2UgYmVjYXVzZSB0aGUgdHdvIGNvbnN0YW50cyBhbnN3ZXIgZGlmZmVyZW50XG4gKiBxdWVzdGlvbnMgYW5kIGNvbWUgYXBhcnQgd2hpbGUgYSBzcGVjIGJ1bXAgaXMgc3RhZ2VkOiB0aGUgY2VpbGluZyByaXNlcyB3aGVuXG4gKiB0aGlzIHJ1bnRpbWUgbGVhcm5zIHRvIHJlYWQgdGhlIG5leHQgdmVyc2lvbiwgdGhlIGZsb29yIHdoZW4gdGhhdCB2ZXJzaW9uXG4gKiBiZWNvbWVzIHRoZSBvbmUgV29ybGRzIHN0YW1wLiBBbiBlcXVhbGl0eSBjaGVjayBhZ2FpbnN0IGVpdGhlciBjb25zdGFudCBhbG9uZVxuICogd291bGQgcmVqZWN0IGEgV29ybGQgZHVyaW5nIHRoYXQgd2luZG93LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0V29ybGRTdXBwb3J0c1J1bnRpbWVQcm90b2NvbChcbiAgd29ybGQ6IFdvcmxkU3BlY1ZlcnNpb25NZXRhZGF0YVxuKTogdm9pZCB7XG4gIGNvbnN0IGRlY2xhcmVkID0gd29ybGQuc3BlY1ZlcnNpb247XG4gIGlmIChcbiAgICBkZWNsYXJlZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgZGVjbGFyZWQgIT09IG51bGwgJiZcbiAgICBkZWNsYXJlZCA+PSBTUEVDX1ZFUlNJT05fQ1VSUkVOVCAmJlxuICAgIGRlY2xhcmVkIDw9IFNQRUNfVkVSU0lPTl9NQVhfU1VQUE9SVEVEXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHN1cHBvcnRlZFZlcnNpb24gPSBkZWNsYXJlZCA/PyAnbm9uZSc7XG4gIHRocm93IG5ldyBXb3JrZmxvd1J1bnRpbWVFcnJvcihcbiAgICBgVGhpcyBXb3JrZmxvdyBydW50aW1lIHN1cHBvcnRzIFdvcmxkcyB3aXRoIHNwZWMgdmVyc2lvbiAke1NQRUNfVkVSU0lPTl9DVVJSRU5UfSBgICtcbiAgICAgIGB0aHJvdWdoICR7U1BFQ19WRVJTSU9OX01BWF9TVVBQT1JURUR9LCBgICtcbiAgICAgIGBidXQgdGhlIGNvbmZpZ3VyZWQgV29ybGQgZGVjbGFyZXMgc3BlYyB2ZXJzaW9uICR7c3VwcG9ydGVkVmVyc2lvbn0uIGAgK1xuICAgICAgJ0luc3RhbGwgYSBXb3JsZCBwYWNrYWdlIHZlcnNpb24gY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IFdvcmtmbG93IHJ1bnRpbWUuJ1xuICApO1xufVxuIl19
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ybGQtY29tcGF0aWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3dvcmxkLWNvbXBhdGliaWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFeEQsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixtQ0FBbUMsR0FDcEMsTUFBTSxpQkFBaUIsQ0FBQztBQUl6Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFDSCxNQUFNLFVBQVUsa0NBQWtDLENBQ2hELEtBQStCO0lBRS9CLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7SUFDbkMsSUFDRSxRQUFRLEtBQUssU0FBUztRQUN0QixRQUFRLEtBQUssSUFBSTtRQUNqQixRQUFRLElBQUksbUNBQW1DO1FBQy9DLFFBQVEsSUFBSSwwQkFBMEIsRUFDdEMsQ0FBQztRQUNELE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLElBQUksTUFBTSxDQUFDO0lBQzVDLE1BQU0sSUFBSSxvQkFBb0IsQ0FDNUIsMkRBQTJELG1DQUFtQyxHQUFHO1FBQy9GLFdBQVcsMEJBQTBCLElBQUk7UUFDekMsa0RBQWtELGdCQUFnQixJQUFJO1FBQ3RFLCtFQUErRSxDQUNsRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdvcmtmbG93UnVudGltZUVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgdHlwZSB7IFdvcmxkIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7XG4gIFNQRUNfVkVSU0lPTl9NQVhfU1VQUE9SVEVELFxuICBTUEVDX1ZFUlNJT05fU1VQUE9SVFNfU0xPVF9JREVOVElUWSxcbn0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcblxudHlwZSBXb3JsZFNwZWNWZXJzaW9uTWV0YWRhdGEgPSBQaWNrPFdvcmxkLCAnc3BlY1ZlcnNpb24nPjtcblxuLyoqXG4gKiBSZWplY3RzIGEgV29ybGQgdGhpcyBydW50aW1lIGNhbm5vdCBzcGVhayB0by5cbiAqXG4gKiBUaGUgYWNjZXB0ZWQgcmFuZ2UgaXNcbiAqIGBbU1BFQ19WRVJTSU9OX1NVUFBPUlRTX1NMT1RfSURFTlRJVFksIFNQRUNfVkVSU0lPTl9NQVhfU1VQUE9SVEVEXWAuIEJlbG93XG4gKiB0aGUgZmxvb3IgbWVhbnMgYW4gb2xkIFdvcmxkIHBhY2thZ2UgcGFpcmVkIHdpdGggYSBuZXcgcnVudGltZSwgd2hpY2ggY2Fubm90XG4gKiBzZXJ2ZSB0aGUgcHJvdG9jb2wgdGhpcyBydW50aW1lIHNwZWFrcy4gQSBXb3JsZCB0aGF0IGRvZXMgbm90IG51bWJlciBldmVudHNcbiAqIGJ5IHBvc2l0aW9uIGFsbG9jYXRlcyBpZHMgdGhlIHJ1bnRpbWUgY2Fubm90IHJlYWQgcG9zaXRpb25zIG91dCBvZi4gQWJvdmUgdGhlXG4gKiBjZWlsaW5nIG1lYW5zIGEgV29ybGQgYnVpbHQgYWdhaW5zdCBhIG5ld2VyIHNwZWMgdGhhbiB0aGlzIHJ1bnRpbWUga25vd3MgaG93XG4gKiB0byByZWFkLlxuICpcbiAqIFRoZSBmbG9vciBpcyBkZWxpYmVyYXRlbHkgdGhlIHNsb3QtaWRlbnRpdHkgdmVyc2lvbiByYXRoZXIgdGhhblxuICogYFNQRUNfVkVSU0lPTl9DVVJSRU5UYCwgd2hpY2ggbm93IHNpdHMgb25lIGFib3ZlIGl0IGF0IHRoZSBzZWFsZWQgbG9nLiBUd29cbiAqIHJlYXNvbnMsIGFuZCBib3RoIGFyZSBhYm91dCB0aGUgd2luZG93IGEgc3BlYyBidW1wIGlzIHN0YWdlZCBvdmVyOlxuICpcbiAqIC0gYFdPUktGTE9XX1NFQUxFRF9MT0c9MGAgcHV0cyBhIGRlcGxveW1lbnQgYmFjayBvbiBzbG90IGlkZW50aXR5LCBzbyBpdHNcbiAqICAgV29ybGQgZGVjbGFyZXMgdGhlIGxvd2VyIHZlcnNpb24uIEZsb29yaW5nIGF0IHRoZSB2ZXJzaW9uIHdlIHN0YW1wIGJ5XG4gKiAgIGRlZmF1bHQgd291bGQgbWFrZSB0aGF0IGtpbGwgc3dpdGNoIHJlamVjdCB0aGUgdmVyeSBXb3JsZCBpdCBzZWxlY3RzLFxuICogICB0dXJuaW5nIGEgcm9sbGJhY2sgaW50byBhIHN0YXJ0dXAgZmFpbHVyZS5cbiAqIC0gQSBXb3JsZCBwYWNrYWdlIG9uZSB2ZXJzaW9uIGJlaGluZCB0aGUgcnVudGltZSBpdCBzaGlwcyBhbG9uZ3NpZGUgaXMgdGhlXG4gKiAgIG5vcm1hbCBzdGF0ZSBtaWQtYnVtcCwgYW5kIGl0IGNhbiBzdGlsbCBzZXJ2ZSB0aGUgcHJvdG9jb2w6IHNsb3QgaWRlbnRpdHlcbiAqICAgaXMgd2hhdCB0aGUgcnVudGltZSBhY3R1YWxseSByZXF1aXJlcywgYW5kIHNlYWxlZCBsb2dzIGFyZSBhIGNhcGFiaWxpdHkgb25cbiAqICAgdG9wIG9mIGl0IHRoYXQgb25seSB0aGUgYmFja2VuZCBpbXBsZW1lbnRzLlxuICpcbiAqIFRoZSByYW5nZSBuYXJyb3dzIGFnYWluIHdoZW4gdGhlIHNlYWxlZCBsb2cgYmVjb21lcyBtYW5kYXRvcnkgYW5kIHRoZSBmbGFnXG4gKiBnb2VzIGF3YXksIGV4YWN0bHkgYXMgc2xvdCBpZGVudGl0eSdzIG93biBmbG9vciBkaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRXb3JsZFN1cHBvcnRzUnVudGltZVByb3RvY29sKFxuICB3b3JsZDogV29ybGRTcGVjVmVyc2lvbk1ldGFkYXRhXG4pOiB2b2lkIHtcbiAgY29uc3QgZGVjbGFyZWQgPSB3b3JsZC5zcGVjVmVyc2lvbjtcbiAgaWYgKFxuICAgIGRlY2xhcmVkICE9PSB1bmRlZmluZWQgJiZcbiAgICBkZWNsYXJlZCAhPT0gbnVsbCAmJlxuICAgIGRlY2xhcmVkID49IFNQRUNfVkVSU0lPTl9TVVBQT1JUU19TTE9UX0lERU5USVRZICYmXG4gICAgZGVjbGFyZWQgPD0gU1BFQ19WRVJTSU9OX01BWF9TVVBQT1JURURcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc3VwcG9ydGVkVmVyc2lvbiA9IGRlY2xhcmVkID8/ICdub25lJztcbiAgdGhyb3cgbmV3IFdvcmtmbG93UnVudGltZUVycm9yKFxuICAgIGBUaGlzIFdvcmtmbG93IHJ1bnRpbWUgc3VwcG9ydHMgV29ybGRzIHdpdGggc3BlYyB2ZXJzaW9uICR7U1BFQ19WRVJTSU9OX1NVUFBPUlRTX1NMT1RfSURFTlRJVFl9IGAgK1xuICAgICAgYHRocm91Z2ggJHtTUEVDX1ZFUlNJT05fTUFYX1NVUFBPUlRFRH0sIGAgK1xuICAgICAgYGJ1dCB0aGUgY29uZmlndXJlZCBXb3JsZCBkZWNsYXJlcyBzcGVjIHZlcnNpb24gJHtzdXBwb3J0ZWRWZXJzaW9ufS4gYCArXG4gICAgICAnSW5zdGFsbCBhIFdvcmxkIHBhY2thZ2UgdmVyc2lvbiBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQgV29ya2Zsb3cgcnVudGltZS4nXG4gICk7XG59XG4iXX0=
@@ -1,15 +1,15 @@
1
1
  /**
2
2
  * Server-only side-effect module that ensures `world.ts` is loaded so its
3
- * module-load side effect `globalThis[GetWorldFnKey] ??= getWorld`
3
+ * module-load side effect (`globalThis[GetWorldFnKey] ??= getWorld`)
4
4
  * fires in host bundles.
5
5
  *
6
6
  * # Why this exists
7
7
  *
8
8
  * `getWorldLazy()` in `./get-world-lazy.ts` checks the globalThis cache
9
9
  * populated by `world.ts`'s module-load side effect. When a server route
10
- * only consumes a helper that goes through `getWorldLazy` for example
11
- * `start` from `workflow/api`, or `defineHook().resume()` from `workflow`
12
- * webpack/turbopack can tree-shake the named import `{ getWorld }` out
10
+ * only consumes a helper that goes through `getWorldLazy` (for example
11
+ * `start` from `workflow/api`, or `defineHook().resume()` from `workflow`),
12
+ * webpack/turbopack can tree-shake the named import `{ getWorld }` out
13
13
  * of `runtime.ts`, taking `world.ts`'s module evaluation with it. The
14
14
  * globalThis registration never fires.
15
15
  *
@@ -41,7 +41,7 @@
41
41
  *
42
42
  * If you add another `getWorldLazy()` consumer that's reachable from a
43
43
  * host route without going through `workflow` or `workflow/api`, make
44
- * sure that entry also imports this module or that it transitively
44
+ * sure that entry also imports this module, or that it transitively
45
45
  * reaches `world.ts` via a non-tree-shakeable path. Adding a regression
46
46
  * test in `world-init.test.ts` is preferred to relying on careful manual
47
47
  * tracing.