@temelj/workflow 0.0.0-alpha.2 → 0.0.0-alpha.4

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 (461) hide show
  1. package/README.md +394 -2
  2. package/dist/attributes.d.mts +11 -9
  3. package/dist/attributes.mjs +23 -5
  4. package/dist/bundle.d.mts +5 -23
  5. package/dist/bundle.mjs +2 -18
  6. package/dist/client/create.d.mts +26 -23
  7. package/dist/client/create.mjs +26 -32
  8. package/dist/client/facades.d.mts +12 -18
  9. package/dist/client/facades.mjs +102 -93
  10. package/dist/client/mod.mjs +1 -2
  11. package/dist/client/run-handle.d.mts +17 -54
  12. package/dist/client/run-handle.mjs +35 -105
  13. package/dist/client/worker-options.d.mts +8 -8
  14. package/dist/client/worker-options.mjs +11 -11
  15. package/dist/cloudflare/cloudflare.d.mts +4 -5
  16. package/dist/cloudflare/codec.d.mts +28 -13
  17. package/dist/cloudflare/codec.mjs +40 -17
  18. package/dist/cloudflare/entrypoint.d.mts +3 -4
  19. package/dist/cloudflare/entrypoint.mjs +4 -3
  20. package/dist/cloudflare/execution.d.mts +3 -4
  21. package/dist/cloudflare/execution.mjs +20 -13
  22. package/dist/cloudflare/host.d.mts +6 -7
  23. package/dist/cloudflare/host.mjs +7 -6
  24. package/dist/cloudflare/mod.d.mts +4 -4
  25. package/dist/cloudflare/mod.mjs +2 -2
  26. package/dist/cloudflare/name.d.mts +3 -4
  27. package/dist/cloudflare/name.mjs +3 -3
  28. package/dist/cloudflare/registry.d.mts +3 -23
  29. package/dist/cloudflare/registry.mjs +2 -20
  30. package/dist/cloudflare/runtime.d.mts +11 -18
  31. package/dist/cloudflare/runtime.mjs +52 -73
  32. package/dist/cloudflare/step.d.mts +6 -6
  33. package/dist/cloudflare/step.mjs +69 -57
  34. package/dist/cloudflare/types.d.mts +17 -36
  35. package/dist/collection.d.mts +8 -11
  36. package/dist/collection.mjs +10 -14
  37. package/dist/compiled-function.d.mts +14 -19
  38. package/dist/compiled-function.mjs +12 -24
  39. package/dist/compiled.d.mts +4 -0
  40. package/dist/compiled.mjs +4 -0
  41. package/dist/compiler/ast.d.mts +26 -0
  42. package/dist/{vite → compiler}/ast.mjs +24 -16
  43. package/dist/{vite → compiler}/error.d.mts +4 -6
  44. package/dist/{vite → compiler}/error.mjs +14 -16
  45. package/dist/compiler/manifest.d.mts +6 -0
  46. package/dist/{vite → compiler}/manifest.mjs +9 -7
  47. package/dist/compiler/plugin.d.mts +7 -0
  48. package/dist/{vite → compiler}/plugin.mjs +45 -46
  49. package/dist/compiler/safety.d.mts +12 -0
  50. package/dist/{vite → compiler}/safety.mjs +5 -11
  51. package/dist/{vite → compiler}/source-edit.d.mts +3 -4
  52. package/dist/{vite → compiler}/source-edit.mjs +1 -1
  53. package/dist/{vite → compiler}/source-map.d.mts +4 -3
  54. package/dist/{vite → compiler}/source-map.mjs +3 -3
  55. package/dist/compiler/source.d.mts +7 -0
  56. package/dist/{vite → compiler}/source.mjs +1 -1
  57. package/dist/compiler/transform.d.mts +12 -0
  58. package/dist/{vite → compiler}/transform.mjs +37 -38
  59. package/dist/definition.d.mts +17 -25
  60. package/dist/definition.mjs +19 -35
  61. package/dist/engine/child-workflow.d.mts +5 -9
  62. package/dist/engine/child-workflow.mjs +46 -67
  63. package/dist/engine/command-identity.d.mts +5 -6
  64. package/dist/engine/command-identity.mjs +9 -5
  65. package/dist/engine/context.d.mts +17 -0
  66. package/dist/engine/create.d.mts +36 -94
  67. package/dist/engine/create.mjs +55 -260
  68. package/dist/engine/deterministic.d.mts +6 -11
  69. package/dist/engine/deterministic.mjs +47 -68
  70. package/dist/engine/durable-command.d.mts +5 -5
  71. package/dist/engine/durable-command.mjs +2 -2
  72. package/dist/engine/execution-service.d.mts +20 -24
  73. package/dist/engine/execution-service.mjs +54 -52
  74. package/dist/engine/hooks.d.mts +17 -39
  75. package/dist/engine/hooks.mjs +73 -94
  76. package/dist/engine/inspection.d.mts +23 -15
  77. package/dist/engine/inspection.mjs +55 -29
  78. package/dist/engine/lifecycle.d.mts +6 -12
  79. package/dist/engine/lifecycle.mjs +5 -5
  80. package/dist/engine/lock-replay.d.mts +8 -15
  81. package/dist/engine/lock-replay.mjs +12 -25
  82. package/dist/engine/lock.d.mts +10 -15
  83. package/dist/engine/lock.mjs +65 -51
  84. package/dist/engine/message.d.mts +14 -34
  85. package/dist/engine/message.mjs +94 -127
  86. package/dist/engine/observation.d.mts +9 -11
  87. package/dist/engine/observation.mjs +18 -27
  88. package/dist/engine/replay.d.mts +18 -19
  89. package/dist/engine/replay.mjs +32 -56
  90. package/dist/engine/resume.d.mts +16 -0
  91. package/dist/engine/resume.mjs +24 -0
  92. package/dist/engine/retry.d.mts +15 -19
  93. package/dist/engine/retry.mjs +17 -17
  94. package/dist/engine/run-data.d.mts +4 -8
  95. package/dist/engine/run-data.mjs +24 -22
  96. package/dist/engine/run-service.d.mts +24 -33
  97. package/dist/engine/run-service.mjs +125 -93
  98. package/dist/engine/run-utils.d.mts +11 -13
  99. package/dist/engine/run-utils.mjs +23 -46
  100. package/dist/engine/schedule.d.mts +8 -22
  101. package/dist/engine/schedule.mjs +37 -34
  102. package/dist/engine/serialization.d.mts +9 -6
  103. package/dist/engine/serialization.mjs +30 -21
  104. package/dist/engine/signals.d.mts +23 -0
  105. package/dist/engine/signals.mjs +41 -0
  106. package/dist/engine/start.d.mts +18 -0
  107. package/dist/engine/start.mjs +88 -0
  108. package/dist/engine/state.d.mts +37 -67
  109. package/dist/engine/state.mjs +127 -282
  110. package/dist/engine/step-api.d.mts +5 -8
  111. package/dist/engine/step-api.mjs +16 -16
  112. package/dist/engine/stream-reader.d.mts +12 -0
  113. package/dist/engine/stream-reader.mjs +154 -0
  114. package/dist/engine/stream.d.mts +9 -54
  115. package/dist/engine/stream.mjs +54 -196
  116. package/dist/engine/summary/recovery.d.mts +35 -0
  117. package/dist/engine/summary/recovery.mjs +363 -0
  118. package/dist/engine/summary/runs.d.mts +43 -0
  119. package/dist/engine/summary/runs.mjs +294 -0
  120. package/dist/engine/summary/step-attempts.d.mts +5 -10
  121. package/dist/engine/summary/step-attempts.mjs +157 -36
  122. package/dist/engine/summary/tally.d.mts +44 -0
  123. package/dist/engine/summary/tally.mjs +142 -0
  124. package/dist/engine/task.d.mts +4 -5
  125. package/dist/engine/task.mjs +40 -48
  126. package/dist/errors/base.d.mts +17 -77
  127. package/dist/errors/base.mjs +26 -327
  128. package/dist/errors/capability.d.mts +3 -6
  129. package/dist/errors/capability.mjs +4 -8
  130. package/dist/errors/codes.d.mts +116 -0
  131. package/dist/{types/error-code.mjs → errors/codes.mjs} +2 -17
  132. package/dist/errors/definition.d.mts +3 -17
  133. package/dist/errors/definition.mjs +5 -42
  134. package/dist/errors/failures.d.mts +17 -51
  135. package/dist/errors/failures.mjs +35 -102
  136. package/dist/errors/hook.d.mts +5 -9
  137. package/dist/errors/hook.mjs +4 -16
  138. package/dist/errors/implementation.d.mts +3 -6
  139. package/dist/errors/implementation.mjs +7 -12
  140. package/dist/errors/lock.d.mts +7 -20
  141. package/dist/errors/lock.mjs +8 -44
  142. package/dist/errors/message.d.mts +14 -59
  143. package/dist/errors/message.mjs +13 -39
  144. package/dist/errors/mod.d.mts +4 -5
  145. package/dist/errors/mod.mjs +5 -7
  146. package/dist/errors/records.d.mts +10 -4
  147. package/dist/errors/records.mjs +256 -256
  148. package/dist/errors/run.d.mts +27 -68
  149. package/dist/errors/run.mjs +31 -85
  150. package/dist/errors/schedule.d.mts +7 -18
  151. package/dist/errors/schedule.mjs +7 -39
  152. package/dist/errors/step.d.mts +12 -45
  153. package/dist/errors/step.mjs +13 -34
  154. package/dist/errors/stream.d.mts +8 -16
  155. package/dist/errors/stream.mjs +7 -41
  156. package/dist/esbuild.d.mts +6 -4
  157. package/dist/esbuild.mjs +2 -1
  158. package/dist/events/descriptors.d.mts +12 -241
  159. package/dist/events/descriptors.mjs +12 -5
  160. package/dist/history/projection.d.mts +4 -6
  161. package/dist/history/projection.mjs +22 -26
  162. package/dist/history/replay-projection.d.mts +44 -48
  163. package/dist/history/replay-projection.mjs +41 -50
  164. package/dist/history/{mod.d.mts → replay.d.mts} +16 -21
  165. package/dist/history/{mod.mjs → replay.mjs} +21 -25
  166. package/dist/history/sequencer.d.mts +10 -11
  167. package/dist/history/sequencer.mjs +11 -7
  168. package/dist/history/step-attempts.d.mts +4 -7
  169. package/dist/history/step-attempts.mjs +8 -9
  170. package/dist/history/timeline.d.mts +4 -13
  171. package/dist/history/timeline.mjs +46 -265
  172. package/dist/history/validator.d.mts +5 -7
  173. package/dist/history/validator.mjs +9 -24
  174. package/dist/hook-token.d.mts +7 -0
  175. package/dist/hook-token.mjs +32 -0
  176. package/dist/ids.d.mts +8 -0
  177. package/dist/ids.mjs +21 -0
  178. package/dist/message-options.d.mts +11 -5
  179. package/dist/message-options.mjs +9 -7
  180. package/dist/mod.d.mts +32 -36
  181. package/dist/mod.mjs +9 -13
  182. package/dist/otel/metrics.d.mts +31 -0
  183. package/dist/otel/metrics.mjs +60 -0
  184. package/dist/otel/mod.d.mts +3 -0
  185. package/dist/otel/mod.mjs +3 -0
  186. package/dist/otel/spans.d.mts +24 -0
  187. package/dist/otel/spans.mjs +218 -0
  188. package/dist/otel/support.d.mts +15 -8
  189. package/dist/otel/support.mjs +18 -40
  190. package/dist/{otel.d.mts → otel/telemetry.d.mts} +5 -6
  191. package/dist/otel/telemetry.mjs +305 -0
  192. package/dist/pagination.d.mts +6 -12
  193. package/dist/pagination.mjs +10 -14
  194. package/dist/registry.d.mts +8 -5
  195. package/dist/registry.mjs +19 -10
  196. package/dist/rolldown.d.mts +6 -4
  197. package/dist/rolldown.mjs +2 -1
  198. package/dist/rollup.d.mts +6 -4
  199. package/dist/rollup.mjs +2 -1
  200. package/dist/rspack.d.mts +6 -4
  201. package/dist/rspack.mjs +2 -1
  202. package/dist/run-status.d.mts +29 -0
  203. package/dist/run-status.mjs +42 -0
  204. package/dist/schema/common.d.mts +22 -0
  205. package/dist/schema/common.mjs +54 -0
  206. package/dist/schema/error.d.mts +17 -0
  207. package/dist/schema/error.mjs +39 -0
  208. package/dist/schema/events.d.mts +446 -0
  209. package/dist/schema/events.mjs +235 -0
  210. package/dist/schema/pagination.d.mts +5 -0
  211. package/dist/schema/pagination.mjs +11 -0
  212. package/dist/schema/persisted-value.d.mts +8 -0
  213. package/dist/schema/persisted-value.mjs +94 -0
  214. package/dist/schema/run.d.mts +51 -0
  215. package/dist/schema/run.mjs +88 -0
  216. package/dist/schema/store.d.mts +94 -0
  217. package/dist/schema/store.mjs +116 -0
  218. package/dist/step-definition.d.mts +4 -9
  219. package/dist/step-definition.mjs +2 -2
  220. package/dist/store/capabilities.d.mts +8 -9
  221. package/dist/store/capabilities.mjs +7 -7
  222. package/dist/store/cleanup.d.mts +9 -14
  223. package/dist/store/cleanup.mjs +86 -85
  224. package/dist/store/create.d.mts +28 -29
  225. package/dist/store/create.mjs +10 -11
  226. package/dist/store/events.d.mts +48 -0
  227. package/dist/store/events.mjs +263 -0
  228. package/dist/store/indexes.d.mts +25 -0
  229. package/dist/store/indexes.mjs +282 -0
  230. package/dist/store/instrumentation.d.mts +2 -3
  231. package/dist/store/instrumentation.mjs +30 -30
  232. package/dist/store/lock.d.mts +4 -5
  233. package/dist/store/lock.mjs +5 -7
  234. package/dist/store/materialization.d.mts +10 -17
  235. package/dist/store/materialization.mjs +39 -33
  236. package/dist/store/mod.d.mts +3 -3
  237. package/dist/store/mod.mjs +2 -2
  238. package/dist/store/query.d.mts +13 -17
  239. package/dist/store/query.mjs +13 -13
  240. package/dist/store/run.d.mts +25 -34
  241. package/dist/store/run.mjs +67 -108
  242. package/dist/store/schedule.d.mts +6 -8
  243. package/dist/store/schedule.mjs +11 -11
  244. package/dist/store/step-attempt.d.mts +9 -12
  245. package/dist/store/step-attempt.mjs +9 -9
  246. package/dist/store/storage-value.d.mts +3 -3
  247. package/dist/store/storage-value.mjs +17 -1
  248. package/dist/store/validation.d.mts +17 -20
  249. package/dist/store/validation.mjs +30 -33
  250. package/dist/store-keys.d.mts +35 -47
  251. package/dist/store-keys.mjs +9 -17
  252. package/dist/telemetry.d.mts +16 -16
  253. package/dist/telemetry.mjs +3 -3
  254. package/dist/temporal.d.mts +11 -16
  255. package/dist/temporal.mjs +8 -9
  256. package/dist/timer.d.mts +12 -10
  257. package/dist/timer.mjs +11 -3
  258. package/dist/types/cleanup.d.mts +13 -50
  259. package/dist/types/cleanup.mjs +1 -22
  260. package/dist/types/client.d.mts +101 -162
  261. package/dist/types/{vite.d.mts → compiler.d.mts} +17 -24
  262. package/dist/types/compiler.mjs +1 -0
  263. package/dist/types/definition.d.mts +22 -34
  264. package/dist/types/engine-options.d.mts +10 -17
  265. package/dist/types/engine.d.mts +15 -274
  266. package/dist/types/error.d.mts +15 -217
  267. package/dist/types/error.mjs +1 -48
  268. package/dist/types/events.d.mts +59 -2730
  269. package/dist/types/events.mjs +1 -283
  270. package/dist/types/hook.d.mts +27 -85
  271. package/dist/types/hook.mjs +1 -66
  272. package/dist/types/ids.d.mts +9 -0
  273. package/dist/types/ids.mjs +1 -0
  274. package/dist/types/lock.d.mts +8 -26
  275. package/dist/types/lock.mjs +1 -18
  276. package/dist/types/message.d.mts +29 -43
  277. package/dist/types/observation.d.mts +43 -58
  278. package/dist/types/pagination.d.mts +6 -22
  279. package/dist/types/pagination.mjs +1 -13
  280. package/dist/types/result.d.mts +11 -43
  281. package/dist/types/retry.d.mts +7 -14
  282. package/dist/types/run-list.d.mts +9 -11
  283. package/dist/types/run-options.d.mts +25 -32
  284. package/dist/types/run.d.mts +35 -315
  285. package/dist/types/run.mjs +1 -207
  286. package/dist/types/runtime.d.mts +33 -145
  287. package/dist/types/runtime.mjs +1 -21
  288. package/dist/types/schedule.d.mts +13 -72
  289. package/dist/types/schedule.mjs +1 -48
  290. package/dist/types/step-attempts.d.mts +65 -261
  291. package/dist/types/step-attempts.mjs +1 -43
  292. package/dist/types/step.d.mts +66 -77
  293. package/dist/types/step.mjs +1 -5
  294. package/dist/types/store.d.mts +50 -182
  295. package/dist/types/stream.d.mts +19 -40
  296. package/dist/types/summary.d.mts +174 -278
  297. package/dist/types/telemetry.d.mts +23 -28
  298. package/dist/types/telemetry.mjs +1 -9
  299. package/dist/types/timeline.d.mts +46 -233
  300. package/dist/types/worker.d.mts +22 -29
  301. package/dist/values.d.mts +15 -0
  302. package/dist/values.mjs +57 -0
  303. package/dist/vite.d.mts +5 -6
  304. package/dist/vite.mjs +3 -4
  305. package/dist/webpack.d.mts +6 -4
  306. package/dist/webpack.mjs +2 -1
  307. package/dist/worker/error.d.mts +2 -9
  308. package/dist/worker/error.mjs +20 -32
  309. package/dist/worker/missing-implementation.d.mts +19 -0
  310. package/dist/worker/missing-implementation.mjs +62 -0
  311. package/dist/worker/worker.d.mts +18 -0
  312. package/dist/{worker.mjs → worker/worker.mjs} +64 -118
  313. package/package.json +28 -47
  314. package/dist/engine/execution-api.d.mts +0 -29
  315. package/dist/engine/execution-api.mjs +0 -33
  316. package/dist/engine/inspection-api.d.mts +0 -34
  317. package/dist/engine/inspection-api.mjs +0 -78
  318. package/dist/engine/mod.d.mts +0 -4
  319. package/dist/engine/mod.mjs +0 -2
  320. package/dist/engine/recovery.d.mts +0 -26
  321. package/dist/engine/recovery.mjs +0 -92
  322. package/dist/engine/retry-policy.d.mts +0 -4
  323. package/dist/engine/retry-policy.mjs +0 -4
  324. package/dist/engine/start-api.d.mts +0 -30
  325. package/dist/engine/start-api.mjs +0 -99
  326. package/dist/engine/summary/active-events.d.mts +0 -34
  327. package/dist/engine/summary/active-events.mjs +0 -69
  328. package/dist/engine/summary/child-workflow-runs.d.mts +0 -24
  329. package/dist/engine/summary/child-workflow-runs.mjs +0 -138
  330. package/dist/engine/summary/child-workflow-waits.d.mts +0 -21
  331. package/dist/engine/summary/child-workflow-waits.mjs +0 -67
  332. package/dist/engine/summary/recovery-child-workflow-waits.d.mts +0 -11
  333. package/dist/engine/summary/recovery-child-workflow-waits.mjs +0 -89
  334. package/dist/engine/summary/recovery-due-runs.d.mts +0 -16
  335. package/dist/engine/summary/recovery-due-runs.mjs +0 -52
  336. package/dist/engine/summary/recovery-failed-runs.d.mts +0 -14
  337. package/dist/engine/summary/recovery-failed-runs.mjs +0 -33
  338. package/dist/engine/summary/recovery-lease-runs.d.mts +0 -16
  339. package/dist/engine/summary/recovery-lease-runs.mjs +0 -69
  340. package/dist/engine/summary/recovery-locks.d.mts +0 -18
  341. package/dist/engine/summary/recovery-locks.mjs +0 -100
  342. package/dist/engine/summary/recovery-message-waits.d.mts +0 -11
  343. package/dist/engine/summary/recovery-message-waits.mjs +0 -74
  344. package/dist/engine/summary/recovery-retry-runs.d.mts +0 -17
  345. package/dist/engine/summary/recovery-retry-runs.mjs +0 -65
  346. package/dist/engine/summary/recovery-run-timestamps.d.mts +0 -13
  347. package/dist/engine/summary/recovery-run-timestamps.mjs +0 -18
  348. package/dist/engine/summary/recovery-runs.d.mts +0 -23
  349. package/dist/engine/summary/recovery-runs.mjs +0 -54
  350. package/dist/engine/summary/recovery-schedules.d.mts +0 -10
  351. package/dist/engine/summary/recovery-schedules.mjs +0 -46
  352. package/dist/engine/summary/recovery-sleep-waits.d.mts +0 -10
  353. package/dist/engine/summary/recovery-sleep-waits.mjs +0 -53
  354. package/dist/engine/summary/recovery-waits.d.mts +0 -21
  355. package/dist/engine/summary/recovery-waits.mjs +0 -29
  356. package/dist/engine/summary/run-availability.d.mts +0 -13
  357. package/dist/engine/summary/run-availability.mjs +0 -37
  358. package/dist/engine/summary/run-cleanup.d.mts +0 -14
  359. package/dist/engine/summary/run-cleanup.mjs +0 -44
  360. package/dist/engine/summary/run-failure.d.mts +0 -14
  361. package/dist/engine/summary/run-failure.mjs +0 -62
  362. package/dist/engine/summary/run-hooks.d.mts +0 -14
  363. package/dist/engine/summary/run-hooks.mjs +0 -63
  364. package/dist/engine/summary/run-lease.d.mts +0 -11
  365. package/dist/engine/summary/run-lease.mjs +0 -64
  366. package/dist/engine/summary/run-message-waits.d.mts +0 -15
  367. package/dist/engine/summary/run-message-waits.mjs +0 -62
  368. package/dist/engine/summary/run-metrics.d.mts +0 -31
  369. package/dist/engine/summary/run-metrics.mjs +0 -93
  370. package/dist/engine/summary/run-retry.d.mts +0 -9
  371. package/dist/engine/summary/run-retry.mjs +0 -69
  372. package/dist/engine/summary/run-sleeps.d.mts +0 -15
  373. package/dist/engine/summary/run-sleeps.mjs +0 -61
  374. package/dist/engine/summary/run-state.d.mts +0 -26
  375. package/dist/engine/summary/run-state.mjs +0 -48
  376. package/dist/engine/summary/run-status.d.mts +0 -16
  377. package/dist/engine/summary/run-status.mjs +0 -35
  378. package/dist/engine/summary/run-streams.d.mts +0 -14
  379. package/dist/engine/summary/run-streams.mjs +0 -46
  380. package/dist/engine/summary/run-transition.d.mts +0 -9
  381. package/dist/engine/summary/run-transition.mjs +0 -39
  382. package/dist/engine/summary/run-workflow.d.mts +0 -9
  383. package/dist/engine/summary/run-workflow.mjs +0 -47
  384. package/dist/engine/summary/step-attempt-active-child-workflows.d.mts +0 -13
  385. package/dist/engine/summary/step-attempt-active-child-workflows.mjs +0 -55
  386. package/dist/engine/summary/step-attempt-active-fields.d.mts +0 -23
  387. package/dist/engine/summary/step-attempt-active-fields.mjs +0 -14
  388. package/dist/engine/summary/step-attempt-active-message-waits.d.mts +0 -12
  389. package/dist/engine/summary/step-attempt-active-message-waits.mjs +0 -47
  390. package/dist/engine/summary/step-attempt-active-sleeps.d.mts +0 -19
  391. package/dist/engine/summary/step-attempt-active-sleeps.mjs +0 -44
  392. package/dist/engine/summary/step-attempt-buckets.d.mts +0 -22
  393. package/dist/engine/summary/step-attempt-buckets.mjs +0 -152
  394. package/dist/engine/summary/step-attempt-failure.d.mts +0 -12
  395. package/dist/engine/summary/step-attempt-failure.mjs +0 -61
  396. package/dist/engine/summary/step-attempt-lifecycle.d.mts +0 -13
  397. package/dist/engine/summary/step-attempt-lifecycle.mjs +0 -19
  398. package/dist/engine/summary.d.mts +0 -32
  399. package/dist/engine/summary.mjs +0 -37
  400. package/dist/errors/details.d.mts +0 -13
  401. package/dist/errors/details.mjs +0 -66
  402. package/dist/errors/record-view.d.mts +0 -11
  403. package/dist/errors/record-view.mjs +0 -24
  404. package/dist/errors/runtime.d.mts +0 -12
  405. package/dist/errors/runtime.mjs +0 -24
  406. package/dist/events/mod.d.mts +0 -3
  407. package/dist/events/mod.mjs +0 -2
  408. package/dist/history/attempt-key.d.mts +0 -6
  409. package/dist/history/attempt-key.mjs +0 -7
  410. package/dist/inspection/mod.d.mts +0 -5
  411. package/dist/inspection/mod.mjs +0 -3
  412. package/dist/otel.mjs +0 -590
  413. package/dist/runtime.d.mts +0 -35
  414. package/dist/runtime.mjs +0 -198
  415. package/dist/store/append-projection.d.mts +0 -15
  416. package/dist/store/append-projection.mjs +0 -26
  417. package/dist/store/compaction.d.mts +0 -5
  418. package/dist/store/compaction.mjs +0 -8
  419. package/dist/store/event-append-project.d.mts +0 -15
  420. package/dist/store/event-append-project.mjs +0 -77
  421. package/dist/store/event-append.d.mts +0 -37
  422. package/dist/store/event-append.mjs +0 -80
  423. package/dist/store/event-history.d.mts +0 -22
  424. package/dist/store/event-history.mjs +0 -75
  425. package/dist/store/event.d.mts +0 -10
  426. package/dist/store/event.mjs +0 -28
  427. package/dist/store/idempotency.d.mts +0 -10
  428. package/dist/store/idempotency.mjs +0 -167
  429. package/dist/store/message-index.d.mts +0 -21
  430. package/dist/store/message-index.mjs +0 -122
  431. package/dist/store/revision.d.mts +0 -4
  432. package/dist/store/revision.mjs +0 -7
  433. package/dist/store/schema.d.mts +0 -14
  434. package/dist/store/schema.mjs +0 -17
  435. package/dist/types/common.d.mts +0 -20
  436. package/dist/types/common.mjs +0 -16
  437. package/dist/types/error-code.d.mts +0 -256
  438. package/dist/types/message-id.d.mts +0 -7
  439. package/dist/types/message-id.mjs +0 -5
  440. package/dist/types/run-id.d.mts +0 -7
  441. package/dist/types/run-id.mjs +0 -5
  442. package/dist/types/step-id.d.mts +0 -7
  443. package/dist/types/step-id.mjs +0 -5
  444. package/dist/types/stream-id.d.mts +0 -7
  445. package/dist/types/stream-id.mjs +0 -5
  446. package/dist/types/worker-id.d.mts +0 -7
  447. package/dist/types/worker-id.mjs +0 -5
  448. package/dist/utility.d.mts +0 -49
  449. package/dist/utility.mjs +0 -122
  450. package/dist/vite/ast.d.mts +0 -23
  451. package/dist/vite/generated-name.d.mts +0 -7
  452. package/dist/vite/generated-name.mjs +0 -9
  453. package/dist/vite/manifest.d.mts +0 -7
  454. package/dist/vite/plugin.d.mts +0 -7
  455. package/dist/vite/safety.d.mts +0 -12
  456. package/dist/vite/source.d.mts +0 -7
  457. package/dist/vite/transform.d.mts +0 -7
  458. package/dist/webhook.d.mts +0 -16
  459. package/dist/webhook.mjs +0 -17
  460. package/dist/worker.d.mts +0 -19
  461. /package/dist/{types/vite.mjs → engine/context.mjs} +0 -0
@@ -0,0 +1,154 @@
1
+ import { WorkflowErrorCode } from "../errors/codes.mjs";
2
+ import { WorkflowOptionsError } from "../errors/base.mjs";
3
+ import { WorkflowStreamError } from "../errors/stream.mjs";
4
+ import { matchesWorkflowError } from "../errors/records.mjs";
5
+ import "../errors/mod.mjs";
6
+ import { History } from "../history/replay.mjs";
7
+ import { isNonNegativeSafeInteger } from "../values.mjs";
8
+ import { getRequiredRun } from "../store/query.mjs";
9
+ import { nonNegativeTimerDelay } from "../timer.mjs";
10
+ import { getStreamInfoFromHistory, readStreamFromHistory } from "./stream.mjs";
11
+ import "temporal-polyfill/global";
12
+ //#region src/engine/stream-reader.ts
13
+ const DEFAULT_STREAM_FOLLOW_POLL_INTERVAL = Temporal.Duration.from({ milliseconds: 100 });
14
+ async function getStreamInfo(context, runId, streamIdOrName) {
15
+ await getRequiredRun(context.store, runId);
16
+ return getStreamInfoFromHistory(runId, new History(await context.store.getEvents(runId)), streamIdOrName);
17
+ }
18
+ async function readStream(context, runId, streamIdOrName, readOptions) {
19
+ await getRequiredRun(context.store, runId);
20
+ return readStreamFromHistory(runId, new History(await context.store.getEvents(runId)), streamIdOrName, readOptions);
21
+ }
22
+ function followStream(context, runId, streamIdOrName, followOptions) {
23
+ return followStreamState((readOptions) => readStream(context, runId, streamIdOrName, readOptions), followOptions, { waitForChange: ({ signal }) => waitForStreamStorageChange(context, runId, signal) });
24
+ }
25
+ async function waitForStream(context, runId, streamIdOrName, waitOptions) {
26
+ return await waitForStreamState(() => getStreamInfo(context, runId, streamIdOrName), waitOptions, { waitForChange: ({ signal }) => waitForStreamStorageChange(context, runId, signal) });
27
+ }
28
+ async function waitForStreamChunk(context, runId, streamIdOrName, afterIndex, waitOptions) {
29
+ return await waitForStreamStateChunk((readOptions) => readStream(context, runId, streamIdOrName, readOptions), afterIndex, waitOptions, { waitForChange: ({ signal }) => waitForStreamStorageChange(context, runId, signal) });
30
+ }
31
+ async function waitForStreamTerminal(context, runId, streamIdOrName, waitOptions) {
32
+ return await waitForStreamStateTerminal(() => getStreamInfo(context, runId, streamIdOrName), waitOptions, { waitForChange: ({ signal }) => waitForStreamStorageChange(context, runId, signal) });
33
+ }
34
+ async function waitForStreamStorageChange(context, runId, signal) {
35
+ await context.store.waitForEventHistoryChange(runId, { signal });
36
+ }
37
+ async function* followStreamState(read, options = {}, waitOptions = {}) {
38
+ if (options.fromIndex !== void 0 && options.fromTail !== void 0) WorkflowStreamError.readOffsetConflict();
39
+ const pollInterval = options.pollInterval ?? DEFAULT_STREAM_FOLLOW_POLL_INTERVAL;
40
+ const maxChunks = options.pageSize ?? options.maxChunks;
41
+ let nextIndex = options.fromIndex;
42
+ let initialFromTail = options.fromTail;
43
+ while (true) {
44
+ if (options.signal?.aborted) return;
45
+ const stream = await read({
46
+ fromIndex: nextIndex,
47
+ fromTail: nextIndex === void 0 ? initialFromTail : void 0,
48
+ maxChunks
49
+ });
50
+ initialFromTail = void 0;
51
+ for (const chunk of stream.chunks) {
52
+ if (options.signal?.aborted) return;
53
+ nextIndex = chunk.index + 1;
54
+ yield {
55
+ kind: "chunk",
56
+ runId: stream.runId,
57
+ streamId: stream.id,
58
+ streamName: stream.name,
59
+ chunk
60
+ };
61
+ }
62
+ if (nextIndex !== void 0 && nextIndex < stream.chunkCount) continue;
63
+ if (stream.status !== "open") {
64
+ if (options.includeTerminal !== false) {
65
+ const info = {
66
+ runId: stream.runId,
67
+ id: stream.id,
68
+ name: stream.name,
69
+ status: stream.status,
70
+ createdAt: stream.createdAt,
71
+ updatedAt: stream.updatedAt,
72
+ contentType: stream.contentType,
73
+ metadata: stream.metadata,
74
+ chunkCount: stream.chunkCount,
75
+ lastIndex: stream.lastIndex,
76
+ error: stream.error
77
+ };
78
+ yield {
79
+ kind: stream.status,
80
+ runId: stream.runId,
81
+ streamId: stream.id,
82
+ streamName: stream.name,
83
+ info
84
+ };
85
+ }
86
+ return;
87
+ }
88
+ await waitForStreamChangeOrPoll(nonNegativeTimerDelay(pollInterval, "Workflow stream follow pollInterval").clampedDelay, options.signal, waitOptions.waitForChange);
89
+ }
90
+ }
91
+ /** Waits for the next stream change, or for one poll interval when changes cannot be watched. */
92
+ async function pollForStreamChange(options, waitOptions) {
93
+ await waitForStreamChangeOrPoll(nonNegativeTimerDelay(options.pollInterval ?? DEFAULT_STREAM_FOLLOW_POLL_INTERVAL, "Workflow stream wait pollInterval").clampedDelay, options.signal, waitOptions.waitForChange);
94
+ }
95
+ async function waitForStreamState(readInfo, options = {}, waitOptions = {}) {
96
+ while (true) {
97
+ if (options.signal?.aborted) return;
98
+ try {
99
+ return await readInfo();
100
+ } catch (error) {
101
+ if (!matchesWorkflowError(error, WorkflowErrorCode.STREAM_NOT_FOUND)) throw error;
102
+ }
103
+ await pollForStreamChange(options, waitOptions);
104
+ }
105
+ }
106
+ async function waitForStreamStateChunk(read, afterIndex, options = {}, waitOptions = {}) {
107
+ if (!isNonNegativeSafeInteger(afterIndex)) WorkflowOptionsError.nonNegativeSafeInteger("Workflow stream chunk wait afterIndex");
108
+ while (true) {
109
+ if (options.signal?.aborted) return;
110
+ const stream = await read({ fromIndex: afterIndex + 1 });
111
+ const chunk = stream.chunks[0];
112
+ if (chunk !== void 0) return chunk;
113
+ if (stream.status !== "open") return;
114
+ await pollForStreamChange(options, waitOptions);
115
+ }
116
+ }
117
+ async function waitForStreamStateTerminal(readInfo, options = {}, waitOptions = {}) {
118
+ while (true) {
119
+ if (options.signal?.aborted === true) return;
120
+ const info = await readInfo();
121
+ if (info.status !== "open") return info;
122
+ await pollForStreamChange(options, waitOptions);
123
+ }
124
+ }
125
+ async function sleepForStreamFollow(milliseconds, signal) {
126
+ if (milliseconds === 0 || signal?.aborted) return;
127
+ await new Promise((resolve) => {
128
+ const timer = setTimeout(resolve, milliseconds);
129
+ signal?.addEventListener("abort", () => {
130
+ clearTimeout(timer);
131
+ resolve();
132
+ }, { once: true });
133
+ });
134
+ }
135
+ async function waitForStreamChangeOrPoll(milliseconds, signal, waitForChange) {
136
+ if (waitForChange === void 0) {
137
+ await sleepForStreamFollow(milliseconds, signal);
138
+ return;
139
+ }
140
+ const controller = new AbortController();
141
+ const abort = () => {
142
+ controller.abort();
143
+ };
144
+ signal?.addEventListener("abort", abort, { once: true });
145
+ try {
146
+ if (signal?.aborted === true) return;
147
+ await Promise.race([sleepForStreamFollow(milliseconds, controller.signal), waitForChange({ signal: controller.signal })]);
148
+ } finally {
149
+ signal?.removeEventListener("abort", abort);
150
+ controller.abort();
151
+ }
152
+ }
153
+ //#endregion
154
+ export { followStream, getStreamInfo, readStream, waitForStream, waitForStreamChunk, waitForStreamTerminal };
@@ -1,56 +1,11 @@
1
- import { RunId } from "../types/run-id.mjs";
2
- import { StreamIdOrName } from "../types/stream-id.mjs";
3
- import { CreateStreamOptions, FollowStreamOptions, ReadStreamOptions, ReadStreamPageOptions, Stream as Stream$1, StreamChunk, StreamInfo, StreamPage, StreamState, StreamUpdate, WaitStreamOptions } from "../types/stream.mjs";
4
- import { WorkflowStepStreamApi } from "../types/step.mjs";
5
- import { WorkflowStepIdentity } from "../types/run.mjs";
6
- import { EventRecord } from "../types/events.mjs";
7
- import { WorkflowEventHistoryWatcher, WorkflowEventReader, WorkflowRunReaderRepository } from "../types/store.mjs";
8
- import { WorkflowExecutionEnvironment } from "../types/engine.mjs";
1
+ import { RunId, StreamIdOrName } from "../types/ids.mjs";
2
+ import { ReadStreamOptions, StreamInfo, StreamState } from "../types/stream.mjs";
3
+ import { StepStreamApi } from "../types/step.mjs";
4
+ import { History } from "../history/replay.mjs";
5
+ import { ExecutionEnvironment } from "../types/engine.mjs";
9
6
  import "temporal-polyfill/global";
10
7
  //#region src/engine/stream.d.ts
11
- interface WorkflowStreamReader<TChunk> {
12
- (options?: ReadStreamOptions): Promise<StreamState<TChunk>>;
13
- }
14
- interface WorkflowStreamInfoReader {
15
- (): Promise<StreamInfo>;
16
- }
17
- interface WorkflowStreamChangeWaiter {
18
- (options: {
19
- readonly signal?: AbortSignal;
20
- }): Promise<void>;
21
- }
22
- interface WorkflowStreamWaitOptions {
23
- readonly waitForChange?: WorkflowStreamChangeWaiter;
24
- }
25
- type WorkflowStreamStore = WorkflowRunReaderRepository & WorkflowEventReader & WorkflowEventHistoryWatcher;
26
- interface WorkflowStreamServiceOptions {
27
- readonly store: WorkflowStreamStore;
28
- }
29
- declare function getStreamInfoForRun(service: WorkflowStreamServiceOptions, runId: RunId, streamIdOrName: StreamIdOrName): Promise<StreamInfo>;
30
- declare function readStreamForRun<TChunk = unknown>(service: WorkflowStreamServiceOptions, runId: RunId, streamIdOrName: StreamIdOrName, readOptions?: ReadStreamOptions): Promise<StreamState<TChunk>>;
31
- declare function readStreamPageForRun<TChunk = unknown>(service: WorkflowStreamServiceOptions, runId: RunId, streamIdOrName: StreamIdOrName, readOptions?: ReadStreamPageOptions): Promise<StreamPage<TChunk>>;
32
- declare function followStreamForRun<TChunk = unknown>(service: WorkflowStreamServiceOptions, runId: RunId, streamIdOrName: StreamIdOrName, followOptions?: FollowStreamOptions): AsyncIterable<StreamUpdate<TChunk>>;
33
- declare function waitForStreamForRun(service: WorkflowStreamServiceOptions, runId: RunId, streamIdOrName: StreamIdOrName, waitOptions?: WaitStreamOptions): Promise<StreamInfo | undefined>;
34
- declare function waitForStreamChunkForRun<TChunk = unknown>(service: WorkflowStreamServiceOptions, runId: RunId, streamIdOrName: StreamIdOrName, afterIndex: number, waitOptions?: WaitStreamOptions): Promise<StreamChunk<TChunk> | undefined>;
35
- declare function waitForStreamTerminalForRun(service: WorkflowStreamServiceOptions, runId: RunId, streamIdOrName: StreamIdOrName, waitOptions?: WaitStreamOptions): Promise<StreamInfo | undefined>;
36
- declare function createWorkflowStepStreamApi(environment: WorkflowExecutionEnvironment): WorkflowStepStreamApi;
37
- declare function createStream<TChunk>(environment: WorkflowExecutionEnvironment, identity: WorkflowStepIdentity<"stream">, name: string, options?: CreateStreamOptions): Stream<TChunk>;
38
- declare class Stream<TChunk> implements Stream$1<TChunk> {
39
- #private;
40
- readonly id: string;
41
- readonly name: string;
42
- readonly contentType?: string;
43
- readonly metadata?: unknown;
44
- constructor(environment: WorkflowExecutionEnvironment, identity: WorkflowStepIdentity<"stream">, name: string, options?: CreateStreamOptions);
45
- write(chunk: TChunk): Promise<void>;
46
- close(): Promise<void>;
47
- error(error: unknown): Promise<void>;
48
- }
49
- declare function readStream<TChunk = unknown>(runId: RunId, events: readonly EventRecord[], streamIdOrName: StreamIdOrName, options?: ReadStreamOptions): StreamState<TChunk>;
50
- declare function followStream<TChunk = unknown>(read: WorkflowStreamReader<TChunk>, options?: FollowStreamOptions, waitOptions?: WorkflowStreamWaitOptions): AsyncIterable<StreamUpdate<TChunk>>;
51
- declare function waitForStream(readInfo: WorkflowStreamInfoReader, options?: WaitStreamOptions, waitOptions?: WorkflowStreamWaitOptions): Promise<StreamInfo | undefined>;
52
- declare function waitForStreamChunk<TChunk = unknown>(read: WorkflowStreamReader<TChunk>, afterIndex: number, options?: WaitStreamOptions, waitOptions?: WorkflowStreamWaitOptions): Promise<StreamChunk<TChunk> | undefined>;
53
- declare function waitForStreamTerminal(readInfo: WorkflowStreamInfoReader, options?: WaitStreamOptions, waitOptions?: WorkflowStreamWaitOptions): Promise<StreamInfo | undefined>;
54
- declare function getStreamInfo(runId: RunId, events: readonly EventRecord[], streamIdOrName: StreamIdOrName): StreamInfo;
55
- //#endregion
56
- export { createStream, createWorkflowStepStreamApi, followStream, followStreamForRun, getStreamInfo, getStreamInfoForRun, readStream, readStreamForRun, readStreamPageForRun, waitForStream, waitForStreamChunk, waitForStreamChunkForRun, waitForStreamForRun, waitForStreamTerminal, waitForStreamTerminalForRun };
8
+ export declare function createStepStreamApi(environment: ExecutionEnvironment): StepStreamApi;
9
+ export declare function readStreamFromHistory(runId: RunId, history: History, streamIdOrName: StreamIdOrName, options?: ReadStreamOptions): StreamState;
10
+ export declare function getStreamInfoFromHistory(runId: RunId, history: History, streamIdOrName: StreamIdOrName): StreamInfo;
11
+ //#endregion
@@ -1,59 +1,20 @@
1
- import { WorkflowOptionsError } from "../errors/base.mjs";
1
+ import { WorkflowErrorCode } from "../errors/codes.mjs";
2
2
  import { WorkflowReplayDivergenceError } from "../errors/failures.mjs";
3
- import { getRequiredRun, isNonNegativeSafeInteger } from "../utility.mjs";
4
3
  import { WorkflowStreamError, WorkflowStreamNotFoundError } from "../errors/stream.mjs";
5
4
  import "../errors/mod.mjs";
6
- import { nonNegativeTimerDelay } from "../timer.mjs";
7
5
  import { serializeError, toOptionalPersistedValue, toPersistedValue } from "./serialization.mjs";
8
- import { WorkflowHistory } from "../history/mod.mjs";
9
- import "./state.mjs";
10
- import { makeStreamChunkCursorKey, pageItems } from "../pagination.mjs";
11
- import { resolveWorkflowCommandIdentity } from "./command-identity.mjs";
12
- import { appendDurableStepStartedEvent, appendDurableStepTerminalEvent } from "./durable-command.mjs";
6
+ import { resolveCommandIdentity } from "./command-identity.mjs";
7
+ import { appendDurableEvent, appendDurableStepStartedEvent } from "./durable-command.mjs";
13
8
  import "temporal-polyfill/global";
14
9
  import { deepEquals } from "@temelj/value";
15
10
  //#region src/engine/stream.ts
16
11
  const DEFAULT_MAXIMUM_STREAM_CHUNKS = 1e3;
17
- const DEFAULT_STREAM_FOLLOW_POLL_INTERVAL = Temporal.Duration.from({ milliseconds: 100 });
18
- async function getStreamInfoForRun(service, runId, streamIdOrName) {
19
- await getRequiredRun(service.store, runId);
20
- return getStreamInfoFromHistory(runId, new WorkflowHistory(await service.store.getEvents(runId)), streamIdOrName);
21
- }
22
- async function readStreamForRun(service, runId, streamIdOrName, readOptions) {
23
- await getRequiredRun(service.store, runId);
24
- return readStreamFromHistory(runId, new WorkflowHistory(await service.store.getEvents(runId)), streamIdOrName, readOptions);
25
- }
26
- async function readStreamPageForRun(service, runId, streamIdOrName, readOptions) {
27
- const stream = await readStreamForRun(service, runId, streamIdOrName, readOptions);
28
- return {
29
- ...stream,
30
- chunks: pageItems(stream.chunks, readOptions, "Workflow stream page", makeStreamChunkCursorKey)
31
- };
32
- }
33
- function followStreamForRun(service, runId, streamIdOrName, followOptions) {
34
- return followStream(async (readOptions) => await readStreamForRun(service, runId, streamIdOrName, readOptions), followOptions, { waitForChange: async ({ signal }) => await waitForStreamStorageChange(service, runId, signal) });
35
- }
36
- async function waitForStreamForRun(service, runId, streamIdOrName, waitOptions) {
37
- return await waitForStream(async () => await getStreamInfoForRun(service, runId, streamIdOrName), waitOptions, { waitForChange: async ({ signal }) => await waitForStreamStorageChange(service, runId, signal) });
38
- }
39
- async function waitForStreamChunkForRun(service, runId, streamIdOrName, afterIndex, waitOptions) {
40
- return await waitForStreamChunk(async (readOptions) => await readStreamForRun(service, runId, streamIdOrName, readOptions), afterIndex, waitOptions, { waitForChange: async ({ signal }) => await waitForStreamStorageChange(service, runId, signal) });
41
- }
42
- async function waitForStreamTerminalForRun(service, runId, streamIdOrName, waitOptions) {
43
- return await waitForStreamTerminal(async () => await getStreamInfoForRun(service, runId, streamIdOrName), waitOptions, { waitForChange: async ({ signal }) => await waitForStreamStorageChange(service, runId, signal) });
44
- }
45
- async function waitForStreamStorageChange(service, runId, signal) {
46
- await service.store.waitForEventHistoryChange(runId, { signal });
47
- }
48
- function createWorkflowStepStreamApi(environment) {
12
+ function createStepStreamApi(environment) {
49
13
  const { history } = environment;
50
14
  return { create(commandId, options = {}) {
51
- return createStream(environment, resolveWorkflowCommandIdentity(history, "stream", commandId), commandId, options);
15
+ return new Stream(environment, resolveCommandIdentity(history, "stream", commandId), commandId, options);
52
16
  } };
53
17
  }
54
- function createStream(environment, identity, name, options = {}) {
55
- return new Stream(environment, identity, name, options);
56
- }
57
18
  var Stream = class {
58
19
  id;
59
20
  name;
@@ -83,8 +44,20 @@ var Stream = class {
83
44
  this.#maximumChunks = maximumChunks;
84
45
  this.#persistedMetadata = persistedMetadata;
85
46
  }
86
- async write(chunk) {
47
+ async #start() {
87
48
  await ensureStreamStarted(this.#environment, this.#identity, this.id, this.contentType, this.#persistedMetadata);
49
+ }
50
+ /** Fields every event of this stream carries. */
51
+ #eventFields() {
52
+ return {
53
+ timestamp: this.#environment.now(),
54
+ stepId: this.#identity.id,
55
+ stepName: this.#identity.name,
56
+ streamId: this.id
57
+ };
58
+ }
59
+ async write(chunk) {
60
+ await this.#start();
88
61
  const persistedChunk = toPersistedValue(chunk, `workflow stream ${this.id} chunk`, this.#environment.limits);
89
62
  const existing = this.#environment.history.streamChunk(this.#identity.id, this.#nextChunkIndex);
90
63
  const index = this.#nextChunkIndex;
@@ -94,46 +67,37 @@ var Stream = class {
94
67
  return;
95
68
  }
96
69
  requireStreamOpen(this.#environment, this.#identity.id, this.id);
97
- if (index >= this.#maximumChunks) WorkflowStreamError.chunkLimitExceeded(this.id, this.#maximumChunks);
98
- await appendDurableStepTerminalEvent(this.#environment, {
99
- kind: "stream_chunk",
100
- timestamp: this.#environment.now(),
101
- stepId: this.#identity.id,
102
- stepName: this.#identity.name,
70
+ if (index >= this.#maximumChunks) throw new WorkflowStreamError(`Workflow stream ${this.id} chunk count would exceed maximumStreamChunks ${this.#maximumChunks}`, WorkflowErrorCode.STREAM_CHUNK_LIMIT_EXCEEDED, {
103
71
  streamId: this.id,
72
+ maximumChunks: this.#maximumChunks
73
+ });
74
+ await appendDurableEvent(this.#environment, {
75
+ kind: "stream_chunk",
76
+ ...this.#eventFields(),
104
77
  index,
105
78
  chunk: persistedChunk
106
79
  });
107
80
  }
108
81
  async close() {
109
- await ensureStreamStarted(this.#environment, this.#identity, this.id, this.contentType, this.#persistedMetadata);
82
+ await this.#start();
110
83
  if (this.#environment.history.closedStream(this.#identity.id) !== void 0) return;
111
84
  requireStreamOpen(this.#environment, this.#identity.id, this.id);
112
- await appendDurableStepTerminalEvent(this.#environment, {
85
+ await appendDurableEvent(this.#environment, {
113
86
  kind: "stream_closed",
114
- timestamp: this.#environment.now(),
115
- stepId: this.#identity.id,
116
- stepName: this.#identity.name,
117
- streamId: this.id
87
+ ...this.#eventFields()
118
88
  });
119
89
  }
120
- async error(error) {
121
- await ensureStreamStarted(this.#environment, this.#identity, this.id, this.contentType, this.#persistedMetadata);
90
+ async error(cause) {
91
+ await this.#start();
122
92
  if (this.#environment.history.failedStream(this.#identity.id) !== void 0) return;
123
93
  requireStreamOpen(this.#environment, this.#identity.id, this.id);
124
- await appendDurableStepTerminalEvent(this.#environment, {
94
+ await appendDurableEvent(this.#environment, {
125
95
  kind: "stream_failed",
126
- timestamp: this.#environment.now(),
127
- stepId: this.#identity.id,
128
- stepName: this.#identity.name,
129
- streamId: this.id,
130
- error: serializeError(error)
96
+ ...this.#eventFields(),
97
+ error: serializeError(cause)
131
98
  });
132
99
  }
133
100
  };
134
- function readStream(runId, events, streamIdOrName, options = {}) {
135
- return readStreamFromHistory(runId, new WorkflowHistory(events), streamIdOrName, options);
136
- }
137
101
  function readStreamFromHistory(runId, history, streamIdOrName, options = {}) {
138
102
  if (options.fromIndex !== void 0 && options.fromTail !== void 0) WorkflowStreamError.readOffsetConflict();
139
103
  const projection = requireStreamProjectionFromHistory(history, streamIdOrName);
@@ -149,96 +113,12 @@ function readStreamFromHistory(runId, history, streamIdOrName, options = {}) {
149
113
  chunks
150
114
  };
151
115
  }
152
- async function* followStream(read, options = {}, waitOptions = {}) {
153
- if (options.fromIndex !== void 0 && options.fromTail !== void 0) WorkflowStreamError.readOffsetConflict();
154
- const pollInterval = options.pollInterval ?? DEFAULT_STREAM_FOLLOW_POLL_INTERVAL;
155
- const maxChunks = options.pageSize ?? options.maxChunks;
156
- let nextIndex = options.fromIndex;
157
- let initialFromTail = options.fromTail;
158
- while (true) {
159
- if (options.signal?.aborted) return;
160
- const stream = await read({
161
- ...nextIndex === void 0 ? {} : { fromIndex: nextIndex },
162
- ...nextIndex === void 0 && initialFromTail !== void 0 ? { fromTail: initialFromTail } : {},
163
- ...maxChunks === void 0 ? {} : { maxChunks }
164
- });
165
- initialFromTail = void 0;
166
- for (const chunk of stream.chunks) {
167
- if (options.signal?.aborted) return;
168
- nextIndex = chunk.index + 1;
169
- yield {
170
- kind: "chunk",
171
- runId: stream.runId,
172
- streamId: stream.id,
173
- streamName: stream.name,
174
- chunk
175
- };
176
- }
177
- if (nextIndex !== void 0 && nextIndex < stream.chunkCount) continue;
178
- if (stream.status !== "open") {
179
- if (options.includeTerminal !== false) yield {
180
- kind: stream.status,
181
- runId: stream.runId,
182
- streamId: stream.id,
183
- streamName: stream.name,
184
- info: {
185
- runId: stream.runId,
186
- id: stream.id,
187
- name: stream.name,
188
- status: stream.status,
189
- createdAt: stream.createdAt,
190
- updatedAt: stream.updatedAt,
191
- ...stream.contentType === void 0 ? {} : { contentType: stream.contentType },
192
- ...stream.metadata === void 0 ? {} : { metadata: stream.metadata },
193
- chunkCount: stream.chunkCount,
194
- ...stream.lastIndex === void 0 ? {} : { lastIndex: stream.lastIndex },
195
- ...stream.error === void 0 ? {} : { error: stream.error }
196
- }
197
- };
198
- return;
199
- }
200
- await waitForStreamChangeOrPoll(nonNegativeTimerDelay(pollInterval, "Workflow stream follow pollInterval").clampedDelay, options.signal, waitOptions.waitForChange);
201
- }
202
- }
203
- async function waitForStream(readInfo, options = {}, waitOptions = {}) {
204
- while (true) {
205
- if (options.signal?.aborted) return;
206
- try {
207
- return await readInfo();
208
- } catch (error) {
209
- if (!WorkflowStreamNotFoundError.isNotFound(error)) throw error;
210
- }
211
- await waitForStreamChangeOrPoll(nonNegativeTimerDelay(options.pollInterval ?? DEFAULT_STREAM_FOLLOW_POLL_INTERVAL, "Workflow stream wait pollInterval").clampedDelay, options.signal, waitOptions.waitForChange);
212
- }
213
- }
214
- async function waitForStreamChunk(read, afterIndex, options = {}, waitOptions = {}) {
215
- if (!isNonNegativeSafeInteger(afterIndex)) WorkflowOptionsError.nonNegativeSafeInteger("Workflow stream chunk wait afterIndex");
216
- while (true) {
217
- if (options.signal?.aborted) return;
218
- const stream = await read({ fromIndex: afterIndex + 1 });
219
- const chunk = stream.chunks[0];
220
- if (chunk !== void 0) return chunk;
221
- if (stream.status !== "open") return;
222
- await waitForStreamChangeOrPoll(nonNegativeTimerDelay(options.pollInterval ?? DEFAULT_STREAM_FOLLOW_POLL_INTERVAL, "Workflow stream wait pollInterval").clampedDelay, options.signal, waitOptions.waitForChange);
223
- }
224
- }
225
- async function waitForStreamTerminal(readInfo, options = {}, waitOptions = {}) {
226
- while (true) {
227
- if (options.signal?.aborted === true) return;
228
- const info = await readInfo();
229
- if (info.status !== "open") return info;
230
- await waitForStreamChangeOrPoll(nonNegativeTimerDelay(options.pollInterval ?? DEFAULT_STREAM_FOLLOW_POLL_INTERVAL, "Workflow stream wait pollInterval").clampedDelay, options.signal, waitOptions.waitForChange);
231
- }
232
- }
233
- function getStreamInfo(runId, events, streamIdOrName) {
234
- return getStreamInfoFromHistory(runId, new WorkflowHistory(events), streamIdOrName);
235
- }
236
116
  function getStreamInfoFromHistory(runId, history, streamIdOrName) {
237
117
  return getStreamInfoFromProjection(runId, requireStreamProjectionFromHistory(history, streamIdOrName));
238
118
  }
239
119
  function requireStreamProjectionFromHistory(history, streamIdOrName) {
240
120
  const projection = history.streamProjection(streamIdOrName);
241
- if (projection === void 0) WorkflowStreamNotFoundError.notFound(streamIdOrName);
121
+ if (projection === void 0) throw new WorkflowStreamNotFoundError(streamIdOrName);
242
122
  return projection;
243
123
  }
244
124
  function getStreamInfoFromProjection(runId, projection) {
@@ -252,20 +132,28 @@ function getStreamInfoFromProjection(runId, projection) {
252
132
  status: failed === void 0 ? closed === void 0 ? "open" : "closed" : "failed",
253
133
  createdAt: started.timestamp,
254
134
  updatedAt: failed?.event.timestamp ?? closed?.event.timestamp ?? latestChunk?.timestamp ?? started.timestamp,
255
- ...started.contentType === void 0 ? {} : { contentType: started.contentType },
256
- ...started.metadata === void 0 ? {} : { metadata: started.metadata },
135
+ contentType: started.contentType,
136
+ metadata: started.metadata,
257
137
  chunkCount: chunks.length,
258
- ...latestChunk === void 0 ? {} : { lastIndex: latestChunk.index },
259
- ...failed === void 0 ? {} : { error: failed.event.error }
138
+ lastIndex: latestChunk?.index,
139
+ error: failed?.event.error
260
140
  };
261
141
  }
262
142
  function requireStreamEventOrder(projection) {
263
143
  const { started, chunks, closed, failed } = projection;
264
- for (const [index, chunk] of chunks.entries()) if (chunk.event.index !== index) WorkflowStreamError.nonContiguousChunkIndex(started.streamId, chunk.event.index, index);
144
+ for (const [index, chunk] of chunks.entries()) if (chunk.event.index !== index) throw new WorkflowStreamError(`Workflow stream ${started.streamId} has non-contiguous chunk index ${chunk.event.index}; expected ${index}`, WorkflowErrorCode.STREAM_CHUNK_INDEX_NON_CONTIGUOUS, {
145
+ streamId: started.streamId,
146
+ actualIndex: chunk.event.index,
147
+ expectedIndex: index
148
+ });
265
149
  const terminal = earliestStreamTerminalEvent(closed, failed);
266
150
  if (terminal === void 0) return;
267
151
  const lateChunk = chunks.find((chunk) => chunk.index > terminal.index);
268
- if (lateChunk !== void 0) WorkflowStreamError.chunkAfterTerminal(started.streamId, lateChunk.event.index, terminal.event.kind);
152
+ if (lateChunk !== void 0) throw new WorkflowStreamError(`Workflow stream ${started.streamId} has chunk ${lateChunk.event.index} after terminal event ${terminal.event.kind}`, WorkflowErrorCode.STREAM_CHUNK_AFTER_TERMINAL, {
153
+ streamId: started.streamId,
154
+ chunkIndex: lateChunk.event.index,
155
+ terminalKind: terminal.event.kind
156
+ });
269
157
  }
270
158
  function earliestStreamTerminalEvent(closed, failed) {
271
159
  if (closed === void 0) return failed;
@@ -274,47 +162,20 @@ function earliestStreamTerminalEvent(closed, failed) {
274
162
  }
275
163
  async function ensureStreamStarted(environment, identity, streamId, contentType, metadata) {
276
164
  if (environment.history.startedStream(identity.id) !== void 0) return;
277
- await appendDurableStepStartedEvent(environment, {
165
+ const event = {
278
166
  kind: "stream_started",
279
167
  timestamp: environment.now(),
280
168
  stepId: identity.id,
281
169
  stepName: identity.name,
282
170
  count: identity.count,
283
171
  streamId,
284
- ...contentType === void 0 ? {} : { contentType },
285
- ...metadata === void 0 ? {} : { metadata }
286
- });
287
- }
288
- async function sleepForStreamFollow(milliseconds, signal) {
289
- if (milliseconds === 0 || signal?.aborted) return;
290
- await new Promise((resolve) => {
291
- const timer = setTimeout(resolve, milliseconds);
292
- signal?.addEventListener("abort", () => {
293
- clearTimeout(timer);
294
- resolve();
295
- }, { once: true });
296
- });
297
- }
298
- async function waitForStreamChangeOrPoll(milliseconds, signal, waitForChange) {
299
- if (waitForChange === void 0) {
300
- await sleepForStreamFollow(milliseconds, signal);
301
- return;
302
- }
303
- const controller = new AbortController();
304
- const abort = () => {
305
- controller.abort();
172
+ contentType,
173
+ metadata
306
174
  };
307
- signal?.addEventListener("abort", abort, { once: true });
308
- try {
309
- if (signal?.aborted === true) return;
310
- await Promise.race([sleepForStreamFollow(milliseconds, controller.signal), waitForChange({ signal: controller.signal })]);
311
- } finally {
312
- signal?.removeEventListener("abort", abort);
313
- controller.abort();
314
- }
175
+ await appendDurableStepStartedEvent(environment, event);
315
176
  }
316
177
  function requireStreamOpen(environment, stepId, streamId) {
317
- if (environment.history.closedStream(stepId) !== void 0 || environment.history.failedStream(stepId) !== void 0) WorkflowStreamError.alreadyClosed(streamId);
178
+ if (environment.history.closedStream(stepId) !== void 0 || environment.history.failedStream(stepId) !== void 0) throw new WorkflowStreamError(`Workflow stream is already closed: ${streamId}`, WorkflowErrorCode.STREAM_ALREADY_CLOSED, { streamId });
318
179
  }
319
180
  function requireStreamReplayMatches(identity, recorded, next) {
320
181
  if (recorded.stepId === identity.id && recorded.stepName === identity.name && recorded.streamId === next.streamId && recorded.contentType === next.contentType && deepEquals(recorded.metadata, next.metadata)) return;
@@ -325,10 +186,7 @@ function requireStreamReplayMatches(identity, recorded, next) {
325
186
  }
326
187
  function requireStreamChunkReplayMatches(identity, index, recorded, next) {
327
188
  if (deepEquals(recorded, next)) return;
328
- WorkflowReplayDivergenceError.diverged(`recorded stream ${identity.id} chunk ${index} does not match replayed chunk`, {
329
- expectedStepId: identity.id,
330
- actualStepId: identity.id
331
- });
189
+ WorkflowReplayDivergenceError.atStep(identity.id, `recorded stream ${identity.id} chunk ${index} does not match replayed chunk`);
332
190
  }
333
191
  //#endregion
334
- export { createStream, createWorkflowStepStreamApi, followStream, followStreamForRun, getStreamInfo, getStreamInfoForRun, readStream, readStreamForRun, readStreamPageForRun, waitForStream, waitForStreamChunk, waitForStreamChunkForRun, waitForStreamForRun, waitForStreamTerminal, waitForStreamTerminalForRun };
192
+ export { createStepStreamApi, getStreamInfoFromHistory, readStreamFromHistory };
@@ -0,0 +1,35 @@
1
+ import { ScheduleRecord } from "../../types/schedule.mjs";
2
+ import { LockRecord } from "../../types/lock.mjs";
3
+ import { RecoverySummary } from "../../types/summary.mjs";
4
+ import { StepAttemptRecord } from "../../types/step-attempts.mjs";
5
+ import { RunRecord } from "../../types/run.mjs";
6
+ import { EventRecord } from "../../types/events.mjs";
7
+ //#region src/engine/summary/recovery.d.ts
8
+ export interface RecoverySummaryInputs {
9
+ readonly sleepAttempts?: readonly StepAttemptRecord[];
10
+ readonly messageWaitAttempts?: readonly StepAttemptRecord[];
11
+ readonly childWorkflowAttempts?: readonly StepAttemptRecord[];
12
+ readonly childRuns?: readonly RunRecord[];
13
+ readonly eventsByRunId?: ReadonlyMap<string, readonly EventRecord[]>;
14
+ readonly lockWaitAttempts?: readonly StepAttemptRecord[];
15
+ readonly locks?: readonly LockRecord[];
16
+ readonly schedules?: readonly ScheduleRecord[];
17
+ }
18
+ interface RecoverySummaryOptions {
19
+ readonly runs: readonly RunRecord[];
20
+ readonly now: Temporal.Instant;
21
+ readonly inputs?: RecoverySummaryInputs;
22
+ }
23
+ /**
24
+ * Every run that can make progress now, and when the next sleep, retry, lease, schedule,
25
+ * lock wait, or external wait should be checked again.
26
+ */
27
+ export declare function summarizeRecovery(options: RecoverySummaryOptions): RecoverySummary;
28
+ interface LockWaitDetails {
29
+ readonly key: string;
30
+ readonly waitDeadlineAt?: Temporal.Instant;
31
+ }
32
+ /** The lock a failed step attempt was waiting for, when it failed because the lock was held. */
33
+ export declare function lockWaitDetails(attempt: StepAttemptRecord): LockWaitDetails | undefined;
34
+ //#endregion
35
+ export {};