@temelj/workflow 0.0.0-alpha.3 → 0.0.0-alpha.5

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 +119 -280
  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,116 @@
1
+ import { idSchema, nonBlankStringSchema, nonNegativeSafeIntegerSchema, positiveSafeIntegerSchema, temporalDurationSchema, temporalInstantSchema } from "./common.mjs";
2
+ import { errorRecordSchema } from "./error.mjs";
3
+ import { persistedValueIssue, persistedValueSchema } from "./persisted-value.mjs";
4
+ import { childWorkflowCancellationPolicySchema, materializedStepTypeSchema, terminalRunStatusSchema } from "./run.mjs";
5
+ import { ss } from "@temelj/standard-schema";
6
+ //#region src/schema/store.ts
7
+ const lockRecordSchema = ss.object({
8
+ key: nonBlankStringSchema,
9
+ namespace: nonBlankStringSchema,
10
+ holderId: nonBlankStringSchema,
11
+ holderRunId: ss.optional(idSchema),
12
+ holderStepId: ss.optional(idSchema),
13
+ fencingToken: positiveSafeIntegerSchema,
14
+ acquiredAt: temporalInstantSchema,
15
+ leaseExpiresAt: temporalInstantSchema,
16
+ releasedAt: ss.optional(temporalInstantSchema)
17
+ });
18
+ const cleanupModeSchema = ss.literal("best_effort");
19
+ const cleanupMarkerRecordSchema = ss.object({
20
+ mode: cleanupModeSchema,
21
+ runId: idSchema,
22
+ workflowName: nonBlankStringSchema,
23
+ workflowVersion: ss.optional(nonBlankStringSchema),
24
+ status: terminalRunStatusSchema,
25
+ createdAt: temporalInstantSchema,
26
+ finishedAt: temporalInstantSchema,
27
+ cleanupStartedAt: temporalInstantSchema,
28
+ events: nonNegativeSafeIntegerSchema,
29
+ stepAttempts: nonNegativeSafeIntegerSchema,
30
+ idempotencyKeys: nonNegativeSafeIntegerSchema,
31
+ messageIdempotencyKeys: nonNegativeSafeIntegerSchema
32
+ });
33
+ const scheduleIdSchema = ss.refine(ss.string(), (value) => value.trim().length > 0, "Expected an ID");
34
+ const scheduleStatusSchema = ss.picklist([
35
+ "active",
36
+ "paused",
37
+ "archived",
38
+ "deleted"
39
+ ]);
40
+ const scheduleCatchUpPolicySchema = ss.picklist([
41
+ "skip",
42
+ "one",
43
+ "all"
44
+ ]);
45
+ const scheduleOverlapPolicySchema = ss.picklist([
46
+ "allow",
47
+ "skip",
48
+ "buffer",
49
+ "cancel"
50
+ ]);
51
+ const schedulePositiveDurationSchema = ss.refine(temporalDurationSchema, (value) => value.total({ unit: "millisecond" }) > 0, "Expected a positive duration");
52
+ const scheduleRecordSchema = ss.object({
53
+ id: scheduleIdSchema,
54
+ namespace: nonBlankStringSchema,
55
+ workflowName: nonBlankStringSchema,
56
+ workflowVersion: ss.optional(nonBlankStringSchema),
57
+ input: ss.optional(persistedValueSchema),
58
+ context: ss.optional(persistedValueSchema),
59
+ status: scheduleStatusSchema,
60
+ every: schedulePositiveDurationSchema,
61
+ catchUp: scheduleCatchUpPolicySchema,
62
+ maxCatchUpRuns: ss.optional(positiveSafeIntegerSchema),
63
+ maxLateness: ss.optional(schedulePositiveDurationSchema),
64
+ overlap: scheduleOverlapPolicySchema,
65
+ createdAt: temporalInstantSchema,
66
+ updatedAt: temporalInstantSchema,
67
+ nextFireAt: temporalInstantSchema,
68
+ endAt: ss.optional(temporalInstantSchema),
69
+ bufferedFireAt: ss.optional(temporalInstantSchema),
70
+ lastFireAt: ss.optional(temporalInstantSchema),
71
+ lastRunId: ss.optional(idSchema),
72
+ tickCount: ss.union([positiveSafeIntegerSchema, ss.literal(0)])
73
+ });
74
+ const stepAttemptStatusSchema = ss.picklist([
75
+ "running",
76
+ "completed",
77
+ "failed",
78
+ "abandoned"
79
+ ]);
80
+ const stepAttemptRecordSchema = ss.object({
81
+ runId: idSchema,
82
+ stepId: idSchema,
83
+ stepName: nonBlankStringSchema,
84
+ kind: materializedStepTypeSchema,
85
+ status: stepAttemptStatusSchema,
86
+ attempt: positiveSafeIntegerSchema,
87
+ count: ss.optional(positiveSafeIntegerSchema),
88
+ output: ss.optional(persistedValueSchema),
89
+ error: ss.optional(errorRecordSchema),
90
+ until: ss.optional(temporalInstantSchema),
91
+ duration: ss.optional(ss.instanceOf(Temporal.Duration, "Expected a Temporal.Duration")),
92
+ childRunId: ss.optional(idSchema),
93
+ workflowName: ss.optional(nonBlankStringSchema),
94
+ workflowVersion: ss.optional(nonBlankStringSchema),
95
+ cancellation: ss.optional(childWorkflowCancellationPolicySchema),
96
+ input: ss.optional(persistedValueSchema),
97
+ timeoutAt: ss.optional(temporalInstantSchema),
98
+ messageId: ss.optional(idSchema),
99
+ targetRunId: ss.optional(idSchema),
100
+ payload: ss.optional(persistedValueSchema),
101
+ messageTimestamp: ss.optional(temporalInstantSchema),
102
+ createdAt: temporalInstantSchema,
103
+ startedAt: temporalInstantSchema,
104
+ finishedAt: ss.optional(temporalInstantSchema)
105
+ });
106
+ const cleanupIndexKeySchema = ss.object({
107
+ key: nonBlankStringSchema,
108
+ value: ss.refine(persistedValueSchema, (value) => value !== void 0 && persistedValueIssue(value, "value", /* @__PURE__ */ new WeakSet(), true) === void 0, "Expected a storage value")
109
+ });
110
+ const messageIdempotencyIndexSchema = ss.object({
111
+ runId: idSchema,
112
+ messageId: idSchema,
113
+ timestamp: temporalInstantSchema
114
+ });
115
+ //#endregion
116
+ export { cleanupIndexKeySchema, cleanupMarkerRecordSchema, cleanupModeSchema, lockRecordSchema, messageIdempotencyIndexSchema, scheduleRecordSchema, stepAttemptRecordSchema, stepAttemptStatusSchema };
@@ -1,10 +1,5 @@
1
- import { WorkflowStepContext, WorkflowStepDefinition, WorkflowStepRunConfig } from "./types/step.mjs";
1
+ import { StepDefinition, StepDefinitionHandler, StepRunConfig } from "./types/step.mjs";
2
2
  //#region src/step-definition.d.ts
3
- type WorkflowStepHandler = (...args: never[]) => unknown;
4
- type WorkflowStepHandlerInputTuple<THandler extends WorkflowStepHandler> = THandler extends ((...args: infer TArgs) => unknown) ? TArgs : never;
5
- type WorkflowStepHandlerArgs<THandler extends WorkflowStepHandler> = WorkflowStepHandlerInputTuple<THandler> extends [...infer TArgs, WorkflowStepContext] ? TArgs : WorkflowStepHandlerInputTuple<THandler>;
6
- type WorkflowStepHandlerOutput<THandler extends WorkflowStepHandler> = THandler extends ((...args: never[]) => infer TOutput) ? Awaited<TOutput> : never;
7
- /** Defines a workflow step. */
8
- declare function defineWorkflowStep<THandler extends WorkflowStepHandler>(config: WorkflowStepRunConfig, handler: THandler): WorkflowStepDefinition<WorkflowStepHandlerArgs<THandler>, WorkflowStepHandlerOutput<THandler>>;
9
- //#endregion
10
- export { defineWorkflowStep };
3
+ /** Defines a durable step whose handler receives context before its typed arguments. */
4
+ export declare function defineWorkflowStep<TArgs extends readonly unknown[], TOutput>(config: StepRunConfig, handler: StepDefinitionHandler<TArgs, TOutput>): StepDefinition<TArgs, TOutput>;
5
+ //#endregion
@@ -1,10 +1,10 @@
1
1
  import { WorkflowDefinitionError } from "./errors/definition.mjs";
2
2
  import "./errors/mod.mjs";
3
3
  //#region src/step-definition.ts
4
- /** Defines a workflow step. */
4
+ /** Defines a durable step whose handler receives context before its typed arguments. */
5
5
  function defineWorkflowStep(config, handler) {
6
6
  const commandId = config.commandId ?? config.name;
7
- if (commandId === void 0) WorkflowDefinitionError.stepNameOrCommandIdRequired();
7
+ if (commandId === void 0) throw new WorkflowDefinitionError("Workflow step name or commandId is required");
8
8
  return {
9
9
  config,
10
10
  name: commandId,
@@ -1,14 +1,13 @@
1
- import { WorkflowStorage, WorkflowStoreCapabilities } from "../types/store.mjs";
1
+ import { StoreCapabilities, WorkflowStorage } from "../types/store.mjs";
2
2
  //#region src/store/capabilities.d.ts
3
3
  /** Detects which coordination capabilities are available on a workflow store backend. */
4
- declare function getWorkflowStoreCapabilities(storage: WorkflowStorage): WorkflowStoreCapabilities;
4
+ export declare function getWorkflowStoreCapabilities(storage: WorkflowStorage): StoreCapabilities;
5
5
  /** Validates workflow store capabilities and throws when the requirement is not met. */
6
- declare function requireWorkflowStoreCapabilities(store: {
7
- readonly capabilities: WorkflowStoreCapabilities;
8
- }, requirements: Partial<Record<keyof WorkflowStoreCapabilities, string>>): void;
6
+ export declare function requireStoreCapabilities(store: {
7
+ readonly capabilities: StoreCapabilities;
8
+ }, requirements: readonly (readonly [capability: keyof StoreCapabilities, label: string])[]): void;
9
9
  /** Returns whether a storage backend can reject stale single-key writes. */
10
- declare function supportsWorkflowConditionalWrite(storage: WorkflowStorage): boolean;
10
+ export declare function supportsConditionalWrite(storage: WorkflowStorage): boolean;
11
11
  /** Returns whether a storage backend can atomically reject stale multi-key writes. */
12
- declare function supportsWorkflowAtomicBatchWrite(storage: WorkflowStorage): boolean;
13
- //#endregion
14
- export { getWorkflowStoreCapabilities, requireWorkflowStoreCapabilities, supportsWorkflowAtomicBatchWrite, supportsWorkflowConditionalWrite };
12
+ export declare function supportsAtomicBatchWrite(storage: WorkflowStorage): boolean;
13
+ //#endregion
@@ -3,8 +3,8 @@ import "../errors/mod.mjs";
3
3
  //#region src/store/capabilities.ts
4
4
  /** Detects which coordination capabilities are available on a workflow store backend. */
5
5
  function getWorkflowStoreCapabilities(storage) {
6
- const conditionalWrites = supportsWorkflowConditionalWrite(storage);
7
- const conditionalBatches = supportsWorkflowAtomicBatchWrite(storage);
6
+ const conditionalWrites = supportsConditionalWrite(storage);
7
+ const conditionalBatches = supportsAtomicBatchWrite(storage);
8
8
  return {
9
9
  conditionalWrites,
10
10
  conditionalRunClaims: conditionalWrites,
@@ -27,16 +27,16 @@ function getWorkflowStoreCapabilities(storage) {
27
27
  };
28
28
  }
29
29
  /** Validates workflow store capabilities and throws when the requirement is not met. */
30
- function requireWorkflowStoreCapabilities(store, requirements) {
31
- for (const [capability, label] of Object.entries(requirements)) if (store.capabilities[capability] !== true) WorkflowCapabilityError.unsupported(label ?? `workflow store ${capability}`);
30
+ function requireStoreCapabilities(store, requirements) {
31
+ for (const [capability, label] of requirements) if (store.capabilities[capability] !== true) WorkflowCapabilityError.unsupported(label ?? `workflow store ${capability}`);
32
32
  }
33
33
  /** Returns whether a storage backend can reject stale single-key writes. */
34
- function supportsWorkflowConditionalWrite(storage) {
34
+ function supportsConditionalWrite(storage) {
35
35
  return storage.capabilities.compareAndSet;
36
36
  }
37
37
  /** Returns whether a storage backend can atomically reject stale multi-key writes. */
38
- function supportsWorkflowAtomicBatchWrite(storage) {
38
+ function supportsAtomicBatchWrite(storage) {
39
39
  return storage.capabilities.compareAndSetMany;
40
40
  }
41
41
  //#endregion
42
- export { getWorkflowStoreCapabilities, requireWorkflowStoreCapabilities, supportsWorkflowAtomicBatchWrite, supportsWorkflowConditionalWrite };
42
+ export { getWorkflowStoreCapabilities, requireStoreCapabilities, supportsAtomicBatchWrite, supportsConditionalWrite };
@@ -1,18 +1,13 @@
1
- import { RunId } from "../types/run-id.mjs";
2
1
  import { CleanupMarkerRecord, CleanupRunsOptions, CleanupRunsResult } from "../types/cleanup.mjs";
3
- import { WorkflowListRunsOptions } from "../types/run-list.mjs";
4
- import { WorkflowRunRecord } from "../types/run.mjs";
5
- import { EventRecord } from "../types/events.mjs";
6
- import { WorkflowCleanupIndexKey, WorkflowStorage } from "../types/store.mjs";
2
+ import { ListRunsOptions } from "../types/run-list.mjs";
3
+ import { RunRecord } from "../types/run.mjs";
4
+ import { CleanupIndexKey, WorkflowStorage } from "../types/store.mjs";
7
5
  //#region src/store/cleanup.d.ts
8
- interface WorkflowCleanupRunLister {
9
- listRuns(options: WorkflowListRunsOptions): Promise<readonly WorkflowRunRecord[]>;
6
+ interface CleanupRunLister {
7
+ listRuns(options: ListRunsOptions): Promise<readonly RunRecord[]>;
10
8
  }
11
- declare function stepAttemptKeysForCleanup(storage: WorkflowStorage, namespace: string, runId: RunId): Promise<readonly string[]>;
12
- declare function messageIdempotencyIndexesForCleanup(storage: WorkflowStorage, namespace: string, runId: RunId, events: readonly EventRecord[]): Promise<readonly WorkflowCleanupIndexKey[]>;
13
- declare function idempotencyIndexesForCleanup(storage: WorkflowStorage, namespace: string, run: WorkflowRunRecord): Promise<readonly WorkflowCleanupIndexKey[]>;
14
- declare function deleteCleanupIndexes(storage: WorkflowStorage, indexes: readonly WorkflowCleanupIndexKey[]): Promise<number>;
15
- declare function cleanupRuns(storage: WorkflowStorage, namespace: string, runs: WorkflowCleanupRunLister, options: CleanupRunsOptions): Promise<CleanupRunsResult>;
16
- declare function listCleanupMarkers(storage: WorkflowStorage, namespace: string): Promise<readonly CleanupMarkerRecord[]>;
9
+ export declare function deleteCleanupIndexes(storage: WorkflowStorage, indexes: readonly CleanupIndexKey[]): Promise<number>;
10
+ export declare function cleanupRuns(storage: WorkflowStorage, namespace: string, runs: CleanupRunLister, options: CleanupRunsOptions): Promise<CleanupRunsResult>;
11
+ export declare function listCleanupMarkers(storage: WorkflowStorage, namespace: string): Promise<readonly CleanupMarkerRecord[]>;
17
12
  //#endregion
18
- export { cleanupRuns, deleteCleanupIndexes, idempotencyIndexesForCleanup, listCleanupMarkers, messageIdempotencyIndexesForCleanup, stepAttemptKeysForCleanup };
13
+ export {};
@@ -1,16 +1,17 @@
1
+ import { compareOptionalTimestamps } from "../temporal.mjs";
2
+ import { WorkflowErrorCode } from "../errors/codes.mjs";
1
3
  import { WorkflowStateError } from "../errors/base.mjs";
2
- import { isTerminalWorkflowRunStatus } from "../utility.mjs";
3
4
  import "../errors/mod.mjs";
4
- import { omitUndefined } from "../collection.mjs";
5
- import { compareOptionalTimestamps } from "../temporal.mjs";
6
- import { supportsWorkflowConditionalWrite } from "./capabilities.mjs";
5
+ import { omitUndefined, uniqueBy } from "../collection.mjs";
7
6
  import { isStepAttemptKey, makeCleanupMarkerKey, makeCleanupMarkerKeyPrefix, makeEventsKey, makeIdempotencyKey, makeMessageIdempotencyKey, makeRunKey, makeStepAttemptKeyPrefix } from "../store-keys.mjs";
8
- import { isSameWorkflowStorageValue } from "./revision.mjs";
7
+ import { isTerminalRunStatus } from "../run-status.mjs";
8
+ import { supportsConditionalWrite } from "./capabilities.mjs";
9
9
  import { toStorageValue } from "./storage-value.mjs";
10
10
  import { isReadableMessageIdempotencyIndex, isSameMessageIdempotencyIndex, readableCleanupMarkerRecord } from "./validation.mjs";
11
- import { getStoredCleanupEventHistory } from "./event-history.mjs";
12
- import { getReadableStoredWorkflowRun } from "./run.mjs";
13
- import { messageIdempotencyIndexValuesFromEvents } from "./message-index.mjs";
11
+ import { getReadableStoredRun } from "./run.mjs";
12
+ import { messageIdempotencyIndexValuesFromEvents } from "./indexes.mjs";
13
+ import { getStoredCleanupEventHistory } from "./events.mjs";
14
+ import { deepEquals } from "@temelj/value";
14
15
  //#region src/store/cleanup.ts
15
16
  async function stepAttemptKeysForCleanup(storage, namespace, runId) {
16
17
  const prefix = makeStepAttemptKeyPrefix(namespace, runId);
@@ -34,19 +35,19 @@ async function idempotencyIndexesForCleanup(storage, namespace, run) {
34
35
  }] : [];
35
36
  }
36
37
  async function deleteCleanupIndexes(storage, indexes) {
37
- const uniqueIndexes = indexes.filter(uniqueCleanupIndexKey);
38
- if (!supportsWorkflowConditionalWrite(storage)) {
38
+ const uniqueIndexes = uniqueBy(indexes, (index) => index.key);
39
+ if (!supportsConditionalWrite(storage)) {
39
40
  const currentIndexes = await Promise.all(uniqueIndexes.map(async (index) => ({
40
41
  ...index,
41
42
  current: await storage.get(index.key)
42
43
  })));
43
44
  return await storage.deleteMany(currentIndexes.flatMap((index) => workflowCleanupIndexMatchesCurrentValue(index.current, index.value) ? [index.key] : []));
44
45
  }
45
- return (await Promise.all(uniqueIndexes.map(async (index) => await storage.compareAndSet(index.key, index.value, void 0)))).filter((value) => value).length;
46
+ return (await Promise.all(uniqueIndexes.map((index) => storage.compareAndSet(index.key, index.value, void 0)))).filter((value) => value).length;
46
47
  }
47
48
  function workflowCleanupIndexMatchesCurrentValue(current, expected) {
48
49
  if (isReadableMessageIdempotencyIndex(expected)) return isSameMessageIdempotencyIndex(current, expected);
49
- return isSameWorkflowStorageValue(current, expected);
50
+ return deepEquals(current, expected);
50
51
  }
51
52
  function messageIdempotencyIndexesFromEvents(namespace, runId, events) {
52
53
  return messageIdempotencyIndexValuesFromEvents(events, runId).map(({ idempotencyKey, value }) => ({
@@ -55,12 +56,16 @@ function messageIdempotencyIndexesFromEvents(namespace, runId, events) {
55
56
  }));
56
57
  }
57
58
  function idempotencyKeyFromRun(namespace, run) {
58
- if (run.idempotencyKey === void 0) WorkflowStateError.runMissingIdempotencyKey(run.id);
59
- return makeIdempotencyKey(namespace, {
59
+ if (run.idempotencyKey === void 0) throw new WorkflowStateError(`Workflow run does not have an idempotency key: ${run.id}`, {
60
+ code: WorkflowErrorCode.STATE_RUN_MISSING_IDEMPOTENCY_KEY,
61
+ details: { runId: run.id }
62
+ });
63
+ const options = {
60
64
  workflowName: run.workflowName,
61
- ...run.workflowVersion === void 0 ? {} : { workflowVersion: run.workflowVersion },
65
+ workflowVersion: run.workflowVersion,
62
66
  idempotencyKey: run.idempotencyKey
63
- });
67
+ };
68
+ return makeIdempotencyKey(namespace, options);
64
69
  }
65
70
  function toCleanupIndex(entry) {
66
71
  return {
@@ -72,28 +77,24 @@ function isCurrentMessageIdempotencyIndex(eventIndexes, value) {
72
77
  if (!isReadableMessageIdempotencyIndex(value)) return false;
73
78
  return eventIndexes.some((eventIndex) => isSameMessageIdempotencyIndex(value, eventIndex.value));
74
79
  }
75
- function uniqueCleanupIndexKey(index, position, indexes) {
76
- return indexes.findIndex((current) => current.key === index.key) === position;
77
- }
78
80
  async function cleanupRuns(storage, namespace, runs, options) {
79
- const cleanupOptions = options;
80
- const limit = cleanupOptions.limit;
81
- const statusFilter = cleanupOptions.status ?? [
81
+ const limit = options.limit;
82
+ const statusFilter = options.status ?? [
82
83
  "completed",
83
84
  "failed",
84
85
  "canceled"
85
86
  ];
86
- const selectedRuns = (await runs.listRuns({
87
+ const selectedRuns = uniqueBy((await runs.listRuns({
87
88
  status: Array.isArray(statusFilter) ? [...statusFilter] : statusFilter,
88
- workflowName: cleanupOptions.workflowName,
89
- workflowVersion: cleanupOptions.workflowVersion,
90
- idempotencyKey: cleanupOptions.idempotencyKey,
91
- parentRunId: cleanupOptions.parentRunId,
92
- parentStepId: cleanupOptions.parentStepId,
93
- parentStepName: cleanupOptions.parentStepName,
94
- parentStepAttempt: cleanupOptions.parentStepAttempt
95
- })).filter((run) => isWorkflowRunEligibleForCleanup(run, cleanupOptions)).sort(compareCleanupRuns).filter(isFirstCleanupRunForId).slice(0, limit);
96
- const stepAttemptKeysByRun = await Promise.all(selectedRuns.map(async (run) => await stepAttemptKeysForCleanup(storage, namespace, run.id)));
89
+ workflowName: options.workflowName,
90
+ workflowVersion: options.workflowVersion,
91
+ idempotencyKey: options.idempotencyKey,
92
+ parentRunId: options.parentRunId,
93
+ parentStepId: options.parentStepId,
94
+ parentStepName: options.parentStepName,
95
+ parentStepAttempt: options.parentStepAttempt
96
+ })).filter((run) => isRunEligibleForCleanup(run, options)).sort(compareCleanupRuns), (run) => run.id).slice(0, limit);
97
+ const stepAttemptKeysByRun = await Promise.all(selectedRuns.map((run) => stepAttemptKeysForCleanup(storage, namespace, run.id)));
97
98
  const stepAttemptKeys = stepAttemptKeysByRun.flat();
98
99
  const eventKeysByRun = selectedRuns.map((run) => makeEventsKey(namespace, run.id));
99
100
  const storedEventsByRun = await Promise.all(eventKeysByRun.map(async (key) => {
@@ -110,13 +111,13 @@ async function cleanupRuns(storage, namespace, runs, options) {
110
111
  key: makeRunKey(namespace, run.id),
111
112
  run
112
113
  }));
113
- const idempotencyIndexesByRun = await Promise.all(selectedRuns.map(async (run) => await idempotencyIndexesForCleanup(storage, namespace, run)));
114
+ const idempotencyIndexesByRun = await Promise.all(selectedRuns.map((run) => idempotencyIndexesForCleanup(storage, namespace, run)));
114
115
  const idempotencyKeysByRun = idempotencyIndexesByRun.map((indexes) => indexes.map((index) => index.key));
115
116
  const idempotencyKeys = idempotencyKeysByRun.flat();
116
- const messageIdempotencyIndexesByRun = await Promise.all(selectedRuns.map(async (run, index) => await messageIdempotencyIndexesForCleanup(storage, namespace, run.id, runEvents[index] ?? [])));
117
+ const messageIdempotencyIndexesByRun = await Promise.all(selectedRuns.map((run, index) => messageIdempotencyIndexesForCleanup(storage, namespace, run.id, runEvents[index] ?? [])));
117
118
  const messageIdempotencyKeysByRun = messageIdempotencyIndexesByRun.map((indexes) => indexes.map((index) => index.key));
118
119
  const messageIdempotencyKeys = messageIdempotencyKeysByRun.flat();
119
- const deletionResults = cleanupOptions.dryRun === true ? selectedRuns.map(() => ({
120
+ const deletionResults = options.dryRun === true ? selectedRuns.map(() => ({
120
121
  cleanupMarkerCreated: false,
121
122
  cleanupMarkerDeleted: false,
122
123
  runDeleted: false,
@@ -142,42 +143,42 @@ async function cleanupRuns(storage, namespace, runs, options) {
142
143
  return {
143
144
  mode: "best_effort",
144
145
  runIds: selectedRuns.map((run) => run.id),
145
- runs: selectedRuns.map((run, index) => ({
146
- mode: "best_effort",
147
- runId: run.id,
148
- workflowName: run.workflowName,
149
- ...run.workflowVersion === void 0 ? {} : { workflowVersion: run.workflowVersion },
150
- status: isTerminalWorkflowRunStatus(run.status) ? run.status : (() => {
151
- WorkflowStateError.cleanupSelectedNonTerminalRun(run.id);
152
- })(),
153
- createdAt: run.createdAt,
154
- updatedAt: run.updatedAt,
155
- finishedAt: cleanupFinishedAt(run),
156
- ...run.idempotencyKey === void 0 ? {} : { idempotencyKey: run.idempotencyKey },
157
- ...run.parentRunId === void 0 ? {} : { parentRunId: run.parentRunId },
158
- ...run.parentStepId === void 0 ? {} : { parentStepId: run.parentStepId },
159
- ...run.parentStepName === void 0 ? {} : { parentStepName: run.parentStepName },
160
- ...run.parentStepAttempt === void 0 ? {} : { parentStepAttempt: run.parentStepAttempt },
161
- events: runEvents[index]?.length ?? 0,
162
- stepAttempts: stepAttemptKeysByRun[index]?.length ?? 0,
163
- idempotencyKeys: idempotencyKeysByRun[index]?.length ?? 0,
164
- messageIdempotencyKeys: messageIdempotencyKeysByRun[index]?.length ?? 0,
165
- cleanupMarkerCreated: deletionResults[index]?.cleanupMarkerCreated ?? false,
166
- cleanupMarkerDeleted: deletionResults[index]?.cleanupMarkerDeleted ?? false,
167
- runDeleted: deletionResults[index]?.runDeleted ?? false,
168
- deletedEvents: deletionResults[index]?.deletedEvents ?? 0,
169
- deletedStepAttempts: deletionResults[index]?.deletedStepAttempts ?? 0,
170
- deletedIdempotencyKeys: deletionResults[index]?.deletedIdempotencyKeys ?? 0,
171
- deletedMessageIdempotencyKeys: deletionResults[index]?.deletedMessageIdempotencyKeys ?? 0
172
- })),
173
- ...cleanupOptions.dryRun === true ? {
174
- dryRun: true,
175
- matchedRuns: selectedRuns.length,
176
- matchedEvents: eventKeys.length,
177
- matchedStepAttempts: stepAttemptKeys.length,
178
- matchedIdempotencyKeys: idempotencyKeys.length,
179
- matchedMessageIdempotencyKeys: messageIdempotencyKeys.length
180
- } : {},
146
+ runs: selectedRuns.map((run, index) => {
147
+ return {
148
+ mode: "best_effort",
149
+ runId: run.id,
150
+ workflowName: run.workflowName,
151
+ workflowVersion: run.workflowVersion,
152
+ status: isTerminalRunStatus(run.status) ? run.status : (() => {
153
+ WorkflowStateError.cleanupSelectedNonTerminalRun(run.id);
154
+ })(),
155
+ createdAt: run.createdAt,
156
+ updatedAt: run.updatedAt,
157
+ finishedAt: cleanupFinishedAt(run),
158
+ idempotencyKey: run.idempotencyKey,
159
+ parentRunId: run.parentRunId,
160
+ parentStepId: run.parentStepId,
161
+ parentStepName: run.parentStepName,
162
+ parentStepAttempt: run.parentStepAttempt,
163
+ events: runEvents[index]?.length ?? 0,
164
+ stepAttempts: stepAttemptKeysByRun[index]?.length ?? 0,
165
+ idempotencyKeys: idempotencyKeysByRun[index]?.length ?? 0,
166
+ messageIdempotencyKeys: messageIdempotencyKeysByRun[index]?.length ?? 0,
167
+ cleanupMarkerCreated: deletionResults[index]?.cleanupMarkerCreated ?? false,
168
+ cleanupMarkerDeleted: deletionResults[index]?.cleanupMarkerDeleted ?? false,
169
+ runDeleted: deletionResults[index]?.runDeleted ?? false,
170
+ deletedEvents: deletionResults[index]?.deletedEvents ?? 0,
171
+ deletedStepAttempts: deletionResults[index]?.deletedStepAttempts ?? 0,
172
+ deletedIdempotencyKeys: deletionResults[index]?.deletedIdempotencyKeys ?? 0,
173
+ deletedMessageIdempotencyKeys: deletionResults[index]?.deletedMessageIdempotencyKeys ?? 0
174
+ };
175
+ }),
176
+ dryRun: options.dryRun === true ? true : void 0,
177
+ matchedRuns: options.dryRun === true ? selectedRuns.length : void 0,
178
+ matchedEvents: options.dryRun === true ? eventKeys.length : void 0,
179
+ matchedStepAttempts: options.dryRun === true ? stepAttemptKeys.length : void 0,
180
+ matchedIdempotencyKeys: options.dryRun === true ? idempotencyKeys.length : void 0,
181
+ matchedMessageIdempotencyKeys: options.dryRun === true ? messageIdempotencyKeys.length : void 0,
181
182
  deletedRuns,
182
183
  createdCleanupMarkers,
183
184
  deletedCleanupMarkers,
@@ -189,7 +190,7 @@ async function cleanupRuns(storage, namespace, runs, options) {
189
190
  }
190
191
  async function listCleanupMarkers(storage, namespace) {
191
192
  const prefix = makeCleanupMarkerKeyPrefix(namespace);
192
- return (await Promise.all((await storage.keys({ prefix })).filter((key) => isCleanupMarkerKey(key, prefix)).map(async (key) => await storage.get(key)))).flatMap((marker) => {
193
+ return (await Promise.all((await storage.keys({ prefix })).filter((key) => isCleanupMarkerKey(key, prefix)).map((key) => storage.get(key)))).flatMap((marker) => {
193
194
  const parsed = readableCleanupMarkerRecord(marker);
194
195
  return parsed === void 0 ? [] : [parsed];
195
196
  }).sort(compareCleanupMarkers);
@@ -207,11 +208,14 @@ function countCleanupDeletionResult(results, key) {
207
208
  return results.filter((result) => result[key]).length;
208
209
  }
209
210
  function cleanupFinishedAt(run) {
210
- if (run.finishedAt === void 0) WorkflowStateError.cleanupRunMissingFinishedAt(run.id);
211
+ if (run.finishedAt === void 0) throw new WorkflowStateError(`Workflow cleanup run is missing finishedAt: ${run.id}`, {
212
+ code: WorkflowErrorCode.STATE_CLEANUP_RUN_MISSING_FINISHED_AT,
213
+ details: { runId: run.id }
214
+ });
211
215
  return run.finishedAt;
212
216
  }
213
- function isWorkflowRunEligibleForCleanup(run, options) {
214
- if (!isTerminalWorkflowRunStatus(run.status) || run.finishedAt === void 0) return false;
217
+ function isRunEligibleForCleanup(run, options) {
218
+ if (!isTerminalRunStatus(run.status) || run.finishedAt === void 0) return false;
215
219
  if (Temporal.Instant.compare(run.finishedAt, options.finishedAtBefore) >= 0) return false;
216
220
  return options.status === void 0 || matchesCleanupStatus(run.status, options.status);
217
221
  }
@@ -225,9 +229,6 @@ function compareCleanupRuns(left, right) {
225
229
  if (createdOrder !== 0) return createdOrder;
226
230
  return left.id.localeCompare(right.id);
227
231
  }
228
- function isFirstCleanupRunForId(run, index, runs) {
229
- return runs.findIndex((entry) => entry.id === run.id) === index;
230
- }
231
232
  async function deleteCleanupRunsAndArtifacts(storage, options) {
232
233
  const markers = await createCleanupMarkers(storage, options);
233
234
  const deletedRuns = await deleteCleanupRunRecords(storage, options.runs);
@@ -279,8 +280,8 @@ async function createCleanupMarkers(storage, options) {
279
280
  mode: "best_effort",
280
281
  runId: run.id,
281
282
  workflowName: run.workflowName,
282
- ...run.workflowVersion === void 0 ? {} : { workflowVersion: run.workflowVersion },
283
- status: isTerminalWorkflowRunStatus(run.status) ? run.status : (() => {
283
+ workflowVersion: run.workflowVersion,
284
+ status: isTerminalRunStatus(run.status) ? run.status : (() => {
284
285
  WorkflowStateError.cleanupSelectedNonTerminalRun(run.id);
285
286
  })(),
286
287
  createdAt: run.createdAt,
@@ -302,14 +303,14 @@ function deletionCompleted(options) {
302
303
  return options.deletedEvents === options.expectedEvents && options.deletedStepAttempts === options.expectedStepAttempts && options.deletedIdempotencyKeys === options.expectedIdempotencyKeys && options.deletedMessageIdempotencyKeys === options.expectedMessageIdempotencyKeys;
303
304
  }
304
305
  async function deleteCleanupRunRecords(storage, runs) {
305
- if (!supportsWorkflowConditionalWrite(storage)) {
306
+ if (!supportsConditionalWrite(storage)) {
306
307
  const deletedRuns = (await Promise.all(runs.map(async (run) => {
307
- return await getReadableStoredWorkflowRun(storage, run.run.namespace, run.run.id);
308
- }))).map((latest, index) => latest !== void 0 && isSameWorkflowStorageValue(omitUndefined(latest), omitUndefined(runs[index].run)));
308
+ return await getReadableStoredRun(storage, run.run.namespace, run.run.id);
309
+ }))).map((latest, index) => latest !== void 0 && deepEquals(omitUndefined(latest), omitUndefined(runs[index].run)));
309
310
  await storage.deleteMany(runs.flatMap((run, index) => deletedRuns[index] === true ? [run.key] : []));
310
311
  return deletedRuns;
311
312
  }
312
- return await Promise.all(runs.map(async (run) => await storage.compareAndSet(run.key, toStorageValue(run.run), void 0)));
313
+ return await Promise.all(runs.map((run) => storage.compareAndSet(run.key, toStorageValue(run.run), void 0)));
313
314
  }
314
315
  //#endregion
315
- export { cleanupRuns, deleteCleanupIndexes, idempotencyIndexesForCleanup, listCleanupMarkers, messageIdempotencyIndexesForCleanup, stepAttemptKeysForCleanup };
316
+ export { cleanupRuns, deleteCleanupIndexes, listCleanupMarkers };
@@ -1,52 +1,51 @@
1
- import { RunId } from "../types/run-id.mjs";
1
+ import { RunId } from "../types/ids.mjs";
2
2
  import { CleanupMarkerRecord, CleanupRunsOptions, CleanupRunsResult } from "../types/cleanup.mjs";
3
3
  import { WorkflowPage } from "../types/pagination.mjs";
4
4
  import { ListSchedulesOptions, ListSchedulesPageOptions, ScheduleRecord } from "../types/schedule.mjs";
5
5
  import { LockRecord } from "../types/lock.mjs";
6
- import { WorkflowListRunsOptions, WorkflowListRunsPageOptions, WorkflowListStepAttemptsPageOptions } from "../types/run-list.mjs";
7
- import { WorkflowListStepAttemptsOptions, WorkflowStepAttemptRecord } from "../types/step-attempts.mjs";
8
- import { WorkflowRunRecord } from "../types/run.mjs";
6
+ import { ListRunsOptions, ListRunsPageOptions, ListStepAttemptsPageOptions } from "../types/run-list.mjs";
7
+ import { ListStepAttemptsOptions, StepAttemptRecord } from "../types/step-attempts.mjs";
8
+ import { RunRecord } from "../types/run.mjs";
9
9
  import { EventRecord } from "../types/events.mjs";
10
- import { CreateWorkflowStoreOptions, WorkflowClaimRunOptions, WorkflowEventHistoryChangeWaitOptions, WorkflowExtendRunLeaseOptions, WorkflowIdempotencyKeyOptions, WorkflowMessageIdempotencyIndex, WorkflowReleaseRunLeaseOptions, WorkflowStorage, WorkflowStore as WorkflowStore$1, WorkflowStoreCapabilities } from "../types/store.mjs";
10
+ import { ClaimRunOptions, CreateWorkflowStoreOptions, ExtendRunLeaseOptions, IdempotencyKeyOptions, MessageIdempotencyIndex, ReleaseRunLeaseOptions, StoreCapabilities, WorkflowEventHistoryChangeWaitOptions, WorkflowStorage, WorkflowStore as WorkflowStore$1 } from "../types/store.mjs";
11
11
  //#region src/store/create.d.ts
12
- declare function createWorkflowStore(options?: CreateWorkflowStoreOptions): WorkflowStore$1;
12
+ export declare function createWorkflowStore(options?: CreateWorkflowStoreOptions): WorkflowStore$1;
13
13
  /** Storage-backed workflow store implementation. */
14
- declare class WorkflowStore implements WorkflowStore$1 {
14
+ export declare class WorkflowStore implements WorkflowStore$1 {
15
15
  readonly storage: WorkflowStorage;
16
16
  readonly namespace: string;
17
- readonly capabilities: WorkflowStoreCapabilities;
17
+ readonly capabilities: StoreCapabilities;
18
18
  constructor(options?: CreateWorkflowStoreOptions);
19
- createRun(run: WorkflowRunRecord): Promise<WorkflowRunRecord>;
20
- getRun(runId: RunId): Promise<WorkflowRunRecord | undefined>;
21
- getRunByIdempotencyKey(options: WorkflowIdempotencyKeyOptions): Promise<WorkflowRunRecord | undefined>;
22
- updateRun(run: WorkflowRunRecord): Promise<WorkflowRunRecord>;
23
- updateRunIfCurrent(current: WorkflowRunRecord, next: WorkflowRunRecord): Promise<WorkflowRunRecord | undefined>;
24
- listRuns(options?: WorkflowListRunsOptions): Promise<readonly WorkflowRunRecord[]>;
25
- listRunsPage(options?: WorkflowListRunsPageOptions): Promise<WorkflowPage<WorkflowRunRecord>>;
26
- countRuns(options?: WorkflowListRunsOptions): Promise<number>;
27
- claimRun(options: WorkflowClaimRunOptions): Promise<WorkflowRunRecord | undefined>;
28
- extendRunLease(options: WorkflowExtendRunLeaseOptions): Promise<WorkflowRunRecord | undefined>;
29
- releaseRunLease(options: WorkflowReleaseRunLeaseOptions): Promise<WorkflowRunRecord | undefined>;
19
+ createRun(run: RunRecord): Promise<RunRecord>;
20
+ getRun(runId: RunId): Promise<RunRecord | undefined>;
21
+ getRunByIdempotencyKey(options: IdempotencyKeyOptions): Promise<RunRecord | undefined>;
22
+ updateRun(run: RunRecord): Promise<RunRecord>;
23
+ updateRunIfCurrent(current: RunRecord, next: RunRecord): Promise<RunRecord | undefined>;
24
+ listRuns(options?: ListRunsOptions): Promise<readonly RunRecord[]>;
25
+ listRunsPage(options?: ListRunsPageOptions): Promise<WorkflowPage<RunRecord>>;
26
+ countRuns(options?: ListRunsOptions): Promise<number>;
27
+ claimRun(options: ClaimRunOptions): Promise<RunRecord | undefined>;
28
+ extendRunLease(options: ExtendRunLeaseOptions): Promise<RunRecord | undefined>;
29
+ releaseRunLease(options: ReleaseRunLeaseOptions): Promise<RunRecord | undefined>;
30
30
  appendEvent(runId: RunId, event: EventRecord): Promise<readonly EventRecord[]>;
31
- appendEventIfRunCurrent(current: WorkflowRunRecord, event: EventRecord): Promise<readonly EventRecord[] | undefined>;
31
+ appendEventIfRunCurrent(current: RunRecord, event: EventRecord): Promise<readonly EventRecord[] | undefined>;
32
32
  getEvents(runId: RunId): Promise<readonly EventRecord[]>;
33
33
  waitForEventHistoryChange(runId: RunId, options?: WorkflowEventHistoryChangeWaitOptions): Promise<void>;
34
- listStepAttempts(runId: RunId, options?: WorkflowListStepAttemptsOptions): Promise<readonly WorkflowStepAttemptRecord[]>;
35
- listStepAttemptsPage(runId: RunId, options?: WorkflowListStepAttemptsPageOptions): Promise<WorkflowPage<WorkflowStepAttemptRecord>>;
36
- countStepAttempts(runId: RunId, options?: WorkflowListStepAttemptsOptions): Promise<number>;
37
- repairStepAttempts(runId: RunId): Promise<readonly WorkflowStepAttemptRecord[]>;
38
- repairMessageIdempotencyIndexes(runId: RunId): Promise<readonly WorkflowMessageIdempotencyIndex[]>;
34
+ listStepAttempts(runId: RunId, options?: ListStepAttemptsOptions): Promise<readonly StepAttemptRecord[]>;
35
+ listStepAttemptsPage(runId: RunId, options?: ListStepAttemptsPageOptions): Promise<WorkflowPage<StepAttemptRecord>>;
36
+ countStepAttempts(runId: RunId, options?: ListStepAttemptsOptions): Promise<number>;
37
+ repairStepAttempts(runId: RunId): Promise<readonly StepAttemptRecord[]>;
38
+ repairMessageIdempotencyIndexes(runId: RunId): Promise<readonly MessageIdempotencyIndex[]>;
39
39
  hasMessageIdempotencyKey(runId: RunId, idempotencyKey: string): Promise<boolean>;
40
40
  cleanupRuns(options: CleanupRunsOptions): Promise<CleanupRunsResult>;
41
41
  listCleanupMarkers(): Promise<readonly CleanupMarkerRecord[]>;
42
- createSchedule<TInput>(schedule: ScheduleRecord<TInput>): Promise<ScheduleRecord<TInput>>;
42
+ createSchedule(schedule: ScheduleRecord): Promise<ScheduleRecord>;
43
43
  getSchedule(scheduleId: string): Promise<ScheduleRecord | undefined>;
44
- updateScheduleIfCurrent<TInput>(current: ScheduleRecord, next: ScheduleRecord<TInput>): Promise<ScheduleRecord<TInput> | undefined>;
44
+ updateScheduleIfCurrent(current: ScheduleRecord, next: ScheduleRecord): Promise<ScheduleRecord | undefined>;
45
45
  listSchedules(options?: ListSchedulesOptions): Promise<readonly ScheduleRecord[]>;
46
46
  listSchedulesPage(options?: ListSchedulesPageOptions): Promise<WorkflowPage<ScheduleRecord>>;
47
47
  getLock(key: string): Promise<LockRecord | undefined>;
48
48
  listLocks(): Promise<readonly LockRecord[]>;
49
49
  updateLockIfCurrent(current: LockRecord | undefined, next: LockRecord): Promise<LockRecord | undefined>;
50
50
  }
51
- //#endregion
52
- export { WorkflowStore, createWorkflowStore };
51
+ //#endregion