@workflow/core 5.0.0-beta.0 → 5.0.0-beta.10

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 (222) hide show
  1. package/README.md +1 -1
  2. package/dist/attribute-changes.d.ts +7 -0
  3. package/dist/attribute-changes.d.ts.map +1 -0
  4. package/dist/attribute-changes.js +25 -0
  5. package/dist/capabilities.js +1 -1
  6. package/dist/capture-stack.d.ts +16 -0
  7. package/dist/capture-stack.d.ts.map +1 -0
  8. package/dist/capture-stack.js +21 -0
  9. package/dist/class-serialization.js +1 -1
  10. package/dist/classify-error.d.ts +11 -3
  11. package/dist/classify-error.d.ts.map +1 -1
  12. package/dist/classify-error.js +56 -6
  13. package/dist/context-errors.d.ts +27 -0
  14. package/dist/context-errors.d.ts.map +1 -0
  15. package/dist/context-errors.js +101 -0
  16. package/dist/context-violation-error.d.ts +97 -0
  17. package/dist/context-violation-error.d.ts.map +1 -0
  18. package/dist/context-violation-error.js +147 -0
  19. package/dist/create-hook.d.ts.map +1 -1
  20. package/dist/create-hook.js +4 -3
  21. package/dist/define-hook.d.ts.map +1 -1
  22. package/dist/define-hook.js +20 -5
  23. package/dist/describe-error.d.ts +70 -0
  24. package/dist/describe-error.d.ts.map +1 -0
  25. package/dist/describe-error.js +165 -0
  26. package/dist/encryption.d.ts +22 -1
  27. package/dist/encryption.d.ts.map +1 -1
  28. package/dist/encryption.js +72 -27
  29. package/dist/events-consumer.d.ts +7 -0
  30. package/dist/events-consumer.d.ts.map +1 -1
  31. package/dist/events-consumer.js +18 -3
  32. package/dist/flushable-stream.d.ts +10 -10
  33. package/dist/flushable-stream.d.ts.map +1 -1
  34. package/dist/flushable-stream.js +18 -13
  35. package/dist/global.d.ts +4 -0
  36. package/dist/global.d.ts.map +1 -1
  37. package/dist/global.js +8 -2
  38. package/dist/index.d.ts +1 -0
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +2 -1
  41. package/dist/log-format.d.ts +25 -0
  42. package/dist/log-format.d.ts.map +1 -0
  43. package/dist/log-format.js +250 -0
  44. package/dist/logger.d.ts +28 -30
  45. package/dist/logger.d.ts.map +1 -1
  46. package/dist/logger.js +77 -31
  47. package/dist/private.d.ts +5 -5
  48. package/dist/private.d.ts.map +1 -1
  49. package/dist/private.js +8 -8
  50. package/dist/runtime/constants.d.ts +48 -0
  51. package/dist/runtime/constants.d.ts.map +1 -1
  52. package/dist/runtime/constants.js +91 -8
  53. package/dist/runtime/get-port-lazy.d.ts +10 -0
  54. package/dist/runtime/get-port-lazy.d.ts.map +1 -0
  55. package/dist/runtime/get-port-lazy.js +30 -0
  56. package/dist/runtime/get-world-lazy.d.ts +32 -0
  57. package/dist/runtime/get-world-lazy.d.ts.map +1 -0
  58. package/dist/runtime/get-world-lazy.js +56 -0
  59. package/dist/runtime/helpers.d.ts +40 -7
  60. package/dist/runtime/helpers.d.ts.map +1 -1
  61. package/dist/runtime/helpers.js +93 -36
  62. package/dist/runtime/replay-budget.d.ts +98 -0
  63. package/dist/runtime/replay-budget.d.ts.map +1 -0
  64. package/dist/runtime/replay-budget.js +191 -0
  65. package/dist/runtime/resume-hook.d.ts.map +1 -1
  66. package/dist/runtime/resume-hook.js +5 -4
  67. package/dist/runtime/run.d.ts +10 -32
  68. package/dist/runtime/run.d.ts.map +1 -1
  69. package/dist/runtime/run.js +83 -33
  70. package/dist/runtime/runs.d.ts +1 -1
  71. package/dist/runtime/runs.d.ts.map +1 -1
  72. package/dist/runtime/runs.js +7 -4
  73. package/dist/runtime/start.js +17 -6
  74. package/dist/runtime/step-executor.d.ts +40 -0
  75. package/dist/runtime/step-executor.d.ts.map +1 -0
  76. package/dist/runtime/step-executor.js +492 -0
  77. package/dist/runtime/step-handler.d.ts +0 -5
  78. package/dist/runtime/step-handler.d.ts.map +1 -1
  79. package/dist/runtime/step-handler.js +227 -119
  80. package/dist/runtime/suspension-handler.d.ts +22 -4
  81. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  82. package/dist/runtime/suspension-handler.js +90 -73
  83. package/dist/runtime/world-init.d.ts +75 -0
  84. package/dist/runtime/world-init.d.ts.map +1 -0
  85. package/dist/runtime/world-init.js +75 -0
  86. package/dist/runtime/world.d.ts +4 -3
  87. package/dist/runtime/world.d.ts.map +1 -1
  88. package/dist/runtime/world.js +98 -9
  89. package/dist/runtime.d.ts +8 -7
  90. package/dist/runtime.d.ts.map +1 -1
  91. package/dist/runtime.js +810 -324
  92. package/dist/schemas.d.ts +1 -1
  93. package/dist/schemas.d.ts.map +1 -1
  94. package/dist/schemas.js +1 -1
  95. package/dist/serialization/client.d.ts +17 -0
  96. package/dist/serialization/client.d.ts.map +1 -0
  97. package/dist/serialization/client.js +45 -0
  98. package/dist/serialization/codec-devalue.d.ts +14 -0
  99. package/dist/serialization/codec-devalue.d.ts.map +1 -0
  100. package/dist/serialization/codec-devalue.js +98 -0
  101. package/dist/serialization/codec.d.ts +90 -0
  102. package/dist/serialization/codec.d.ts.map +1 -0
  103. package/dist/serialization/codec.js +17 -0
  104. package/dist/serialization/encryption.d.ts +32 -0
  105. package/dist/serialization/encryption.d.ts.map +1 -0
  106. package/dist/serialization/encryption.js +67 -0
  107. package/dist/serialization/errors.d.ts +34 -0
  108. package/dist/serialization/errors.d.ts.map +1 -0
  109. package/dist/serialization/errors.js +59 -0
  110. package/dist/serialization/format.d.ts +60 -0
  111. package/dist/serialization/format.d.ts.map +1 -0
  112. package/dist/serialization/format.js +97 -0
  113. package/dist/serialization/index.d.ts +18 -0
  114. package/dist/serialization/index.d.ts.map +1 -0
  115. package/dist/serialization/index.js +20 -0
  116. package/dist/serialization/reducers/class.d.ts +11 -0
  117. package/dist/serialization/reducers/class.d.ts.map +1 -0
  118. package/dist/serialization/reducers/class.js +68 -0
  119. package/dist/serialization/reducers/common.d.ts +16 -0
  120. package/dist/serialization/reducers/common.d.ts.map +1 -0
  121. package/dist/serialization/reducers/common.js +417 -0
  122. package/dist/serialization/reducers/step-function.d.ts +35 -0
  123. package/dist/serialization/reducers/step-function.d.ts.map +1 -0
  124. package/dist/serialization/reducers/step-function.js +88 -0
  125. package/dist/serialization/step.d.ts +17 -0
  126. package/dist/serialization/step.d.ts.map +1 -0
  127. package/dist/serialization/step.js +45 -0
  128. package/dist/serialization/types.d.ts +222 -0
  129. package/dist/serialization/types.d.ts.map +1 -0
  130. package/dist/serialization/types.js +21 -0
  131. package/dist/serialization/workflow.d.ts +29 -0
  132. package/dist/serialization/workflow.d.ts.map +1 -0
  133. package/dist/serialization/workflow.js +54 -0
  134. package/dist/serialization-format.d.ts +16 -2
  135. package/dist/serialization-format.d.ts.map +1 -1
  136. package/dist/serialization-format.js +104 -5
  137. package/dist/serialization.d.ts +217 -224
  138. package/dist/serialization.d.ts.map +1 -1
  139. package/dist/serialization.js +940 -643
  140. package/dist/set-attributes.d.ts +13 -0
  141. package/dist/set-attributes.d.ts.map +1 -0
  142. package/dist/set-attributes.js +40 -0
  143. package/dist/sleep.d.ts.map +1 -1
  144. package/dist/sleep.js +3 -2
  145. package/dist/source-map.d.ts.map +1 -1
  146. package/dist/source-map.js +44 -6
  147. package/dist/step/context-storage.d.ts +14 -0
  148. package/dist/step/context-storage.d.ts.map +1 -1
  149. package/dist/step/context-storage.js +1 -1
  150. package/dist/step/get-closure-vars.d.ts.map +1 -1
  151. package/dist/step/get-closure-vars.js +3 -2
  152. package/dist/step/get-step-metadata.d.ts.map +1 -1
  153. package/dist/step/get-step-metadata.js +3 -2
  154. package/dist/step/get-workflow-metadata.d.ts.map +1 -1
  155. package/dist/step/get-workflow-metadata.js +3 -2
  156. package/dist/step/writable-stream.d.ts.map +1 -1
  157. package/dist/step/writable-stream.js +39 -5
  158. package/dist/step.d.ts.map +1 -1
  159. package/dist/step.js +97 -19
  160. package/dist/symbols.d.ts +20 -0
  161. package/dist/symbols.d.ts.map +1 -1
  162. package/dist/symbols.js +21 -1
  163. package/dist/telemetry/semantic-conventions.d.ts +2 -2
  164. package/dist/telemetry/semantic-conventions.js +1 -1
  165. package/dist/telemetry.js +1 -1
  166. package/dist/types.d.ts +6 -0
  167. package/dist/types.d.ts.map +1 -1
  168. package/dist/types.js +23 -1
  169. package/dist/util.d.ts +18 -3
  170. package/dist/util.d.ts.map +1 -1
  171. package/dist/util.js +28 -5
  172. package/dist/version.d.ts +1 -1
  173. package/dist/version.d.ts.map +1 -1
  174. package/dist/version.js +2 -2
  175. package/dist/vm/index.d.ts.map +1 -1
  176. package/dist/vm/index.js +3 -2
  177. package/dist/vm/uint8array-base64.js +1 -1
  178. package/dist/vm/uuid.js +1 -1
  179. package/dist/workflow/abort-controller.d.ts +65 -0
  180. package/dist/workflow/abort-controller.d.ts.map +1 -0
  181. package/dist/workflow/abort-controller.js +260 -0
  182. package/dist/workflow/create-hook.d.ts.map +1 -1
  183. package/dist/workflow/create-hook.js +3 -2
  184. package/dist/workflow/define-hook.d.ts +1 -1
  185. package/dist/workflow/define-hook.d.ts.map +1 -1
  186. package/dist/workflow/define-hook.js +8 -4
  187. package/dist/workflow/get-workflow-metadata.d.ts +11 -0
  188. package/dist/workflow/get-workflow-metadata.d.ts.map +1 -1
  189. package/dist/workflow/get-workflow-metadata.js +14 -3
  190. package/dist/workflow/hook.d.ts.map +1 -1
  191. package/dist/workflow/hook.js +13 -4
  192. package/dist/workflow/index.d.ts +1 -0
  193. package/dist/workflow/index.d.ts.map +1 -1
  194. package/dist/workflow/index.js +5 -3
  195. package/dist/workflow/set-attributes.d.ts +74 -0
  196. package/dist/workflow/set-attributes.d.ts.map +1 -0
  197. package/dist/workflow/set-attributes.js +66 -0
  198. package/dist/workflow/sleep.d.ts.map +1 -1
  199. package/dist/workflow/sleep.js +22 -3
  200. package/dist/workflow/world-init-stub.d.ts +15 -0
  201. package/dist/workflow/world-init-stub.d.ts.map +1 -0
  202. package/dist/workflow/world-init-stub.js +15 -0
  203. package/dist/workflow/writable-stream.js +1 -1
  204. package/dist/workflow.d.ts.map +1 -1
  205. package/dist/workflow.js +84 -31
  206. package/docs/api-reference/create-webhook.mdx +37 -18
  207. package/docs/api-reference/experimental-set-attributes.mdx +63 -0
  208. package/docs/api-reference/get-workflow-metadata.mdx +61 -0
  209. package/docs/api-reference/index.mdx +3 -0
  210. package/docs/foundations/cancellation.mdx +460 -0
  211. package/docs/foundations/errors-and-retries.mdx +7 -3
  212. package/docs/foundations/index.mdx +3 -3
  213. package/docs/foundations/meta.json +3 -2
  214. package/docs/foundations/serialization.mdx +78 -42
  215. package/docs/foundations/starting-workflows.mdx +6 -2
  216. package/docs/foundations/versioning.mdx +263 -0
  217. package/docs/how-it-works/cancellation.mdx +287 -0
  218. package/docs/how-it-works/code-transform.mdx +8 -7
  219. package/docs/how-it-works/event-sourcing.mdx +2 -2
  220. package/docs/how-it-works/meta.json +2 -1
  221. package/package.json +19 -10
  222. package/docs/foundations/common-patterns.mdx +0 -265
@@ -1,20 +1,4 @@
1
- /**
2
- * Browser-compatible AES-256-GCM encryption module.
3
- *
4
- * Uses the Web Crypto API (`globalThis.crypto.subtle`) which works in
5
- * both modern browsers and Node.js 20+. This module is intentionally
6
- * free of Node.js-specific imports so it can be bundled for the browser.
7
- *
8
- * The World interface (`getEncryptionKeyForRun`) returns a raw 32-byte
9
- * AES-256 key. Callers should use `importKey()` once to convert it to a
10
- * `CryptoKey`, then pass that to `encrypt()`/`decrypt()` for all
11
- * operations within the same run. This avoids repeated `importKey()`
12
- * calls on every encrypt/decrypt invocation.
13
- *
14
- * Wire format: `[nonce (12 bytes)][ciphertext + auth tag]`
15
- * The `encr` format prefix is NOT part of this module — it's added/stripped
16
- * by the serialization layer in `maybeEncrypt`/`maybeDecrypt`.
17
- */
1
+ import { RuntimeDecryptionError, WorkflowRuntimeError } from '@workflow/errors';
18
2
  const NONCE_LENGTH = 12;
19
3
  const TAG_LENGTH = 128; // bits
20
4
  const KEY_LENGTH = 32; // bytes (AES-256)
@@ -24,17 +8,24 @@ const KEY_LENGTH = 32; // bytes (AES-256)
24
8
  * Callers should call this once per run (after `getEncryptionKeyForRun()`)
25
9
  * and pass the resulting `CryptoKey` to all subsequent encrypt/decrypt calls.
26
10
  *
11
+ * Pass `usages: ['encrypt']` (or `['decrypt']`) for cross-run scenarios
12
+ * where the caller should not be able to perform the inverse operation
13
+ * with the key — for example a child workflow writing into a parent
14
+ * run's forwarded WritableStream only needs to encrypt, never decrypt.
15
+ *
27
16
  * @param raw - Raw 32-byte AES-256 key (from World.getEncryptionKeyForRun)
17
+ * @param usages - Key usages. Defaults to `['encrypt', 'decrypt']`.
28
18
  * @returns CryptoKey ready for AES-GCM operations
29
19
  */
30
- export async function importKey(raw) {
20
+ export async function importKey(raw, usages = ['encrypt', 'decrypt']) {
31
21
  if (raw.byteLength !== KEY_LENGTH) {
32
- throw new Error(`Encryption key must be exactly ${KEY_LENGTH} bytes, got ${raw.byteLength}`);
22
+ throw new WorkflowRuntimeError(`Encryption key must be exactly ${KEY_LENGTH} bytes, got ${raw.byteLength}`);
33
23
  }
34
- return globalThis.crypto.subtle.importKey('raw', raw, 'AES-GCM', false, [
35
- 'encrypt',
36
- 'decrypt',
37
- ]);
24
+ return globalThis.crypto.subtle.importKey('raw', raw, 'AES-GCM', false,
25
+ // `KeyUsage` is a DOM-lib type that's not in scope under `es2022`.
26
+ // The `ReadonlyArray<'encrypt' | 'decrypt'>` parameter type matches
27
+ // a strict subset of `KeyUsage[]`, so this cast is sound.
28
+ usages);
38
29
  }
39
30
  /**
40
31
  * Encrypt data using AES-256-GCM.
@@ -45,7 +36,22 @@ export async function importKey(raw) {
45
36
  */
46
37
  export async function encrypt(key, data) {
47
38
  const nonce = globalThis.crypto.getRandomValues(new Uint8Array(NONCE_LENGTH));
48
- const ciphertext = await globalThis.crypto.subtle.encrypt({ name: 'AES-GCM', iv: nonce, tagLength: TAG_LENGTH }, key, data);
39
+ let ciphertext;
40
+ try {
41
+ ciphertext = await globalThis.crypto.subtle.encrypt({ name: 'AES-GCM', iv: nonce, tagLength: TAG_LENGTH }, key, data);
42
+ }
43
+ catch (cause) {
44
+ // Re-wrap any Web Crypto failure (DOMException etc.) as a
45
+ // RuntimeDecryptionError. Failures here are rare — they happen e.g.
46
+ // when a CryptoKey was imported with `usages: ['decrypt']` only.
47
+ throw new RuntimeDecryptionError(`AES-256-GCM encryption failed: ${cause instanceof Error ? cause.message : String(cause)}`, {
48
+ cause,
49
+ context: {
50
+ operation: 'encrypt',
51
+ byteLength: data.byteLength,
52
+ },
53
+ });
54
+ }
49
55
  const result = new Uint8Array(NONCE_LENGTH + ciphertext.byteLength);
50
56
  result.set(nonce, 0);
51
57
  result.set(new Uint8Array(ciphertext), NONCE_LENGTH);
@@ -54,6 +60,21 @@ export async function encrypt(key, data) {
54
60
  /**
55
61
  * Decrypt data using AES-256-GCM.
56
62
  *
63
+ * Any failure inside the Web Crypto layer — most commonly an
64
+ * `OperationError: The operation failed for an operation-specific reason`
65
+ * raised by `AESCipherJob.onDone` when the GCM authentication tag does
66
+ * not verify — is rewrapped as {@link RuntimeDecryptionError}. The
67
+ * wrapped error carries the original DOMException as `cause`, plus a
68
+ * small diagnostic context (`operation`, input `byteLength`) to help
69
+ * disambiguate ciphertext corruption from key mismatch from truncated
70
+ * transport reads.
71
+ *
72
+ * Note: `data` is the raw AES payload (`[nonce][ciphertext + tag]`), not a
73
+ * format-prefixed envelope — callers strip the `encr` marker via
74
+ * `decodeFormatPrefix()` before reaching this function. The outer
75
+ * envelope's format prefix is therefore attached by the serialization
76
+ * layer (`serialization/encryption.ts`), which is the layer that has it.
77
+ *
57
78
  * @param key - CryptoKey from `importKey()`
58
79
  * @param data - `[nonce (12 bytes)][ciphertext + GCM auth tag]`
59
80
  * @returns Decrypted plaintext
@@ -61,11 +82,35 @@ export async function encrypt(key, data) {
61
82
  export async function decrypt(key, data) {
62
83
  const minLength = NONCE_LENGTH + TAG_LENGTH / 8; // nonce + auth tag
63
84
  if (data.byteLength < minLength) {
64
- throw new Error(`Encrypted data too short: expected at least ${minLength} bytes, got ${data.byteLength}`);
85
+ throw new RuntimeDecryptionError(`Encrypted data too short: expected at least ${minLength} bytes, got ${data.byteLength}`, {
86
+ context: {
87
+ operation: 'decrypt',
88
+ byteLength: data.byteLength,
89
+ },
90
+ });
65
91
  }
66
92
  const nonce = data.subarray(0, NONCE_LENGTH);
67
93
  const ciphertext = data.subarray(NONCE_LENGTH);
68
- const plaintext = await globalThis.crypto.subtle.decrypt({ name: 'AES-GCM', iv: nonce, tagLength: TAG_LENGTH }, key, ciphertext);
94
+ let plaintext;
95
+ try {
96
+ plaintext = await globalThis.crypto.subtle.decrypt({ name: 'AES-GCM', iv: nonce, tagLength: TAG_LENGTH }, key, ciphertext);
97
+ }
98
+ catch (cause) {
99
+ // The most common shape we see in the wild is a DOMException with
100
+ // `name: 'OperationError'` and message "The operation failed for
101
+ // an operation-specific reason" — this is what Web Crypto throws
102
+ // when the GCM auth tag does not verify. Re-throw as
103
+ // RuntimeDecryptionError, attaching diagnostic context (byte length)
104
+ // that the bare DOMException lacks.
105
+ const causeMsg = cause instanceof Error ? cause.message : String(cause);
106
+ throw new RuntimeDecryptionError(`AES-256-GCM decryption failed: ${causeMsg}`, {
107
+ cause,
108
+ context: {
109
+ operation: 'decrypt',
110
+ byteLength: data.byteLength,
111
+ },
112
+ });
113
+ }
69
114
  return new Uint8Array(plaintext);
70
115
  }
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jcnlwdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lbmNyeXB0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBT0gsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU87QUFDL0IsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLENBQUMsa0JBQWtCO0FBRXpDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxTQUFTLENBQUMsR0FBZTtJQUM3QyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FDYixrQ0FBa0MsVUFBVSxlQUFlLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FDNUUsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7UUFDdEUsU0FBUztRQUNULFNBQVM7S0FDVixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPLENBQzNCLEdBQWMsRUFDZCxJQUFnQjtJQUVoQixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQzlFLE1BQU0sVUFBVSxHQUFHLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUN2RCxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQ3JELEdBQUcsRUFDSCxJQUFJLENBQ0wsQ0FBQztJQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNyRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPLENBQzNCLEdBQWMsRUFDZCxJQUFnQjtJQUVoQixNQUFNLFNBQVMsR0FBRyxZQUFZLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtJQUNwRSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxFQUFFLENBQUM7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FDYiwrQ0FBK0MsU0FBUyxlQUFlLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FDekYsQ0FBQztJQUNKLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM3QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQy9DLE1BQU0sU0FBUyxHQUFHLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUN0RCxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQ3JELEdBQUcsRUFDSCxVQUFVLENBQ1gsQ0FBQztJQUNGLE9BQU8sSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbkMsQ0FBQyJ9
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jcnlwdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lbmNyeXB0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBeUJoRixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDeEIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTztBQUMvQixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsQ0FBQyxrQkFBa0I7QUFFekM7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFNBQVMsQ0FDN0IsR0FBZSxFQUNmLFNBQStDLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztJQUVyRSxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDbEMsTUFBTSxJQUFJLG9CQUFvQixDQUM1QixrQ0FBa0MsVUFBVSxlQUFlLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FDNUUsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FDdkMsS0FBSyxFQUNMLEdBQUcsRUFDSCxTQUFTLEVBQ1QsS0FBSztJQUNMLG1FQUFtRTtJQUNuRSxvRUFBb0U7SUFDcEUsMERBQTBEO0lBQzFELE1BQW1DLENBQ3BDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPLENBQzNCLEdBQWMsRUFDZCxJQUFnQjtJQUVoQixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQzlFLElBQUksVUFBdUIsQ0FBQztJQUM1QixJQUFJLENBQUM7UUFDSCxVQUFVLEdBQUcsTUFBTSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQ2pELEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFDckQsR0FBRyxFQUNILElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZiwwREFBMEQ7UUFDMUQsb0VBQW9FO1FBQ3BFLGlFQUFpRTtRQUNqRSxNQUFNLElBQUksc0JBQXNCLENBQzlCLGtDQUFrQyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFDMUY7WUFDRSxLQUFLO1lBQ0wsT0FBTyxFQUFFO2dCQUNQLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7YUFDNUI7U0FDRixDQUNGLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwRSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyQixNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3JELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPLENBQzNCLEdBQWMsRUFDZCxJQUFnQjtJQUVoQixNQUFNLFNBQVMsR0FBRyxZQUFZLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtJQUNwRSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxFQUFFLENBQUM7UUFDaEMsTUFBTSxJQUFJLHNCQUFzQixDQUM5QiwrQ0FBK0MsU0FBUyxlQUFlLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFDeEY7WUFDRSxPQUFPLEVBQUU7Z0JBQ1AsU0FBUyxFQUFFLFNBQVM7Z0JBQ3BCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTthQUM1QjtTQUNGLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM3QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQy9DLElBQUksU0FBc0IsQ0FBQztJQUMzQixJQUFJLENBQUM7UUFDSCxTQUFTLEdBQUcsTUFBTSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQ2hELEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFDckQsR0FBRyxFQUNILFVBQVUsQ0FDWCxDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixrRUFBa0U7UUFDbEUsaUVBQWlFO1FBQ2pFLGlFQUFpRTtRQUNqRSxxREFBcUQ7UUFDckQscUVBQXFFO1FBQ3JFLG9DQUFvQztRQUNwQyxNQUFNLFFBQVEsR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEUsTUFBTSxJQUFJLHNCQUFzQixDQUM5QixrQ0FBa0MsUUFBUSxFQUFFLEVBQzVDO1lBQ0UsS0FBSztZQUNMLE9BQU8sRUFBRTtnQkFDUCxTQUFTLEVBQUUsU0FBUztnQkFDcEIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2FBQzVCO1NBQ0YsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJ1bnRpbWVEZWNyeXB0aW9uRXJyb3IsIFdvcmtmbG93UnVudGltZUVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5cbi8qKlxuICogQnJvd3Nlci1jb21wYXRpYmxlIEFFUy0yNTYtR0NNIGVuY3J5cHRpb24gbW9kdWxlLlxuICpcbiAqIFVzZXMgdGhlIFdlYiBDcnlwdG8gQVBJIChgZ2xvYmFsVGhpcy5jcnlwdG8uc3VidGxlYCkgd2hpY2ggd29ya3MgaW5cbiAqIGJvdGggbW9kZXJuIGJyb3dzZXJzIGFuZCBOb2RlLmpzIDIwKy4gVGhpcyBtb2R1bGUgaXMgaW50ZW50aW9uYWxseVxuICogZnJlZSBvZiBOb2RlLmpzLXNwZWNpZmljIGltcG9ydHMgc28gaXQgY2FuIGJlIGJ1bmRsZWQgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIFRoZSBXb3JsZCBpbnRlcmZhY2UgKGBnZXRFbmNyeXB0aW9uS2V5Rm9yUnVuYCkgcmV0dXJucyBhIHJhdyAzMi1ieXRlXG4gKiBBRVMtMjU2IGtleS4gQ2FsbGVycyBzaG91bGQgdXNlIGBpbXBvcnRLZXkoKWAgb25jZSB0byBjb252ZXJ0IGl0IHRvIGFcbiAqIGBDcnlwdG9LZXlgLCB0aGVuIHBhc3MgdGhhdCB0byBgZW5jcnlwdCgpYC9gZGVjcnlwdCgpYCBmb3IgYWxsXG4gKiBvcGVyYXRpb25zIHdpdGhpbiB0aGUgc2FtZSBydW4uIFRoaXMgYXZvaWRzIHJlcGVhdGVkIGBpbXBvcnRLZXkoKWBcbiAqIGNhbGxzIG9uIGV2ZXJ5IGVuY3J5cHQvZGVjcnlwdCBpbnZvY2F0aW9uLlxuICpcbiAqIFdpcmUgZm9ybWF0OiBgW25vbmNlICgxMiBieXRlcyldW2NpcGhlcnRleHQgKyBhdXRoIHRhZ11gXG4gKiBUaGUgYGVuY3JgIGZvcm1hdCBwcmVmaXggaXMgTk9UIHBhcnQgb2YgdGhpcyBtb2R1bGUg4oCUIGl0J3MgYWRkZWQvc3RyaXBwZWRcbiAqIGJ5IHRoZSBzZXJpYWxpemF0aW9uIGxheWVyIGluIGBtYXliZUVuY3J5cHRgL2BtYXliZURlY3J5cHRgLlxuICovXG5cbi8vIENyeXB0b0tleSBpcyBhIGdsb2JhbCB0eXBlIGluIGJyb3dzZXJzIGFuZCBOb2RlLmpzIDIwKywgYnV0IFR5cGVTY3JpcHQnc1xuLy8gYGVzMjAyMmAgbGliIGRvZXNuJ3QgaW5jbHVkZSBpdC4gUmUtZXhwb3J0IGl0IGZyb20gdGhlIG5vZGU6Y3J5cHRvIHR5cGVzXG4vLyBzbyBjb25zdW1lcnMgY2FuIHJlZmVyZW5jZSBpdCB3aXRob3V0IGFkZGluZyBgZG9tYCBsaWIuXG5leHBvcnQgdHlwZSBDcnlwdG9LZXkgPSBpbXBvcnQoJ25vZGU6Y3J5cHRvJykud2ViY3J5cHRvLkNyeXB0b0tleTtcblxuY29uc3QgTk9OQ0VfTEVOR1RIID0gMTI7XG5jb25zdCBUQUdfTEVOR1RIID0gMTI4OyAvLyBiaXRzXG5jb25zdCBLRVlfTEVOR1RIID0gMzI7IC8vIGJ5dGVzIChBRVMtMjU2KVxuXG4vKipcbiAqIEltcG9ydCBhIHJhdyBBRVMtMjU2IGtleSBhcyBhIGBDcnlwdG9LZXlgIGZvciB1c2Ugd2l0aCBgZW5jcnlwdCgpYC9gZGVjcnlwdCgpYC5cbiAqXG4gKiBDYWxsZXJzIHNob3VsZCBjYWxsIHRoaXMgb25jZSBwZXIgcnVuIChhZnRlciBgZ2V0RW5jcnlwdGlvbktleUZvclJ1bigpYClcbiAqIGFuZCBwYXNzIHRoZSByZXN1bHRpbmcgYENyeXB0b0tleWAgdG8gYWxsIHN1YnNlcXVlbnQgZW5jcnlwdC9kZWNyeXB0IGNhbGxzLlxuICpcbiAqIFBhc3MgYHVzYWdlczogWydlbmNyeXB0J11gIChvciBgWydkZWNyeXB0J11gKSBmb3IgY3Jvc3MtcnVuIHNjZW5hcmlvc1xuICogd2hlcmUgdGhlIGNhbGxlciBzaG91bGQgbm90IGJlIGFibGUgdG8gcGVyZm9ybSB0aGUgaW52ZXJzZSBvcGVyYXRpb25cbiAqIHdpdGggdGhlIGtleSDigJQgZm9yIGV4YW1wbGUgYSBjaGlsZCB3b3JrZmxvdyB3cml0aW5nIGludG8gYSBwYXJlbnRcbiAqIHJ1bidzIGZvcndhcmRlZCBXcml0YWJsZVN0cmVhbSBvbmx5IG5lZWRzIHRvIGVuY3J5cHQsIG5ldmVyIGRlY3J5cHQuXG4gKlxuICogQHBhcmFtIHJhdyAtIFJhdyAzMi1ieXRlIEFFUy0yNTYga2V5IChmcm9tIFdvcmxkLmdldEVuY3J5cHRpb25LZXlGb3JSdW4pXG4gKiBAcGFyYW0gdXNhZ2VzIC0gS2V5IHVzYWdlcy4gRGVmYXVsdHMgdG8gYFsnZW5jcnlwdCcsICdkZWNyeXB0J11gLlxuICogQHJldHVybnMgQ3J5cHRvS2V5IHJlYWR5IGZvciBBRVMtR0NNIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltcG9ydEtleShcbiAgcmF3OiBVaW50OEFycmF5LFxuICB1c2FnZXM6IFJlYWRvbmx5QXJyYXk8J2VuY3J5cHQnIHwgJ2RlY3J5cHQnPiA9IFsnZW5jcnlwdCcsICdkZWNyeXB0J11cbikge1xuICBpZiAocmF3LmJ5dGVMZW5ndGggIT09IEtFWV9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICBgRW5jcnlwdGlvbiBrZXkgbXVzdCBiZSBleGFjdGx5ICR7S0VZX0xFTkdUSH0gYnl0ZXMsIGdvdCAke3Jhdy5ieXRlTGVuZ3RofWBcbiAgICApO1xuICB9XG4gIHJldHVybiBnbG9iYWxUaGlzLmNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgICdyYXcnLFxuICAgIHJhdyxcbiAgICAnQUVTLUdDTScsXG4gICAgZmFsc2UsXG4gICAgLy8gYEtleVVzYWdlYCBpcyBhIERPTS1saWIgdHlwZSB0aGF0J3Mgbm90IGluIHNjb3BlIHVuZGVyIGBlczIwMjJgLlxuICAgIC8vIFRoZSBgUmVhZG9ubHlBcnJheTwnZW5jcnlwdCcgfCAnZGVjcnlwdCc+YCBwYXJhbWV0ZXIgdHlwZSBtYXRjaGVzXG4gICAgLy8gYSBzdHJpY3Qgc3Vic2V0IG9mIGBLZXlVc2FnZVtdYCwgc28gdGhpcyBjYXN0IGlzIHNvdW5kLlxuICAgIHVzYWdlcyBhcyAoJ2VuY3J5cHQnIHwgJ2RlY3J5cHQnKVtdXG4gICk7XG59XG5cbi8qKlxuICogRW5jcnlwdCBkYXRhIHVzaW5nIEFFUy0yNTYtR0NNLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBDcnlwdG9LZXkgZnJvbSBgaW1wb3J0S2V5KClgXG4gKiBAcGFyYW0gZGF0YSAtIFBsYWludGV4dCB0byBlbmNyeXB0XG4gKiBAcmV0dXJucyBgW25vbmNlICgxMiBieXRlcyldW2NpcGhlcnRleHQgKyBHQ00gYXV0aCB0YWddYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5jcnlwdChcbiAga2V5OiBDcnlwdG9LZXksXG4gIGRhdGE6IFVpbnQ4QXJyYXlcbik6IFByb21pc2U8VWludDhBcnJheT4ge1xuICBjb25zdCBub25jZSA9IGdsb2JhbFRoaXMuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheShOT05DRV9MRU5HVEgpKTtcbiAgbGV0IGNpcGhlcnRleHQ6IEFycmF5QnVmZmVyO1xuICB0cnkge1xuICAgIGNpcGhlcnRleHQgPSBhd2FpdCBnbG9iYWxUaGlzLmNyeXB0by5zdWJ0bGUuZW5jcnlwdChcbiAgICAgIHsgbmFtZTogJ0FFUy1HQ00nLCBpdjogbm9uY2UsIHRhZ0xlbmd0aDogVEFHX0xFTkdUSCB9LFxuICAgICAga2V5LFxuICAgICAgZGF0YVxuICAgICk7XG4gIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgLy8gUmUtd3JhcCBhbnkgV2ViIENyeXB0byBmYWlsdXJlIChET01FeGNlcHRpb24gZXRjLikgYXMgYVxuICAgIC8vIFJ1bnRpbWVEZWNyeXB0aW9uRXJyb3IuIEZhaWx1cmVzIGhlcmUgYXJlIHJhcmUg4oCUIHRoZXkgaGFwcGVuIGUuZy5cbiAgICAvLyB3aGVuIGEgQ3J5cHRvS2V5IHdhcyBpbXBvcnRlZCB3aXRoIGB1c2FnZXM6IFsnZGVjcnlwdCddYCBvbmx5LlxuICAgIHRocm93IG5ldyBSdW50aW1lRGVjcnlwdGlvbkVycm9yKFxuICAgICAgYEFFUy0yNTYtR0NNIGVuY3J5cHRpb24gZmFpbGVkOiAke2NhdXNlIGluc3RhbmNlb2YgRXJyb3IgPyBjYXVzZS5tZXNzYWdlIDogU3RyaW5nKGNhdXNlKX1gLFxuICAgICAge1xuICAgICAgICBjYXVzZSxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIG9wZXJhdGlvbjogJ2VuY3J5cHQnLFxuICAgICAgICAgIGJ5dGVMZW5ndGg6IGRhdGEuYnl0ZUxlbmd0aCxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KE5PTkNFX0xFTkdUSCArIGNpcGhlcnRleHQuYnl0ZUxlbmd0aCk7XG4gIHJlc3VsdC5zZXQobm9uY2UsIDApO1xuICByZXN1bHQuc2V0KG5ldyBVaW50OEFycmF5KGNpcGhlcnRleHQpLCBOT05DRV9MRU5HVEgpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERlY3J5cHQgZGF0YSB1c2luZyBBRVMtMjU2LUdDTS5cbiAqXG4gKiBBbnkgZmFpbHVyZSBpbnNpZGUgdGhlIFdlYiBDcnlwdG8gbGF5ZXIg4oCUIG1vc3QgY29tbW9ubHkgYW5cbiAqIGBPcGVyYXRpb25FcnJvcjogVGhlIG9wZXJhdGlvbiBmYWlsZWQgZm9yIGFuIG9wZXJhdGlvbi1zcGVjaWZpYyByZWFzb25gXG4gKiByYWlzZWQgYnkgYEFFU0NpcGhlckpvYi5vbkRvbmVgIHdoZW4gdGhlIEdDTSBhdXRoZW50aWNhdGlvbiB0YWcgZG9lc1xuICogbm90IHZlcmlmeSDigJQgaXMgcmV3cmFwcGVkIGFzIHtAbGluayBSdW50aW1lRGVjcnlwdGlvbkVycm9yfS4gVGhlXG4gKiB3cmFwcGVkIGVycm9yIGNhcnJpZXMgdGhlIG9yaWdpbmFsIERPTUV4Y2VwdGlvbiBhcyBgY2F1c2VgLCBwbHVzIGFcbiAqIHNtYWxsIGRpYWdub3N0aWMgY29udGV4dCAoYG9wZXJhdGlvbmAsIGlucHV0IGBieXRlTGVuZ3RoYCkgdG8gaGVscFxuICogZGlzYW1iaWd1YXRlIGNpcGhlcnRleHQgY29ycnVwdGlvbiBmcm9tIGtleSBtaXNtYXRjaCBmcm9tIHRydW5jYXRlZFxuICogdHJhbnNwb3J0IHJlYWRzLlxuICpcbiAqIE5vdGU6IGBkYXRhYCBpcyB0aGUgcmF3IEFFUyBwYXlsb2FkIChgW25vbmNlXVtjaXBoZXJ0ZXh0ICsgdGFnXWApLCBub3QgYVxuICogZm9ybWF0LXByZWZpeGVkIGVudmVsb3BlIOKAlCBjYWxsZXJzIHN0cmlwIHRoZSBgZW5jcmAgbWFya2VyIHZpYVxuICogYGRlY29kZUZvcm1hdFByZWZpeCgpYCBiZWZvcmUgcmVhY2hpbmcgdGhpcyBmdW5jdGlvbi4gVGhlIG91dGVyXG4gKiBlbnZlbG9wZSdzIGZvcm1hdCBwcmVmaXggaXMgdGhlcmVmb3JlIGF0dGFjaGVkIGJ5IHRoZSBzZXJpYWxpemF0aW9uXG4gKiBsYXllciAoYHNlcmlhbGl6YXRpb24vZW5jcnlwdGlvbi50c2ApLCB3aGljaCBpcyB0aGUgbGF5ZXIgdGhhdCBoYXMgaXQuXG4gKlxuICogQHBhcmFtIGtleSAtIENyeXB0b0tleSBmcm9tIGBpbXBvcnRLZXkoKWBcbiAqIEBwYXJhbSBkYXRhIC0gYFtub25jZSAoMTIgYnl0ZXMpXVtjaXBoZXJ0ZXh0ICsgR0NNIGF1dGggdGFnXWBcbiAqIEByZXR1cm5zIERlY3J5cHRlZCBwbGFpbnRleHRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlY3J5cHQoXG4gIGtleTogQ3J5cHRvS2V5LFxuICBkYXRhOiBVaW50OEFycmF5XG4pOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgY29uc3QgbWluTGVuZ3RoID0gTk9OQ0VfTEVOR1RIICsgVEFHX0xFTkdUSCAvIDg7IC8vIG5vbmNlICsgYXV0aCB0YWdcbiAgaWYgKGRhdGEuYnl0ZUxlbmd0aCA8IG1pbkxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRGVjcnlwdGlvbkVycm9yKFxuICAgICAgYEVuY3J5cHRlZCBkYXRhIHRvbyBzaG9ydDogZXhwZWN0ZWQgYXQgbGVhc3QgJHttaW5MZW5ndGh9IGJ5dGVzLCBnb3QgJHtkYXRhLmJ5dGVMZW5ndGh9YCxcbiAgICAgIHtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIG9wZXJhdGlvbjogJ2RlY3J5cHQnLFxuICAgICAgICAgIGJ5dGVMZW5ndGg6IGRhdGEuYnl0ZUxlbmd0aCxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIGNvbnN0IG5vbmNlID0gZGF0YS5zdWJhcnJheSgwLCBOT05DRV9MRU5HVEgpO1xuICBjb25zdCBjaXBoZXJ0ZXh0ID0gZGF0YS5zdWJhcnJheShOT05DRV9MRU5HVEgpO1xuICBsZXQgcGxhaW50ZXh0OiBBcnJheUJ1ZmZlcjtcbiAgdHJ5IHtcbiAgICBwbGFpbnRleHQgPSBhd2FpdCBnbG9iYWxUaGlzLmNyeXB0by5zdWJ0bGUuZGVjcnlwdChcbiAgICAgIHsgbmFtZTogJ0FFUy1HQ00nLCBpdjogbm9uY2UsIHRhZ0xlbmd0aDogVEFHX0xFTkdUSCB9LFxuICAgICAga2V5LFxuICAgICAgY2lwaGVydGV4dFxuICAgICk7XG4gIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgLy8gVGhlIG1vc3QgY29tbW9uIHNoYXBlIHdlIHNlZSBpbiB0aGUgd2lsZCBpcyBhIERPTUV4Y2VwdGlvbiB3aXRoXG4gICAgLy8gYG5hbWU6ICdPcGVyYXRpb25FcnJvcidgIGFuZCBtZXNzYWdlIFwiVGhlIG9wZXJhdGlvbiBmYWlsZWQgZm9yXG4gICAgLy8gYW4gb3BlcmF0aW9uLXNwZWNpZmljIHJlYXNvblwiIOKAlCB0aGlzIGlzIHdoYXQgV2ViIENyeXB0byB0aHJvd3NcbiAgICAvLyB3aGVuIHRoZSBHQ00gYXV0aCB0YWcgZG9lcyBub3QgdmVyaWZ5LiBSZS10aHJvdyBhc1xuICAgIC8vIFJ1bnRpbWVEZWNyeXB0aW9uRXJyb3IsIGF0dGFjaGluZyBkaWFnbm9zdGljIGNvbnRleHQgKGJ5dGUgbGVuZ3RoKVxuICAgIC8vIHRoYXQgdGhlIGJhcmUgRE9NRXhjZXB0aW9uIGxhY2tzLlxuICAgIGNvbnN0IGNhdXNlTXNnID0gY2F1c2UgaW5zdGFuY2VvZiBFcnJvciA/IGNhdXNlLm1lc3NhZ2UgOiBTdHJpbmcoY2F1c2UpO1xuICAgIHRocm93IG5ldyBSdW50aW1lRGVjcnlwdGlvbkVycm9yKFxuICAgICAgYEFFUy0yNTYtR0NNIGRlY3J5cHRpb24gZmFpbGVkOiAke2NhdXNlTXNnfWAsXG4gICAgICB7XG4gICAgICAgIGNhdXNlLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgb3BlcmF0aW9uOiAnZGVjcnlwdCcsXG4gICAgICAgICAgYnl0ZUxlbmd0aDogZGF0YS5ieXRlTGVuZ3RoLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHBsYWludGV4dCk7XG59XG4iXX0=
@@ -1,4 +1,11 @@
1
1
  import type { Event } from '@workflow/world';
2
+ /**
3
+ * Delay before firing the deferred unconsumed-event check after the promise
4
+ * queue has drained. Must be long enough for cross-VM microtask chains to
5
+ * propagate (resolve in host → workflow code in VM → subscribe call back
6
+ * in host). Any subscribe() arriving during this window cancels the check.
7
+ */
8
+ export declare const DEFERRED_CHECK_DELAY_MS = 100;
2
9
  export declare enum EventConsumerResult {
3
10
  /**
4
11
  * Callback consumed the event, but should not be removed from the callbacks list
@@ -1 +1 @@
1
- {"version":3,"file":"events-consumer.d.ts","sourceRoot":"","sources":["../src/events-consumer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C,oBAAY,mBAAmB;IAC7B;;OAEG;IACH,QAAQ,IAAA;IACR;;OAEG;IACH,WAAW,IAAA;IACX;;OAEG;IACH,QAAQ,IAAA;CACT;AAED,KAAK,qBAAqB,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,mBAAmB,CAAC;AAE1E,MAAM,WAAW,qBAAqB;IACpC;;;;;;OAMG;IACH,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1C;;;;;OAKG;IACH,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED,qBAAa,cAAc;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,CAAM;IAC9B,QAAQ,CAAC,SAAS,EAAE,qBAAqB,EAAE,CAAM;IACjD,OAAO,CAAC,iBAAiB,CAAyB;IAClD,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,sBAAsB,CAA8B;IAC5D,OAAO,CAAC,wBAAwB,CAA8C;IAC9E,OAAO,CAAC,sBAAsB,CAAK;gBAEvB,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,qBAAqB;IAO3D;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,EAAE,qBAAqB;IAgBnC,OAAO,CAAC,OAAO,CAsDb;CACH"}
1
+ {"version":3,"file":"events-consumer.d.ts","sourceRoot":"","sources":["../src/events-consumer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,oBAAY,mBAAmB;IAC7B;;OAEG;IACH,QAAQ,IAAA;IACR;;OAEG;IACH,WAAW,IAAA;IACX;;OAEG;IACH,QAAQ,IAAA;CACT;AAED,KAAK,qBAAqB,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,mBAAmB,CAAC;AAE1E,MAAM,WAAW,qBAAqB;IACpC;;;;;;OAMG;IACH,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1C;;;;;OAKG;IACH,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED,qBAAa,cAAc;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,CAAM;IAC9B,QAAQ,CAAC,SAAS,EAAE,qBAAqB,EAAE,CAAM;IACjD,OAAO,CAAC,iBAAiB,CAAyB;IAClD,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,sBAAsB,CAA8B;IAC5D,OAAO,CAAC,wBAAwB,CAA8C;IAC9E,OAAO,CAAC,sBAAsB,CAAK;gBAEvB,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,qBAAqB;IAO3D;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,EAAE,qBAAqB;IAgBnC,OAAO,CAAC,OAAO,CA+Db;CACH"}
@@ -1,4 +1,11 @@
1
1
  import { eventsLogger } from './logger.js';
2
+ /**
3
+ * Delay before firing the deferred unconsumed-event check after the promise
4
+ * queue has drained. Must be long enough for cross-VM microtask chains to
5
+ * propagate (resolve in host → workflow code in VM → subscribe call back
6
+ * in host). Any subscribe() arriving during this window cancels the check.
7
+ */
8
+ export const DEFERRED_CHECK_DELAY_MS = 100;
2
9
  export var EventConsumerResult;
3
10
  (function (EventConsumerResult) {
4
11
  /**
@@ -85,7 +92,15 @@ export class EventsConsumer {
85
92
  // is still unconsumed after the queue drains, it's truly orphaned.
86
93
  if (currentEvent !== null) {
87
94
  const checkVersion = ++this.unconsumedCheckVersion;
88
- this.pendingUnconsumedCheck = this.getPromiseQueue().then(() => {
95
+ this.pendingUnconsumedCheck = this.getPromiseQueue()
96
+ .then(
97
+ // Yield once after the first queue drain so promise chains resumed by
98
+ // that drain can run across the VM boundary and append any follow-up
99
+ // async work (for example: step_completed resolves -> for-await loop
100
+ // resumes -> the next hook payload starts hydrating).
101
+ () => new Promise((resolve) => setTimeout(resolve, 0)))
102
+ .then(() => this.getPromiseQueue())
103
+ .then(() => {
89
104
  // Use a delayed setTimeout after the queue drains. The delay must be
90
105
  // long enough for promise chains to propagate across the VM boundary
91
106
  // (from resolve() in the host context through to the workflow code
@@ -100,9 +115,9 @@ export class EventsConsumer {
100
115
  this.pendingUnconsumedCheck = null;
101
116
  this.onUnconsumedEvent(currentEvent);
102
117
  }
103
- }, 100);
118
+ }, DEFERRED_CHECK_DELAY_MS);
104
119
  });
105
120
  }
106
121
  };
107
122
  }
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLWNvbnN1bWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2V2ZW50cy1jb25zdW1lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNDLE1BQU0sQ0FBTixJQUFZLG1CQWFYO0FBYkQsV0FBWSxtQkFBbUI7SUFDN0I7O09BRUc7SUFDSCxxRUFBUSxDQUFBO0lBQ1I7O09BRUc7SUFDSCwyRUFBVyxDQUFBO0lBQ1g7O09BRUc7SUFDSCxxRUFBUSxDQUFBO0FBQ1YsQ0FBQyxFQWJXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFhOUI7QUFzQkQsTUFBTSxPQUFPLGNBQWM7SUFDekIsVUFBVSxDQUFTO0lBQ1YsTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUNyQixTQUFTLEdBQTRCLEVBQUUsQ0FBQztJQUN6QyxpQkFBaUIsQ0FBeUI7SUFDMUMsZUFBZSxDQUFzQjtJQUNyQyxzQkFBc0IsR0FBeUIsSUFBSSxDQUFDO0lBQ3BELHdCQUF3QixHQUF5QyxJQUFJLENBQUM7SUFDdEUsc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO0lBRW5DLFlBQVksTUFBZSxFQUFFLE9BQThCO1FBQ3pELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO0lBQ2pELENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILFNBQVMsQ0FBQyxFQUF5QjtRQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixrRkFBa0Y7UUFDbEYsOEVBQThFO1FBQzlFLDREQUE0RDtRQUM1RCxJQUFJLElBQUksQ0FBQyxzQkFBc0Is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
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLWNvbnN1bWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2V2ZW50cy1jb25zdW1lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNDOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBRTNDLE1BQU0sQ0FBTixJQUFZLG1CQWFYO0FBYkQsV0FBWSxtQkFBbUI7SUFDN0I7O09BRUc7SUFDSCxxRUFBUSxDQUFBO0lBQ1I7O09BRUc7SUFDSCwyRUFBVyxDQUFBO0lBQ1g7O09BRUc7SUFDSCxxRUFBUSxDQUFBO0FBQ1YsQ0FBQyxFQWJXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFhOUI7QUFzQkQsTUFBTSxPQUFPLGNBQWM7SUFDekIsVUFBVSxDQUFTO0lBQ1YsTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUNyQixTQUFTLEdBQTRCLEVBQUUsQ0FBQztJQUN6QyxpQkFBaUIsQ0FBeUI7SUFDMUMsZUFBZSxDQUFzQjtJQUNyQyxzQkFBc0IsR0FBeUIsSUFBSSxDQUFDO0lBQ3BELHdCQUF3QixHQUF5QyxJQUFJLENBQUM7SUFDdEUsc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO0lBRW5DLFlBQVksTUFBZSxFQUFFLE9BQThCO1FBQ3pELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO0lBQ2pELENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILFNBQVMsQ0FBQyxFQUF5QjtRQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixrRkFB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RTtvQkFDOUMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztvQkFDckMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEtBQUssWUFBWSxFQUFFLENBQUM7d0JBQ2pELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7d0JBQ25DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDdkMsQ0FBQztnQkFDSCxDQUFDLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDSCxDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRXZlbnQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgZXZlbnRzTG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuXG4vKipcbiAqIERlbGF5IGJlZm9yZSBmaXJpbmcgdGhlIGRlZmVycmVkIHVuY29uc3VtZWQtZXZlbnQgY2hlY2sgYWZ0ZXIgdGhlIHByb21pc2VcbiAqIHF1ZXVlIGhhcyBkcmFpbmVkLiBNdXN0IGJlIGxvbmcgZW5vdWdoIGZvciBjcm9zcy1WTSBtaWNyb3Rhc2sgY2hhaW5zIHRvXG4gKiBwcm9wYWdhdGUgKHJlc29sdmUgaW4gaG9zdCDihpIgd29ya2Zsb3cgY29kZSBpbiBWTSDihpIgc3Vic2NyaWJlIGNhbGwgYmFja1xuICogaW4gaG9zdCkuIEFueSBzdWJzY3JpYmUoKSBhcnJpdmluZyBkdXJpbmcgdGhpcyB3aW5kb3cgY2FuY2VscyB0aGUgY2hlY2suXG4gKi9cbmV4cG9ydCBjb25zdCBERUZFUlJFRF9DSEVDS19ERUxBWV9NUyA9IDEwMDtcblxuZXhwb3J0IGVudW0gRXZlbnRDb25zdW1lclJlc3VsdCB7XG4gIC8qKlxuICAgKiBDYWxsYmFjayBjb25zdW1lZCB0aGUgZXZlbnQsIGJ1dCBzaG91bGQgbm90IGJlIHJlbW92ZWQgZnJvbSB0aGUgY2FsbGJhY2tzIGxpc3RcbiAgICovXG4gIENvbnN1bWVkLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZGlkIG5vdCBjb25zdW1lIHRoZSBldmVudCwgc28gaXQgc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUgbmV4dCBjYWxsYmFja1xuICAgKi9cbiAgTm90Q29uc3VtZWQsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBjb25zdW1lZCB0aGUgZXZlbnQsIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBjYWxsYmFja3MgbGlzdFxuICAgKi9cbiAgRmluaXNoZWQsXG59XG5cbnR5cGUgRXZlbnRDb25zdW1lckNhbGxiYWNrID0gKGV2ZW50OiBFdmVudCB8IG51bGwpID0+IEV2ZW50Q29uc3VtZXJSZXN1bHQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRzQ29uc3VtZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIENhbGxiYWNrIGludm9rZWQgd2hlbiBhIG5vbi1udWxsIGV2ZW50IGNhbm5vdCBiZSBjb25zdW1lZCBieSBhbnkgcmVnaXN0ZXJlZFxuICAgKiBjYWxsYmFjaywgaW5kaWNhdGluZyBhbiBvcnBoYW5lZCBvciBpbnZhbGlkIGV2ZW50IGluIHRoZSBldmVudCBsb2cuIFRoZVxuICAgKiBjaGVjayBpcyBkZWZlcnJlZCB1bnRpbCBhZnRlciB0aGUgcHJvbWlzZSBxdWV1ZSBoYXMgZHJhaW5lZCwgZW5zdXJpbmcgdGhhdFxuICAgKiBhbnkgcGVuZGluZyBhc3luYyB3b3JrIChlLmcuLCBkZXNlcmlhbGl6YXRpb24vZGVjcnlwdGlvbikgY29tcGxldGVzIGFuZFxuICAgKiBkb3duc3RyZWFtIHN1YnNjcmliZSgpIGNhbGxzIGhhdmUgYSBjaGFuY2UgdG8gY2FuY2VsIHRoZSBjaGVjayBmaXJzdC5cbiAgICovXG4gIG9uVW5jb25zdW1lZEV2ZW50OiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBwcm9taXNlIHF1ZXVlLiBUaGUgdW5jb25zdW1lZCBldmVudCBjaGVjayBpcyBjaGFpbmVkXG4gICAqIG9udG8gdGhpcyBxdWV1ZSBzbyBpdCBvbmx5IGZpcmVzIGFmdGVyIGFsbCBwZW5kaW5nIGFzeW5jIHdvcmsgKGUuZy4sXG4gICAqIGRlc2VyaWFsaXphdGlvbikgaGFzIGNvbXBsZXRlZC4gVGhpcyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgd2hlbiBhc3luY1xuICAgKiBkZXNlcmlhbGl6YXRpb24gZGVsYXlzIHRoZSByZXNvbHZlKCkgdGhhdCB0cmlnZ2VycyB0aGUgbmV4dCBzdWJzY3JpYmUoKS5cbiAgICovXG4gIGdldFByb21pc2VRdWV1ZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGNsYXNzIEV2ZW50c0NvbnN1bWVyIHtcbiAgZXZlbnRJbmRleDogbnVtYmVyO1xuICByZWFkb25seSBldmVudHM6IEV2ZW50W10gPSBbXTtcbiAgcmVhZG9ubHkgY2FsbGJhY2tzOiBFdmVudENvbnN1bWVyQ2FsbGJhY2tbXSA9IFtdO1xuICBwcml2YXRlIG9uVW5jb25zdW1lZEV2ZW50OiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuICBwcml2YXRlIGdldFByb21pc2VRdWV1ZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBwZW5kaW5nVW5jb25zdW1lZENoZWNrOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcGVuZGluZ1VuY29uc3VtZWRUaW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHVuY29uc3VtZWRDaGVja1ZlcnNpb24gPSAwO1xuXG4gIGNvbnN0cnVjdG9yKGV2ZW50czogRXZlbnRbXSwgb3B0aW9uczogRXZlbnRzQ29uc3VtZXJPcHRpb25zKSB7XG4gICAgdGhpcy5ldmVudHMgPSBldmVudHM7XG4gICAgdGhpcy5ldmVudEluZGV4ID0gMDtcbiAgICB0aGlzLm9uVW5jb25zdW1lZEV2ZW50ID0gb3B0aW9ucy5vblVuY29uc3VtZWRFdmVudDtcbiAgICB0aGlzLmdldFByb21pc2VRdWV1ZSA9IG9wdGlvbnMuZ2V0UHJvbWlzZVF1ZXVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhZnRlciBhbiBldmVudCBoYXMgYmVlbiBjb25zdW1lZFxuICAgKiBieSBhIGRpZmZlcmVudCBjYWxsYmFjay4gVGhlIGNhbGxiYWNrIGNhbiByZXR1cm46XG4gICAqICAtIGBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkYCB0aGUgZXZlbnQgaXMgY29uc2lkZXJlZCBjb25zdW1lZCBhbmQgd2lsbCBub3QgYmUgcGFzc2VkIHRvIGFueSBvdGhlciBjYWxsYmFjaywgYnV0IHRoZSBjYWxsYmFjayB3aWxsIHJlbWFpbiBpbiB0aGUgY2FsbGJhY2tzIGxpc3RcbiAgICogIC0gYEV2ZW50Q29uc3VtZXJSZXN1bHQuTm90Q29uc3VtZWRgIHRoZSBldmVudCBpcyBwYXNzZWQgdG8gdGhlIG5leHQgY2FsbGJhY2tcbiAgICogIC0gYEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWRgIHRoZSBldmVudCBpcyBjb25zaWRlcmVkIGNvbnN1bWVkIGFuZCB0aGUgY2FsbGJhY2sgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjYWxsYmFja3MgbGlzdFxuICAgKlxuICAgKiBAcGFyYW0gZm4gLSBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gICAqL1xuICBzdWJzY3JpYmUoZm46IEV2ZW50Q29uc3VtZXJDYWxsYmFjaykge1xuICAgIHRoaXMuY2FsbGJhY2tzLnB1c2goZm4pO1xuICAgIC8vIENhbmNlbCBhbnkgcGVuZGluZyB1bmNvbnN1bWVkIGNoZWNrIHNpbmNlIGEgbmV3IGNhbGxiYWNrIG1heSBjb25zdW1lIHRoZSBldmVudC5cbiAgICAvLyBJbmNyZW1lbnRpbmcgdGhlIHZlcnNpb24gY2F1c2VzIGFueSBpbi1mbGlnaHQgcHJvbWlzZSBjaGFpbiBjaGVjayB0byBuby1vcC5cbiAgICAvLyBBbHNvIGNsZWFyIHRoZSBwZW5kaW5nIHNldFRpbWVvdXQgaWYgaXQgaGFzbid0IGZpcmVkIHlldC5cbiAgICBpZiAodGhpcy5wZW5kaW5nVW5jb25zdW1lZENoZWNrICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnVuY29uc3VtZWRDaGVja1ZlcnNpb24rKztcbiAgICAgIHRoaXMucGVuZGluZ1VuY29uc3VtZWRDaGVjayA9IG51bGw7XG4gICAgICBpZiAodGhpcy5wZW5kaW5nVW5jb25zdW1lZFRpbWVvdXQgIT09IG51bGwpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucGVuZGluZ1VuY29uc3VtZWRUaW1lb3V0KTtcbiAgICAgICAgdGhpcy5wZW5kaW5nVW5jb25zdW1lZFRpbWVvdXQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzLm5leHRUaWNrKHRoaXMuY29uc3VtZSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN1bWUgPSAoKSA9PiB7XG4gICAgY29uc3QgY3VycmVudEV2ZW50ID0gdGhpcy5ldmVudHNbdGhpcy5ldmVudEluZGV4XSA/PyBudWxsO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5jYWxsYmFja3NbaV07XG4gICAgICBsZXQgaGFuZGxlZCA9IEV2ZW50Q29uc3VtZXJSZXN1bHQuTm90Q29uc3VtZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBoYW5kbGVkID0gY2FsbGJhY2soY3VycmVudEV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGV2ZW50c0xvZ2dlci5lcnJvcignRXZlbnRDb25zdW1lciBjYWxsYmFjayB0aHJldyBhbiBlcnJvcicsIHsgZXJyb3IgfSk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGhhbmRsZWQgPT09IEV2ZW50Q29uc3VtZXJSZXN1bHQuQ29uc3VtZWQgfHxcbiAgICAgICAgaGFuZGxlZCA9PT0gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZFxuICAgICAgKSB7XG4gICAgICAgIC8vIGNvbnN1bWVyIGhhbmRsZWQgdGhpcyBldmVudCwgc28gaW5jcmVhc2UgdGhlIGV2ZW50IGluZGV4XG4gICAgICAgIHRoaXMuZXZlbnRJbmRleCsrO1xuXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgY2FsbGJhY2sgaWYgaXQgaGFzIGZpbmlzaGVkXG4gICAgICAgIGlmIChoYW5kbGVkID09PSBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkKSB7XG4gICAgICAgICAgdGhpcy5jYWxsYmFja3Muc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY29udGludWUgdG8gdGhlIG5leHQgZXZlbnRcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayh0aGlzLmNvbnN1bWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgcmVhY2ggaGVyZSwgYWxsIGNhbGxiYWNrcyByZXR1cm5lZCBOb3RDb25zdW1lZC5cbiAgICAvLyBJZiB0aGUgY3VycmVudCBldmVudCBpcyBub24tbnVsbCAoYSByZWFsIGV2ZW50LCBub3QgZW5kLW9mLWV2ZW50cyksXG4gICAgLy8gc2NoZWR1bGUgYSBkZWZlcnJlZCBjaGVjay4gV2UgY2hhaW4gb250byB0aGUgcHJvbWlzZVF1ZXVlIHNvIHRoYXQgYW55XG4gICAgLy8gcGVuZGluZyBhc3luYyB3b3JrIChlLmcuLCBkZXNlcmlhbGl6YXRpb24vZGVjcnlwdGlvbiB0aGF0IHRyaWdnZXJzXG4gICAgLy8gcmVzb2x2ZSgpIOKGkiB1c2VyIGNvZGUg4oaSIHN1YnNjcmliZSgpKSBjb21wbGV0ZXMgZmlyc3QuIElmIHRoZSBldmVudFxuICAgIC8vIGlzIHN0aWxsIHVuY29uc3VtZWQgYWZ0ZXIgdGhlIHF1ZXVlIGRyYWlucywgaXQncyB0cnVseSBvcnBoYW5lZC5cbiAgICBpZiAoY3VycmVudEV2ZW50ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjaGVja1ZlcnNpb24gPSArK3RoaXMudW5jb25zdW1lZENoZWNrVmVyc2lvbjtcbiAgICAgIHRoaXMucGVuZGluZ1VuY29uc3VtZWRDaGVjayA9IHRoaXMuZ2V0UHJvbWlzZVF1ZXVlKClcbiAgICAgICAgLnRoZW4oXG4gICAgICAgICAgLy8gWWllbGQgb25jZSBhZnRlciB0aGUgZmlyc3QgcXVldWUgZHJhaW4gc28gcHJvbWlzZSBjaGFpbnMgcmVzdW1lZCBieVxuICAgICAgICAgIC8vIHRoYXQgZHJhaW4gY2FuIHJ1biBhY3Jvc3MgdGhlIFZNIGJvdW5kYXJ5IGFuZCBhcHBlbmQgYW55IGZvbGxvdy11cFxuICAgICAgICAgIC8vIGFzeW5jIHdvcmsgKGZvciBleGFtcGxlOiBzdGVwX2NvbXBsZXRlZCByZXNvbHZlcyAtPiBmb3ItYXdhaXQgbG9vcFxuICAgICAgICAgIC8vIHJlc3VtZXMgLT4gdGhlIG5leHQgaG9vayBwYXlsb2FkIHN0YXJ0cyBoeWRyYXRpbmcpLlxuICAgICAgICAgICgpID0+IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDApKVxuICAgICAgICApXG4gICAgICAgIC50aGVuKCgpID0+IHRoaXMuZ2V0UHJvbWlzZVF1ZXVlKCkpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAvLyBVc2UgYSBkZWxheWVkIHNldFRpbWVvdXQgYWZ0ZXIgdGhlIHF1ZXVlIGRyYWlucy4gVGhlIGRlbGF5IG11c3QgYmVcbiAgICAgICAgICAvLyBsb25nIGVub3VnaCBmb3IgcHJvbWlzZSBjaGFpbnMgdG8gcHJvcGFnYXRlIGFjcm9zcyB0aGUgVk0gYm91bmRhcnlcbiAgICAgICAgICAvLyAoZnJvbSByZXNvbHZlKCkgaW4gdGhlIGhvc3QgY29udGV4dCB0aHJvdWdoIHRvIHRoZSB3b3JrZmxvdyBjb2RlXG4gICAgICAgICAgLy8gY2FsbGluZyBzdWJzY3JpYmUoKSBpbiB0aGUgVk0gY29udGV4dCkuIE5vZGUuanMgZG9lcyBub3QgZ3VhcmFudGVlXG4gICAgICAgICAgLy8gdGhhdCBzZXRUaW1lb3V0KDApIGZpcmVzIGFmdGVyIGFsbCBjcm9zcy1jb250ZXh0IG1pY3JvdGFza3Mgc2V0dGxlLFxuICAgICAgICAgIC8vIHNvIHdlIHVzZSBhIHNtYWxsIGJ1dCBub24temVybyBkZWxheS4gQW55IHN1YnNjcmliZSgpIGNhbGwgdGhhdFxuICAgICAgICAgIC8vIGFycml2ZXMgZHVyaW5nIHRoaXMgd2luZG93IHdpbGwgY2FuY2VsIHRoZSBjaGVjayB2aWEgdmVyc2lvblxuICAgICAgICAgIC8vIGludmFsaWRhdGlvbiArIGNsZWFyVGltZW91dC5cbiAgICAgICAgICB0aGlzLnBlbmRpbmdVbmNvbnN1bWVkVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nVW5jb25zdW1lZFRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMudW5jb25zdW1lZENoZWNrVmVyc2lvbiA9PT0gY2hlY2tWZXJzaW9uKSB7XG4gICAgICAgICAgICAgIHRoaXMucGVuZGluZ1VuY29uc3VtZWRDaGVjayA9IG51bGw7XG4gICAgICAgICAgICAgIHRoaXMub25VbmNvbnN1bWVkRXZlbnQoY3VycmVudEV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBERUZFUlJFRF9DSEVDS19ERUxBWV9NUyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
@@ -7,17 +7,17 @@ import { type PromiseWithResolvers } from '@workflow/utils';
7
7
  * to acquire a reader/writer. For that reason we use polling instead of a
8
8
  * fully event-driven approach here.
9
9
  *
10
- * 100ms is a compromise between:
11
- * - Latency: how quickly we notice that the user has released their lock, and
12
- * - Cost/CPU usage: how often timers fire, especially with many concurrent
13
- * streams or in serverless environments where billed time matters.
14
- *
15
- * This value should only be changed with care, as decreasing it will
16
- * increase polling frequency (and thus potential cost), while increasing it
17
- * will add worst-case delay before the `done` promise resolves after a lock
18
- * is released.
10
+ * 10ms is chosen so the polling tick almost never sits on the critical path:
11
+ * the V2 step-executor's `opsSettled` race waits for this state to resolve
12
+ * after each step body returns, so a coarser interval (the previous 100ms)
13
+ * adds visible per-step latency to streaming workflows. With a uniformly
14
+ * distributed offset between step return and the next tick, the expected
15
+ * wait is half the interval so 10ms means ~5ms average wait per step
16
+ * instead of ~50ms. The per-tick work is `writable.locked` plus a
17
+ * `getWriter()`/`releaseLock()` probe, both microsecond-scale; 10× more
18
+ * ticks during a stream's lifetime is not measurable in practice.
19
19
  */
20
- export declare const LOCK_POLL_INTERVAL_MS = 100;
20
+ export declare const LOCK_POLL_INTERVAL_MS = 10;
21
21
  /**
22
22
  * State tracker for flushable stream operations.
23
23
  * Resolves when either:
@@ -1 +1 @@
1
- {"version":3,"file":"flushable-stream.d.ts","sourceRoot":"","sources":["../src/flushable-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,oBAAoB,EAAiB,MAAM,iBAAiB,CAAC;AAE3E;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB,CAAC,IAAI,CAAC;IACtE,mEAAmE;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,YAAY,EAAE,OAAO,CAAC;IACtB,gEAAgE;IAChE,WAAW,EAAE,OAAO,CAAC;IACrB,wDAAwD;IACxD,uBAAuB,CAAC,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IACzD,wDAAwD;IACxD,uBAAuB,CAAC,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;CAC1D;AAED,wBAAgB,oBAAoB,IAAI,oBAAoB,CAO3D;AA2DD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,oBAAoB,GAC1B,IAAI,CAwBN;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,oBAAoB,GAC1B,IAAI,CAwBN;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAoEf"}
1
+ {"version":3,"file":"flushable-stream.d.ts","sourceRoot":"","sources":["../src/flushable-stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,oBAAoB,EAAiB,MAAM,iBAAiB,CAAC;AAE3E;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB,CAAC,IAAI,CAAC;IACtE,mEAAmE;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,YAAY,EAAE,OAAO,CAAC;IACtB,gEAAgE;IAChE,WAAW,EAAE,OAAO,CAAC;IACrB,wDAAwD;IACxD,uBAAuB,CAAC,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IACzD,wDAAwD;IACxD,uBAAuB,CAAC,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;CAC1D;AAED,wBAAgB,oBAAoB,IAAI,oBAAoB,CAa3D;AA2DD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,oBAAoB,GAC1B,IAAI,CAwBN;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,oBAAoB,GAC1B,IAAI,CAwBN;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAoEf"}
@@ -1,3 +1,4 @@
1
+ import { WorkflowRuntimeError } from '@workflow/errors';
1
2
  import { withResolvers } from '@workflow/utils';
2
3
  /**
3
4
  * Polling interval (in ms) for lock release detection.
@@ -7,24 +8,28 @@ import { withResolvers } from '@workflow/utils';
7
8
  * to acquire a reader/writer. For that reason we use polling instead of a
8
9
  * fully event-driven approach here.
9
10
  *
10
- * 100ms is a compromise between:
11
- * - Latency: how quickly we notice that the user has released their lock, and
12
- * - Cost/CPU usage: how often timers fire, especially with many concurrent
13
- * streams or in serverless environments where billed time matters.
14
- *
15
- * This value should only be changed with care, as decreasing it will
16
- * increase polling frequency (and thus potential cost), while increasing it
17
- * will add worst-case delay before the `done` promise resolves after a lock
18
- * is released.
11
+ * 10ms is chosen so the polling tick almost never sits on the critical path:
12
+ * the V2 step-executor's `opsSettled` race waits for this state to resolve
13
+ * after each step body returns, so a coarser interval (the previous 100ms)
14
+ * adds visible per-step latency to streaming workflows. With a uniformly
15
+ * distributed offset between step return and the next tick, the expected
16
+ * wait is half the interval so 10ms means ~5ms average wait per step
17
+ * instead of ~50ms. The per-tick work is `writable.locked` plus a
18
+ * `getWriter()`/`releaseLock()` probe, both microsecond-scale; 10× more
19
+ * ticks during a stream's lifetime is not measurable in practice.
19
20
  */
20
- export const LOCK_POLL_INTERVAL_MS = 100;
21
+ export const LOCK_POLL_INTERVAL_MS = 10;
21
22
  export function createFlushableState() {
22
- return {
23
+ const state = {
23
24
  ...withResolvers(),
24
25
  pendingOps: 0,
25
26
  doneResolved: false,
26
27
  streamEnded: false,
27
28
  };
29
+ // The runtime awaits this promise after user code returns. Observe early
30
+ // stream failures now so they do not become unhandled rejections first.
31
+ state.promise.catch(() => { });
32
+ return state;
28
33
  }
29
34
  /**
30
35
  * Checks if a WritableStream is unlocked (user released lock) vs closed.
@@ -171,7 +176,7 @@ export async function flushablePipe(source, sink, state) {
171
176
  const readResult = await Promise.race([
172
177
  reader.read(),
173
178
  writer.closed.then(() => {
174
- throw new Error('Writable stream closed prematurely');
179
+ throw new WorkflowRuntimeError('Writable stream closed prematurely');
175
180
  }),
176
181
  ]);
177
182
  // Check if stream has ended (e.g., due to error in another path) before processing
@@ -223,4 +228,4 @@ export async function flushablePipe(source, sink, state) {
223
228
  writer.releaseLock();
224
229
  }
225
230
  }
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx1c2hhYmxlLXN0cmVhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mbHVzaGFibGUtc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBNkIsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0U7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBNkJ6QyxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU87UUFDTCxHQUFHLGFBQWEsRUFBUTtRQUN4QixVQUFVLEVBQUUsQ0FBQztRQUNiLFlBQVksRUFBRSxLQUFLO1FBQ25CLFdBQVcsRUFBRSxLQUFLO0tBQ25CLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLDJCQUEyQixDQUFDLFFBQXdCO0lBQzNELElBQUksUUFBUSxDQUFDLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUVsQyxJQUFJLE1BQStDLENBQUM7SUFDcEQsSUFBSSxDQUFDO1FBQ0gseUVBQXlFO1FBQ3pFLE1BQU0sR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLHNFQUFzRTtRQUN0RSxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLG1FQUFtRTtRQUNuRSxxRUFBcUU7UUFDckUsZ0VBQWdFO1FBQ2hFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUywyQkFBMkIsQ0FBQyxRQUF3QjtJQUMzRCxJQUFJLFFBQVEsQ0FBQyxNQUFNO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFbEMsSUFBSSxNQUErQyxDQUFDO0lB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
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx1c2hhYmxlLXN0cmVhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mbHVzaGFibGUtc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sRUFBNkIsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0U7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBNkJ4QyxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE1BQU0sS0FBSyxHQUF5QjtRQUNsQyxHQUFHLGFBQWEsRUFBUTtRQUN4QixVQUFVLEVBQUUsQ0FBQztRQUNiLFlBQVksRUFBRSxLQUFLO1FBQ25CLFdBQVcsRUFBRSxLQUFLO0tBQ25CLENBQUM7SUFFRix5RUFBeUU7SUFDekUsd0VBQXdFO0lBQ3hFLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTlCLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUywyQkFBMkIsQ0FBQyxRQUF3QjtJQUMzRCxJQUFJLFFBQVEsQ0FBQyxNQUFNO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFbEMsSUFBSSxNQUErQyxDQUFDO0lBQ3BELElBQUksQ0FBQztRQUNILHlFQUF5RTtRQUN6RSxNQUFNLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxzRUFBc0U7UUFDdEUsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxtRUFBbUU7UUFDbkUscUVBQXFFO1FBQ3JFLGdFQUFnRTtR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QyxVQUFVLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxDQUFDO29CQUFTLENBQUM7Z0JBQ1QsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN6QixZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEIsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDMUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQixDQUFDO1FBQ0QsK0RBQStEO1FBQy9ELDRFQUE0RTtRQUM1RSx1RUFBdUU7UUFDdkUsd0VBQXdFO1FBQ3hFLDZDQUE2QztRQUM3QyxNQUFNLEdBQUcsQ0FBQztJQUNaLENBQUM7WUFBUyxDQUFDO1FBQ1QsMEVBQTBFO1FBQzFFLDRFQUE0RTtRQUM1RSw4RUFBOEU7UUFDOUUsdURBQXVEO1FBQ3ZELE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXb3JrZmxvd1J1bnRpbWVFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgdHlwZSBQcm9taXNlV2l0aFJlc29sdmVycywgd2l0aFJlc29sdmVycyB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5cbi8qKlxuICogUG9sbGluZyBpbnRlcnZhbCAoaW4gbXMpIGZvciBsb2NrIHJlbGVhc2UgZGV0ZWN0aW9uLlxuICpcbiAqIFRoZSBXZWIgU3RyZWFtcyBBUEkgZG9lcyBub3QgZXhwb3NlIGFuIGV2ZW50IGZvciBcImxvY2sgcmVsZWFzZWQgYnV0IHN0cmVhbVxuICogc3RpbGwgb3BlblwiOyB3ZSBjYW4gb25seSBkaXN0aW5ndWlzaCB0aGF0IHN0YXRlIGJ5IHBlcmlvZGljYWxseSBhdHRlbXB0aW5nXG4gKiB0byBhY3F1aXJlIGEgcmVhZGVyL3dyaXRlci4gRm9yIHRoYXQgcmVhc29uIHdlIHVzZSBwb2xsaW5nIGluc3RlYWQgb2YgYVxuICogZnVsbHkgZXZlbnQtZHJpdmVuIGFwcHJvYWNoIGhlcmUuXG4gKlxuICogMTBtcyBpcyBjaG9zZW4gc28gdGhlIHBvbGxpbmcgdGljayBhbG1vc3QgbmV2ZXIgc2l0cyBvbiB0aGUgY3JpdGljYWwgcGF0aDpcbiAqIHRoZSBWMiBzdGVwLWV4ZWN1dG9yJ3MgYG9wc1NldHRsZWRgIHJhY2Ugd2FpdHMgZm9yIHRoaXMgc3RhdGUgdG8gcmVzb2x2ZVxuICogYWZ0ZXIgZWFjaCBzdGVwIGJvZHkgcmV0dXJucywgc28gYSBjb2Fyc2VyIGludGVydmFsICh0aGUgcHJldmlvdXMgMTAwbXMpXG4gKiBhZGRzIHZpc2libGUgcGVyLXN0ZXAgbGF0ZW5jeSB0byBzdHJlYW1pbmcgd29ya2Zsb3dzLiBXaXRoIGEgdW5pZm9ybWx5XG4gKiBkaXN0cmlidXRlZCBvZmZzZXQgYmV0d2VlbiBzdGVwIHJldHVybiBhbmQgdGhlIG5leHQgdGljaywgdGhlIGV4cGVjdGVkXG4gKiB3YWl0IGlzIGhhbGYgdGhlIGludGVydmFsIOKAlCBzbyAxMG1zIG1lYW5zIH41bXMgYXZlcmFnZSB3YWl0IHBlciBzdGVwXG4gKiBpbnN0ZWFkIG9mIH41MG1zLiBUaGUgcGVyLXRpY2sgd29yayBpcyBgd3JpdGFibGUubG9ja2VkYCBwbHVzIGFcbiAqIGBnZXRXcml0ZXIoKWAvYHJlbGVhc2VMb2NrKClgIHByb2JlLCBib3RoIG1pY3Jvc2Vjb25kLXNjYWxlOyAxMMOXIG1vcmVcbiAqIHRpY2tzIGR1cmluZyBhIHN0cmVhbSdzIGxpZmV0aW1lIGlzIG5vdCBtZWFzdXJhYmxlIGluIHByYWN0aWNlLlxuICovXG5leHBvcnQgY29uc3QgTE9DS19QT0xMX0lOVEVSVkFMX01TID0gMTA7XG5cbi8qKlxuICogU3RhdGUgdHJhY2tlciBmb3IgZmx1c2hhYmxlIHN0cmVhbSBvcGVyYXRpb25zLlxuICogUmVzb2x2ZXMgd2hlbiBlaXRoZXI6XG4gKiAxLiBTdHJlYW0gY29tcGxldGVzIChjbG9zZS9lcnJvciksIE9SXG4gKiAyLiBMb2NrIGlzIHJlbGVhc2VkIEFORCBhbGwgcGVuZGluZyBvcGVyYXRpb25zIGFyZSBmbHVzaGVkXG4gKlxuICogTm90ZTogYGRvbmVSZXNvbHZlZGAgYW5kIGBzdHJlYW1FbmRlZGAgYXJlIHNlcGFyYXRlOlxuICogLSBgZG9uZVJlc29sdmVkYDogVGhlIGBkb25lYCBwcm9taXNlIGhhcyBiZWVuIHJlc29sdmVkIChzdGVwIGNhbiBjb21wbGV0ZSlcbiAqIC0gYHN0cmVhbUVuZGVkYDogVGhlIHVuZGVybHlpbmcgc3RyZWFtIGhhcyBhY3R1YWxseSBjbG9zZWQvZXJyb3JlZFxuICpcbiAqIE9uY2UgYGRvbmVSZXNvbHZlZGAgaXMgc2V0IHRvIHRydWUsIHRoZSBgZG9uZWAgcHJvbWlzZSB3aWxsIG5vdCByZXNvbHZlXG4gKiBhZ2Fpbi4gUmUtYWNxdWlyaW5nIGxvY2tzIGFmdGVyIHJlbGVhc2UgaXMgbm90IHN1cHBvcnRlZCBhcyBhIHdheSB0b1xuICogdHJpZ2dlciBhZGRpdGlvbmFsIGNvbXBsZXRpb24gc2lnbmFsaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsdXNoYWJsZVN0cmVhbVN0YXRlIGV4dGVuZHMgUHJvbWlzZVdpdGhSZXNvbHZlcnM8dm9pZD4ge1xuICAvKiogTnVtYmVyIG9mIHdyaXRlIG9wZXJhdGlvbnMgY3VycmVudGx5IGluIGZsaWdodCB0byB0aGUgc2VydmVyICovXG4gIHBlbmRpbmdPcHM6IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgdGhlIGBkb25lYCBwcm9taXNlIGhhcyBiZWVuIHJlc29sdmVkICovXG4gIGRvbmVSZXNvbHZlZDogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIHVuZGVybHlpbmcgc3RyZWFtIGhhcyBhY3R1YWxseSBjbG9zZWQvZXJyb3JlZCAqL1xuICBzdHJlYW1FbmRlZDogYm9vbGVhbjtcbiAgLyoqIEludGVydmFsIElEIGZvciB3cml0YWJsZSBsb2NrIHBvbGxpbmcgKGlmIGFjdGl2ZSkgKi9cbiAgd3JpdGFibGVQb2xsaW5nSW50ZXJ2YWw/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD47XG4gIC8qKiBJbnRlcnZhbCBJRCBmb3IgcmVhZGFibGUgbG9jayBwb2xsaW5nIChpZiBhY3RpdmUpICovXG4gIHJlYWRhYmxlUG9sbGluZ0ludGVydmFsPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmx1c2hhYmxlU3RhdGUoKTogRmx1c2hhYmxlU3RyZWFtU3RhdGUge1xuICBjb25zdCBzdGF0ZTogRmx1c2hhYmxlU3RyZWFtU3RhdGUgPSB7XG4gICAgLi4ud2l0aFJlc29sdmVyczx2b2lkPigpLFxuICAgIHBlbmRpbmdPcHM6IDAsXG4gICAgZG9uZVJlc29sdmVkOiBmYWxzZSxcbiAgICBzdHJlYW1FbmRlZDogZmFsc2UsXG4gIH07XG5cbiAgLy8gVGhlIHJ1bnRpbWUgYXdhaXRzIHRoaXMgcHJvbWlzZSBhZnRlciB1c2VyIGNvZGUgcmV0dXJucy4gT2JzZXJ2ZSBlYXJseVxuICAvLyBzdHJlYW0gZmFpbHVyZXMgbm93IHNvIHRoZXkgZG8gbm90IGJlY29tZSB1bmhhbmRsZWQgcmVqZWN0aW9ucyBmaXJzdC5cbiAgc3RhdGUucHJvbWlzZS5jYXRjaCgoKSA9PiB7fSk7XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIFdyaXRhYmxlU3RyZWFtIGlzIHVubG9ja2VkICh1c2VyIHJlbGVhc2VkIGxvY2spIHZzIGNsb3NlZC5cbiAqIFdoZW4gYSBzdHJlYW0gaXMgY2xvc2VkLCAubG9ja2VkIGlzIGZhbHNlIGJ1dCBnZXRXcml0ZXIoKSB0aHJvd3MuXG4gKiBXZSBvbmx5IHdhbnQgdG8gcmVzb2x2ZSB2aWEgcG9sbGluZyB3aGVuIHRoZSBzdHJlYW0gaXMgdW5sb2NrZWQsIG5vdCBjbG9zZWQuXG4gKiBJZiBjbG9zZWQsIHRoZSBwdW1wIHdpbGwgaGFuZGxlIHJlc29sdXRpb24gdmlhIHRoZSBzdHJlYW0gZW5kaW5nIG5hdHVyYWxseS5cbiAqL1xuZnVuY3Rpb24gaXNXcml0YWJsZVVubG9ja2VkTm90Q2xvc2VkKHdyaXRhYmxlOiBXcml0YWJsZVN0cmVhbSk6IGJvb2xlYW4ge1xuICBpZiAod3JpdGFibGUubG9ja2VkKSByZXR1cm4gZmFsc2U7XG5cbiAgbGV0IHdyaXRlcjogV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyIHwgdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIC8vIFRyeSB0byBhY3F1aXJlIHdyaXRlciAtIGlmIHN1Y2Nlc3NmdWwsIHN0cmVhbSBpcyB1bmxvY2tlZCAobm90IGNsb3NlZClcbiAgICB3cml0ZXIgPSB3cml0YWJsZS5nZXRXcml0ZXIoKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gZ2V0V3JpdGVyKCkgdGhyb3dzIGlmIHN0cmVhbSBpcyBjbG9zZWQvZXJyb3JlZCAtIGxldCBwdW1wIGhhbmRsZSBpdFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgd3JpdGVyLnJlbGVhc2VMb2NrKCk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIElmIHJlbGVhc2VMb2NrKCkgdGhyb3dzIGZvciBhbnkgcmVhc29uLCBjb25zZXJ2YXRpdmVseSB0cmVhdCB0aGVcbiAgICAvLyBzdHJlYW0gYXMgY2xvc2VkL2Vycm9yZWQgc28gY2FsbGVycyBkb24ndCBhc3N1bWUgaXQncyBzYWZlIHRvIHVzZS5cbiAgICAvLyBUaGUgcHVtcCB3aWxsIG9ic2VydmUgdGhlIGZhaWx1cmUgdmlhIHRoZSBzdHJlYW0ncyBlbmQgc3RhdGUuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgUmVhZGFibGVTdHJlYW0gaXMgdW5sb2NrZWQgKHVzZXIgcmVsZWFzZWQgbG9jaykgdnMgY2xvc2VkLlxuICovXG5mdW5jdGlvbiBpc1JlYWRhYmxlVW5sb2NrZWROb3RDbG9zZWQocmVhZGFibGU6IFJlYWRhYmxlU3RyZWFtKTogYm9vbGVhbiB7XG4gIGlmIChyZWFkYWJsZS5sb2NrZWQpIHJldHVybiBmYWxzZTtcblxuICBsZXQgcmVhZGVyOiBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIgfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgLy8gVHJ5IHRvIGFjcXVpcmUgcmVhZGVyIC0gaWYgc3VjY2Vzc2Z1bCwgc3RyZWFtIGlzIHVubG9ja2VkIChub3QgY2xvc2VkKVxuICAgIHJlYWRlciA9IHJlYWRhYmxlLmdldFJlYWRlcigpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBnZXRSZWFkZXIoKSB0aHJvd3MgaWYgc3RyZWFtIGlzIGNsb3NlZC9lcnJvcmVkIC0gbGV0IHB1bXAgaGFuZGxlIGl0XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWYgcmVsZWFzZUxvY2soKSB0aHJvd3MgZm9yIGFueSByZWFzb24sIGNvbnNlcnZhdGl2ZWx5IHRyZWF0IHRoZVxuICAgIC8vIHN0cmVhbSBhcyBjbG9zZWQvZXJyb3JlZCBzbyBjYWxsZXJzIGRvbid0IGFzc3VtZSBpdCdzIHNhZmUgdG8gdXNlLlxuICAgIC8vIFRoZSBwdW1wIHdpbGwgb2JzZXJ2ZSB0aGUgZmFpbHVyZSB2aWEgdGhlIHN0cmVhbSdzIGVuZCBzdGF0ZS5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBQb2xscyBhIFdyaXRhYmxlU3RyZWFtIHRvIGNoZWNrIGlmIHRoZSB1c2VyIGhhcyByZWxlYXNlZCB0aGVpciBsb2NrLlxuICogUmVzb2x2ZXMgdGhlIGRvbmUgcHJvbWlzZSB3aGVuIGxvY2sgaXMgcmVsZWFzZWQgYW5kIG5vIHBlbmRpbmcgb3BzIHJlbWFpbi5cbiAqXG4gKiBOb3RlOiBPbmx5IHJlc29sdmVzIGlmIHN0cmVhbSBpcyB1bmxvY2tlZCBidXQgTk9UIGNsb3NlZC4gSWYgdGhlIHVzZXIgY2xvc2VzXG4gKiB0aGUgc3RyZWFtLCB0aGUgcHVtcCB3aWxsIGhhbmRsZSByZXNvbHV0aW9uIHZpYSB0aGUgc3RyZWFtIGVuZGluZyBuYXR1cmFsbHkuXG4gKlxuICogUHJvdGVjdGlvbjogSWYgcG9sbGluZyBpcyBhbHJlYWR5IGFjdGl2ZSBvbiB0aGlzIHN0YXRlLCB0aGUgZXhpc3RpbmcgaW50ZXJ2YWxcbiAqIGlzIHVzZWQgdG8gYXZvaWQgY3JlYXRpbmcgbXVsdGlwbGUgc2ltdWx0YW5lb3VzIHBvbGxpbmcgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvbGxXcml0YWJsZUxvY2soXG4gIHdyaXRhYmxlOiBXcml0YWJsZVN0cmVhbSxcbiAgc3RhdGU6IEZsdXNoYWJsZVN0cmVhbVN0YXRlXG4pOiB2b2lkIHtcbiAgLy8gUHJldmVudCBtdWx0aXBsZSBzaW11bHRhbmVvdXMgcG9sbGluZyBvbiB0aGUgc2FtZSBzdGF0ZVxuICBpZiAoc3RhdGUud3JpdGFibGVQb2xsaW5nSW50ZXJ2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgLy8gU3RvcCBwb2xsaW5nIGlmIGFscmVhZHkgcmVzb2x2ZWQgb3Igc3RyZWFtIGVuZGVkXG4gICAgaWYgKHN0YXRlLmRvbmVSZXNvbHZlZCB8fCBzdGF0ZS5zdHJlYW1FbmRlZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgIHN0YXRlLndyaXRhYmxlUG9sbGluZ0ludGVydmFsID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGxvY2sgaXMgcmVsZWFzZWQgKG5vdCBjbG9zZWQpIGFuZCBubyBwZW5kaW5nIG9wc1xuICAgIGlmIChpc1dyaXRhYmxlVW5sb2NrZWROb3RDbG9zZWQod3JpdGFibGUpICYmIHN0YXRlLnBlbmRpbmdPcHMgPT09IDApIHtcbiAgICAgIHN0YXRlLmRvbmVSZXNvbHZlZCA9IHRydWU7XG4gICAgICBzdGF0ZS5yZXNvbHZlKCk7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgc3RhdGUud3JpdGFibGVQb2xsaW5nSW50ZXJ2YWwgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9LCBMT0NLX1BPTExfSU5URVJWQUxfTVMpO1xuXG4gIHN0YXRlLndyaXRhYmxlUG9sbGluZ0ludGVydmFsID0gaW50ZXJ2YWxJZDtcbn1cblxuLyoqXG4gKiBQb2xscyBhIFJlYWRhYmxlU3RyZWFtIHRvIGNoZWNrIGlmIHRoZSB1c2VyIGhhcyByZWxlYXNlZCB0aGVpciBsb2NrLlxuICogUmVzb2x2ZXMgdGhlIGRvbmUgcHJvbWlzZSB3aGVuIGxvY2sgaXMgcmVsZWFzZWQgYW5kIG5vIHBlbmRpbmcgb3BzIHJlbWFpbi5cbiAqXG4gKiBOb3RlOiBPbmx5IHJlc29sdmVzIGlmIHN0cmVhbSBpcyB1bmxvY2tlZCBidXQgTk9UIGNsb3NlZC4gSWYgdGhlIHVzZXIgY2xvc2VzXG4gKiB0aGUgc3RyZWFtLCB0aGUgcHVtcCB3aWxsIGhhbmRsZSByZXNvbHV0aW9uIHZpYSB0aGUgc3RyZWFtIGVuZGluZyBuYXR1cmFsbHkuXG4gKlxuICogUHJvdGVjdGlvbjogSWYgcG9sbGluZyBpcyBhbHJlYWR5IGFjdGl2ZSBvbiB0aGlzIHN0YXRlLCB0aGUgZXhpc3RpbmcgaW50ZXJ2YWxcbiAqIGlzIHVzZWQgdG8gYXZvaWQgY3JlYXRpbmcgbXVsdGlwbGUgc2ltdWx0YW5lb3VzIHBvbGxpbmcgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvbGxSZWFkYWJsZUxvY2soXG4gIHJlYWRhYmxlOiBSZWFkYWJsZVN0cmVhbSxcbiAgc3RhdGU6IEZsdXNoYWJsZVN0cmVhbVN0YXRlXG4pOiB2b2lkIHtcbiAgLy8gUHJldmVudCBtdWx0aXBsZSBzaW11bHRhbmVvdXMgcG9sbGluZyBvbiB0aGUgc2FtZSBzdGF0ZVxuICBpZiAoc3RhdGUucmVhZGFibGVQb2xsaW5nSW50ZXJ2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgLy8gU3RvcCBwb2xsaW5nIGlmIGFscmVhZHkgcmVzb2x2ZWQgb3Igc3RyZWFtIGVuZGVkXG4gICAgaWYgKHN0YXRlLmRvbmVSZXNvbHZlZCB8fCBzdGF0ZS5zdHJlYW1FbmRlZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgIHN0YXRlLnJlYWRhYmxlUG9sbGluZ0ludGVydmFsID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGxvY2sgaXMgcmVsZWFzZWQgKG5vdCBjbG9zZWQpIGFuZCBubyBwZW5kaW5nIG9wc1xuICAgIGlmIChpc1JlYWRhYmxlVW5sb2NrZWROb3RDbG9zZWQocmVhZGFibGUpICYmIHN0YXRlLnBlbmRpbmdPcHMgPT09IDApIHtcbiAgICAgIHN0YXRlLmRvbmVSZXNvbHZlZCA9IHRydWU7XG4gICAgICBzdGF0ZS5yZXNvbHZlKCk7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgc3RhdGUucmVhZGFibGVQb2xsaW5nSW50ZXJ2YWwgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9LCBMT0NLX1BPTExfSU5URVJWQUxfTVMpO1xuXG4gIHN0YXRlLnJlYWRhYmxlUG9sbGluZ0ludGVydmFsID0gaW50ZXJ2YWxJZDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZmx1c2hhYmxlIHBpcGUgZnJvbSBhIFJlYWRhYmxlU3RyZWFtIHRvIGEgV3JpdGFibGVTdHJlYW0uXG4gKiBVbmxpa2UgcGlwZVRvKCksIHRoaXMgcmVzb2x2ZXMgd2hlbjpcbiAqIDEuIFRoZSBzb3VyY2Ugc3RyZWFtIGNvbXBsZXRlcyAoY2xvc2UvZXJyb3IpLCBPUlxuICogMi4gVGhlIHVzZXIgcmVsZWFzZXMgdGhlaXIgbG9jayBvbiB1c2VyU3RyZWFtIEFORCBhbGwgcGVuZGluZyB3cml0ZXMgYXJlIGZsdXNoZWRcbiAqXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIHJlYWRhYmxlIHN0cmVhbSB0byByZWFkIGZyb20gKGUuZy4sIHRyYW5zZm9ybSdzIHJlYWRhYmxlKVxuICogQHBhcmFtIHNpbmsgLSBUaGUgd3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHRvIChlLmcuLCBzZXJ2ZXIgd3JpdGFibGUpXG4gKiBAcGFyYW0gc3RhdGUgLSBUaGUgZmx1c2hhYmxlIHN0YXRlIHRyYWNrZXJcbiAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHN0cmVhbSBlbmRzIChub3Qgd2hlbiBkb25lIHByb21pc2UgcmVzb2x2ZXMpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmbHVzaGFibGVQaXBlKFxuICBzb3VyY2U6IFJlYWRhYmxlU3RyZWFtLFxuICBzaW5rOiBXcml0YWJsZVN0cmVhbSxcbiAgc3RhdGU6IEZsdXNoYWJsZVN0cmVhbVN0YXRlXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmVhZGVyID0gc291cmNlLmdldFJlYWRlcigpO1xuICBjb25zdCB3cml0ZXIgPSBzaW5rLmdldFdyaXRlcigpO1xuICBsZXQgY2FuY2VsUmVhc29uOiB1bmtub3duO1xuXG4gIHRyeSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIC8vIENoZWNrIGlmIHN0cmVhbSBoYXMgZW5kZWRcbiAgICAgIGlmIChzdGF0ZS5zdHJlYW1FbmRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFJlYWQgZnJvbSBzb3VyY2UgLSBkb24ndCBjb3VudCBhcyBwZW5kaW5nIG9wIHNpbmNlIHdlJ3JlIGp1c3Qgd2FpdGluZyBmb3IgZGF0YVxuICAgICAgLy8gVGhlIGltcG9ydGFudCBvcHMgYXJlIHdyaXRlcyB0byB0aGUgc2luayAoc2VydmVyKVxuICAgICAgY29uc3QgcmVhZFJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIHJlYWRlci5yZWFkKCksXG4gICAgICAgIHdyaXRlci5jbG9zZWQudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVudGltZUVycm9yKCdXcml0YWJsZSBzdHJlYW0gY2xvc2VkIHByZW1hdHVyZWx5Jyk7XG4gICAgICAgIH0pLFxuICAgICAgXSk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHN0cmVhbSBoYXMgZW5kZWQgKGUuZy4sIGR1ZSB0byBlcnJvciBpbiBhbm90aGVyIHBhdGgpIGJlZm9yZSBwcm9jZXNzaW5nXG4gICAgICBpZiAoc3RhdGUuc3RyZWFtRW5kZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVhZFJlc3VsdC5kb25lKSB7XG4gICAgICAgIC8vIFNvdXJjZSBzdHJlYW0gY29tcGxldGVkIC0gY2xvc2Ugc2luayBhbmQgcmVzb2x2ZVxuICAgICAgICBzdGF0ZS5zdHJlYW1FbmRlZCA9IHRydWU7XG4gICAgICAgIGF3YWl0IHdyaXRlci5jbG9zZSgpO1xuICAgICAgICAvLyBSZXNvbHZlIGRvbmUgcHJvbWlzZSBpZiBub3QgYWxyZWFkeSByZXNvbHZlZFxuICAgICAgICBpZiAoIXN0YXRlLmRvbmVSZXNvbHZlZCkge1xuICAgICAgICAgIHN0YXRlLmRvbmVSZXNvbHZlZCA9IHRydWU7XG4gICAgICAgICAgc3RhdGUucmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQ291bnQgd3JpdGUgYXMgYSBwZW5kaW5nIG9wIC0gdGhpcyBpcyB3aGF0IHdlIG5lZWQgdG8gZmx1c2hcbiAgICAgIHN0YXRlLnBlbmRpbmdPcHMrKztcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdyaXRlci53cml0ZShyZWFkUmVzdWx0LnZhbHVlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHN0YXRlLnBlbmRpbmdPcHMtLTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHN0YXRlLnN0cmVhbUVuZGVkID0gdHJ1ZTtcbiAgICBjYW5jZWxSZWFzb24gPSBlcnI7XG4gICAgaWYgKCFzdGF0ZS5kb25lUmVzb2x2ZWQpIHtcbiAgICAgIHN0YXRlLmRvbmVSZXNvbHZlZCA9IHRydWU7XG4gICAgICBzdGF0ZS5yZWplY3QoZXJyKTtcbiAgICB9XG4gICAgLy8gUHJvcGFnYXRlIGVycm9yIHRocm91Z2ggZmx1c2hhYmxlUGlwZSdzIG93biBwcm9taXNlIGFzIHdlbGwuXG4gICAgLy8gQ2FsbGVycyB0aGF0IHJlbHkgb24gdGhlIEZsdXNoYWJsZVN0cmVhbVN0YXRlIHNob3VsZCB1c2UgYHN0YXRlLnByb21pc2VgLFxuICAgIC8vIHdoaWxlIG90aGVyIGNhbGxlcnMgbWF5IGRlcGVuZCBvbiB0aGlzIHJlamVjdGlvbi4gU29tZSBrbm93biBjYWxsZXJzXG4gICAgLy8gZXhwbGljaXRseSBpZ25vcmUgdGhpcyByZWplY3Rpb24gKGAuY2F0Y2goKCkgPT4ge30pYCkgYW5kIHJlbHkgc29sZWx5XG4gICAgLy8gb24gYHN0YXRlLnJlamVjdChlcnIpYCBmb3IgZXJyb3IgaGFuZGxpbmcuXG4gICAgdGhyb3cgZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIENhbmNlbCB0aGUgdXBzdHJlYW0gcmVhZGVyIHNvIHRoZSBzb3VyY2Uga25vd3MgdG8gc3RvcCBnZW5lcmF0aW5nIGRhdGEuXG4gICAgLy8gVXNlcyBjYW5jZWxSZWFzb24gKHNldCBpbiB0aGUgY2F0Y2ggYmxvY2spIHNvIHRoZSBzb3VyY2UgcmVjZWl2ZXMgY29udGV4dFxuICAgIC8vIGFib3V0IHdoeSBpdCB3YXMgY2FuY2VsbGVkLiBPbiBub3JtYWwgY29tcGxldGlvbiBjYW5jZWxSZWFzb24gaXMgdW5kZWZpbmVkLFxuICAgIC8vIHdoaWNoIGlzIGEgaGFybWxlc3Mgbm8tb3Agb24gYW4gYWxyZWFkeS1kb25lIHJlYWRlci5cbiAgICByZWFkZXIuY2FuY2VsKGNhbmNlbFJlYXNvbikuY2F0Y2goKCkgPT4ge30pO1xuICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgIHdyaXRlci5yZWxlYXNlTG9jaygpO1xuICB9XG59XG4iXX0=
package/dist/global.d.ts CHANGED
@@ -16,6 +16,9 @@ export interface HookInvocationQueueItem {
16
16
  hasCreatedEvent?: boolean;
17
17
  disposed?: boolean;
18
18
  isWebhook?: boolean;
19
+ isSystem?: boolean;
20
+ abortRequested?: boolean;
21
+ abortReason?: unknown;
19
22
  }
20
23
  export interface WaitInvocationQueueItem {
21
24
  type: 'wait';
@@ -37,6 +40,7 @@ export declare class WorkflowSuspension extends Error {
37
40
  hookCount: number;
38
41
  waitCount: number;
39
42
  hookDisposedCount: number;
43
+ abortCount: number;
40
44
  constructor(stepsInput: Map<string, QueueItem>, global: typeof globalThis);
41
45
  static is(value: unknown): value is WorkflowSuspension;
42
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../src/global.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC3C,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,IAAI,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,MAAM,SAAS,GACjB,uBAAuB,GACvB,uBAAuB,GACvB,uBAAuB,CAAC;AAE5B;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;gBAEd,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,UAAU;IAwEzE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kBAAkB;CAGvD;AAED,wBAAgB,OAAO,IAAI,KAAK,CAE/B"}
1
+ {"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../src/global.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC3C,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,IAAI,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,MAAM,SAAS,GACjB,uBAAuB,GACvB,uBAAuB,GACvB,uBAAuB,CAAC;AAE5B;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;gBAEP,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,UAAU;IA2EzE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kBAAkB;CAGvD;AAED,wBAAgB,OAAO,IAAI,KAAK,CAI/B"}
package/dist/global.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { WorkflowRuntimeError } from '@workflow/errors';
1
2
  import { pluralize } from '@workflow/utils';
2
3
  /**
3
4
  * An error that is thrown when one or more operations (steps/hooks/etc.) are called but do
@@ -12,6 +13,7 @@ export class WorkflowSuspension extends Error {
12
13
  hookCount;
13
14
  waitCount;
14
15
  hookDisposedCount;
16
+ abortCount;
15
17
  constructor(stepsInput, global) {
16
18
  // Convert Map to array for iteration and storage
17
19
  const steps = [...stepsInput.values()];
@@ -20,12 +22,15 @@ export class WorkflowSuspension extends Error {
20
22
  let hookCount = 0;
21
23
  let waitCount = 0;
22
24
  let hookDisposedCount = 0;
25
+ let abortCount = 0;
23
26
  for (const item of steps) {
24
27
  if (item.type === 'step')
25
28
  stepCount++;
26
29
  else if (item.type === 'hook') {
27
30
  if (item.disposed)
28
31
  hookDisposedCount++;
32
+ else if (item.abortRequested)
33
+ abortCount++;
29
34
  else
30
35
  hookCount++;
31
36
  }
@@ -84,12 +89,13 @@ export class WorkflowSuspension extends Error {
84
89
  this.hookCount = hookCount;
85
90
  this.waitCount = waitCount;
86
91
  this.hookDisposedCount = hookDisposedCount;
92
+ this.abortCount = abortCount;
87
93
  }
88
94
  static is(value) {
89
95
  return value instanceof WorkflowSuspension;
90
96
  }
91
97
  }
92
98
  export function ENOTSUP() {
93
- throw new Error('Not supported in workflow functions');
99
+ throw new WorkflowRuntimeError('This API is not available inside a workflow function. Workflow functions run in a deterministic VM; move the call to a step function for full Node.js access.');
94
100
  }
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dsb2JhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFtQzVDOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLEtBQUs7SUFDM0MsS0FBSyxDQUFjO0lBQ25CLFVBQVUsQ0FBb0I7SUFDOUIsU0FBUyxDQUFTO0lBQ2xCLFNBQVMsQ0FBUztJQUNsQixTQUFTLENBQVM7SUFDbEIsaUJBQWlCLENBQVM7SUFFMUIsWUFBWSxVQUFrQyxFQUFFLE1BQXlCO1FBQ3ZFLGlEQUFpRDtRQUNqRCxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFdkMsc0NBQXNDO1FBQ3RDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU07Z0JBQUUsU0FBUyxFQUFFLENBQUM7aUJBQ2pDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUTtvQkFBRSxpQkFBaUIsRUFBRSxDQUFDOztvQkFDbEMsU0FBUyxFQUFFLENBQUM7WUFDbkIsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTTtnQkFBRSxTQUFTLEVBQUUsQ0FBQztRQUMvQyxDQUFDO1FBRUQsMEJBQTBCO1FBQzFCLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixJQUFJLFNBQVMsR0FBRyxDQUFDLEVB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
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dsb2JhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFzQzVDOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLEtBQUs7SUFDM0MsS0FBSyxDQUFjO0lBQ25CLFVBQVUsQ0FBb0I7SUFDOUIsU0FBUyxDQUFTO0lBQ2xCLFNBQVMsQ0FBUztJQUNsQixTQUFTLENBQVM7SUFDbEIsaUJBQWlCLENBQVM7SUFDMUIsVUFBVSxDQUFTO0lBRW5CLFlBQVksVUFBa0MsRUFBRSxNQUF5QjtRQUN2RSxpREFBaUQ7UUFDakQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRXZDLHNDQUFzQztRQUN0QyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQztRQUMxQixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDbkIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTTtnQkFBRSxTQUFTLEVBQUUsQ0FBQztpQkFDakMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRO29CQUFFLGlCQUFpQixFQUFFLENBQUM7cUJBQ2xDLElBQUksSUFBSSxDQUFDLGNBQWM7b0JBQUUsVUFBVSxFQUFFLENBQUM7O29CQUN0QyxTQUFTLEVBQUUsQ0FBQztZQUNuQixDQUFD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LENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBQzNDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQWM7UUFDdEIsT0FBTyxLQUFLLFlBQVksa0JBQWtCLENBQUM7SUFDN0MsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLE9BQU87SUFDckIsTUFBTSxJQUFJLG9CQUFvQixDQUM1QiwrSkFBK0osQ0FDaEssQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXb3JrZmxvd1J1bnRpbWVFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgcGx1cmFsaXplIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgU2VyaWFsaXphYmxlIH0gZnJvbSAnLi9zY2hlbWFzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTdGVwSW52b2NhdGlvblF1ZXVlSXRlbSB7XG4gIHR5cGU6ICdzdGVwJztcbiAgY29ycmVsYXRpb25JZDogc3RyaW5nO1xuICBzdGVwTmFtZTogc3RyaW5nO1xuICBhcmdzOiBTZXJpYWxpemFibGVbXTtcbiAgY2xvc3VyZVZhcnM/OiBSZWNvcmQ8c3RyaW5nLCBTZXJpYWxpemFibGU+O1xuICB0aGlzVmFsPzogU2VyaWFsaXphYmxlO1xuICBoYXNDcmVhdGVkRXZlbnQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvb2tJbnZvY2F0aW9uUXVldWVJdGVtIHtcbiAgdHlwZTogJ2hvb2snO1xuICBjb3JyZWxhdGlvbklkOiBzdHJpbmc7XG4gIHRva2VuOiBzdHJpbmc7XG4gIG1ldGFkYXRhPzogU2VyaWFsaXphYmxlO1xuICBoYXNDcmVhdGVkRXZlbnQ/OiBib29sZWFuO1xuICBkaXNwb3NlZD86IGJvb2xlYW47XG4gIGlzV2ViaG9vaz86IGJvb2xlYW47XG4gIGlzU3lzdGVtPzogYm9vbGVhbjtcbiAgYWJvcnRSZXF1ZXN0ZWQ/OiBib29sZWFuO1xuICBhYm9ydFJlYXNvbj86IHVua25vd247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdEludm9jYXRpb25RdWV1ZUl0ZW0ge1xuICB0eXBlOiAnd2FpdCc7XG4gIGNvcnJlbGF0aW9uSWQ6IHN0cmluZztcbiAgcmVzdW1lQXQ6IERhdGU7XG4gIGhhc0NyZWF0ZWRFdmVudD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFF1ZXVlSXRlbSA9XG4gIHwgU3RlcEludm9jYXRpb25RdWV1ZUl0ZW1cbiAgfCBIb29rSW52b2NhdGlvblF1ZXVlSXRlbVxuICB8IFdhaXRJbnZvY2F0aW9uUXVldWVJdGVtO1xuXG4vKipcbiAqIEFuIGVycm9yIHRoYXQgaXMgdGhyb3duIHdoZW4gb25lIG9yIG1vcmUgb3BlcmF0aW9ucyAoc3RlcHMvaG9va3MvZXRjLikgYXJlIGNhbGxlZCBidXQgZG9cbiAqIG5vdCB5ZXQgaGF2ZSBjb3JyZXNwb25kaW5nIGVudHJpZXMgaW4gdGhlIGV2ZW50IGxvZy4gVGhlIHdvcmtmbG93XG4gKiBkaXNwYXRjaGVyIHdpbGwgY2F0Y2ggdGhpcyBlcnJvciBhbmQgcHVzaCB0aGUgb3BlcmF0aW9uc1xuICogb250byB0aGUgcXVldWUuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3JrZmxvd1N1c3BlbnNpb24gZXh0ZW5kcyBFcnJvciB7XG4gIHN0ZXBzOiBRdWV1ZUl0ZW1bXTtcbiAgZ2xvYmFsVGhpczogdHlwZW9mIGdsb2JhbFRoaXM7XG4gIHN0ZXBDb3VudDogbnVtYmVyO1xuICBob29rQ291bnQ6IG51bWJlcjtcbiAgd2FpdENvdW50OiBudW1iZXI7XG4gIGhvb2tEaXNwb3NlZENvdW50OiBudW1iZXI7XG4gIGFib3J0Q291bnQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihzdGVwc0lucHV0OiBNYXA8c3RyaW5nLCBRdWV1ZUl0ZW0+LCBnbG9iYWw6IHR5cGVvZiBnbG9iYWxUaGlzKSB7XG4gICAgLy8gQ29udmVydCBNYXAgdG8gYXJyYXkgZm9yIGl0ZXJhdGlvbiBhbmQgc3RvcmFnZVxuICAgIGNvbnN0IHN0ZXBzID0gWy4uLnN0ZXBzSW5wdXQudmFsdWVzKCldO1xuXG4gICAgLy8gU2luZ2xlLXBhc3MgY291bnRpbmcgZm9yIGVmZmljaWVuY3lcbiAgICBsZXQgc3RlcENvdW50ID0gMDtcbiAgICBsZXQgaG9va0NvdW50ID0gMDtcbiAgICBsZXQgd2FpdENvdW50ID0gMDtcbiAgICBsZXQgaG9va0Rpc3Bvc2VkQ291bnQgPSAwO1xuICAgIGxldCBhYm9ydENvdW50ID0gMDtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygc3RlcHMpIHtcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdzdGVwJykgc3RlcENvdW50Kys7XG4gICAgICBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdob29rJykge1xuICAgICAgICBpZiAoaXRlbS5kaXNwb3NlZCkgaG9va0Rpc3Bvc2VkQ291bnQrKztcbiAgICAgICAgZWxzZSBpZiAoaXRlbS5hYm9ydFJlcXVlc3RlZCkgYWJvcnRDb3VudCsrO1xuICAgICAgICBlbHNlIGhvb2tDb3VudCsrO1xuICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICd3YWl0Jykgd2FpdENvdW50Kys7XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgZGVzY3JpcHRpb24gcGFydHNcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoc3RlcENvdW50ID4gMCkge1xuICAgICAgcGFydHMucHVzaChgJHtzdGVwQ291bnR9ICR7cGx1cmFsaXplKCdzdGVwJywgJ3N0ZXBzJywgc3RlcENvdW50KX1gKTtcbiAgICB9XG4gICAgaWYgKGhvb2tDb3VudCA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2goYCR7aG9va0NvdW50fSAke3BsdXJhbGl6ZSgnaG9vaycsICdob29rcycsIGhvb2tDb3VudCl9YCk7XG4gICAgfVxuICAgIGlmICh3YWl0Q291bnQgPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke3dhaXRDb3VudH0gJHtwbHVyYWxpemUoJ3dhaXQnLCAnd2FpdHMnLCB3YWl0Q291bnQpfWApO1xuICAgIH1cbiAgICBpZiAoaG9va0Rpc3Bvc2VkQ291bnQgPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKFxuICAgICAgICBgJHtob29rRGlzcG9zZWRDb3VudH0gaG9vayAke3BsdXJhbGl6ZSgnZGlzcG9zYWwnLCAnZGlzcG9zYWxzJywgaG9va0Rpc3Bvc2VkQ291bnQpfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRGV0ZXJtaW5lIHZlcmIgKGhhcy9oYXZlKSBhbmQgYWN0aW9uIChydW4vY3JlYXRlZC9yZWNlaXZlZClcbiAgICBjb25zdCB0b3RhbENvdW50ID0gc3RlcENvdW50ICsgaG9va0NvdW50ICsgd2FpdENvdW50ICsgaG9va0Rpc3Bvc2VkQ291bnQ7XG4gICAgY29uc3QgaGFzT3JIYXZlID0gcGx1cmFsaXplKCdoYXMnLCAnaGF2ZScsIHRvdGFsQ291bnQpO1xuICAgIC8vIFBpY2sgYWN0aW9uIHZlcmI6IHVzZSBcInByb2Nlc3NlZFwiIHdoZW4gbWl4ZWQgdHlwZXMgYXJlIHByZXNlbnRcbiAgICBjb25zdCB0eXBlQ291bnQgPVxuICAgICAgKHN0ZXBDb3VudCA+IDAgPyAxIDogMCkgK1xuICAgICAgKGhvb2tDb3VudCA+IDAgPyAxIDogMCkgK1xuICAgICAgKHdhaXRDb3VudCA+IDAgPyAxIDogMCkgK1xuICAgICAgKGhvb2tEaXNwb3NlZENvdW50ID4gMCA/IDEgOiAwKTtcbiAgICBsZXQgYWN0aW9uOiBzdHJpbmc7XG4gICAgaWYgKHR5cGVDb3VudCA+IDEpIHtcbiAgICAgIGFjdGlvbiA9ICdwcm9jZXNzZWQnO1xuICAgIH0gZWxzZSBpZiAoc3RlcENvdW50ID4gMCkge1xuICAgICAgYWN0aW9uID0gJ3J1bic7XG4gICAgfSBlbHNlIGlmIChob29rQ291bnQgPiAwKSB7XG4gICAgICBhY3Rpb24gPSAnY3JlYXRlZCc7XG4gICAgfSBlbHNlIGlmICh3YWl0Q291bnQgPiAwKSB7XG4gICAgICBhY3Rpb24gPSAnY3JlYXRlZCc7XG4gICAgfSBlbHNlIGlmIChob29rRGlzcG9zZWRDb3VudCA+IDApIHtcbiAgICAgIGFjdGlvbiA9ICdwcm9jZXNzZWQnO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY3Rpb24gPSAncmVjZWl2ZWQnO1xuICAgIH1cblxuICAgIGNvbnN0IGRlc2NyaXB0aW9uID1cbiAgICAgIHBhcnRzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBgJHtwYXJ0cy5qb2luKCcgYW5kICcpfSAke2hhc09ySGF2ZX0gbm90IGJlZW4gJHthY3Rpb259IHlldGBcbiAgICAgICAgOiAnMCBzdGVwcyBoYXZlIG5vdCBiZWVuIHJ1biB5ZXQnOyAvLyBEZWZhdWx0IGNhc2UgZm9yIGVtcHR5IGFycmF5XG4gICAgc3VwZXIoZGVzY3JpcHRpb24pO1xuICAgIHRoaXMubmFtZSA9ICdXb3JrZmxvd1N1c3BlbnNpb24nO1xuICAgIHRoaXMuc3RlcHMgPSBzdGVwcztcbiAgICB0aGlzLmdsb2JhbFRoaXMgPSBnbG9iYWw7XG4gICAgdGhpcy5zdGVwQ291bnQgPSBzdGVwQ291bnQ7XG4gICAgdGhpcy5ob29rQ291bnQgPSBob29rQ291bnQ7XG4gICAgdGhpcy53YWl0Q291bnQgPSB3YWl0Q291bnQ7XG4gICAgdGhpcy5ob29rRGlzcG9zZWRDb3VudCA9IGhvb2tEaXNwb3NlZENvdW50O1xuICAgIHRoaXMuYWJvcnRDb3VudCA9IGFib3J0Q291bnQ7XG4gIH1cblxuICBzdGF0aWMgaXModmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBXb3JrZmxvd1N1c3BlbnNpb24ge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFdvcmtmbG93U3VzcGVuc2lvbjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRU5PVFNVUCgpOiBuZXZlciB7XG4gIHRocm93IG5ldyBXb3JrZmxvd1J1bnRpbWVFcnJvcihcbiAgICAnVGhpcyBBUEkgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgYSB3b3JrZmxvdyBmdW5jdGlvbi4gV29ya2Zsb3cgZnVuY3Rpb25zIHJ1biBpbiBhIGRldGVybWluaXN0aWMgVk07IG1vdmUgdGhlIGNhbGwgdG8gYSBzdGVwIGZ1bmN0aW9uIGZvciBmdWxsIE5vZGUuanMgYWNjZXNzLidcbiAgKTtcbn1cbiJdfQ==
package/dist/index.d.ts CHANGED
@@ -12,6 +12,7 @@
12
12
  export { FatalError, RetryableError, type RetryableErrorOptions, } from '@workflow/errors';
13
13
  export { createHook, createWebhook, type Hook, type HookOptions, type RequestWithResponse, type Webhook, type WebhookOptions, } from './create-hook.js';
14
14
  export { defineHook, type TypedHook } from './define-hook.js';
15
+ export { experimental_setAttributes } from './set-attributes.js';
15
16
  export { sleep } from './sleep.js';
16
17
  export { getStepMetadata, type StepMetadata, } from './step/get-step-metadata.js';
17
18
  export { getWorkflowMetadata, type WorkflowMetadata, } from './step/get-workflow-metadata.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,UAAU,EACV,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,aAAa,EACb,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EACL,eAAe,EACf,KAAK,YAAY,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,mBAAmB,EACnB,KAAK,gBAAgB,GACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,WAAW,EACX,KAAK,6BAA6B,GACnC,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,UAAU,EACV,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,aAAa,EACb,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EACL,eAAe,EACf,KAAK,YAAY,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,mBAAmB,EACnB,KAAK,gBAAgB,GACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,WAAW,EACX,KAAK,6BAA6B,GACnC,MAAM,2BAA2B,CAAC"}
package/dist/index.js CHANGED
@@ -12,8 +12,9 @@
12
12
  export { FatalError, RetryableError, } from '@workflow/errors';
13
13
  export { createHook, createWebhook, } from './create-hook.js';
14
14
  export { defineHook } from './define-hook.js';
15
+ export { experimental_setAttributes } from './set-attributes.js';
15
16
  export { sleep } from './sleep.js';
16
17
  export { getStepMetadata, } from './step/get-step-metadata.js';
17
18
  export { getWorkflowMetadata, } from './step/get-workflow-metadata.js';
18
19
  export { getWritable, } from './step/writable-stream.js';
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFDTCxVQUFVLEVBQ1YsY0FBYyxHQUVmLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLFVBQVUsRUFDVixhQUFhLEdBTWQsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBQzlELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUNMLGVBQWUsR0FFaEIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsbUJBQW1CLEdBRXBCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUNMLFdBQVcsR0FFWixNQUFNLDJCQUEyQixDQUFDIn0=
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFDTCxVQUFVLEVBQ1YsY0FBYyxHQUVmLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLFVBQVUsRUFDVixhQUFhLEdBTWQsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBQzlELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUNMLGVBQWUsR0FFaEIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsbUJBQW1CLEdBRXBCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUNMLFdBQVcsR0FFWixNQUFNLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBKdXN0IHRoZSBjb3JlIHV0aWxpdGllcyB0aGF0IGFyZSBtZWFudCB0byBiZSBpbXBvcnRlZCBieSB1c2VyXG4gKiBzdGVwcy93b3JrZmxvd3MuIFRoaXMgYWxsb3dzIHRoZSBidW5kbGVyIHRvIHRyZWUtc2hha2UgYW5kIGxpbWl0IHdoYXQgZ29lc1xuICogaW50byB0aGUgZmluYWwgdXNlciBidW5kbGVzLiBMb2dpYyBmb3IgcnVubmluZy9oYW5kbGluZyBzdGVwcy93b3JrZmxvd3NcbiAqIHNob3VsZCBsaXZlIGluIHJ1bnRpbWUuIEV2ZW50dWFsbHkgdGhlc2UgbWlnaHQgYmUgc2VwYXJhdGUgcGFja2FnZXNcbiAqIGB3b3JrZmxvd2AgYW5kIGB3b3JrZmxvdy9ydW50aW1lYD9cbiAqXG4gKiBFdmVyeXRoaW5nIGhlcmUgd2lsbCBnZXQgcmUtZXhwb3J0ZWQgdW5kZXIgdGhlICd3b3JrZmxvdycgdG9wIGxldmVsIHBhY2thZ2UuXG4gKiBUaGlzIHNob3VsZCBiZSBhIG1pbmltYWwgc2V0IG9mIEFQSXMgc28gKipkbyBub3QgYW55dGhpbmcgaGVyZSoqIHVubGVzcyBpdCdzXG4gKiBuZWVkZWQgZm9yIHVzZXJsYW5kIHdvcmtmbG93IGNvZGUuXG4gKi9cblxuZXhwb3J0IHtcbiAgRmF0YWxFcnJvcixcbiAgUmV0cnlhYmxlRXJyb3IsXG4gIHR5cGUgUmV0cnlhYmxlRXJyb3JPcHRpb25zLFxufSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmV4cG9ydCB7XG4gIGNyZWF0ZUhvb2ssXG4gIGNyZWF0ZVdlYmhvb2ssXG4gIHR5cGUgSG9vayxcbiAgdHlwZSBIb29rT3B0aW9ucyxcbiAgdHlwZSBSZXF1ZXN0V2l0aFJlc3BvbnNlLFxuICB0eXBlIFdlYmhvb2ssXG4gIHR5cGUgV2ViaG9va09wdGlvbnMsXG59IGZyb20gJy4vY3JlYXRlLWhvb2suanMnO1xuZXhwb3J0IHsgZGVmaW5lSG9vaywgdHlwZSBUeXBlZEhvb2sgfSBmcm9tICcuL2RlZmluZS1ob29rLmpzJztcbmV4cG9ydCB7IGV4cGVyaW1lbnRhbF9zZXRBdHRyaWJ1dGVzIH0gZnJvbSAnLi9zZXQtYXR0cmlidXRlcy5qcyc7XG5leHBvcnQgeyBzbGVlcCB9IGZyb20gJy4vc2xlZXAuanMnO1xuZXhwb3J0IHtcbiAgZ2V0U3RlcE1ldGFkYXRhLFxuICB0eXBlIFN0ZXBNZXRhZGF0YSxcbn0gZnJvbSAnLi9zdGVwL2dldC1zdGVwLW1ldGFkYXRhLmpzJztcbmV4cG9ydCB7XG4gIGdldFdvcmtmbG93TWV0YWRhdGEsXG4gIHR5cGUgV29ya2Zsb3dNZXRhZGF0YSxcbn0gZnJvbSAnLi9zdGVwL2dldC13b3JrZmxvdy1tZXRhZGF0YS5qcyc7XG5leHBvcnQge1xuICBnZXRXcml0YWJsZSxcbiAgdHlwZSBXb3JrZmxvd1dyaXRhYmxlU3RyZWFtT3B0aW9ucyxcbn0gZnJvbSAnLi9zdGVwL3dyaXRhYmxlLXN0cmVhbS5qcyc7XG4iXX0=
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Structured-log composition for `console.error` / `console.warn`. Emits
3
+ * one string in three sections so the most useful information is at the
4
+ * top, stack trace at the bottom:
5
+ *
6
+ * [workflow-sdk] <framing line>
7
+ * user error · FatalError
8
+ * run wrun_…
9
+ * step step_… · add (./workflows/x)
10
+ * hint: Move the call to a step function.
11
+ * FatalError: …
12
+ * at … (trimmed stack — internals collapsed)
13
+ *
14
+ * Without this composition, callers passing `${framing}\n${stack}` as the
15
+ * message and structured fields as the metadata object got `util.inspect`'s
16
+ * default object dump appended *after* the stack, which buries the run ID
17
+ * and attribution badge under 30+ lines of `node_modules/.pnpm/...` frames.
18
+ *
19
+ * The same metadata is also emitted as structured OTel span events from
20
+ * the logger itself, so backends that want JSON-shaped data still get it.
21
+ * web/web-shared do not consume stderr at all — they read CBOR/JSON event
22
+ * payloads from the World event log.
23
+ */
24
+ export declare function composeLogLine(prefix: string, message: string, metadata: Record<string, unknown> | undefined): string;
25
+ //# sourceMappingURL=log-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-format.d.ts","sourceRoot":"","sources":["../src/log-format.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC5C,MAAM,CAUR"}