@workflow/core 5.0.0-beta.5 → 5.0.0-beta.50

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 (310) hide show
  1. package/dist/attribute-changes.d.ts +5 -0
  2. package/dist/attribute-changes.d.ts.map +1 -0
  3. package/dist/attribute-changes.js +25 -0
  4. package/dist/capabilities.d.ts +35 -2
  5. package/dist/capabilities.d.ts.map +1 -1
  6. package/dist/capabilities.js +74 -5
  7. package/dist/capture-stack.d.ts +1 -1
  8. package/dist/capture-stack.js +2 -2
  9. package/dist/class-serialization.d.ts +32 -0
  10. package/dist/class-serialization.d.ts.map +1 -1
  11. package/dist/class-serialization.js +37 -1
  12. package/dist/classify-error.d.ts +19 -3
  13. package/dist/classify-error.d.ts.map +1 -1
  14. package/dist/classify-error.js +98 -6
  15. package/dist/context-violation-error.d.ts +5 -5
  16. package/dist/context-violation-error.d.ts.map +1 -1
  17. package/dist/context-violation-error.js +8 -6
  18. package/dist/create-hook.d.ts +72 -7
  19. package/dist/create-hook.d.ts.map +1 -1
  20. package/dist/create-hook.js +1 -1
  21. package/dist/define-hook.js +2 -2
  22. package/dist/describe-error.d.ts +7 -7
  23. package/dist/describe-error.d.ts.map +1 -1
  24. package/dist/describe-error.js +97 -12
  25. package/dist/encryption.d.ts +38 -4
  26. package/dist/encryption.d.ts.map +1 -1
  27. package/dist/encryption.js +96 -14
  28. package/dist/events-consumer.d.ts +271 -0
  29. package/dist/events-consumer.d.ts.map +1 -1
  30. package/dist/events-consumer.js +646 -42
  31. package/dist/flushable-stream.d.ts +56 -1
  32. package/dist/flushable-stream.d.ts.map +1 -1
  33. package/dist/flushable-stream.js +123 -11
  34. package/dist/global.d.ts +36 -2
  35. package/dist/global.d.ts.map +1 -1
  36. package/dist/global.js +21 -6
  37. package/dist/index.d.ts +2 -1
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +3 -2
  40. package/dist/log-format.d.ts +2 -2
  41. package/dist/log-format.js +7 -7
  42. package/dist/logger.d.ts +1 -0
  43. package/dist/logger.d.ts.map +1 -1
  44. package/dist/logger.js +10 -6
  45. package/dist/private.d.ts +226 -9
  46. package/dist/private.d.ts.map +1 -1
  47. package/dist/private.js +626 -7
  48. package/dist/replay-payload-cache.d.ts +64 -0
  49. package/dist/replay-payload-cache.d.ts.map +1 -0
  50. package/dist/replay-payload-cache.js +158 -0
  51. package/dist/runtime/compute-instance.d.ts +13 -0
  52. package/dist/runtime/compute-instance.d.ts.map +1 -0
  53. package/dist/runtime/compute-instance.js +14 -0
  54. package/dist/runtime/constants.d.ts +315 -0
  55. package/dist/runtime/constants.d.ts.map +1 -1
  56. package/dist/runtime/constants.js +502 -16
  57. package/dist/runtime/count-step-started-events.d.ts +52 -0
  58. package/dist/runtime/count-step-started-events.d.ts.map +1 -0
  59. package/dist/runtime/count-step-started-events.js +72 -0
  60. package/dist/runtime/deployment-guard.d.ts +99 -0
  61. package/dist/runtime/deployment-guard.d.ts.map +1 -0
  62. package/dist/runtime/deployment-guard.js +154 -0
  63. package/dist/runtime/get-port-lazy.d.ts +15 -0
  64. package/dist/runtime/get-port-lazy.d.ts.map +1 -1
  65. package/dist/runtime/get-port-lazy.js +75 -6
  66. package/dist/runtime/get-world-lazy.d.ts +5 -14
  67. package/dist/runtime/get-world-lazy.d.ts.map +1 -1
  68. package/dist/runtime/get-world-lazy.js +19 -29
  69. package/dist/runtime/helpers.d.ts +341 -29
  70. package/dist/runtime/helpers.d.ts.map +1 -1
  71. package/dist/runtime/helpers.js +559 -57
  72. package/dist/runtime/quickjs-assets.generated.d.ts +14 -0
  73. package/dist/runtime/quickjs-assets.generated.d.ts.map +1 -0
  74. package/dist/runtime/quickjs-assets.generated.js +30 -0
  75. package/dist/runtime/quickjs-entrypoint.d.ts +136 -0
  76. package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -0
  77. package/dist/runtime/quickjs-entrypoint.js +1686 -0
  78. package/dist/runtime/quickjs-runtime.d.ts +244 -0
  79. package/dist/runtime/quickjs-runtime.d.ts.map +1 -0
  80. package/dist/runtime/quickjs-runtime.js +2427 -0
  81. package/dist/runtime/quickjs-serde.d.ts +107 -0
  82. package/dist/runtime/quickjs-serde.d.ts.map +1 -0
  83. package/dist/runtime/quickjs-serde.js +2159 -0
  84. package/dist/runtime/replay-budget.d.ts +97 -0
  85. package/dist/runtime/replay-budget.d.ts.map +1 -0
  86. package/dist/runtime/replay-budget.js +139 -0
  87. package/dist/runtime/replay-recovery-reporter.d.ts +36 -0
  88. package/dist/runtime/replay-recovery-reporter.d.ts.map +1 -0
  89. package/dist/runtime/replay-recovery-reporter.js +64 -0
  90. package/dist/runtime/resume-hook.d.ts +91 -8
  91. package/dist/runtime/resume-hook.d.ts.map +1 -1
  92. package/dist/runtime/resume-hook.js +512 -89
  93. package/dist/runtime/resume-latency.d.ts +150 -0
  94. package/dist/runtime/resume-latency.d.ts.map +1 -0
  95. package/dist/runtime/resume-latency.js +155 -0
  96. package/dist/runtime/run-id-time.d.ts +19 -0
  97. package/dist/runtime/run-id-time.d.ts.map +1 -0
  98. package/dist/runtime/run-id-time.js +42 -0
  99. package/dist/runtime/run.d.ts +72 -7
  100. package/dist/runtime/run.d.ts.map +1 -1
  101. package/dist/runtime/run.js +280 -53
  102. package/dist/runtime/runs.d.ts +54 -3
  103. package/dist/runtime/runs.d.ts.map +1 -1
  104. package/dist/runtime/runs.js +126 -16
  105. package/dist/runtime/start.d.ts +101 -2
  106. package/dist/runtime/start.d.ts.map +1 -1
  107. package/dist/runtime/start.js +352 -61
  108. package/dist/runtime/step-executor.d.ts +205 -5
  109. package/dist/runtime/step-executor.d.ts.map +1 -1
  110. package/dist/runtime/step-executor.js +760 -127
  111. package/dist/runtime/step-latency.d.ts +220 -0
  112. package/dist/runtime/step-latency.d.ts.map +1 -0
  113. package/dist/runtime/step-latency.js +215 -0
  114. package/dist/runtime/step-ownership.d.ts +72 -0
  115. package/dist/runtime/step-ownership.d.ts.map +1 -0
  116. package/dist/runtime/step-ownership.js +114 -0
  117. package/dist/runtime/step-single-flight.d.ts +12 -0
  118. package/dist/runtime/step-single-flight.d.ts.map +1 -0
  119. package/dist/runtime/step-single-flight.js +75 -0
  120. package/dist/runtime/suspension-handler.d.ts +269 -7
  121. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  122. package/dist/runtime/suspension-handler.js +1253 -125
  123. package/dist/runtime/unserializable-step.d.ts +34 -0
  124. package/dist/runtime/unserializable-step.d.ts.map +1 -0
  125. package/dist/runtime/unserializable-step.js +52 -0
  126. package/dist/runtime/vm-mode.d.ts +44 -0
  127. package/dist/runtime/vm-mode.d.ts.map +1 -0
  128. package/dist/runtime/vm-mode.js +62 -0
  129. package/dist/runtime/vm-serde-bundle.generated.d.ts +14 -0
  130. package/dist/runtime/vm-serde-bundle.generated.d.ts.map +1 -0
  131. package/dist/runtime/vm-serde-bundle.generated.js +16 -0
  132. package/dist/runtime/wait-continuation.d.ts +106 -0
  133. package/dist/runtime/wait-continuation.d.ts.map +1 -0
  134. package/dist/runtime/wait-continuation.js +136 -0
  135. package/dist/runtime/wait-until.d.ts +18 -0
  136. package/dist/runtime/wait-until.d.ts.map +1 -0
  137. package/dist/runtime/wait-until.js +42 -0
  138. package/dist/runtime/world-compatibility.d.ts +32 -0
  139. package/dist/runtime/world-compatibility.d.ts.map +1 -0
  140. package/dist/runtime/world-compatibility.js +44 -0
  141. package/dist/runtime/world-init.d.ts +17 -42
  142. package/dist/runtime/world-init.d.ts.map +1 -1
  143. package/dist/runtime/world-init.js +18 -43
  144. package/dist/runtime/world.d.ts +14 -2
  145. package/dist/runtime/world.d.ts.map +1 -1
  146. package/dist/runtime/world.js +75 -19
  147. package/dist/runtime.d.ts +10 -6
  148. package/dist/runtime.d.ts.map +1 -1
  149. package/dist/runtime.js +3741 -490
  150. package/dist/sealed-box.d.ts +167 -0
  151. package/dist/sealed-box.d.ts.map +1 -0
  152. package/dist/sealed-box.js +571 -0
  153. package/dist/serialization/client.d.ts +3 -3
  154. package/dist/serialization/client.d.ts.map +1 -1
  155. package/dist/serialization/client.js +8 -4
  156. package/dist/serialization/codec-devalue-vm.d.ts +16 -0
  157. package/dist/serialization/codec-devalue-vm.d.ts.map +1 -0
  158. package/dist/serialization/codec-devalue-vm.js +148 -0
  159. package/dist/serialization/codec-devalue.d.ts +1 -1
  160. package/dist/serialization/codec-devalue.d.ts.map +1 -1
  161. package/dist/serialization/codec-devalue.js +24 -6
  162. package/dist/serialization/codec.d.ts +37 -2
  163. package/dist/serialization/codec.d.ts.map +1 -1
  164. package/dist/serialization/codec.js +2 -2
  165. package/dist/serialization/compression.d.ts +105 -0
  166. package/dist/serialization/compression.d.ts.map +1 -0
  167. package/dist/serialization/compression.js +261 -0
  168. package/dist/serialization/encryption.d.ts +119 -17
  169. package/dist/serialization/encryption.d.ts.map +1 -1
  170. package/dist/serialization/encryption.js +152 -17
  171. package/dist/serialization/errors.d.ts +13 -0
  172. package/dist/serialization/errors.d.ts.map +1 -1
  173. package/dist/serialization/errors.js +20 -2
  174. package/dist/serialization/format.d.ts +6 -6
  175. package/dist/serialization/format.js +7 -7
  176. package/dist/serialization/hardened.d.ts +156 -0
  177. package/dist/serialization/hardened.d.ts.map +1 -0
  178. package/dist/serialization/hardened.js +538 -0
  179. package/dist/serialization/index.d.ts +10 -8
  180. package/dist/serialization/index.d.ts.map +1 -1
  181. package/dist/serialization/index.js +10 -8
  182. package/dist/serialization/reducers/class-vm.d.ts +20 -0
  183. package/dist/serialization/reducers/class-vm.d.ts.map +1 -0
  184. package/dist/serialization/reducers/class-vm.js +77 -0
  185. package/dist/serialization/reducers/class.d.ts.map +1 -1
  186. package/dist/serialization/reducers/class.js +11 -6
  187. package/dist/serialization/reducers/common-vm.d.ts +15 -0
  188. package/dist/serialization/reducers/common-vm.d.ts.map +1 -0
  189. package/dist/serialization/reducers/common-vm.js +616 -0
  190. package/dist/serialization/reducers/common.d.ts +1 -1
  191. package/dist/serialization/reducers/common.d.ts.map +1 -1
  192. package/dist/serialization/reducers/common.js +202 -62
  193. package/dist/serialization/reducers/step-function-vm.d.ts +44 -0
  194. package/dist/serialization/reducers/step-function-vm.d.ts.map +1 -0
  195. package/dist/serialization/reducers/step-function-vm.js +97 -0
  196. package/dist/serialization/reducers/step-function.d.ts.map +1 -1
  197. package/dist/serialization/reducers/step-function.js +25 -9
  198. package/dist/serialization/step.d.ts +4 -4
  199. package/dist/serialization/step.d.ts.map +1 -1
  200. package/dist/serialization/step.js +9 -5
  201. package/dist/serialization/types.d.ts +80 -1
  202. package/dist/serialization/types.d.ts.map +1 -1
  203. package/dist/serialization/types.js +15 -1
  204. package/dist/serialization/workflow-vm.d.ts +29 -0
  205. package/dist/serialization/workflow-vm.d.ts.map +1 -0
  206. package/dist/serialization/workflow-vm.js +74 -0
  207. package/dist/serialization-format.d.ts +64 -8
  208. package/dist/serialization-format.d.ts.map +1 -1
  209. package/dist/serialization-format.js +225 -73
  210. package/dist/serialization.d.ts +262 -34
  211. package/dist/serialization.d.ts.map +1 -1
  212. package/dist/serialization.js +1879 -274
  213. package/dist/set-attributes.d.ts +13 -0
  214. package/dist/set-attributes.d.ts.map +1 -0
  215. package/dist/set-attributes.js +60 -0
  216. package/dist/source-map.d.ts +25 -0
  217. package/dist/source-map.d.ts.map +1 -1
  218. package/dist/source-map.js +154 -10
  219. package/dist/step/context-storage.d.ts +61 -2
  220. package/dist/step/context-storage.d.ts.map +1 -1
  221. package/dist/step/context-storage.js +7 -5
  222. package/dist/step/writable-stream.d.ts +3 -3
  223. package/dist/step/writable-stream.d.ts.map +1 -1
  224. package/dist/step/writable-stream.js +72 -9
  225. package/dist/step.d.ts.map +1 -1
  226. package/dist/step.js +148 -27
  227. package/dist/symbols.d.ts +50 -0
  228. package/dist/symbols.d.ts.map +1 -1
  229. package/dist/symbols.js +51 -1
  230. package/dist/telemetry/semantic-conventions.d.ts +397 -2
  231. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  232. package/dist/telemetry/semantic-conventions.js +297 -3
  233. package/dist/telemetry.d.ts +91 -0
  234. package/dist/telemetry.d.ts.map +1 -1
  235. package/dist/telemetry.js +244 -17
  236. package/dist/test-support/orchestrator-context.d.ts +25 -0
  237. package/dist/test-support/orchestrator-context.d.ts.map +1 -0
  238. package/dist/test-support/orchestrator-context.js +101 -0
  239. package/dist/types.d.ts +6 -0
  240. package/dist/types.d.ts.map +1 -1
  241. package/dist/types.js +23 -1
  242. package/dist/util.d.ts +0 -5
  243. package/dist/util.d.ts.map +1 -1
  244. package/dist/util.js +1 -15
  245. package/dist/version.d.ts +1 -1
  246. package/dist/version.d.ts.map +1 -1
  247. package/dist/version.js +2 -2
  248. package/dist/vm/index.d.ts.map +1 -1
  249. package/dist/vm/index.js +84 -14
  250. package/dist/vm/script-cache.d.ts +26 -0
  251. package/dist/vm/script-cache.d.ts.map +1 -0
  252. package/dist/vm/script-cache.js +131 -0
  253. package/dist/vm/uint8array-base64.js +1 -1
  254. package/dist/workflow/abort-controller.d.ts +2 -2
  255. package/dist/workflow/abort-controller.d.ts.map +1 -1
  256. package/dist/workflow/abort-controller.js +88 -21
  257. package/dist/workflow/attribute-dispatcher.d.ts +6 -0
  258. package/dist/workflow/attribute-dispatcher.d.ts.map +1 -0
  259. package/dist/workflow/attribute-dispatcher.js +45 -0
  260. package/dist/workflow/create-hook.d.ts.map +1 -1
  261. package/dist/workflow/create-hook.js +24 -3
  262. package/dist/workflow/get-workflow-metadata.js +2 -2
  263. package/dist/workflow/hook.d.ts.map +1 -1
  264. package/dist/workflow/hook.js +304 -47
  265. package/dist/workflow/index.d.ts +1 -0
  266. package/dist/workflow/index.d.ts.map +1 -1
  267. package/dist/workflow/index.js +2 -1
  268. package/dist/workflow/set-attributes.d.ts +68 -0
  269. package/dist/workflow/set-attributes.d.ts.map +1 -0
  270. package/dist/workflow/set-attributes.js +60 -0
  271. package/dist/workflow/sleep.d.ts.map +1 -1
  272. package/dist/workflow/sleep.js +58 -12
  273. package/dist/workflow/world-init-stub.d.ts +3 -3
  274. package/dist/workflow/world-init-stub.js +4 -4
  275. package/dist/workflow.d.ts +95 -3
  276. package/dist/workflow.d.ts.map +1 -1
  277. package/dist/workflow.js +895 -561
  278. package/docs/api-reference/create-hook.mdx +89 -10
  279. package/docs/api-reference/create-webhook.mdx +16 -15
  280. package/docs/api-reference/define-hook.mdx +35 -33
  281. package/docs/api-reference/fatal-error.mdx +30 -8
  282. package/docs/api-reference/fetch.mdx +14 -10
  283. package/docs/api-reference/get-step-metadata.mdx +2 -2
  284. package/docs/api-reference/get-workflow-metadata.mdx +3 -3
  285. package/docs/api-reference/get-writable.mdx +7 -7
  286. package/docs/api-reference/index.mdx +4 -1
  287. package/docs/api-reference/retryable-error.mdx +1 -1
  288. package/docs/api-reference/set-attributes.mdx +61 -0
  289. package/docs/api-reference/sleep.mdx +4 -4
  290. package/docs/foundations/cancellation.mdx +31 -32
  291. package/docs/foundations/errors-and-retries.mdx +42 -11
  292. package/docs/foundations/hooks.mdx +64 -35
  293. package/docs/foundations/idempotency.mdx +244 -12
  294. package/docs/foundations/index.mdx +1 -23
  295. package/docs/foundations/meta.json +2 -1
  296. package/docs/foundations/serialization.mdx +21 -22
  297. package/docs/foundations/starting-workflows.mdx +106 -30
  298. package/docs/foundations/streaming.mdx +107 -59
  299. package/docs/foundations/versioning.mdx +263 -0
  300. package/docs/foundations/workflows-and-steps.mdx +9 -9
  301. package/docs/how-it-works/cancellation.mdx +63 -63
  302. package/docs/how-it-works/code-transform.mdx +83 -67
  303. package/docs/how-it-works/encryption.mdx +30 -26
  304. package/docs/how-it-works/event-sourcing.mdx +98 -34
  305. package/docs/how-it-works/framework-integrations.mdx +96 -337
  306. package/docs/how-it-works/understanding-directives.mdx +22 -22
  307. package/package.json +24 -15
  308. package/dist/runtime/step-handler.d.ts +0 -2
  309. package/dist/runtime/step-handler.d.ts.map +0 -1
  310. package/dist/runtime/step-handler.js +0 -776
@@ -0,0 +1,64 @@
1
+ import type { Event, WorkflowRun } from '@workflow/world';
2
+ import type { PayloadKey } from './serialization/encryption.js';
3
+ import { type PreparedReplayPayload, type ReplayPayloadPreparer } from './serialization.js';
4
+ type ReplayPayloadField = 'result' | 'error' | 'payload';
5
+ /**
6
+ * Invocation-scoped cache for replay payload hydration.
7
+ *
8
+ * A workflow invocation may replay the same event log through several fresh
9
+ * VMs. This cache keeps the VM-independent decrypt/decompress result across
10
+ * those replays. Deserialization still runs against each VM's globals so every
11
+ * replay receives fresh object graphs and correctly revived Workflow objects.
12
+ *
13
+ * Successful prepared plaintext and memoized primitive step results remain
14
+ * resident for the invocation lifetime. Their memory never crosses workflow
15
+ * runs or queue deliveries.
16
+ */
17
+ export declare class ReplayPayloadCache {
18
+ private readonly preparer;
19
+ private readonly preparedPayloads;
20
+ private readonly primitiveStepResults;
21
+ private readonly encryptionKey;
22
+ private nextUnscannedEventIndex;
23
+ constructor(encryptionKey: PayloadKey | undefined | Promise<PayloadKey | undefined>, preparer?: ReplayPayloadPreparer);
24
+ /** Start preparing an event payload as soon as its frame is decoded. */
25
+ prepareEvent(event: Event): void;
26
+ /**
27
+ * Start every missing binary preparation before workflow execution. Failures
28
+ * are intentionally retained: the ordered event consumer must observe the
29
+ * original rejection before that entry becomes retryable.
30
+ */
31
+ prewarm(workflowRun: WorkflowRun, events: Event[]): Promise<void>;
32
+ /** Rescan the next event log after an authoritative replacement. */
33
+ resetScan(): void;
34
+ /** Return the workflow input after shared host-side preparation. */
35
+ prepareWorkflowInput(workflowRun: WorkflowRun): Promise<PreparedReplayPayload>;
36
+ /**
37
+ * Return an event payload after shared host-side preparation. A rejected
38
+ * preparation is evicted only after this ordered consumer requests it, so a
39
+ * later replay can retry without hiding the original failure.
40
+ */
41
+ prepareEventPayload(eventId: string, field: ReplayPayloadField, value: unknown): Promise<PreparedReplayPayload>;
42
+ /**
43
+ * Reuse final step values only when sharing them across VMs is unobservable.
44
+ * Objects always run `hydrate` again to produce a fresh VM-specific value;
45
+ * every primitive is safe to reuse directly.
46
+ */
47
+ getStepResult(eventId: string, hydrate: () => Promise<unknown>): Promise<unknown>;
48
+ /**
49
+ * Consumer-facing lookup. Binary payloads share preparation; legacy values
50
+ * bypass the cache because their flattened representation may be mutated.
51
+ */
52
+ private consumePreparation;
53
+ /** Start preparation once and share the exact in-flight promise. */
54
+ private ensurePreparation;
55
+ /** Normalize synchronous and asynchronous preparers to one promise contract. */
56
+ private runPreparation;
57
+ /** Start one event's binary payload unless another path already did. */
58
+ private prepareEventIfMissing;
59
+ private startPreparation;
60
+ private workflowInputKey;
61
+ private eventPayloadKey;
62
+ }
63
+ export {};
64
+ //# sourceMappingURL=replay-payload-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay-payload-cache.d.ts","sourceRoot":"","sources":["../src/replay-payload-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EACL,KAAK,qBAAqB,EAE1B,KAAK,qBAAqB,EAC3B,MAAM,oBAAoB,CAAC;AAE5B,KAAK,kBAAkB,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AASzD;;;;;;;;;;;GAWG;AACH,qBAAa,kBAAkB;IAW3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAV3B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAG7B;IACJ,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA8B;IACnE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;IAChE,OAAO,CAAC,uBAAuB,CAAK;gBAGlC,aAAa,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,EACtD,QAAQ,GAAE,qBAA4C;IAKzE,wEAAwE;IACxE,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAOhC;;;;OAIG;IACG,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBvE,oEAAoE;IACpE,SAAS,IAAI,IAAI;IAIjB,oEAAoE;IACpE,oBAAoB,CAClB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,qBAAqB,CAAC;IAOjC;;;;OAIG;IACH,mBAAmB,CACjB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,EACzB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,qBAAqB,CAAC;IAIjC;;;;OAIG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC;IAYnB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAe1B,oEAAoE;IACpE,OAAO,CAAC,iBAAiB;IAYzB,gFAAgF;YAClE,cAAc;IAI5B,wEAAwE;IACxE,OAAO,CAAC,qBAAqB;IAqC7B,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,eAAe;CAGxB"}
@@ -0,0 +1,158 @@
1
+ import { prepareReplayPayload, } from './serialization.js';
2
+ function isMemoizablePrimitive(value) {
3
+ if (value === null)
4
+ return true;
5
+ const type = typeof value;
6
+ if (type === 'object' || type === 'function')
7
+ return false;
8
+ return true;
9
+ }
10
+ /**
11
+ * Invocation-scoped cache for replay payload hydration.
12
+ *
13
+ * A workflow invocation may replay the same event log through several fresh
14
+ * VMs. This cache keeps the VM-independent decrypt/decompress result across
15
+ * those replays. Deserialization still runs against each VM's globals so every
16
+ * replay receives fresh object graphs and correctly revived Workflow objects.
17
+ *
18
+ * Successful prepared plaintext and memoized primitive step results remain
19
+ * resident for the invocation lifetime. Their memory never crosses workflow
20
+ * runs or queue deliveries.
21
+ */
22
+ export class ReplayPayloadCache {
23
+ preparer;
24
+ preparedPayloads = new Map();
25
+ primitiveStepResults = new Map();
26
+ encryptionKey;
27
+ nextUnscannedEventIndex = 0;
28
+ constructor(encryptionKey, preparer = prepareReplayPayload) {
29
+ this.preparer = preparer;
30
+ this.encryptionKey = Promise.resolve(encryptionKey);
31
+ }
32
+ /** Start preparing an event payload as soon as its frame is decoded. */
33
+ prepareEvent(event) {
34
+ const preparation = this.prepareEventIfMissing(event);
35
+ // Streaming preparation is speculative. Its ordered consumer observes the
36
+ // original rejection and makes that cache entry retryable.
37
+ void preparation?.catch(() => { });
38
+ }
39
+ /**
40
+ * Start every missing binary preparation before workflow execution. Failures
41
+ * are intentionally retained: the ordered event consumer must observe the
42
+ * original rejection before that entry becomes retryable.
43
+ */
44
+ async prewarm(workflowRun, events) {
45
+ const preparations = [];
46
+ const workflowInput = this.startPreparation(this.workflowInputKey(workflowRun.runId), workflowRun.input);
47
+ if (workflowInput)
48
+ preparations.push(workflowInput);
49
+ for (let index = this.nextUnscannedEventIndex; index < events.length; index++) {
50
+ const event = events[index];
51
+ const preparation = this.prepareEventIfMissing(event);
52
+ if (preparation)
53
+ preparations.push(preparation);
54
+ }
55
+ this.nextUnscannedEventIndex = events.length;
56
+ // Prewarming is speculative and must not fail replay before the matching
57
+ // event is consumed. allSettled also attaches rejection handlers eagerly.
58
+ await Promise.allSettled(preparations);
59
+ }
60
+ /** Rescan the next event log after an authoritative replacement. */
61
+ resetScan() {
62
+ this.nextUnscannedEventIndex = 0;
63
+ }
64
+ /** Return the workflow input after shared host-side preparation. */
65
+ prepareWorkflowInput(workflowRun) {
66
+ return this.consumePreparation(this.workflowInputKey(workflowRun.runId), workflowRun.input);
67
+ }
68
+ /**
69
+ * Return an event payload after shared host-side preparation. A rejected
70
+ * preparation is evicted only after this ordered consumer requests it, so a
71
+ * later replay can retry without hiding the original failure.
72
+ */
73
+ prepareEventPayload(eventId, field, value) {
74
+ return this.consumePreparation(this.eventPayloadKey(eventId, field), value);
75
+ }
76
+ /**
77
+ * Reuse final step values only when sharing them across VMs is unobservable.
78
+ * Objects always run `hydrate` again to produce a fresh VM-specific value;
79
+ * every primitive is safe to reuse directly.
80
+ */
81
+ async getStepResult(eventId, hydrate) {
82
+ if (this.primitiveStepResults.has(eventId)) {
83
+ return this.primitiveStepResults.get(eventId);
84
+ }
85
+ const value = await hydrate();
86
+ if (isMemoizablePrimitive(value)) {
87
+ this.primitiveStepResults.set(eventId, value);
88
+ }
89
+ return value;
90
+ }
91
+ /**
92
+ * Consumer-facing lookup. Binary payloads share preparation; legacy values
93
+ * bypass the cache because their flattened representation may be mutated.
94
+ */
95
+ consumePreparation(cacheKey, value) {
96
+ if (!(value instanceof Uint8Array))
97
+ return this.runPreparation(value);
98
+ const preparation = this.ensurePreparation(cacheKey, value);
99
+ void preparation.catch(() => {
100
+ if (this.preparedPayloads.get(cacheKey) === preparation) {
101
+ this.preparedPayloads.delete(cacheKey);
102
+ }
103
+ });
104
+ return preparation;
105
+ }
106
+ /** Start preparation once and share the exact in-flight promise. */
107
+ ensurePreparation(cacheKey, value) {
108
+ const cached = this.preparedPayloads.get(cacheKey);
109
+ if (cached)
110
+ return cached;
111
+ const preparation = this.runPreparation(value);
112
+ this.preparedPayloads.set(cacheKey, preparation);
113
+ return preparation;
114
+ }
115
+ /** Normalize synchronous and asynchronous preparers to one promise contract. */
116
+ async runPreparation(value) {
117
+ return this.preparer(value, await this.encryptionKey);
118
+ }
119
+ /** Start one event's binary payload unless another path already did. */
120
+ prepareEventIfMissing(event) {
121
+ let field;
122
+ let value;
123
+ switch (event.eventType) {
124
+ case 'run_created':
125
+ return this.startPreparation(this.workflowInputKey(event.runId), event.eventData.input);
126
+ case 'run_started':
127
+ return this.startPreparation(this.workflowInputKey(event.runId), event.eventData?.input);
128
+ case 'step_completed':
129
+ field = 'result';
130
+ value = event.eventData?.result;
131
+ break;
132
+ case 'step_failed':
133
+ field = 'error';
134
+ value = event.eventData?.error;
135
+ break;
136
+ case 'hook_received':
137
+ field = 'payload';
138
+ value = event.eventData?.payload;
139
+ break;
140
+ default:
141
+ return undefined;
142
+ }
143
+ return this.startPreparation(this.eventPayloadKey(event.eventId, field), value);
144
+ }
145
+ startPreparation(cacheKey, value) {
146
+ if (!(value instanceof Uint8Array) || this.preparedPayloads.has(cacheKey)) {
147
+ return undefined;
148
+ }
149
+ return this.ensurePreparation(cacheKey, value);
150
+ }
151
+ workflowInputKey(runId) {
152
+ return `run:${runId}:input`;
153
+ }
154
+ eventPayloadKey(eventId, field) {
155
+ return `event:${eventId}:${field}`;
156
+ }
157
+ }
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGF5LXBheWxvYWQtY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVwbGF5LXBheWxvYWQtY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUVMLG9CQUFvQixHQUVyQixNQUFNLG9CQUFvQixDQUFDO0FBSTVCLFNBQVMscUJBQXFCLENBQUMsS0FBYztJQUMzQyxJQUFJLEtBQUssS0FBSyxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDaEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7SUFDMUIsSUFBSSxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksS0FBSyxVQUFVO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDM0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBV1Y7SUFWRixnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFHeEMsQ0FBQztJQUNhLG9CQUFvQixHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO0lBQ2xELGFBQWEsQ0FBa0M7SUFDeEQsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO0lBRXBDLFlBQ0UsYUFBdUUsRUFDdEQsV0FBa0Msb0JBQW9CO1FBQXRELGFBQVEsR0FBUixRQUFRLENBQThDO1FBRXZFLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLFlBQVksQ0FBQyxLQUFZO1FBQ3ZCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCwwRUFBMEU7UUFDMUUsMkRBQTJEO1FBQzNELEtBQUssV0FBVyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBd0IsRUFBRSxNQUFlO1FBQ3JELE1BQU0sWUFBWSxHQUFxQyxFQUFFLENBQUM7UUFDMUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUN6QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUN4QyxXQUFXLENBQUMsS0FBSyxDQUNsQixDQUFDO1FBQ0YsSUFBSSxhQUFhO1lBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRCxLQUNFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFDeEMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQ3JCLEtBQUssRUFBRSxFQUNQLENBQUM7WUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RELElBQUksV0FBVztnQkFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFDRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUU3Qyx5RUFBeUU7UUFDekUsMEVBQTBFO1FBQzFFLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsb0VBQW9FO0lBQ3BFLFNBQVM7UUFDUCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxvRUFBb0U7SUFDcEUsb0JBQW9CLENBQ2xCLFdBQXdCO1FBRXhCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUN4QyxXQUFXLENBQUMsS0FBSyxDQUNsQixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxtQkFBbUIsQ0FDakIsT0FBZSxFQUNmLEtBQXlCLEVBQ3pCLEtBQWM7UUFFZCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQ2pCLE9BQWUsRUFDZixPQUErQjtRQUUvQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sT0FBTyxFQUFFLENBQUM7UUFDOUIsSUFBSSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7O09BR0c7SUFDSyxrQkFBa0IsQ0FDeEIsUUFBZ0IsRUFDaEIsS0FBYztRQUVkLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxVQUFVLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdEUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RCxLQUFLLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQzFCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxXQUFXLEVBQUUsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsb0VBQW9FO0lBQzVELGlCQUFpQixDQUN2QixRQUFnQixFQUNoQixLQUFpQjtRQUVqQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELElBQUksTUFBTTtZQUFFLE9BQU8sTUFBTSxDQUFDO1FBRTFCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDakQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELGdGQUFnRjtJQUN4RSxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQWM7UUFDekMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsd0VBQXdFO0lBQ2hFLHFCQUFxQixDQUMzQixLQUFZO1FBRVosSUFBSSxLQUF5QixDQUFDO1FBQzlCLElBQUksS0FBYyxDQUFDO1FBQ25CLFFBQVEsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3hCLEtBQUssYUFBYTtnQkFDaEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQ2xDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUN0QixDQUFDO1lBQ0osS0FBSyxhQUFhO2dCQUNoQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFDbEMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQ3ZCLENBQUM7WUFDSixLQUFLLGdCQUFnQjtnQkFDbkIsS0FBSyxHQUFHLFFBQVEsQ0FBQztnQkFDakIsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDO2dCQUNoQyxNQUFNO1lBQ1IsS0FBSyxhQUFhO2dCQUNoQixLQUFLLEdBQUcsT0FBTyxDQUFDO2dCQUNoQixLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7Z0JBQy9CLE1BQU07WUFDUixLQUFLLGVBQWU7Z0JBQ2xCLEtBQUssR0FBRyxTQUFTLENBQUM7Z0JBQ2xCLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQztnQkFDakMsTUFBTTtZQUNSO2dCQUNFLE9BQU8sU0FBUyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUMxQyxLQUFLLENBQ04sQ0FBQztJQUNKLENBQUM7SUFFTyxnQkFBZ0IsQ0FDdEIsUUFBZ0IsRUFDaEIsS0FBYztRQUVkLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDMUUsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsS0FBYTtRQUNwQyxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxPQUFlLEVBQUUsS0FBeUI7UUFDaEUsT0FBTyxTQUFTLE9BQU8sSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEV2ZW50LCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IFBheWxvYWRLZXkgfSBmcm9tICcuL3NlcmlhbGl6YXRpb24vZW5jcnlwdGlvbi5qcyc7XG5pbXBvcnQge1xuICB0eXBlIFByZXBhcmVkUmVwbGF5UGF5bG9hZCxcbiAgcHJlcGFyZVJlcGxheVBheWxvYWQsXG4gIHR5cGUgUmVwbGF5UGF5bG9hZFByZXBhcmVyLFxufSBmcm9tICcuL3NlcmlhbGl6YXRpb24uanMnO1xuXG50eXBlIFJlcGxheVBheWxvYWRGaWVsZCA9ICdyZXN1bHQnIHwgJ2Vycm9yJyB8ICdwYXlsb2FkJztcblxuZnVuY3Rpb24gaXNNZW1vaXphYmxlUHJpbWl0aXZlKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09PSAnb2JqZWN0JyB8fCB0eXBlID09PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEludm9jYXRpb24tc2NvcGVkIGNhY2hlIGZvciByZXBsYXkgcGF5bG9hZCBoeWRyYXRpb24uXG4gKlxuICogQSB3b3JrZmxvdyBpbnZvY2F0aW9uIG1heSByZXBsYXkgdGhlIHNhbWUgZXZlbnQgbG9nIHRocm91Z2ggc2V2ZXJhbCBmcmVzaFxuICogVk1zLiBUaGlzIGNhY2hlIGtlZXBzIHRoZSBWTS1pbmRlcGVuZGVudCBkZWNyeXB0L2RlY29tcHJlc3MgcmVzdWx0IGFjcm9zc1xuICogdGhvc2UgcmVwbGF5cy4gRGVzZXJpYWxpemF0aW9uIHN0aWxsIHJ1bnMgYWdhaW5zdCBlYWNoIFZNJ3MgZ2xvYmFscyBzbyBldmVyeVxuICogcmVwbGF5IHJlY2VpdmVzIGZyZXNoIG9iamVjdCBncmFwaHMgYW5kIGNvcnJlY3RseSByZXZpdmVkIFdvcmtmbG93IG9iamVjdHMuXG4gKlxuICogU3VjY2Vzc2Z1bCBwcmVwYXJlZCBwbGFpbnRleHQgYW5kIG1lbW9pemVkIHByaW1pdGl2ZSBzdGVwIHJlc3VsdHMgcmVtYWluXG4gKiByZXNpZGVudCBmb3IgdGhlIGludm9jYXRpb24gbGlmZXRpbWUuIFRoZWlyIG1lbW9yeSBuZXZlciBjcm9zc2VzIHdvcmtmbG93XG4gKiBydW5zIG9yIHF1ZXVlIGRlbGl2ZXJpZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXBsYXlQYXlsb2FkQ2FjaGUge1xuICBwcml2YXRlIHJlYWRvbmx5IHByZXBhcmVkUGF5bG9hZHMgPSBuZXcgTWFwPFxuICAgIHN0cmluZyxcbiAgICBQcm9taXNlPFByZXBhcmVkUmVwbGF5UGF5bG9hZD5cbiAgPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHByaW1pdGl2ZVN0ZXBSZXN1bHRzID0gbmV3IE1hcDxzdHJpbmcsIHVua25vd24+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5jcnlwdGlvbktleTogUHJvbWlzZTxQYXlsb2FkS2V5IHwgdW5kZWZpbmVkPjtcbiAgcHJpdmF0ZSBuZXh0VW5zY2FubmVkRXZlbnRJbmRleCA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZW5jcnlwdGlvbktleTogUGF5bG9hZEtleSB8IHVuZGVmaW5lZCB8IFByb21pc2U8UGF5bG9hZEtleSB8IHVuZGVmaW5lZD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmVwYXJlcjogUmVwbGF5UGF5bG9hZFByZXBhcmVyID0gcHJlcGFyZVJlcGxheVBheWxvYWRcbiAgKSB7XG4gICAgdGhpcy5lbmNyeXB0aW9uS2V5ID0gUHJvbWlzZS5yZXNvbHZlKGVuY3J5cHRpb25LZXkpO1xuICB9XG5cbiAgLyoqIFN0YXJ0IHByZXBhcmluZyBhbiBldmVudCBwYXlsb2FkIGFzIHNvb24gYXMgaXRzIGZyYW1lIGlzIGRlY29kZWQuICovXG4gIHByZXBhcmVFdmVudChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBwcmVwYXJhdGlvbiA9IHRoaXMucHJlcGFyZUV2ZW50SWZNaXNzaW5nKGV2ZW50KTtcbiAgICAvLyBTdHJlYW1pbmcgcHJlcGFyYXRpb24gaXMgc3BlY3VsYXRpdmUuIEl0cyBvcmRlcmVkIGNvbnN1bWVyIG9ic2VydmVzIHRoZVxuICAgIC8vIG9yaWdpbmFsIHJlamVjdGlvbiBhbmQgbWFrZXMgdGhhdCBjYWNoZSBlbnRyeSByZXRyeWFibGUuXG4gICAgdm9pZCBwcmVwYXJhdGlvbj8uY2F0Y2goKCkgPT4ge30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGV2ZXJ5IG1pc3NpbmcgYmluYXJ5IHByZXBhcmF0aW9uIGJlZm9yZSB3b3JrZmxvdyBleGVjdXRpb24uIEZhaWx1cmVzXG4gICAqIGFyZSBpbnRlbnRpb25hbGx5IHJldGFpbmVkOiB0aGUgb3JkZXJlZCBldmVudCBjb25zdW1lciBtdXN0IG9ic2VydmUgdGhlXG4gICAqIG9yaWdpbmFsIHJlamVjdGlvbiBiZWZvcmUgdGhhdCBlbnRyeSBiZWNvbWVzIHJldHJ5YWJsZS5cbiAgICovXG4gIGFzeW5jIHByZXdhcm0od29ya2Zsb3dSdW46IFdvcmtmbG93UnVuLCBldmVudHM6IEV2ZW50W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwcmVwYXJhdGlvbnM6IFByb21pc2U8UHJlcGFyZWRSZXBsYXlQYXlsb2FkPltdID0gW107XG4gICAgY29uc3Qgd29ya2Zsb3dJbnB1dCA9IHRoaXMuc3RhcnRQcmVwYXJhdGlvbihcbiAgICAgIHRoaXMud29ya2Zsb3dJbnB1dEtleSh3b3JrZmxvd1J1bi5ydW5JZCksXG4gICAgICB3b3JrZmxvd1J1bi5pbnB1dFxuICAgICk7XG4gICAgaWYgKHdvcmtmbG93SW5wdXQpIHByZXBhcmF0aW9ucy5wdXNoKHdvcmtmbG93SW5wdXQpO1xuICAgIGZvciAoXG4gICAgICBsZXQgaW5kZXggPSB0aGlzLm5leHRVbnNjYW5uZWRFdmVudEluZGV4O1xuICAgICAgaW5kZXggPCBldmVudHMubGVuZ3RoO1xuICAgICAgaW5kZXgrK1xuICAgICkge1xuICAgICAgY29uc3QgZXZlbnQgPSBldmVudHNbaW5kZXhdO1xuICAgICAgY29uc3QgcHJlcGFyYXRpb24gPSB0aGlzLnByZXBhcmVFdmVudElmTWlzc2luZyhldmVudCk7XG4gICAgICBpZiAocHJlcGFyYXRpb24pIHByZXBhcmF0aW9ucy5wdXNoKHByZXBhcmF0aW9uKTtcbiAgICB9XG4gICAgdGhpcy5uZXh0VW5zY2FubmVkRXZlbnRJbmRleCA9IGV2ZW50cy5sZW5ndGg7XG5cbiAgICAvLyBQcmV3YXJtaW5nIGlzIHNwZWN1bGF0aXZlIGFuZCBtdXN0IG5vdCBmYWlsIHJlcGxheSBiZWZvcmUgdGhlIG1hdGNoaW5nXG4gICAgLy8gZXZlbnQgaXMgY29uc3VtZWQuIGFsbFNldHRsZWQgYWxzbyBhdHRhY2hlcyByZWplY3Rpb24gaGFuZGxlcnMgZWFnZXJseS5cbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQocHJlcGFyYXRpb25zKTtcbiAgfVxuXG4gIC8qKiBSZXNjYW4gdGhlIG5leHQgZXZlbnQgbG9nIGFmdGVyIGFuIGF1dGhvcml0YXRpdmUgcmVwbGFjZW1lbnQuICovXG4gIHJlc2V0U2NhbigpOiB2b2lkIHtcbiAgICB0aGlzLm5leHRVbnNjYW5uZWRFdmVudEluZGV4ID0gMDtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gdGhlIHdvcmtmbG93IGlucHV0IGFmdGVyIHNoYXJlZCBob3N0LXNpZGUgcHJlcGFyYXRpb24uICovXG4gIHByZXBhcmVXb3JrZmxvd0lucHV0KFxuICAgIHdvcmtmbG93UnVuOiBXb3JrZmxvd1J1blxuICApOiBQcm9taXNlPFByZXBhcmVkUmVwbGF5UGF5bG9hZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbnN1bWVQcmVwYXJhdGlvbihcbiAgICAgIHRoaXMud29ya2Zsb3dJbnB1dEtleSh3b3JrZmxvd1J1bi5ydW5JZCksXG4gICAgICB3b3JrZmxvd1J1bi5pbnB1dFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGV2ZW50IHBheWxvYWQgYWZ0ZXIgc2hhcmVkIGhvc3Qtc2lkZSBwcmVwYXJhdGlvbi4gQSByZWplY3RlZFxuICAgKiBwcmVwYXJhdGlvbiBpcyBldmljdGVkIG9ubHkgYWZ0ZXIgdGhpcyBvcmRlcmVkIGNvbnN1bWVyIHJlcXVlc3RzIGl0LCBzbyBhXG4gICAqIGxhdGVyIHJlcGxheSBjYW4gcmV0cnkgd2l0aG91dCBoaWRpbmcgdGhlIG9yaWdpbmFsIGZhaWx1cmUuXG4gICAqL1xuICBwcmVwYXJlRXZlbnRQYXlsb2FkKFxuICAgIGV2ZW50SWQ6IHN0cmluZyxcbiAgICBmaWVsZDogUmVwbGF5UGF5bG9hZEZpZWxkLFxuICAgIHZhbHVlOiB1bmtub3duXG4gICk6IFByb21pc2U8UHJlcGFyZWRSZXBsYXlQYXlsb2FkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3VtZVByZXBhcmF0aW9uKHRoaXMuZXZlbnRQYXlsb2FkS2V5KGV2ZW50SWQsIGZpZWxkKSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldXNlIGZpbmFsIHN0ZXAgdmFsdWVzIG9ubHkgd2hlbiBzaGFyaW5nIHRoZW0gYWNyb3NzIFZNcyBpcyB1bm9ic2VydmFibGUuXG4gICAqIE9iamVjdHMgYWx3YXlzIHJ1biBgaHlkcmF0ZWAgYWdhaW4gdG8gcHJvZHVjZSBhIGZyZXNoIFZNLXNwZWNpZmljIHZhbHVlO1xuICAgKiBldmVyeSBwcmltaXRpdmUgaXMgc2FmZSB0byByZXVzZSBkaXJlY3RseS5cbiAgICovXG4gIGFzeW5jIGdldFN0ZXBSZXN1bHQoXG4gICAgZXZlbnRJZDogc3RyaW5nLFxuICAgIGh5ZHJhdGU6ICgpID0+IFByb21pc2U8dW5rbm93bj5cbiAgKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgaWYgKHRoaXMucHJpbWl0aXZlU3RlcFJlc3VsdHMuaGFzKGV2ZW50SWQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcmltaXRpdmVTdGVwUmVzdWx0cy5nZXQoZXZlbnRJZCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCBoeWRyYXRlKCk7XG4gICAgaWYgKGlzTWVtb2l6YWJsZVByaW1pdGl2ZSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMucHJpbWl0aXZlU3RlcFJlc3VsdHMuc2V0KGV2ZW50SWQsIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN1bWVyLWZhY2luZyBsb29rdXAuIEJpbmFyeSBwYXlsb2FkcyBzaGFyZSBwcmVwYXJhdGlvbjsgbGVnYWN5IHZhbHVlc1xuICAgKiBieXBhc3MgdGhlIGNhY2hlIGJlY2F1c2UgdGhlaXIgZmxhdHRlbmVkIHJlcHJlc2VudGF0aW9uIG1heSBiZSBtdXRhdGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBjb25zdW1lUHJlcGFyYXRpb24oXG4gICAgY2FjaGVLZXk6IHN0cmluZyxcbiAgICB2YWx1ZTogdW5rbm93blxuICApOiBQcm9taXNlPFByZXBhcmVkUmVwbGF5UGF5bG9hZD4ge1xuICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHJldHVybiB0aGlzLnJ1blByZXBhcmF0aW9uKHZhbHVlKTtcblxuICAgIGNvbnN0IHByZXBhcmF0aW9uID0gdGhpcy5lbnN1cmVQcmVwYXJhdGlvbihjYWNoZUtleSwgdmFsdWUpO1xuICAgIHZvaWQgcHJlcGFyYXRpb24uY2F0Y2goKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucHJlcGFyZWRQYXlsb2Fkcy5nZXQoY2FjaGVLZXkpID09PSBwcmVwYXJhdGlvbikge1xuICAgICAgICB0aGlzLnByZXBhcmVkUGF5bG9hZHMuZGVsZXRlKGNhY2hlS2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcHJlcGFyYXRpb247XG4gIH1cblxuICAvKiogU3RhcnQgcHJlcGFyYXRpb24gb25jZSBhbmQgc2hhcmUgdGhlIGV4YWN0IGluLWZsaWdodCBwcm9taXNlLiAqL1xuICBwcml2YXRlIGVuc3VyZVByZXBhcmF0aW9uKFxuICAgIGNhY2hlS2V5OiBzdHJpbmcsXG4gICAgdmFsdWU6IFVpbnQ4QXJyYXlcbiAgKTogUHJvbWlzZTxQcmVwYXJlZFJlcGxheVBheWxvYWQ+IHtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnByZXBhcmVkUGF5bG9hZHMuZ2V0KGNhY2hlS2V5KTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuXG4gICAgY29uc3QgcHJlcGFyYXRpb24gPSB0aGlzLnJ1blByZXBhcmF0aW9uKHZhbHVlKTtcbiAgICB0aGlzLnByZXBhcmVkUGF5bG9hZHMuc2V0KGNhY2hlS2V5LCBwcmVwYXJhdGlvbik7XG4gICAgcmV0dXJuIHByZXBhcmF0aW9uO1xuICB9XG5cbiAgLyoqIE5vcm1hbGl6ZSBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIHByZXBhcmVycyB0byBvbmUgcHJvbWlzZSBjb250cmFjdC4gKi9cbiAgcHJpdmF0ZSBhc3luYyBydW5QcmVwYXJhdGlvbih2YWx1ZTogdW5rbm93bik6IFByb21pc2U8UHJlcGFyZWRSZXBsYXlQYXlsb2FkPiB7XG4gICAgcmV0dXJuIHRoaXMucHJlcGFyZXIodmFsdWUsIGF3YWl0IHRoaXMuZW5jcnlwdGlvbktleSk7XG4gIH1cblxuICAvKiogU3RhcnQgb25lIGV2ZW50J3MgYmluYXJ5IHBheWxvYWQgdW5sZXNzIGFub3RoZXIgcGF0aCBhbHJlYWR5IGRpZC4gKi9cbiAgcHJpdmF0ZSBwcmVwYXJlRXZlbnRJZk1pc3NpbmcoXG4gICAgZXZlbnQ6IEV2ZW50XG4gICk6IFByb21pc2U8UHJlcGFyZWRSZXBsYXlQYXlsb2FkPiB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGZpZWxkOiBSZXBsYXlQYXlsb2FkRmllbGQ7XG4gICAgbGV0IHZhbHVlOiB1bmtub3duO1xuICAgIHN3aXRjaCAoZXZlbnQuZXZlbnRUeXBlKSB7XG4gICAgICBjYXNlICdydW5fY3JlYXRlZCc6XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0UHJlcGFyYXRpb24oXG4gICAgICAgICAgdGhpcy53b3JrZmxvd0lucHV0S2V5KGV2ZW50LnJ1bklkKSxcbiAgICAgICAgICBldmVudC5ldmVudERhdGEuaW5wdXRcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgJ3J1bl9zdGFydGVkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRQcmVwYXJhdGlvbihcbiAgICAgICAgICB0aGlzLndvcmtmbG93SW5wdXRLZXkoZXZlbnQucnVuSWQpLFxuICAgICAgICAgIGV2ZW50LmV2ZW50RGF0YT8uaW5wdXRcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgJ3N0ZXBfY29tcGxldGVkJzpcbiAgICAgICAgZmllbGQgPSAncmVzdWx0JztcbiAgICAgICAgdmFsdWUgPSBldmVudC5ldmVudERhdGE/LnJlc3VsdDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdGVwX2ZhaWxlZCc6XG4gICAgICAgIGZpZWxkID0gJ2Vycm9yJztcbiAgICAgICAgdmFsdWUgPSBldmVudC5ldmVudERhdGE/LmVycm9yO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2hvb2tfcmVjZWl2ZWQnOlxuICAgICAgICBmaWVsZCA9ICdwYXlsb2FkJztcbiAgICAgICAgdmFsdWUgPSBldmVudC5ldmVudERhdGE/LnBheWxvYWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRQcmVwYXJhdGlvbihcbiAgICAgIHRoaXMuZXZlbnRQYXlsb2FkS2V5KGV2ZW50LmV2ZW50SWQsIGZpZWxkKSxcbiAgICAgIHZhbHVlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRQcmVwYXJhdGlvbihcbiAgICBjYWNoZUtleTogc3RyaW5nLFxuICAgIHZhbHVlOiB1bmtub3duXG4gICk6IFByb21pc2U8UHJlcGFyZWRSZXBsYXlQYXlsb2FkPiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB8fCB0aGlzLnByZXBhcmVkUGF5bG9hZHMuaGFzKGNhY2hlS2V5KSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUHJlcGFyYXRpb24oY2FjaGVLZXksIHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgd29ya2Zsb3dJbnB1dEtleShydW5JZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYHJ1bjoke3J1bklkfTppbnB1dGA7XG4gIH1cblxuICBwcml2YXRlIGV2ZW50UGF5bG9hZEtleShldmVudElkOiBzdHJpbmcsIGZpZWxkOiBSZXBsYXlQYXlsb2FkRmllbGQpOiBzdHJpbmcge1xuICAgIHJldHVybiBgZXZlbnQ6JHtldmVudElkfToke2ZpZWxkfWA7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Identifier for the compute instance (microVM) this module was loaded into.
3
+ *
4
+ * Vercel exposes no native per-instance ID under Fluid compute (`AWS_LAMBDA_*`
5
+ * is blocked), so we synthesize one at module load: a prefixed ULID
6
+ * (`cinst_<ulid>`, per the `wrun_`/`step_` convention) whose timestamp is the
7
+ * instance's birth time. Stable for the instance's life and shared by every
8
+ * invocation it handles, including the concurrent ones Fluid packs onto it;
9
+ * cold starts mint fresh IDs. Emitted as the OpenTelemetry `faas.instance`
10
+ * attribute.
11
+ */
12
+ export declare const COMPUTE_INSTANCE_ID: string;
13
+ //# sourceMappingURL=compute-instance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute-instance.d.ts","sourceRoot":"","sources":["../../src/runtime/compute-instance.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,mBAAmB,QAAoB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { ulid } from 'ulid';
2
+ /**
3
+ * Identifier for the compute instance (microVM) this module was loaded into.
4
+ *
5
+ * Vercel exposes no native per-instance ID under Fluid compute (`AWS_LAMBDA_*`
6
+ * is blocked), so we synthesize one at module load: a prefixed ULID
7
+ * (`cinst_<ulid>`, per the `wrun_`/`step_` convention) whose timestamp is the
8
+ * instance's birth time. Stable for the instance's life and shared by every
9
+ * invocation it handles, including the concurrent ones Fluid packs onto it;
10
+ * cold starts mint fresh IDs. Emitted as the OpenTelemetry `faas.instance`
11
+ * attribute.
12
+ */
13
+ export const COMPUTE_INSTANCE_ID = `cinst_${ulid()}`;
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS1pbnN0YW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2NvbXB1dGUtaW5zdGFuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1Qjs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxJQUFJLEVBQUUsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdWxpZCB9IGZyb20gJ3VsaWQnO1xuXG4vKipcbiAqIElkZW50aWZpZXIgZm9yIHRoZSBjb21wdXRlIGluc3RhbmNlIChtaWNyb1ZNKSB0aGlzIG1vZHVsZSB3YXMgbG9hZGVkIGludG8uXG4gKlxuICogVmVyY2VsIGV4cG9zZXMgbm8gbmF0aXZlIHBlci1pbnN0YW5jZSBJRCB1bmRlciBGbHVpZCBjb21wdXRlIChgQVdTX0xBTUJEQV8qYFxuICogaXMgYmxvY2tlZCksIHNvIHdlIHN5bnRoZXNpemUgb25lIGF0IG1vZHVsZSBsb2FkOiBhIHByZWZpeGVkIFVMSURcbiAqIChgY2luc3RfPHVsaWQ+YCwgcGVyIHRoZSBgd3J1bl9gL2BzdGVwX2AgY29udmVudGlvbikgd2hvc2UgdGltZXN0YW1wIGlzIHRoZVxuICogaW5zdGFuY2UncyBiaXJ0aCB0aW1lLiBTdGFibGUgZm9yIHRoZSBpbnN0YW5jZSdzIGxpZmUgYW5kIHNoYXJlZCBieSBldmVyeVxuICogaW52b2NhdGlvbiBpdCBoYW5kbGVzLCBpbmNsdWRpbmcgdGhlIGNvbmN1cnJlbnQgb25lcyBGbHVpZCBwYWNrcyBvbnRvIGl0O1xuICogY29sZCBzdGFydHMgbWludCBmcmVzaCBJRHMuIEVtaXR0ZWQgYXMgdGhlIE9wZW5UZWxlbWV0cnkgYGZhYXMuaW5zdGFuY2VgXG4gKiBhdHRyaWJ1dGUuXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QVVRFX0lOU1RBTkNFX0lEID0gYGNpbnN0XyR7dWxpZCgpfWA7XG4iXX0=
@@ -1,4 +1,319 @@
1
1
  export declare const MAX_QUEUE_DELIVERIES = 48;
2
+ /**
3
+ * Effective max queue deliveries. Override via `WORKFLOW_MAX_QUEUE_DELIVERIES`.
4
+ */
5
+ export declare function getMaxQueueDeliveries(): number;
6
+ /**
7
+ * Default maximum time allowed for the *replay* portion of a single workflow
8
+ * handler invocation (in ms). This budget only covers deterministic-replay
9
+ * and workflow-VM execution between step boundaries. Inline step bodies
10
+ * (`"use step"` functions invoked via `executeStep`) do NOT count against
11
+ * it. Step bodies are bounded separately by the platform's function
12
+ * `maxDuration` (e.g. 800s on Vercel Pro Fluid) and `NO_INLINE_REPLAY_AFTER_MS`.
13
+ *
14
+ * If the non-step ("replay") time within a single invocation exceeds this
15
+ * budget, the handler rejects so the queue can retry. After
16
+ * `REPLAY_TIMEOUT_MAX_RETRIES` exhausted attempts the run is failed with
17
+ * `RUN_ERROR_CODES.REPLAY_TIMEOUT`.
18
+ *
19
+ * Note that on Vercel Hobby (standard functions), the platform `maxDuration`
20
+ * is 60s, well below this budget, so the platform SIGTERM will fire first
21
+ * and the queue will re-deliver until the visibility window expires. With
22
+ * Fluid Compute on Hobby the per-function ceiling rises to 300s, still
23
+ * under the default budget.
24
+ *
25
+ * Override via the `WORKFLOW_REPLAY_TIMEOUT_MS` env var (clamped to
26
+ * `MIN_REPLAY_TIMEOUT_MS`..`MAX_REPLAY_TIMEOUT_MS`).
27
+ */
2
28
  export declare const REPLAY_TIMEOUT_MS = 240000;
29
+ /** Lower bound for the replay-timeout env var override. */
30
+ export declare const MIN_REPLAY_TIMEOUT_MS = 30000;
31
+ /**
32
+ * Upper bound for the replay-timeout env var override. 780s leaves ≥20s of
33
+ * headroom under Vercel Pro Fluid's 800s function ceiling so the handler
34
+ * can write `run_failed` before SIGTERM.
35
+ */
36
+ export declare const MAX_REPLAY_TIMEOUT_MS = 780000;
37
+ /**
38
+ * Resolve the effective replay-timeout budget for the current process.
39
+ *
40
+ * Reads `process.env.WORKFLOW_REPLAY_TIMEOUT_MS` lazily so tests and
41
+ * deployments can override per invocation. Invalid / out-of-range values
42
+ * fall back to a safe value (no throw: the env var is an escape hatch,
43
+ * not a hard requirement) and emit a one-time warning so misconfiguration
44
+ * is observable.
45
+ */
46
+ export declare function getReplayTimeoutMs(): number;
47
+ /**
48
+ * Reset the warn-once cache. Test-only: exported so unit tests can
49
+ * exercise the warn path repeatedly without sharing state.
50
+ *
51
+ * @internal
52
+ */
53
+ export declare function _resetReplayTimeoutWarnCacheForTests(): void;
3
54
  export declare const REPLAY_TIMEOUT_MAX_RETRIES = 3;
55
+ /**
56
+ * Effective replay-timeout retry budget. Override via
57
+ * `WORKFLOW_REPLAY_TIMEOUT_MAX_RETRIES`.
58
+ */
59
+ export declare function getReplayTimeoutMaxRetries(): number;
60
+ /**
61
+ * Default maximum number of steps the owned-inline path runs inline (in
62
+ * parallel) per suspension. The rest are queued to background handlers. Each
63
+ * inline step is created lazily (its `step_created` is folded into the
64
+ * `step_started` that `executeStep` sends), so inlining N steps saves N queue
65
+ * round-trips for a `Promise.all`-style fan-out. `1` reproduces the
66
+ * single-inline-step behavior exactly (useful kill-switch).
67
+ *
68
+ * Override via `WORKFLOW_MAX_INLINE_STEPS` (clamped to
69
+ * `MIN_MAX_INLINE_STEPS`..`MAX_MAX_INLINE_STEPS`).
70
+ */
71
+ export declare const MAX_INLINE_STEPS = 3;
72
+ /** Lower bound for the inline-steps env override (1 = single inline step). */
73
+ export declare const MIN_MAX_INLINE_STEPS = 1;
74
+ /**
75
+ * Upper bound for the inline-steps env override. Inline bodies run in parallel
76
+ * within one function invocation, so this caps memory/CPU fan-out per handler.
77
+ */
78
+ export declare const MAX_MAX_INLINE_STEPS = 16;
79
+ /**
80
+ * Resolve the effective max number of inline steps for the current process.
81
+ *
82
+ * Reads `process.env.WORKFLOW_MAX_INLINE_STEPS` lazily so tests and
83
+ * deployments can override per invocation. Invalid / out-of-range values fall
84
+ * back to a safe value (no throw: the env var is an escape hatch) and emit a
85
+ * one-time warning so misconfiguration is observable.
86
+ */
87
+ export declare function getMaxInlineSteps(): number;
88
+ /**
89
+ * Upper bound on the serialized step input that resilient step dispatch will
90
+ * inline into the queue message's `stepInput`.
91
+ *
92
+ * Vercel Queues has no hard message-size cap (bodies above its ~256 KB
93
+ * inline threshold transparently spill to S3-backed storage), so this bound
94
+ * is a cost/latency choice, not a rejection guard: the message also carries
95
+ * the runId, stepId, stepName, and trace carrier alongside CBOR framing
96
+ * overhead, and staying under the queue's inline threshold keeps step
97
+ * messages on its fast inline path instead of paying an S3 store+fetch
98
+ * double-hop for bytes that already live in the event log. Above this size
99
+ * the dispatch falls back to the sequential path (`step_created` write, then
100
+ * a payload-less queue message).
101
+ */
102
+ export declare const MAX_RESILIENT_STEP_INPUT_BYTES: number;
103
+ /**
104
+ * Whether resilient step dispatch is enabled: the suspension handler
105
+ * parallelizes each newly created step's `step_created` event write with its
106
+ * step-execution queue publish, carrying the serialized step input in the
107
+ * queue message (`stepInput`) so the consumer can idempotently re-ensure the
108
+ * event if the direct write failed transiently. Mirrors the resilient start
109
+ * (`runInput`) pattern (and the legacy lazy hook resume's `hookInput`, which
110
+ * current producers no longer send).
111
+ *
112
+ * **Off by default.** Enable via `WORKFLOW_RESILIENT_STEP_DISPATCH=1`.
113
+ *
114
+ * The queue publish races the create's verdict, and a create can come back
115
+ * refused: as a duplicate this replay should stop pursuing, or as a stale
116
+ * write on a World that refuses rather than reports. Either way the message
117
+ * carrying the payload is already out, so the consumer can materialize a step
118
+ * whose create was refused, and nothing orders the verdict before the
119
+ * consumer's redelivery re-ensure. Enabling this trades that window for the
120
+ * latency the parallel publish saves.
121
+ */
122
+ export declare function isResilientStepDispatchEnabled(): boolean;
123
+ /**
124
+ * Whether batched event transitions are enabled: the suspension handler folds
125
+ * a clean fan-out's `step_created` + `wait_created` writes into one
126
+ * `world.events.createBatch` call (one durable write, per-event outcomes)
127
+ * instead of one write per event. Only engages when the World implements the
128
+ * optional `events.createBatch` AND the run is on slot identity
129
+ * (specVersion >= 6) AND the suspension carries no attribute/hook writes and
130
+ * no resilient step dispatch. Everything else keeps the single-event path
131
+ * byte-for-byte.
132
+ *
133
+ * Reads `process.env.WORKFLOW_BATCH_TRANSITIONS` lazily. Default **ON**;
134
+ * disabled only by an explicit `'0'` / `'false'` (case-insensitive), the
135
+ * operator escape hatch that restores the exact prior one-write-per-event
136
+ * path, mirroring `WORKFLOW_TURBO`'s kill-switch shape.
137
+ */
138
+ export declare function isBatchTransitionsEnabled(): boolean;
139
+ /**
140
+ * Ceiling on events per `createBatch` call from the batched fan-out fold.
141
+ * Mirrors the server's transaction budgets with a comfortable margin: each
142
+ * fan-out event costs 2 transaction items server-side (entity + event row)
143
+ * against the 100-item DynamoDB cap, and inline payloads count against a
144
+ * 768 KB byte budget, so 32 events stays well under both, and a fan-out larger
145
+ * than this commits in successive batches (split batches lose
146
+ * cross-batch atomicity, which is exactly today's per-event-write crash
147
+ * surface, and every batch still converges on retry via per-event 409s).
148
+ */
149
+ export declare const MAX_BATCH_FANOUT_EVENTS = 32;
150
+ /**
151
+ * Optional client-side override for the server-supplied per-run event ceiling.
152
+ * When set to a positive integer, the runtime clamps the server's limit *down*
153
+ * to this value (never raises it) so enforcement can be exercised without a
154
+ * server-side change. `undefined` (unset) ⇒ use the server value as-is.
155
+ *
156
+ * Reads `process.env.WORKFLOW_MAX_EVENTS_OVERRIDE` lazily so tests and
157
+ * deployments can override per invocation. Invalid values fall back to unset
158
+ * (no throw: the env var is an escape hatch) and emit a one-time warning.
159
+ */
160
+ export declare function getMaxEventsOverride(): number | undefined;
161
+ /**
162
+ * Whether optimistic inline step start is enabled. When on, the owned-inline
163
+ * path begins running a brand-new step's body *before* its lazy `step_started`
164
+ * network call resolves (the input is already known locally), awaiting the
165
+ * `step_started` only before the terminal write.
166
+ *
167
+ * This can run a step body more than once when handlers race for the same
168
+ * step's create-claim: both run the body before one wins. That is unsafe for
169
+ * steps with non-idempotent side effects; in particular, two concurrent runs
170
+ * of a step that writes to the workflow stream (e.g. an AI agent streaming
171
+ * tokens) can interleave and corrupt the stream data. So the optimization is
172
+ * **off by default** and must be explicitly opted into per deployment.
173
+ *
174
+ * Reads `process.env.WORKFLOW_OPTIMISTIC_INLINE_START` lazily. Default OFF;
175
+ * enabled only by an explicit `'1'` / `'true'`.
176
+ */
177
+ export declare function isOptimisticInlineStartEnabled(): boolean;
178
+ /**
179
+ * Whether an operator has **explicitly disabled** optimistic inline start via
180
+ * `WORKFLOW_OPTIMISTIC_INLINE_START=0` / `=false`. Distinct from "unset": unset
181
+ * leaves the optimization off by default but lets turbo force it on; an explicit
182
+ * `0`/`false` is an operator opt-out that turbo must honor (turbo's forced
183
+ * optimistic start still runs a step body before `step_started`/`run_started` is
184
+ * confirmed, the property such an operator is opting out of), so
185
+ * `forceOptimisticStart` defers to this. Reads the env var lazily.
186
+ */
187
+ export declare function isOptimisticInlineStartExplicitlyDisabled(): boolean;
188
+ /**
189
+ * Whether "turbo mode" is enabled. Turbo mode fast-paths the *first delivery of
190
+ * the first invocation* of a run (detected by the entrypoint via `runInput`
191
+ * presence + `metadata.attempt === 1`): it backgrounds the `run_started` event
192
+ * creation, skips the initial event-log load (nothing has been written yet),
193
+ * and forces optimistic inline step start for that invocation, independent of
194
+ * `WORKFLOW_OPTIMISTIC_INLINE_START`.
195
+ *
196
+ * Forcing optimistic start is safe here because the first delivery has no
197
+ * concurrent peer handler to race the step create-claim, so a step body runs
198
+ * exactly once. That single-handler guarantee ends as soon as the run creates a
199
+ * hook or wait (which introduce resume/parallel invocations), so the runtime
200
+ * exits turbo at that point.
201
+ *
202
+ * Reads `process.env.WORKFLOW_TURBO` lazily. Default **ON**; disabled only by an
203
+ * explicit `'0'` / `'false'` (case-insensitive).
204
+ */
205
+ export declare function isTurboEnabled(): boolean;
206
+ /**
207
+ * Whether the QuickJS engine's baseline-snapshot startup optimization is
208
+ * enabled (default ON). When on, the engine hydrates a VM with the
209
+ * workflow bundle once per function instance, snapshots it, and starts
210
+ * every invocation by restoring the snapshot instead of re-evaluating
211
+ * the bundle, skipping the dominant share of VM startup (measured
212
+ * ~77ms → ~3ms to first suspension for a 1.3MB bundle). Bundles whose
213
+ * module scope consumes randomness, reads the clock, or replaces a
214
+ * serialization intrinsic are detected at hydrate time and
215
+ * automatically fall back to per-invocation fresh evaluation (see
216
+ * prepareBaselineSnapshot). Set WORKFLOW_QUICKJS_BASELINE_SNAPSHOT=0 to
217
+ * disable.
218
+ */
219
+ export declare function isQuickJSBaselineSnapshotEnabled(): boolean;
220
+ /**
221
+ * Whether the Node.js inline loop retains a suspended workflow VM within one
222
+ * invocation (default ON). When on, a step- or attribute-driven suspension can
223
+ * keep the live VM, event consumer, and hydrated state even with open hooks or
224
+ * waits. The next loop iteration appends newly durable events instead of
225
+ * rebuilding the `vm.Context` and replaying the whole event log. Hook- or
226
+ * wait-only suspensions park the invocation, while replay divergence falls back
227
+ * to the ordinary durable replay path. QuickJS manages its own retained loop.
228
+ *
229
+ * `WORKFLOW_RETAINED_VM=0` (or `false`) is the kill switch: every iteration
230
+ * replays the Node.js engine from scratch in a fresh VM, matching the
231
+ * pre-retention behavior.
232
+ */
233
+ export declare function isVmRetentionEnabled(): boolean;
234
+ /**
235
+ * Whether inline step ownership is enabled (default ON). When on, the lazy
236
+ * `step_started` that creates an inline step records the owning queue
237
+ * message ID, and wake replays that observe an actively-owned step enqueue a
238
+ * *delayed backstop* message instead of immediately requeueing it, fixing
239
+ * duplicate inline step execution when a hook/wait wakes a run mid-step
240
+ * (vercel/workflow#2780).
241
+ *
242
+ * `WORKFLOW_INLINE_OWNERSHIP=0` (or `false`) is the kill switch: dispatch
243
+ * reverts to the unconditional immediate requeue. Stamping is unaffected:
244
+ * the recorded ownerMessageId is inert data when the switch is off.
245
+ */
246
+ export declare function isInlineOwnershipEnabled(): boolean;
247
+ /**
248
+ * Default inline-ownership lease, in seconds: how long after a step's latest
249
+ * (stamped) `step_started` a non-owner invocation assumes the owning
250
+ * invocation may still be alive. Within the lease, wake replays enqueue the
251
+ * step's backstop message with `delaySeconds = lease remaining` instead of
252
+ * immediately; past it, they enqueue immediately (today's behavior).
253
+ *
254
+ * Why a fixed 860 and not a value derived from the function's `maxDuration`:
255
+ * neither runtime nor build time can see the resolved value: builders emit
256
+ * `maxDuration: 'max'`, which the platform resolves per-plan at deploy, and
257
+ * no env var or request-context deadline API exposes the result. The bound
258
+ * comes from a platform rule instead: durations above 800s require explicit
259
+ * per-function numeric config, so a builder-emitted `'max'` resolves to at
260
+ * most 800s, and 860s therefore dominates any workflow route's invocation
261
+ * lifetime plus scheduling slack. Revisit when that ceiling moves (the
262
+ * 30-minute duration beta becoming reachable via `'max'` would invalidate
263
+ * the bound). Worlds without an invocation kill bound (world-local,
264
+ * self-hosted) get no death proof from any constant. There the in-process
265
+ * single-flight layer (step-single-flight.ts) is what makes a backstop
266
+ * firing mid-step harmless.
267
+ *
268
+ * 860 also stays under the queue's 900s maximum delay (SQS cap), so a
269
+ * backstop's full lease remainder always fits in a single delayed message.
270
+ *
271
+ * Override via `WORKFLOW_INLINE_OWNERSHIP_LEASE_SECONDS` (clamped to
272
+ * 1..`MAX_INLINE_OWNERSHIP_LEASE_SECONDS`).
273
+ */
274
+ export declare const INLINE_OWNERSHIP_LEASE_SECONDS = 860;
275
+ /**
276
+ * Upper bound for the lease env override. 900s is the queue's maximum
277
+ * per-message delay (SQS cap). A longer lease would need delay chaining
278
+ * like long waits use; clamp instead so one delayed message always suffices.
279
+ */
280
+ export declare const MAX_INLINE_OWNERSHIP_LEASE_SECONDS = 900;
281
+ /**
282
+ * Effective inline-ownership lease. Override via
283
+ * `WORKFLOW_INLINE_OWNERSHIP_LEASE_SECONDS`, e.g. raise it on self-hosted
284
+ * multi-instance worlds with long-running steps to widen the window in which
285
+ * a live owner is protected from a concurrent backstop execution.
286
+ */
287
+ export declare function getInlineOwnershipLeaseSeconds(): number;
288
+ export declare const REPLAY_DIVERGENCE_MAX_RETRIES = 3;
289
+ /**
290
+ * Effective replay-divergence recovery budget. Override via
291
+ * `WORKFLOW_REPLAY_DIVERGENCE_MAX_RETRIES`.
292
+ */
293
+ export declare function getReplayDivergenceMaxRetries(): number;
294
+ export declare const PRECONDITION_MAX_INPROCESS_RESTARTS = 3;
295
+ /**
296
+ * Effective in-process replay-restart budget for stale-snapshot rejections.
297
+ * Override via `WORKFLOW_PRECONDITION_MAX_INPROCESS_RESTARTS`.
298
+ */
299
+ export declare function getPreconditionMaxInProcessRestarts(): number;
300
+ export declare const PRECONDITION_MAX_REINVOCATIONS = 5;
301
+ /**
302
+ * Effective per-run budget for re-invocations caused by stale-snapshot
303
+ * rejections. Override via `WORKFLOW_PRECONDITION_MAX_REINVOCATIONS`.
304
+ */
305
+ export declare function getPreconditionMaxReinvocations(): number;
306
+ export declare const PRECONDITION_REINVOKE_DELAY_SECONDS = 2;
307
+ /**
308
+ * Effective delay before a precondition re-invocation. Override via
309
+ * `WORKFLOW_PRECONDITION_REINVOKE_DELAY_SECONDS`.
310
+ */
311
+ export declare function getPreconditionReinvokeDelaySeconds(): number;
312
+ export declare const DEPLOYMENT_MISMATCH_MAX_RETRIES = 3;
313
+ /**
314
+ * Effective deployment-mismatch re-route budget. Override via
315
+ * `WORKFLOW_DEPLOYMENT_MISMATCH_MAX_RETRIES`; `0` fails the run on the first
316
+ * misrouted delivery instead of attempting recovery.
317
+ */
318
+ export declare function getDeploymentMismatchMaxRetries(): number;
4
319
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/runtime/constants.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,oBAAoB,KAAK,CAAC;AASvC,eAAO,MAAM,iBAAiB,SAAU,CAAC;AAMzC,eAAO,MAAM,0BAA0B,IAAI,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/runtime/constants.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAW9C;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,iBAAiB,SAAU,CAAC;AAEzC,2DAA2D;AAC3D,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAE5C;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,SAAU,CAAC;AAwB7C;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CA6B3C;AAED;;;;;GAKG;AACH,wBAAgB,oCAAoC,IAAI,IAAI,CAE3D;AAMD,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAMnD;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CA2B1C;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,8BAA8B,QAAa,CAAC;AAEzD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,8BAA8B,IAAI,OAAO,CAExD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAInD;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAezD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,8BAA8B,IAAI,OAAO,CAIxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,yCAAyC,IAAI,OAAO,CAInE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAIxC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gCAAgC,IAAI,OAAO,CAI1D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAI9C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,IAAI,OAAO,CAIlD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,kCAAkC,MAAM,CAAC;AAEtD;;;;;GAKG;AACH,wBAAgB,8BAA8B,IAAI,MAAM,CAMvD;AAKD,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAE/C;;;GAGG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,CAMtD;AAQD,eAAO,MAAM,mCAAmC,IAAI,CAAC;AAErD;;;GAGG;AACH,wBAAgB,mCAAmC,IAAI,MAAM,CAM5D;AASD,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,+BAA+B,IAAI,MAAM,CAMxD;AAMD,eAAO,MAAM,mCAAmC,IAAI,CAAC;AAErD;;;GAGG;AACH,wBAAgB,mCAAmC,IAAI,MAAM,CAM5D;AAKD,eAAO,MAAM,+BAA+B,IAAI,CAAC;AAEjD;;;;GAIG;AACH,wBAAgB,+BAA+B,IAAI,MAAM,CAMxD"}