@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
@@ -1,134 +1,166 @@
1
+ import { normalizeAttributePatch } from "../attributes.mjs";
2
+ import { WorkflowErrorCode } from "../errors/codes.mjs";
1
3
  import { WorkflowStateError } from "../errors/base.mjs";
2
4
  import { WorkflowPermanentFailureError } from "../errors/failures.mjs";
3
- import { getRequiredRun, isScheduledWorkflowRunStatus, nextRunAttempt } from "../utility.mjs";
4
- import { normalizeWorkflowAttributePatch } from "../attributes.mjs";
5
5
  import "../errors/mod.mjs";
6
- import { defineWorkflowFromName } from "../definition.mjs";
7
- import "./retry-policy.mjs";
6
+ import { defineFromName } from "../definition.mjs";
7
+ import { isScheduledRunStatus, nextRunAttempt } from "../run-status.mjs";
8
+ import { getRequiredRun } from "../store/query.mjs";
8
9
  import { serializeError, toPersistedValue } from "./serialization.mjs";
9
- import { cancelRunWithChildren, releaseLocksForRun, setRunAttributesIfCurrent, transitionRunAfterStaleLeaseRelease, transitionRunToManualRetry, transitionRunToPermanentFailure, transitionRunToRescheduled, updateRunMetadataIfCurrent } from "./state.mjs";
10
+ import { cancelRunWithChildren, releaseLocksForRun, setRunAttributesIfCurrent, transitionRunAfterStaleLeaseRelease, transitionRunToFailed, transitionRunToManualRetry, transitionRunToRescheduled, updateRunMetadataIfCurrent } from "./state.mjs";
11
+ import { retentionCleanupOptions } from "./run-utils.mjs";
10
12
  //#region src/engine/run-service.ts
11
- async function rerunWorkflowRun(service, startWorkflow, runId, rerunOptions) {
12
- const sourceRun = await getRequiredRun(service.store, runId);
13
- const options = rerunOptions;
14
- const definition = await resolveRerunWorkflowDefinition(sourceRun, options);
15
- const start = options?.start;
13
+ async function rerunRun(context, startWorkflow, runId, rerunOptions) {
14
+ const sourceRun = await getRequiredRun(context.store, runId);
15
+ const definition = await resolveRerunDefinition(sourceRun, rerunOptions);
16
+ const start = rerunOptions?.start;
17
+ const contextOptions = { context: sourceRun.context };
16
18
  return await startWorkflow(definition, sourceRun.input, {
17
- ...sourceRun.context === void 0 ? {} : { context: sourceRun.context },
19
+ ...contextOptions,
18
20
  ...start
19
21
  });
20
22
  }
21
- async function resolveRerunWorkflowDefinition(sourceRun, options) {
23
+ async function resolveRerunDefinition(sourceRun, options) {
22
24
  const workflowName = options?.workflowName ?? sourceRun.workflowName;
23
- const resolvedWorkflowVersion = await resolveWorkflowVersion(workflowName, options !== void 0 && "workflowVersion" in options ? options.workflowVersion : sourceRun.workflowVersion, options?.workflowVersionResolver);
24
- return defineWorkflowFromName(workflowName, resolvedWorkflowVersion);
25
+ const resolvedWorkflowVersion = await resolveVersion(workflowName, options !== void 0 && "workflowVersion" in options ? options.workflowVersion : sourceRun.workflowVersion, options?.workflowVersionResolver);
26
+ return defineFromName(workflowName, resolvedWorkflowVersion);
25
27
  }
26
- async function rescheduleWorkflowRun(service, lifecycle, runId, rescheduleOptions) {
27
- const options = rescheduleOptions;
28
- const now = service.now();
29
- const availableAt = options?.availableAt ?? now;
28
+ /** Applies an operator change to a run, retrying when another writer updates the run first. */
29
+ async function applyRunOperation(context, lifecycle, runId, operation) {
30
30
  for (let attempt = 0; attempt < 16; attempt++) {
31
- const current = await getRequiredRun(service.store, runId);
32
- if (!isScheduledWorkflowRunStatus(current.status)) WorkflowStateError.runCannotBeRescheduled(runId);
33
- if (current.availableAt !== void 0 && Temporal.Instant.compare(current.availableAt, availableAt) === 0 && current.lastTransitionReason === "rescheduled") return current;
34
- const updated = await service.store.updateRunIfCurrent(current, transitionRunToRescheduled(current, now, availableAt));
31
+ const current = await getRequiredRun(context.store, runId);
32
+ const next = operation.next(current);
33
+ if (next === void 0) return current;
34
+ const updated = await context.store.updateRunIfCurrent(current, next);
35
35
  if (updated !== void 0) {
36
- await releaseLocksForRun(service.store, updated.id, now);
36
+ await operation.afterUpdate?.(updated);
37
37
  await lifecycle.emitLifecycleEvent(updated, current);
38
38
  return updated;
39
39
  }
40
40
  }
41
- WorkflowStateError.failedRunReschedule(runId);
41
+ throw new WorkflowStateError(operation.failureMessage, {
42
+ code: operation.failureCode,
43
+ details: { runId }
44
+ });
42
45
  }
43
- async function releaseStaleWorkflowRunLease(service, lifecycle, runId, releaseOptions) {
44
- const options = releaseOptions;
45
- const now = service.now();
46
- const availableAt = options?.availableAt ?? now;
47
- for (let attempt = 0; attempt < 16; attempt++) {
48
- const current = await getRequiredRun(service.store, runId);
49
- if (isScheduledWorkflowRunStatus(current.status)) return current;
50
- if (current.status !== "running") WorkflowStateError.staleLeaseReleaseRequiresRunning(runId);
51
- if (current.workerId !== void 0 && typeof current.workerId === "string" && current.workerId.trim() !== "" && current.leaseExpiresAt !== void 0 && Temporal.Instant.compare(current.leaseExpiresAt, now) > 0) WorkflowStateError.runLeaseStillActive(runId);
52
- const updated = await service.store.updateRunIfCurrent(current, transitionRunAfterStaleLeaseRelease(current, now, availableAt));
53
- if (updated !== void 0) {
54
- await lifecycle.emitLifecycleEvent(updated, current);
55
- return updated;
56
- }
57
- }
58
- WorkflowStateError.failedStaleRunLeaseRelease(runId);
46
+ function stateError(message, code, runId) {
47
+ return new WorkflowStateError(message, {
48
+ code,
49
+ details: { runId }
50
+ });
59
51
  }
60
- async function retryFailedWorkflowRun(service, lifecycle, runId, retryOptions) {
61
- const options = retryOptions;
62
- const now = service.now();
63
- const availableAt = options?.availableAt ?? now;
64
- for (let attempt = 0; attempt < 16; attempt++) {
65
- const current = await getRequiredRun(service.store, runId);
66
- if (isScheduledWorkflowRunStatus(current.status)) return current;
67
- if (current.status !== "failed") WorkflowStateError.runRetryRequiresFailed(runId);
68
- if (current.lastTransitionReason === "permanent_failure" && options?.force !== true) WorkflowStateError.runRetryRequiresForceAfterPermanentFailure(runId);
69
- if (options?.force !== true && current.retryReason === void 0 && current.retryAt === void 0) WorkflowStateError.failedRunRetryRequiresForce(runId);
70
- const retryAttempt = nextRunAttempt(current.retryAttempt);
71
- const updated = await service.store.updateRunIfCurrent(current, transitionRunToManualRetry(current, now, availableAt, retryAttempt));
72
- if (updated !== void 0) {
73
- await lifecycle.emitLifecycleEvent(updated, current);
74
- return updated;
75
- }
76
- }
77
- WorkflowStateError.failedRunRetry(runId);
52
+ async function rescheduleWorkflowRun(context, lifecycle, runId, rescheduleOptions) {
53
+ const now = context.now();
54
+ const availableAt = rescheduleOptions?.availableAt ?? now;
55
+ return await applyRunOperation(context, lifecycle, runId, {
56
+ next: (current) => {
57
+ if (!isScheduledRunStatus(current.status)) throw stateError(`Workflow run cannot be rescheduled unless pending or waiting: ${runId}`, WorkflowErrorCode.STATE_RUN_CANNOT_BE_RESCHEDULED, runId);
58
+ return current.availableAt !== void 0 && Temporal.Instant.compare(current.availableAt, availableAt) === 0 && current.lastTransitionReason === "rescheduled" ? void 0 : transitionRunToRescheduled(current, now, availableAt);
59
+ },
60
+ afterUpdate: async (updated) => {
61
+ await releaseLocksForRun(context.store, updated.id, now);
62
+ },
63
+ failureMessage: `Failed to reschedule workflow run ${runId}`,
64
+ failureCode: WorkflowErrorCode.STATE_RUN_RESCHEDULE_FAILED
65
+ });
66
+ }
67
+ async function releaseStaleWorkflowRunLease(context, lifecycle, runId, releaseOptions) {
68
+ const now = context.now();
69
+ const availableAt = releaseOptions?.availableAt ?? now;
70
+ return await applyRunOperation(context, lifecycle, runId, {
71
+ next: (current) => {
72
+ if (isScheduledRunStatus(current.status)) return;
73
+ if (current.status !== "running") throw stateError(`Workflow run stale lease cannot be released unless running: ${runId}`, WorkflowErrorCode.STATE_STALE_LEASE_RELEASE_REQUIRES_RUNNING, runId);
74
+ if (current.workerId !== void 0 && current.workerId.trim() !== "" && current.leaseExpiresAt !== void 0 && Temporal.Instant.compare(current.leaseExpiresAt, now) > 0) throw stateError(`Workflow run lease is still active: ${runId}`, WorkflowErrorCode.STATE_RUN_LEASE_STILL_ACTIVE, runId);
75
+ return transitionRunAfterStaleLeaseRelease(current, now, availableAt);
76
+ },
77
+ failureMessage: `Failed to release stale workflow run lease ${runId}`,
78
+ failureCode: WorkflowErrorCode.STATE_STALE_RUN_LEASE_RELEASE_FAILED
79
+ });
78
80
  }
79
- async function markWorkflowRunPermanentlyFailed(service, lifecycle, runId, permanentFailureOptions) {
80
- const now = service.now();
81
+ async function retryFailedWorkflowRun(context, lifecycle, runId, retryOptions) {
82
+ const now = context.now();
83
+ const availableAt = retryOptions?.availableAt ?? now;
84
+ const force = retryOptions?.force === true;
85
+ return await applyRunOperation(context, lifecycle, runId, {
86
+ next: (current) => {
87
+ if (isScheduledRunStatus(current.status)) return;
88
+ if (current.status !== "failed") throw stateError(`Workflow run cannot be retried unless failed: ${runId}`, WorkflowErrorCode.STATE_RUN_RETRY_REQUIRES_FAILED, runId);
89
+ if (current.lastTransitionReason === "permanent_failure" && !force) throw stateError(`Workflow run cannot be retried after permanent failure without force: ${runId}`, WorkflowErrorCode.STATE_RUN_RETRY_REQUIRES_FORCE_AFTER_PERMANENT_FAILURE, runId);
90
+ if (!force && current.retryReason === void 0 && current.retryAt === void 0) throw stateError(`Workflow failed run retry requires force when no retry metadata exists: ${runId}`, WorkflowErrorCode.STATE_FAILED_RUN_RETRY_REQUIRES_FORCE, runId);
91
+ return transitionRunToManualRetry(current, now, availableAt, nextRunAttempt(current.retryAttempt));
92
+ },
93
+ failureMessage: `Failed to retry workflow run ${runId}`,
94
+ failureCode: WorkflowErrorCode.STATE_RUN_RETRY_FAILED
95
+ });
96
+ }
97
+ async function markWorkflowRunPermanentlyFailed(context, lifecycle, runId, permanentFailureOptions) {
98
+ const now = context.now();
81
99
  const reason = permanentFailureOptions.reason;
82
- for (let attempt = 0; attempt < 16; attempt++) {
83
- const current = await getRequiredRun(service.store, runId);
84
- if (current.status === "completed" || current.status === "canceled") WorkflowStateError.permanentFailureInvalidStatus(runId, current.status);
85
- if (current.status === "failed" && current.lastTransitionReason === "permanent_failure" && current.error?.details?.reason === reason) return current;
86
- const updated = await service.store.updateRunIfCurrent(current, transitionRunToPermanentFailure(current, serializeError(WorkflowPermanentFailureError.create({
87
- runId,
88
- reason
89
- })), now));
90
- if (updated !== void 0) {
91
- await lifecycle.emitLifecycleEvent(updated, current);
92
- return updated;
93
- }
94
- }
95
- WorkflowStateError.failedPermanentRunFailure(runId);
100
+ return await applyRunOperation(context, lifecycle, runId, {
101
+ next: (current) => {
102
+ if (current.status === "completed" || current.status === "canceled") throw new WorkflowStateError(`Workflow run cannot be marked permanently failed from ${current.status}: ${runId}`, {
103
+ code: WorkflowErrorCode.STATE_PERMANENT_FAILURE_STATUS_INVALID,
104
+ details: {
105
+ runId,
106
+ status: current.status
107
+ }
108
+ });
109
+ if (current.status === "failed" && current.lastTransitionReason === "permanent_failure" && current.error?.details?.reason === reason) return;
110
+ return transitionRunToFailed(current, serializeError(new WorkflowPermanentFailureError({
111
+ runId,
112
+ reason
113
+ })), now, "permanent_failure");
114
+ },
115
+ failureMessage: `Failed to mark workflow run permanently failed ${runId}`,
116
+ failureCode: WorkflowErrorCode.STATE_PERMANENT_RUN_FAILURE_FAILED
117
+ });
96
118
  }
97
- async function updateWorkflowRunMetadata(service, lifecycle, runId, metadata) {
98
- const persistedMetadata = toPersistedValue(metadata, "workflow run metadata", service.limits);
99
- const timestamp = service.now();
100
- const previousRun = await getRequiredRun(service.store, runId);
101
- const updatedRun = await updateRunMetadataIfCurrent(service.store, runId, persistedMetadata, timestamp);
119
+ async function updateWorkflowRunMetadata(context, lifecycle, runId, metadata) {
120
+ const persistedMetadata = toPersistedValue(metadata, "workflow run metadata", context.limits);
121
+ const timestamp = context.now();
122
+ const previousRun = await getRequiredRun(context.store, runId);
123
+ const updatedRun = await updateRunMetadataIfCurrent(context.store, runId, persistedMetadata, timestamp);
102
124
  lifecycle.emitRunMetadataUpdated(updatedRun, previousRun);
103
125
  return updatedRun;
104
126
  }
105
- async function setWorkflowRunAttributes(service, runId, attributes) {
106
- const normalized = normalizeWorkflowAttributePatch(attributes);
107
- const timestamp = service.now();
108
- return await setRunAttributesIfCurrent(service.store, runId, normalized, timestamp);
127
+ async function setRunAttributes(context, runId, attributes) {
128
+ const normalized = normalizeAttributePatch(attributes);
129
+ const timestamp = context.now();
130
+ return await setRunAttributesIfCurrent(context.store, runId, normalized, timestamp);
109
131
  }
110
- async function cancelWorkflowRun(service, lifecycle, runId) {
111
- const previousRun = await getRequiredRun(service.store, runId);
112
- const canceledRun = await cancelRunWithChildren(service.store, runId, service.now());
132
+ async function cancelWorkflowRun(context, lifecycle, runId) {
133
+ const previousRun = await getRequiredRun(context.store, runId);
134
+ const canceledRun = await cancelRunWithChildren(context.store, runId, context.now());
113
135
  if (previousRun.status !== "canceled") await lifecycle.emitLifecycleEvent(canceledRun, previousRun);
114
136
  return canceledRun;
115
137
  }
116
- async function resolveWorkflowVersion(workflowName, fallbackVersion, resolver) {
138
+ async function resolveVersion(workflowName, fallbackVersion, resolver) {
117
139
  if (resolver === void 0) return fallbackVersion;
118
- const resolved = await resolver(workflowName, defineWorkflowFromName(workflowName, fallbackVersion));
119
- return typeof resolved === "string" && resolved.trim() !== "" ? resolved : fallbackVersion;
140
+ const resolved = await resolver(workflowName, defineFromName(workflowName, fallbackVersion));
141
+ return resolved !== void 0 && resolved.trim() !== "" ? resolved : fallbackVersion;
120
142
  }
121
- async function resolveWorkflowStartSpec(definition, options) {
122
- const version = await resolveWorkflowVersion(definition.name, options?.workflowVersion ?? definition.version, options?.workflowVersionResolver);
143
+ async function resolveStartSpec(definition, options) {
144
+ const version = await resolveVersion(definition.name, options?.workflowVersion ?? definition.version, options?.workflowVersionResolver);
123
145
  if (version === definition.version) return definition;
124
146
  return {
125
147
  ...definition,
126
148
  version,
127
149
  config: {
128
150
  ...definition.config,
129
- ...version === void 0 ? { version: void 0 } : { version }
151
+ version
130
152
  }
131
153
  };
132
154
  }
155
+ async function cleanupRuns(context, options) {
156
+ const result = await context.store.cleanupRuns(options);
157
+ context.observation.emitCleanupCompleted(result);
158
+ return result;
159
+ }
160
+ async function applyRetentionPolicy(context, options) {
161
+ const result = await context.store.cleanupRuns(retentionCleanupOptions(options, context.now));
162
+ context.observation.emitRetentionApplied(result);
163
+ return result;
164
+ }
133
165
  //#endregion
134
- export { cancelWorkflowRun, markWorkflowRunPermanentlyFailed, releaseStaleWorkflowRunLease, rerunWorkflowRun, rescheduleWorkflowRun, resolveRerunWorkflowDefinition, resolveWorkflowStartSpec, resolveWorkflowVersion, retryFailedWorkflowRun, setWorkflowRunAttributes, updateWorkflowRunMetadata };
166
+ export { applyRetentionPolicy, cancelWorkflowRun, cleanupRuns, markWorkflowRunPermanentlyFailed, releaseStaleWorkflowRunLease, rerunRun, rescheduleWorkflowRun, resolveStartSpec, retryFailedWorkflowRun, setRunAttributes, updateWorkflowRunMetadata };
@@ -1,16 +1,14 @@
1
- import { RunId } from "../types/run-id.mjs";
1
+ import { RunId } from "../types/ids.mjs";
2
2
  import { CleanupRunsOptions, RetentionPolicyOptions } from "../types/cleanup.mjs";
3
3
  import { WorkflowDefinition } from "../types/definition.mjs";
4
- import { CompletedResult, ExecutionResult, HandleOperations, WorkflowHandle } from "../types/result.mjs";
5
- import { WorkflowRunRecord } from "../types/run.mjs";
6
- import { WorkflowEventReader, WorkflowRunReaderRepository } from "../types/store.mjs";
4
+ import { CompletedResult, ExecutionResult } from "../types/result.mjs";
5
+ import { RunRecord } from "../types/run.mjs";
6
+ import { WorkflowStore } from "../types/store.mjs";
7
7
  //#region src/engine/run-utils.d.ts
8
- type WorkflowRunLookup = WorkflowRunReaderRepository;
9
- type WorkflowHandleStore = WorkflowRunLookup & WorkflowEventReader;
10
- declare function retentionCleanupOptions(options: RetentionPolicyOptions, engineNow: () => Temporal.Instant): CleanupRunsOptions;
11
- declare function workflowHandle<TOutput>(store: WorkflowHandleStore, definition: WorkflowDefinition<unknown, TOutput>, runId: RunId, now: () => Temporal.Instant, operations: HandleOperations): WorkflowHandle<TOutput>;
12
- declare function readRunResult<TOutput>(store: WorkflowRunLookup, runId: RunId, fallbackAvailableAt: Temporal.Instant): Promise<ExecutionResult<TOutput>>;
13
- declare function makeCompletedRunResult<TOutput>(run: WorkflowRunRecord): CompletedResult<TOutput>;
14
- declare function makeCanceledRunResult<TOutput>(run: WorkflowRunRecord): ExecutionResult<TOutput>;
15
- //#endregion
16
- export { makeCanceledRunResult, makeCompletedRunResult, readRunResult, retentionCleanupOptions, workflowHandle };
8
+ export declare function retentionCleanupOptions(options: RetentionPolicyOptions, engineNow: () => Temporal.Instant): CleanupRunsOptions;
9
+ export declare function readRunResult<TOutput>(store: WorkflowStore, definition: WorkflowDefinition<unknown, TOutput, unknown>, runId: RunId, fallbackAvailableAt: Temporal.Instant): Promise<ExecutionResult<TOutput>>;
10
+ /** The result of a run that has not completed: failed, canceled, or still waiting. */
11
+ export declare function unfinishedRunResult<TOutput>(run: RunRecord, fallbackAvailableAt: Temporal.Instant): ExecutionResult<TOutput>;
12
+ export declare function makeCompletedRunResult<TOutput>(definition: WorkflowDefinition<unknown, TOutput, unknown>, run: RunRecord): CompletedResult<TOutput>;
13
+ export declare function makeCanceledRunResult<TOutput>(run: RunRecord): ExecutionResult<TOutput>;
14
+ //#endregion
@@ -1,61 +1,36 @@
1
1
  import { WorkflowRunCanceledError } from "../errors/run.mjs";
2
- import { getRequiredRun } from "../utility.mjs";
3
2
  import "../errors/mod.mjs";
3
+ import { getRequiredRun } from "../store/query.mjs";
4
4
  import { serializeError } from "./serialization.mjs";
5
+ import { requireDefinitionMatchesRun } from "./state.mjs";
5
6
  //#region src/engine/run-utils.ts
6
7
  function retentionCleanupOptions(options, engineNow) {
7
8
  return {
8
9
  finishedAtBefore: (options.now === void 0 ? engineNow() : options.now).toZonedDateTimeISO("UTC").subtract(options.olderThan).toInstant(),
9
- ...options.status === void 0 ? {} : { status: options.status },
10
- ...options.workflowName === void 0 ? {} : { workflowName: options.workflowName },
11
- ...options.workflowVersion === void 0 ? {} : { workflowVersion: options.workflowVersion },
12
- ...options.idempotencyKey === void 0 ? {} : { idempotencyKey: options.idempotencyKey },
13
- ...options.parentRunId === void 0 ? {} : { parentRunId: options.parentRunId },
14
- ...options.parentStepId === void 0 ? {} : { parentStepId: options.parentStepId },
15
- ...options.parentStepName === void 0 ? {} : { parentStepName: options.parentStepName },
16
- ...options.parentStepAttempt === void 0 ? {} : { parentStepAttempt: options.parentStepAttempt },
17
- ...options.dryRun === void 0 ? {} : { dryRun: options.dryRun },
18
- ...options.limit === void 0 ? {} : { limit: options.limit }
10
+ status: options.status,
11
+ workflowName: options.workflowName,
12
+ workflowVersion: options.workflowVersion,
13
+ idempotencyKey: options.idempotencyKey,
14
+ parentRunId: options.parentRunId,
15
+ parentStepId: options.parentStepId,
16
+ parentStepName: options.parentStepName,
17
+ parentStepAttempt: options.parentStepAttempt,
18
+ dryRun: options.dryRun,
19
+ limit: options.limit
19
20
  };
20
21
  }
21
- function workflowHandle(store, definition, runId, now, operations) {
22
- return {
23
- runId,
24
- workflowName: definition.name,
25
- ...definition.version === void 0 ? {} : { workflowVersion: definition.version },
26
- async getRun() {
27
- return await getRequiredRun(store, runId);
28
- },
29
- async status() {
30
- return (await getRequiredRun(store, runId)).status;
31
- },
32
- async events() {
33
- return await store.getEvents(runId);
34
- },
35
- async timeline() {
36
- return await operations.getTimeline(runId);
37
- },
38
- result: async () => await readRunResult(store, runId, now()),
39
- async setMetadata(metadata) {
40
- return await operations.setMetadata(runId, metadata);
41
- },
42
- async setAttributes(attributes) {
43
- return await operations.setAttributes(runId, attributes);
44
- },
45
- async cancel() {
46
- return await operations.cancel(runId);
47
- }
48
- };
49
- }
50
- async function readRunResult(store, runId, fallbackAvailableAt) {
22
+ async function readRunResult(store, definition, runId, fallbackAvailableAt) {
51
23
  const run = await getRequiredRun(store, runId);
52
- if (run.status === "completed") return makeCompletedRunResult(run);
24
+ return run.status === "completed" ? makeCompletedRunResult(definition, run) : unfinishedRunResult(run, fallbackAvailableAt);
25
+ }
26
+ /** The result of a run that has not completed: failed, canceled, or still waiting. */
27
+ function unfinishedRunResult(run, fallbackAvailableAt) {
53
28
  if (run.status === "failed") return {
54
29
  kind: "failed",
55
30
  run,
56
31
  error: run.error ?? {
57
32
  name: "WorkflowError",
58
- message: `Workflow run failed: ${runId}`
33
+ message: `Workflow run failed: ${run.id}`
59
34
  }
60
35
  };
61
36
  if (run.status === "canceled") return makeCanceledRunResult(run);
@@ -65,7 +40,9 @@ async function readRunResult(store, runId, fallbackAvailableAt) {
65
40
  availableAt: run.availableAt ?? fallbackAvailableAt
66
41
  };
67
42
  }
68
- function makeCompletedRunResult(run) {
43
+ function makeCompletedRunResult(definition, run) {
44
+ requireDefinitionMatchesRun(definition, run);
45
+ if (run.status !== "completed") throw new TypeError("A completed workflow result requires a completed run");
69
46
  return {
70
47
  kind: "completed",
71
48
  run,
@@ -76,8 +53,8 @@ function makeCanceledRunResult(run) {
76
53
  return {
77
54
  kind: "failed",
78
55
  run,
79
- error: run.error ?? serializeError(WorkflowRunCanceledError.create(run.id))
56
+ error: run.error ?? serializeError(new WorkflowRunCanceledError(run.id))
80
57
  };
81
58
  }
82
59
  //#endregion
83
- export { makeCanceledRunResult, makeCompletedRunResult, readRunResult, retentionCleanupOptions, workflowHandle };
60
+ export { makeCanceledRunResult, makeCompletedRunResult, readRunResult, retentionCleanupOptions, unfinishedRunResult };
@@ -1,25 +1,11 @@
1
- import { RunId } from "../types/run-id.mjs";
2
1
  import { ScheduleConfig, ScheduleId, ScheduleRecord, ScheduleStatus, TickSchedulesOptions, TickSchedulesResult } from "../types/schedule.mjs";
3
2
  import { WorkflowDefinition } from "../types/definition.mjs";
4
- import "../types/run.mjs";
5
- import { WorkflowRunReaderRepository, WorkflowScheduleConditionalWriterRepository, WorkflowScheduleCreationRepository, WorkflowScheduleListerRepository, WorkflowScheduleReaderRepository, WorkflowStoreNamespace } from "../types/store.mjs";
6
- import { WorkflowExecutionLimits } from "../types/engine-options.mjs";
7
- import { WorkflowRunCanceler, WorkflowRunStarter, WorkflowScheduleRunObserver } from "../types/engine.mjs";
3
+ import { WorkflowStore } from "../types/store.mjs";
4
+ import { ExecutionLimits } from "../types/engine-options.mjs";
5
+ import { WorkflowEngine } from "./create.mjs";
8
6
  //#region src/engine/schedule.d.ts
9
- type WorkflowScheduleCommandStore = WorkflowStoreNamespace & WorkflowScheduleCreationRepository & WorkflowScheduleReaderRepository & WorkflowScheduleConditionalWriterRepository;
10
- type WorkflowScheduleTickStore = WorkflowScheduleListerRepository & WorkflowScheduleConditionalWriterRepository & WorkflowRunReaderRepository;
11
- type WorkflowScheduleTickEngine = WorkflowRunStarter & WorkflowRunCanceler & Partial<WorkflowScheduleRunObserver>;
12
- declare function resolveScheduleRecord<TInput, TOutput, TRawInput>(namespace: string, definition: WorkflowDefinition<TInput, TOutput, TRawInput>, options: ScheduleConfig<TInput, TRawInput>, createdAt: Temporal.Instant, limits: WorkflowExecutionLimits): ScheduleRecord<TInput>;
13
- declare function upsertSchedule<TInput, TOutput, TRawInput>(store: WorkflowScheduleCommandStore, definition: WorkflowDefinition<TInput, TOutput, TRawInput>, options: ScheduleConfig<TInput, TRawInput>, timestamp: Temporal.Instant, limits: WorkflowExecutionLimits): Promise<ScheduleRecord<TInput>>;
14
- declare function updateScheduleStatus(store: WorkflowScheduleReaderRepository & WorkflowScheduleConditionalWriterRepository, scheduleId: ScheduleId, status: ScheduleStatus, now: Temporal.Instant): Promise<ScheduleRecord>;
15
- declare function workflowScheduleFireTimes(schedule: ScheduleRecord, now: Temporal.Instant): readonly Temporal.Instant[];
16
- declare function advanceSchedule(store: WorkflowScheduleConditionalWriterRepository, schedule: ScheduleRecord, now: Temporal.Instant, updatedAt: Temporal.Instant, fired?: {
17
- readonly fireAt: Temporal.Instant;
18
- readonly runId: RunId;
19
- }): Promise<ScheduleRecord | undefined>;
20
- declare function bufferSchedule(store: WorkflowScheduleConditionalWriterRepository, schedule: ScheduleRecord, fireTimes: readonly Temporal.Instant[], now: Temporal.Instant, updatedAt: Temporal.Instant): Promise<ScheduleRecord | undefined>;
21
- declare function hasActiveScheduledRun(store: WorkflowRunReaderRepository, schedule: ScheduleRecord): Promise<boolean>;
22
- declare function cancelActiveScheduledRun(store: WorkflowRunReaderRepository, engine: WorkflowRunCanceler, schedule: ScheduleRecord): Promise<void>;
23
- declare function tickSchedules(store: WorkflowScheduleTickStore, engine: WorkflowScheduleTickEngine, now: () => Temporal.Instant, tickOptions: TickSchedulesOptions | undefined): Promise<TickSchedulesResult>;
24
- //#endregion
25
- export { advanceSchedule, bufferSchedule, cancelActiveScheduledRun, hasActiveScheduledRun, resolveScheduleRecord, tickSchedules, updateScheduleStatus, upsertSchedule, workflowScheduleFireTimes };
7
+ export declare function resolveScheduleRecord<TInput, TOutput, TRawInput>(namespace: string, definition: WorkflowDefinition<TInput, TOutput, TRawInput>, options: ScheduleConfig<TInput, TRawInput>, createdAt: Temporal.Instant, limits: ExecutionLimits): Promise<ScheduleRecord>;
8
+ export declare function upsertSchedule<TInput, TOutput, TRawInput>(store: WorkflowStore, definition: WorkflowDefinition<TInput, TOutput, TRawInput>, options: ScheduleConfig<TInput, TRawInput>, timestamp: Temporal.Instant, limits: ExecutionLimits): Promise<ScheduleRecord>;
9
+ export declare function updateScheduleStatus(store: WorkflowStore, scheduleId: ScheduleId, status: ScheduleStatus, now: Temporal.Instant): Promise<ScheduleRecord>;
10
+ export declare function tickSchedules(store: WorkflowStore, engine: WorkflowEngine, now: () => Temporal.Instant, tickOptions: TickSchedulesOptions | undefined): Promise<TickSchedulesResult>;
11
+ //#endregion
@@ -1,45 +1,50 @@
1
- import { isActiveWorkflowRunStatus } from "../utility.mjs";
2
- import { WorkflowScheduleAlreadyExistsError, WorkflowScheduleError } from "../errors/schedule.mjs";
1
+ import { WorkflowErrorCode } from "../errors/codes.mjs";
2
+ import { WorkflowScheduleError } from "../errors/schedule.mjs";
3
+ import { matchesWorkflowError } from "../errors/records.mjs";
3
4
  import "../errors/mod.mjs";
4
- import { defineWorkflowFromName } from "../definition.mjs";
5
- import { toOptionalPersistedValue, toPersistedValue } from "./serialization.mjs";
5
+ import { defineFromName } from "../definition.mjs";
6
+ import { isActiveRunStatus } from "../run-status.mjs";
7
+ import { enforceStorageValueSize, parseInput, toPersistedValue } from "./serialization.mjs";
8
+ import { cancelWorkflowRun } from "./run-service.mjs";
9
+ import { isPlainObject } from "@temelj/value";
6
10
  //#region src/engine/schedule.ts
7
11
  const MAX_SCHEDULE_UPSERT_ATTEMPTS = 3;
8
- function resolveScheduleRecord(namespace, definition, options, createdAt, limits) {
12
+ async function resolveScheduleRecord(namespace, definition, options, createdAt, limits) {
9
13
  const nextFireAt = (options.from ?? createdAt).toZonedDateTimeISO("UTC").add(options.every).toInstant();
10
14
  const endAt = options.endAt;
11
15
  const catchUp = options.catchUp ?? "one";
12
16
  const maxCatchUpRuns = options.maxCatchUpRuns;
13
17
  const overlap = options.overlap ?? "allow";
14
- const persistedInput = toOptionalPersistedValue(options.input, "workflow schedule input", limits);
18
+ const persistedInput = await parseInput(definition, options.input);
19
+ enforceStorageValueSize(persistedInput, "workflow schedule input", limits);
15
20
  return {
16
21
  id: options.id,
17
22
  namespace,
18
23
  workflowName: definition.name,
19
- ...definition.version === void 0 ? {} : { workflowVersion: definition.version },
20
- ...persistedInput === void 0 ? {} : { input: persistedInput },
21
- ...options.context === void 0 ? {} : { context: toPersistedValue(options.context, "workflow schedule context", limits) },
24
+ workflowVersion: definition.version,
25
+ input: persistedInput,
26
+ context: options.context !== void 0 ? toPersistedValue(options.context, "workflow schedule context", limits) : void 0,
22
27
  status: endAt !== void 0 && Temporal.Instant.compare(nextFireAt, endAt) > 0 ? "deleted" : "active",
23
28
  every: options.every,
24
29
  catchUp,
25
- ...maxCatchUpRuns === void 0 ? {} : { maxCatchUpRuns },
26
- ...options.maxLateness === void 0 ? {} : { maxLateness: options.maxLateness },
30
+ maxCatchUpRuns,
31
+ maxLateness: options.maxLateness,
27
32
  overlap,
28
33
  createdAt,
29
34
  updatedAt: createdAt,
30
35
  nextFireAt,
31
- ...endAt === void 0 ? {} : { endAt },
36
+ endAt,
32
37
  tickCount: 0
33
38
  };
34
39
  }
35
40
  async function upsertSchedule(store, definition, options, timestamp, limits) {
36
- const schedule = resolveScheduleRecord(store.namespace, definition, options, timestamp, limits);
41
+ const schedule = await resolveScheduleRecord(store.namespace, definition, options, timestamp, limits);
37
42
  for (let attempt = 0; attempt < MAX_SCHEDULE_UPSERT_ATTEMPTS; attempt += 1) {
38
43
  const existing = await store.getSchedule(schedule.id);
39
44
  if (existing === void 0) try {
40
45
  return await store.createSchedule(schedule);
41
46
  } catch (error) {
42
- if (!WorkflowScheduleAlreadyExistsError.isAlreadyExists(error, schedule.id)) throw error;
47
+ if (!matchesWorkflowError(error, WorkflowErrorCode.SCHEDULE_ALREADY_EXISTS, { scheduleId: schedule.id })) throw error;
43
48
  continue;
44
49
  }
45
50
  const next = {
@@ -47,25 +52,25 @@ async function upsertSchedule(store, definition, options, timestamp, limits) {
47
52
  createdAt: existing.createdAt,
48
53
  updatedAt: timestamp,
49
54
  tickCount: existing.tickCount,
50
- ...existing.bufferedFireAt === void 0 ? {} : { bufferedFireAt: existing.bufferedFireAt },
51
- ...existing.lastFireAt === void 0 ? {} : { lastFireAt: existing.lastFireAt },
52
- ...existing.lastRunId === void 0 ? {} : { lastRunId: existing.lastRunId }
55
+ bufferedFireAt: existing.bufferedFireAt,
56
+ lastFireAt: existing.lastFireAt,
57
+ lastRunId: existing.lastRunId
53
58
  };
54
59
  const updated = await store.updateScheduleIfCurrent(existing, next);
55
60
  if (updated !== void 0) return updated;
56
61
  }
57
- WorkflowScheduleError.upsertConflictExhausted(schedule.id);
62
+ throw new WorkflowScheduleError(`Failed to upsert workflow schedule ${schedule.id}`, WorkflowErrorCode.SCHEDULE_UPSERT_CONFLICT_EXHAUSTED, { scheduleId: schedule.id });
58
63
  }
59
64
  async function updateScheduleStatus(store, scheduleId, status, now) {
60
65
  const current = await store.getSchedule(scheduleId);
61
- if (current === void 0) WorkflowScheduleError.notFound(scheduleId);
66
+ if (current === void 0) throw new WorkflowScheduleError(`Workflow schedule not found: ${scheduleId}`, WorkflowErrorCode.SCHEDULE_NOT_FOUND, { scheduleId });
62
67
  const next = {
63
68
  ...current,
64
69
  status,
65
70
  updatedAt: now
66
71
  };
67
72
  const updated = await store.updateScheduleIfCurrent(current, next);
68
- if (updated === void 0) WorkflowScheduleError.updateConflictExhausted(scheduleId);
73
+ if (updated === void 0) throw new WorkflowScheduleError(`Failed to update workflow schedule ${scheduleId}`, WorkflowErrorCode.SCHEDULE_UPDATE_CONFLICT_EXHAUSTED, { scheduleId });
69
74
  return updated;
70
75
  }
71
76
  function workflowScheduleFireTimes(schedule, now) {
@@ -95,11 +100,9 @@ async function advanceSchedule(store, schedule, now, updatedAt, fired) {
95
100
  status: schedule.endAt !== void 0 && Temporal.Instant.compare(nextFireAt, schedule.endAt) > 0 ? "deleted" : schedule.status,
96
101
  updatedAt,
97
102
  tickCount: schedule.tickCount + (fired === void 0 ? 0 : 1),
98
- ...fired === void 0 || schedule.bufferedFireAt === void 0 ? {} : { bufferedFireAt: void 0 },
99
- ...fired === void 0 ? {} : {
100
- lastFireAt: fired.fireAt,
101
- lastRunId: fired.runId
102
- }
103
+ bufferedFireAt: fired === void 0 ? schedule.bufferedFireAt : void 0,
104
+ lastFireAt: fired === void 0 ? schedule.lastFireAt : fired.fireAt,
105
+ lastRunId: fired === void 0 ? schedule.lastRunId : fired.runId
103
106
  };
104
107
  return await store.updateScheduleIfCurrent(schedule, next);
105
108
  }
@@ -111,19 +114,19 @@ async function bufferSchedule(store, schedule, fireTimes, now, updatedAt) {
111
114
  nextFireAt,
112
115
  status: schedule.endAt !== void 0 && Temporal.Instant.compare(nextFireAt, schedule.endAt) > 0 ? "deleted" : schedule.status,
113
116
  updatedAt,
114
- ...bufferAt === void 0 ? {} : { bufferedFireAt: bufferAt }
117
+ bufferedFireAt: bufferAt
115
118
  };
116
119
  return await store.updateScheduleIfCurrent(schedule, next);
117
120
  }
118
121
  async function hasActiveScheduledRun(store, schedule) {
119
122
  if (schedule.lastRunId === void 0) return false;
120
123
  const run = await store.getRun(schedule.lastRunId);
121
- return run !== void 0 && isActiveWorkflowRunStatus(run.status);
124
+ return run !== void 0 && isActiveRunStatus(run.status);
122
125
  }
123
126
  async function cancelActiveScheduledRun(store, engine, schedule) {
124
127
  if (schedule.lastRunId === void 0) return;
125
128
  const run = await store.getRun(schedule.lastRunId);
126
- if (run !== void 0 && isActiveWorkflowRunStatus(run.status)) await engine.cancelRun(schedule.lastRunId);
129
+ if (run !== void 0 && isActiveRunStatus(run.status)) await cancelWorkflowRun(engine.context, engine.lifecycle, schedule.lastRunId);
127
130
  }
128
131
  async function tickSchedules(store, engine, now, tickOptions) {
129
132
  const tickNow = tickOptions?.now === void 0 ? now() : tickOptions.now;
@@ -153,7 +156,7 @@ async function tickSchedules(store, engine, now, tickOptions) {
153
156
  continue;
154
157
  }
155
158
  for (const fireAt of fireTimes) {
156
- const run = await engine.startWorkflow(defineWorkflowFromName(schedule.workflowName, schedule.workflowVersion), schedule.input, {
159
+ const run = await engine.startWorkflow(defineFromName(schedule.workflowName, schedule.workflowVersion), schedule.input, {
157
160
  idempotencyKey: `schedule:${schedule.id}:${fireAt.toString()}`,
158
161
  availableAt: fireAt,
159
162
  context: scheduleRunContext(schedule, fireAt)
@@ -166,11 +169,11 @@ async function tickSchedules(store, engine, now, tickOptions) {
166
169
  currentSchedule = advanced;
167
170
  advancedSchedule = true;
168
171
  runIds.push(run.runId);
169
- engine.observeScheduleRunCreated?.({
172
+ engine.observation.emitScheduleRunCreated({
170
173
  scheduleId: schedule.id,
171
174
  runId: run.runId,
172
175
  workflowName: schedule.workflowName,
173
- ...schedule.workflowVersion === void 0 ? {} : { workflowVersion: schedule.workflowVersion },
176
+ workflowVersion: schedule.workflowVersion,
174
177
  fireAt,
175
178
  timestamp: tickNow
176
179
  });
@@ -185,7 +188,7 @@ async function tickSchedules(store, engine, now, tickOptions) {
185
188
  ticked: runIds.length,
186
189
  runIds,
187
190
  scheduleIds,
188
- ...nextScheduleAt === void 0 ? {} : { nextScheduleAt }
191
+ nextScheduleAt
189
192
  };
190
193
  }
191
194
  function scheduleRunContext(schedule, fireAt) {
@@ -193,7 +196,7 @@ function scheduleRunContext(schedule, fireAt) {
193
196
  scheduleId: schedule.id,
194
197
  scheduleFireAt: fireAt.toString()
195
198
  };
196
- if (typeof schedule.context === "object" && schedule.context !== null && !Array.isArray(schedule.context) && (Object.getPrototypeOf(schedule.context) === Object.prototype || Object.getPrototypeOf(schedule.context) === null)) return Object.assign({}, schedule.context, {
199
+ if (isPlainObject(schedule.context)) return Object.assign({}, schedule.context, {
197
200
  scheduleId: schedule.id,
198
201
  scheduleFireAt: fireAt.toString()
199
202
  });
@@ -204,4 +207,4 @@ function scheduleRunContext(schedule, fireAt) {
204
207
  };
205
208
  }
206
209
  //#endregion
207
- export { advanceSchedule, bufferSchedule, cancelActiveScheduledRun, hasActiveScheduledRun, resolveScheduleRecord, tickSchedules, updateScheduleStatus, upsertSchedule, workflowScheduleFireTimes };
210
+ export { resolveScheduleRecord, tickSchedules, updateScheduleStatus, upsertSchedule };