@temelj/workflow 0.0.0-alpha.3 → 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 +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
@@ -1,51 +1,45 @@
1
+ import { WorkflowErrorCode } from "../errors/codes.mjs";
1
2
  import { WorkflowHookError } from "../errors/hook.mjs";
2
3
  import { WorkflowHookDisposedError } from "../errors/message.mjs";
4
+ import { matchesWorkflowError } from "../errors/records.mjs";
3
5
  import "../errors/mod.mjs";
4
- import { captureTelemetryContext } from "../telemetry.mjs";
6
+ import { WORKFLOW_HOOK_TOKEN_PREFIX, parseHookToken } from "../hook-token.mjs";
7
+ import { History } from "../history/replay.mjs";
5
8
  import { serializeError, toOptionalPersistedValue, toPersistedValue } from "./serialization.mjs";
6
- import { WorkflowHistory } from "../history/mod.mjs";
7
- import { enforceWorkflowEventHistoryNextLimit } from "./retry.mjs";
8
- import { WORKFLOW_HOOK_TOKEN_PREFIX, parseHookToken, parseWebhookToken } from "../types/hook.mjs";
9
- import { sendWorkflowMessage, waitForWorkflowMessage } from "./message.mjs";
9
+ import { enforceEventHistoryNextLimit } from "./retry.mjs";
10
+ import { captureTelemetryContext } from "../telemetry.mjs";
11
+ import { sendWorkflowMessage, waitForMessage } from "./message.mjs";
10
12
  import { encodeBase64UrlString } from "@temelj/string";
11
13
  //#region src/engine/hooks.ts
12
14
  const MAX_HOOK_DISPOSAL_APPEND_ATTEMPTS = 16;
13
- function createHook(runId, options, wait) {
14
- return new Hook(runId, options, wait);
15
- }
16
- function createWebhook(runId, options, wait) {
17
- return new Webhook(runId, options, wait);
18
- }
19
- function createWorkflowStepHookApi(environment) {
15
+ function createStepHookApi(environment) {
20
16
  const { runId } = environment;
21
17
  const tokens = /* @__PURE__ */ new Set();
18
+ function create(options) {
19
+ const hook = new Hook(runId, options, () => waitForMessage(environment, {
20
+ commandId: options.commandId ?? options.name,
21
+ messageId: options.messageId ?? options.name,
22
+ source: "hook",
23
+ timeout: options.timeout,
24
+ schema: options.schema
25
+ }));
26
+ requireUniqueStepHookToken(tokens, "hook", hook.name, hook.token);
27
+ return hook;
28
+ }
29
+ function createWebhook(options) {
30
+ const webhook = new Webhook(runId, options, () => waitForMessage(environment, {
31
+ commandId: options.commandId ?? options.name,
32
+ messageId: options.messageId ?? options.name,
33
+ source: "webhook",
34
+ timeout: options.timeout,
35
+ schema: options.schema
36
+ }));
37
+ requireUniqueStepHookToken(tokens, "webhook", webhook.name, webhook.token);
38
+ return webhook;
39
+ }
22
40
  return {
23
- create(options) {
24
- const hook = createHook(runId, options, async () => {
25
- return await waitForWorkflowMessage(environment, {
26
- commandId: options.commandId ?? options.name,
27
- messageId: options.messageId ?? options.name,
28
- source: "hook",
29
- ...options.timeout === void 0 ? {} : { timeout: options.timeout },
30
- ...options.schema === void 0 ? {} : { schema: options.schema }
31
- });
32
- });
33
- requireUniqueWorkflowStepHookToken(tokens, "hook", hook.name, hook.token);
34
- return hook;
35
- },
36
- createWebhook(options) {
37
- const webhook = createWebhook(runId, options, async () => {
38
- return await waitForWorkflowMessage(environment, {
39
- commandId: options.commandId ?? options.name,
40
- messageId: options.messageId ?? options.name,
41
- source: "webhook",
42
- ...options.timeout === void 0 ? {} : { timeout: options.timeout },
43
- ...options.schema === void 0 ? {} : { schema: options.schema }
44
- });
45
- });
46
- requireUniqueWorkflowStepHookToken(tokens, "webhook", webhook.name, webhook.token);
47
- return webhook;
48
- }
41
+ create,
42
+ createWebhook
49
43
  };
50
44
  }
51
45
  var Hook = class {
@@ -59,7 +53,8 @@ var Hook = class {
59
53
  this.token = formatHookToken({
60
54
  runId,
61
55
  name: options.name,
62
- messageId
56
+ messageId,
57
+ kind: "hook"
63
58
  });
64
59
  this.runId = runId;
65
60
  this.name = options.name;
@@ -73,8 +68,11 @@ var Hook = class {
73
68
  return this.wait().then(onfulfilled, onrejected);
74
69
  }
75
70
  };
76
- function requireUniqueWorkflowStepHookToken(tokens, kind, name, token) {
77
- if (tokens.has(token)) WorkflowHookError.tokenNotUnique(kind, name);
71
+ function requireUniqueStepHookToken(tokens, kind, name, token) {
72
+ if (tokens.has(token)) throw new WorkflowHookError(`Workflow ${kind} token must be unique within a run: ${name}`, WorkflowErrorCode.HOOK_TOKEN_NOT_UNIQUE, {
73
+ kind,
74
+ name
75
+ });
78
76
  tokens.add(token);
79
77
  }
80
78
  var Webhook = class {
@@ -87,13 +85,14 @@ var Webhook = class {
87
85
  constructor(runId, options, wait) {
88
86
  const messageId = options.messageId ?? options.name;
89
87
  const metadata = options.metadata === void 0 ? void 0 : toPersistedValue(options.metadata, "workflow webhook metadata", {});
90
- this.token = formatHookToken({
88
+ const token = {
91
89
  runId,
92
90
  name: options.name,
93
91
  messageId,
94
92
  kind: "webhook",
95
- ...metadata === void 0 ? {} : { metadata }
96
- });
93
+ metadata
94
+ };
95
+ this.token = formatHookToken(token);
97
96
  this.runId = runId;
98
97
  this.name = options.name;
99
98
  this.messageId = messageId;
@@ -107,56 +106,42 @@ var Webhook = class {
107
106
  return this.wait().then(onfulfilled, onrejected);
108
107
  }
109
108
  };
110
- async function resumeHook(token, options, service) {
109
+ async function resumeHook(token, options, context) {
111
110
  const hook = parseHookToken(token);
112
- const payload = toOptionalPersistedValue(options?.payload, "hook payload", service.limits);
113
- const telemetryContext = captureTelemetryContext(service.telemetry);
114
- await sendWorkflowMessage(service.store, hook.runId, {
111
+ const payload = toOptionalPersistedValue(options?.payload, `${hook.kind} payload`, context.limits);
112
+ const telemetryContext = captureTelemetryContext(context.telemetry);
113
+ await sendWorkflowMessage(context.store, hook.runId, {
115
114
  messageId: hook.messageId,
116
115
  payload,
117
116
  idempotencyKey: options?.idempotencyKey
118
- }, service.now, service.limits, service.emitMessageSent, service.telemetry, telemetryContext);
119
- service.emitHookResumed(hook.runId, hook.messageId, payload, telemetryContext);
117
+ }, context.now, context.limits, context.observation.emitMessageSent, context.telemetry, telemetryContext);
118
+ context.observation.emitHookResumed(hook.kind, hook.runId, hook.messageId, payload, telemetryContext);
120
119
  }
121
- async function resumeWebhook(token, options, service) {
122
- const webhook = parseWebhookToken(token);
123
- const payload = toOptionalPersistedValue(options?.payload, "webhook payload", service.limits);
124
- const telemetryContext = captureTelemetryContext(service.telemetry);
125
- await sendWorkflowMessage(service.store, webhook.runId, {
126
- messageId: webhook.messageId,
127
- payload,
128
- idempotencyKey: options?.idempotencyKey
129
- }, service.now, service.limits, service.emitMessageSent, service.telemetry, telemetryContext);
130
- service.emitWebhookResumed(webhook.runId, webhook.messageId, payload, telemetryContext);
131
- }
132
- async function disposeHook(token, service) {
133
- return await disposeHookToken(token, parseHookToken(token), service);
134
- }
135
- async function disposeWebhook(token, service) {
136
- return await disposeHookToken(token, parseWebhookToken(token), service);
120
+ async function disposeHook(token, context) {
121
+ return await disposeHookToken(token, parseHookToken(token), context);
137
122
  }
138
123
  async function getHookByToken(token, store, now) {
139
124
  const hook = parseHookToken(token);
140
125
  return inspectHookToken(token, await store.getRun(hook.runId), await store.getEvents(hook.runId), now);
141
126
  }
142
- async function disposeHookToken(token, hook, service) {
127
+ async function disposeHookToken(token, hook, context) {
143
128
  let timestamp;
144
129
  for (let attempt = 0; attempt < MAX_HOOK_DISPOSAL_APPEND_ATTEMPTS; attempt++) {
145
- const run = await service.store.getRun(hook.runId);
146
- const events = run === void 0 ? [] : await service.store.getEvents(hook.runId);
147
- const inspection = inspectHookToken(token, run, events, service.now());
130
+ const run = await context.store.getRun(hook.runId);
131
+ const events = run === void 0 ? [] : await context.store.getEvents(hook.runId);
132
+ const inspection = inspectHookToken(token, run, events, context.now());
148
133
  if (inspection.status !== "waiting") return inspection;
149
134
  if (run === void 0) return inspection;
150
- if (inspection.stepId === void 0) WorkflowHookError.waitingStepMissing();
151
- timestamp ??= service.now();
152
- enforceWorkflowEventHistoryNextLimit(events, service.limits);
153
- const appendedEvents = await service.store.appendEventIfRunCurrent(run, {
135
+ if (inspection.stepId === void 0) throw new WorkflowHookError("Workflow hook inspection is missing a waiting step id", WorkflowErrorCode.HOOK_WAITING_STEP_MISSING, void 0);
136
+ timestamp ??= context.now();
137
+ enforceEventHistoryNextLimit(events, context.limits);
138
+ const appendedEvents = await context.store.appendEventIfRunCurrent(run, {
154
139
  kind: "message_wait_failed",
155
140
  timestamp,
156
141
  stepId: inspection.stepId,
157
142
  stepName: hook.name,
158
143
  messageId: hook.messageId,
159
- error: serializeError(WorkflowHookDisposedError.create({
144
+ error: serializeError(new WorkflowHookDisposedError({
160
145
  runId: hook.runId,
161
146
  stepId: inspection.stepId,
162
147
  stepName: hook.name,
@@ -164,27 +149,25 @@ async function disposeHookToken(token, hook, service) {
164
149
  }))
165
150
  });
166
151
  if (appendedEvents === void 0) continue;
167
- if (run.status === "waiting") await service.store.updateRunIfCurrent(run, {
152
+ if (run.status === "waiting") await context.store.updateRunIfCurrent(run, {
168
153
  ...run,
169
154
  availableAt: run.availableAt !== void 0 && Temporal.Instant.compare(run.availableAt, timestamp) <= 0 ? run.availableAt : timestamp,
170
155
  updatedAt: timestamp,
171
156
  lastTransitionAt: timestamp,
172
157
  lastTransitionReason: "waiting",
173
- deadlineAt: run.deadlineAt,
174
- retryAt: run.retryAt,
175
158
  error: void 0,
176
159
  output: void 0,
177
160
  finishedAt: void 0
178
161
  });
179
- return inspectHookToken(token, run, appendedEvents, service.now());
162
+ return inspectHookToken(token, run, appendedEvents, context.now());
180
163
  }
181
- const run = await service.store.getRun(hook.runId);
182
- return inspectHookToken(token, run, run === void 0 ? [] : await service.store.getEvents(hook.runId), service.now());
164
+ const run = await context.store.getRun(hook.runId);
165
+ return inspectHookToken(token, run, run === void 0 ? [] : await context.store.getEvents(hook.runId), context.now());
183
166
  }
184
167
  function inspectHookToken(token, run, events, now) {
185
168
  const hook = parseHookToken(token);
186
169
  if (run === void 0) return hookInspection(token, hook, "not-found");
187
- const history = new WorkflowHistory(events);
170
+ const history = new History(events);
188
171
  const started = history.latestMessageWaitStartedByNameAndMessageId(hook.name, hook.messageId);
189
172
  if (started === void 0) return hookInspection(token, hook, "not-found");
190
173
  const terminal = history.latestMessageWaitTerminalAfterStarted(started);
@@ -193,7 +176,7 @@ function inspectHookToken(token, run, events, now) {
193
176
  timeoutAt: started.timeoutAt,
194
177
  payload: terminal.payload
195
178
  });
196
- if (terminal?.kind === "message_wait_failed") return hookInspection(token, hook, WorkflowHookDisposedError.isDisposed(terminal.error) ? "disposed" : "failed", {
179
+ if (terminal?.kind === "message_wait_failed") return hookInspection(token, hook, matchesWorkflowError(terminal.error, WorkflowErrorCode.HOOK_DISPOSED) ? "disposed" : "failed", {
197
180
  stepId: started.stepId,
198
181
  timeoutAt: started.timeoutAt,
199
182
  error: terminal.error
@@ -219,19 +202,15 @@ function hookInspection(token, hook, status, state = {}) {
219
202
  messageId: hook.messageId,
220
203
  kind: hook.kind,
221
204
  status,
222
- ...hook.metadata === void 0 ? {} : { metadata: hook.metadata },
223
- ...state.stepId === void 0 ? {} : { stepId: state.stepId },
224
- ...state.timeoutAt === void 0 ? {} : { timeoutAt: state.timeoutAt },
225
- ...state.payload === void 0 ? {} : { payload: state.payload },
226
- ...state.error === void 0 ? {} : { error: state.error }
205
+ metadata: hook.metadata,
206
+ stepId: state.stepId,
207
+ timeoutAt: state.timeoutAt,
208
+ payload: state.payload,
209
+ error: state.error
227
210
  };
228
211
  }
229
212
  function formatHookToken(hook) {
230
- const payload = {
231
- v: 1,
232
- ...hook
233
- };
234
- return `${WORKFLOW_HOOK_TOKEN_PREFIX}v1:${encodeBase64UrlString(JSON.stringify(payload))}`;
213
+ return `${WORKFLOW_HOOK_TOKEN_PREFIX}v1:${encodeBase64UrlString(JSON.stringify(hook))}`;
235
214
  }
236
215
  //#endregion
237
- export { Hook, Webhook, createHook, createWebhook, createWorkflowStepHookApi, disposeHook, disposeWebhook, getHookByToken, inspectHookToken, resumeHook, resumeWebhook };
216
+ export { Hook, Webhook, createStepHookApi, disposeHook, getHookByToken, resumeHook };
@@ -1,18 +1,26 @@
1
- import { WorkflowRecoverySummary, WorkflowRecoverySummaryOptions, WorkflowRunSummary, WorkflowRunSummaryOptions } from "../types/summary.mjs";
2
- import { WorkflowEventReader, WorkflowLockListerRepository, WorkflowRunListerRepository, WorkflowRunReaderRepository, WorkflowScheduleListerRepository, WorkflowStepAttemptLookup } from "../types/store.mjs";
1
+ import { RunId } from "../types/ids.mjs";
2
+ import { WorkflowPage } from "../types/pagination.mjs";
3
+ import { ListRunsOptions, ListStepAttemptsPageOptions } from "../types/run-list.mjs";
4
+ import { RecoverySummary, RunSummary } from "../types/summary.mjs";
5
+ import { ListStepAttemptsOptions, StepAttemptRecord, StepAttemptSummary } from "../types/step-attempts.mjs";
6
+ import { WorkflowStore } from "../types/store.mjs";
7
+ import { EngineContext } from "./context.mjs";
8
+ import { Timeline } from "../types/timeline.mjs";
3
9
  //#region src/engine/inspection.d.ts
4
- type WorkflowSummaryRunStore = WorkflowRunReaderRepository & WorkflowRunListerRepository;
5
- type WorkflowRunSummaryStore = WorkflowSummaryRunStore & WorkflowEventReader & WorkflowStepAttemptLookup;
6
- type WorkflowRecoverySummaryStore = WorkflowRunSummaryStore & WorkflowLockListerRepository & WorkflowScheduleListerRepository;
7
- declare function getWorkflowRunSummary(options: {
8
- readonly store: WorkflowRunSummaryStore;
10
+ export declare function getWorkflowRunSummary(options: {
11
+ readonly store: WorkflowStore;
9
12
  readonly now: Temporal.Instant;
10
- readonly filters?: WorkflowRunSummaryOptions;
11
- }): Promise<WorkflowRunSummary>;
12
- declare function getWorkflowRecoverySummary(options: {
13
- readonly store: WorkflowRecoverySummaryStore;
13
+ readonly filters?: ListRunsOptions;
14
+ }): Promise<RunSummary>;
15
+ export declare function getWorkflowRecoverySummary(options: {
16
+ readonly store: WorkflowStore;
14
17
  readonly now: Temporal.Instant;
15
- readonly filters?: WorkflowRecoverySummaryOptions;
16
- }): Promise<WorkflowRecoverySummary>;
17
- //#endregion
18
- export { getWorkflowRecoverySummary, getWorkflowRunSummary };
18
+ readonly filters?: ListRunsOptions;
19
+ }): Promise<RecoverySummary>;
20
+ /** A page of a run's step attempts. */
21
+ export declare function pageRunStepAttempts({ store }: EngineContext, runId: RunId, options?: ListStepAttemptsPageOptions): Promise<WorkflowPage<StepAttemptRecord>>;
22
+ export declare function countRunStepAttempts({ store }: EngineContext, runId: RunId, options?: ListStepAttemptsOptions): Promise<number>;
23
+ /** A run's step attempts, with the child runs its workflow steps started. */
24
+ export declare function getRunStepAttemptSummary({ store }: EngineContext, runId: RunId, options?: ListStepAttemptsOptions): Promise<StepAttemptSummary>;
25
+ export declare function getRunTimeline({ store }: EngineContext, runId: RunId): Promise<Timeline>;
26
+ //#endregion
@@ -1,32 +1,39 @@
1
+ import { WorkflowErrorCode } from "../errors/codes.mjs";
1
2
  import { WorkflowOptionsError } from "../errors/base.mjs";
2
- import { isActiveWorkflowRunStatus, isWorkflowRunStatus } from "../utility.mjs";
3
3
  import "../errors/mod.mjs";
4
- import { summarizeWorkflowRecovery } from "./recovery.mjs";
5
- import { getChildRunsForAttempts } from "./summary/child-workflow-runs.mjs";
6
- import { summarizeWorkflowRuns } from "./summary.mjs";
4
+ import { createTimeline } from "../history/timeline.mjs";
5
+ import "../history/replay.mjs";
6
+ import { isActiveRunStatus, isRunStatus } from "../run-status.mjs";
7
+ import { getRequiredRun } from "../store/query.mjs";
8
+ import { summarizeRecovery } from "./summary/recovery.mjs";
9
+ import { getChildRunsForAttempts, summarizeRuns } from "./summary/runs.mjs";
10
+ import { summarizeStepAttempts } from "./summary/step-attempts.mjs";
7
11
  //#region src/engine/inspection.ts
8
- function isKnownWorkflowRunStatus(run) {
9
- return isWorkflowRunStatus(run.status);
12
+ function isKnownRunStatus(run) {
13
+ return isRunStatus(run.status);
10
14
  }
11
15
  function workflowRunCanHaveActiveWork(run) {
12
- return isActiveWorkflowRunStatus(run.status);
16
+ return isActiveRunStatus(run.status);
13
17
  }
14
18
  function workflowSummaryCleanupCutoff(filters) {
15
19
  if (filters?.cleanupFinishedAtBefore === void 0) return;
16
20
  const value = filters.cleanupFinishedAtBefore;
17
- if (!(value instanceof Temporal.Instant)) WorkflowOptionsError.temporalInstant("Workflow cleanup finishedAtBefore");
21
+ if (!(value instanceof Temporal.Instant)) throw new WorkflowOptionsError("Workflow cleanup finishedAtBefore must be a Temporal.Instant", {
22
+ code: WorkflowErrorCode.OPTIONS_EXPECTED_TEMPORAL_INSTANT,
23
+ details: { label: "Workflow cleanup finishedAtBefore" }
24
+ });
18
25
  return value;
19
26
  }
20
- async function listWorkflowRunStepAttempts(store, runId, options) {
27
+ async function listRunStepAttempts(store, runId, options) {
21
28
  return await store.listStepAttempts(runId, options);
22
29
  }
23
- async function listActiveWorkflowRunStepAttempts(store, run, kind) {
24
- return workflowRunCanHaveActiveWork(run) ? await listWorkflowRunStepAttempts(store, run.id, {
30
+ async function listActiveRunStepAttempts(store, run, kind) {
31
+ return workflowRunCanHaveActiveWork(run) ? await listRunStepAttempts(store, run.id, {
25
32
  status: "running",
26
33
  kind
27
34
  }) : [];
28
35
  }
29
- async function getWorkflowRunSummaryActivityInputs(store, runs) {
36
+ async function getRunSummaryActivityInputs(store, runs) {
30
37
  const [runningChildWorkflows, runningSleeps, runningMessageWaits, runningEvents] = await Promise.all([
31
38
  listRunningChildWorkflowWaits(store, runs),
32
39
  listRunningStepWaits(store, runs, "sleep"),
@@ -42,12 +49,12 @@ async function getWorkflowRunSummaryActivityInputs(store, runs) {
42
49
  }
43
50
  async function listRunningChildWorkflowWaits(store, runs) {
44
51
  return await Promise.all(runs.map(async (run) => {
45
- if (!isKnownWorkflowRunStatus(run)) return {
52
+ if (!isKnownRunStatus(run)) return {
46
53
  runId: run.id,
47
54
  attempts: [],
48
55
  childRuns: []
49
56
  };
50
- const attempts = await listWorkflowRunStepAttempts(store, run.id, {
57
+ const attempts = await listRunStepAttempts(store, run.id, {
51
58
  status: "running",
52
59
  kind: "workflow"
53
60
  });
@@ -62,7 +69,7 @@ async function listRunningStepWaits(store, runs, kind) {
62
69
  return await Promise.all(runs.map(async (run) => {
63
70
  return {
64
71
  runId: run.id,
65
- attempts: await listActiveWorkflowRunStepAttempts(store, run, kind)
72
+ attempts: await listActiveRunStepAttempts(store, run, kind)
66
73
  };
67
74
  }));
68
75
  }
@@ -74,8 +81,8 @@ async function listRunningEventActivity(store, runs) {
74
81
  };
75
82
  }));
76
83
  }
77
- async function listWorkflowRunAttemptGroups(store, runs, options) {
78
- return await Promise.all(runs.map(async (run) => await listWorkflowRunStepAttempts(store, run.id, options)));
84
+ async function listRunAttemptGroups(store, runs, options) {
85
+ return await Promise.all(runs.map((run) => listRunStepAttempts(store, run.id, options)));
79
86
  }
80
87
  async function getWorkflowRunSummary(options) {
81
88
  const { store, now, filters } = options;
@@ -85,9 +92,9 @@ async function getWorkflowRunSummary(options) {
85
92
  runs,
86
93
  now,
87
94
  cleanupCutoff,
88
- ...await getWorkflowRunSummaryActivityInputs(store, runs)
95
+ ...await getRunSummaryActivityInputs(store, runs)
89
96
  };
90
- return summarizeWorkflowRuns(summaryInputs);
97
+ return summarizeRuns(summaryInputs);
91
98
  }
92
99
  async function getWorkflowRecoverySummary(options) {
93
100
  const { store, now, filters } = options;
@@ -95,28 +102,28 @@ async function getWorkflowRecoverySummary(options) {
95
102
  const activeRuns = runs.filter((run) => {
96
103
  return workflowRunCanHaveActiveWork(run);
97
104
  });
98
- return summarizeWorkflowRecovery({
105
+ return summarizeRecovery({
99
106
  runs,
100
107
  now,
101
- inputs: await getWorkflowRecoverySummaryInputs(store, activeRuns)
108
+ inputs: await getRecoverySummaryInputs(store, activeRuns)
102
109
  });
103
110
  }
104
- async function getWorkflowRecoverySummaryInputs(store, activeRuns) {
111
+ async function getRecoverySummaryInputs(store, activeRuns) {
105
112
  const [sleepAttemptGroups, messageWaitAttemptGroups, childWorkflowAttemptGroups, lockWaitAttemptGroups, eventsByRunId, locks, schedules] = await Promise.all([
106
- listWorkflowRunAttemptGroups(store, activeRuns, {
113
+ listRunAttemptGroups(store, activeRuns, {
107
114
  status: "running",
108
115
  kind: "sleep"
109
116
  }),
110
- listWorkflowRunAttemptGroups(store, activeRuns, {
117
+ listRunAttemptGroups(store, activeRuns, {
111
118
  status: "running",
112
119
  kind: "message-wait"
113
120
  }),
114
121
  listChildWorkflowAttemptGroups(store, activeRuns),
115
- listWorkflowRunAttemptGroups(store, activeRuns, {
122
+ listRunAttemptGroups(store, activeRuns, {
116
123
  status: "failed",
117
124
  kind: "run"
118
125
  }),
119
- getWorkflowRecoveryEventsByRunId(store, activeRuns),
126
+ getRecoveryEventsByRunId(store, activeRuns),
120
127
  store.listLocks(),
121
128
  store.listSchedules()
122
129
  ]);
@@ -133,7 +140,7 @@ async function getWorkflowRecoverySummaryInputs(store, activeRuns) {
133
140
  }
134
141
  async function listChildWorkflowAttemptGroups(store, activeRuns) {
135
142
  return await Promise.all(activeRuns.map(async (run) => {
136
- const attempts = await listWorkflowRunStepAttempts(store, run.id, {
143
+ const attempts = await listRunStepAttempts(store, run.id, {
137
144
  status: "running",
138
145
  kind: "workflow"
139
146
  });
@@ -144,8 +151,27 @@ async function listChildWorkflowAttemptGroups(store, activeRuns) {
144
151
  };
145
152
  }));
146
153
  }
147
- async function getWorkflowRecoveryEventsByRunId(store, activeRuns) {
154
+ async function getRecoveryEventsByRunId(store, activeRuns) {
148
155
  return new Map(await Promise.all(activeRuns.map(async (run) => [run.id, await store.getEvents(run.id)])));
149
156
  }
157
+ /** A page of a run's step attempts. */
158
+ async function pageRunStepAttempts({ store }, runId, options) {
159
+ await getRequiredRun(store, runId);
160
+ return await store.listStepAttemptsPage(runId, options);
161
+ }
162
+ async function countRunStepAttempts({ store }, runId, options) {
163
+ await getRequiredRun(store, runId);
164
+ return await store.countStepAttempts(runId, options);
165
+ }
166
+ /** A run's step attempts, with the child runs its workflow steps started. */
167
+ async function getRunStepAttemptSummary({ store }, runId, options) {
168
+ await getRequiredRun(store, runId);
169
+ const attempts = await store.listStepAttempts(runId, options);
170
+ return summarizeStepAttempts(attempts, await getChildRunsForAttempts(store, runId, attempts));
171
+ }
172
+ async function getRunTimeline({ store }, runId) {
173
+ const run = await getRequiredRun(store, runId);
174
+ return createTimeline(run, await store.getEvents(runId));
175
+ }
150
176
  //#endregion
151
- export { getWorkflowRecoverySummary, getWorkflowRunSummary };
177
+ export { countRunStepAttempts, getRunStepAttemptSummary, getRunTimeline, getWorkflowRecoverySummary, getWorkflowRunSummary, pageRunStepAttempts };
@@ -1,18 +1,12 @@
1
1
  import { ObservationEmitter } from "../types/observation.mjs";
2
2
  import { ExecutionResult } from "../types/result.mjs";
3
- import { WorkflowRunRecord } from "../types/run.mjs";
3
+ import { RunRecord } from "../types/run.mjs";
4
4
  import { CreateWorkflowEngineOptions } from "../types/engine-options.mjs";
5
5
  //#region src/engine/lifecycle.d.ts
6
- declare function createWorkflowLifecycleEmitter(options: CreateWorkflowEngineOptions, observation?: ObservationEmitter): WorkflowLifecycleEmitterContract;
7
- interface WorkflowLifecycleEmitterContract {
8
- readonly emitLifecycleEvent: (run: WorkflowRunRecord, previousRun?: WorkflowRunRecord) => Promise<void>;
9
- readonly emitResultLifecycleEvent: <TOutput>(result: ExecutionResult<TOutput>, previousRun?: WorkflowRunRecord) => Promise<ExecutionResult<TOutput>>;
10
- }
11
- declare class WorkflowLifecycleEmitter implements WorkflowLifecycleEmitterContract {
12
- #private;
13
- constructor(options: CreateWorkflowEngineOptions, observation?: ObservationEmitter);
14
- emitLifecycleEvent: (run: WorkflowRunRecord, previousRun?: WorkflowRunRecord) => Promise<void>;
15
- emitResultLifecycleEvent: <TOutput>(result: ExecutionResult<TOutput>, previousRun?: WorkflowRunRecord) => Promise<ExecutionResult<TOutput>>;
6
+ export declare function createLifecycleEmitter(options: CreateWorkflowEngineOptions, observation?: ObservationEmitter): LifecycleEmitterContract;
7
+ interface LifecycleEmitterContract {
8
+ readonly emitLifecycleEvent: (run: RunRecord, previousRun?: RunRecord) => Promise<void>;
9
+ readonly emitResultLifecycleEvent: <TOutput>(result: ExecutionResult<TOutput>, previousRun?: RunRecord) => Promise<ExecutionResult<TOutput>>;
16
10
  }
17
11
  //#endregion
18
- export { WorkflowLifecycleEmitter, createWorkflowLifecycleEmitter };
12
+ export {};
@@ -1,8 +1,8 @@
1
1
  //#region src/engine/lifecycle.ts
2
- function createWorkflowLifecycleEmitter(options, observation) {
3
- return new WorkflowLifecycleEmitter(options, observation);
2
+ function createLifecycleEmitter(options, observation) {
3
+ return new LifecycleEmitter(options, observation);
4
4
  }
5
- var WorkflowLifecycleEmitter = class {
5
+ var LifecycleEmitter = class {
6
6
  #options;
7
7
  #observation;
8
8
  constructor(options, observation) {
@@ -17,7 +17,7 @@ var WorkflowLifecycleEmitter = class {
17
17
  reason: run.lastTransitionReason,
18
18
  timestamp: run.lastTransitionAt,
19
19
  workflowName: run.workflowName,
20
- ...run.workflowVersion === void 0 ? {} : { workflowVersion: run.workflowVersion }
20
+ workflowVersion: run.workflowVersion
21
21
  };
22
22
  this.#observation?.emitRunEvent(run, previousRun);
23
23
  const callbacks = [];
@@ -35,4 +35,4 @@ var WorkflowLifecycleEmitter = class {
35
35
  };
36
36
  };
37
37
  //#endregion
38
- export { WorkflowLifecycleEmitter, createWorkflowLifecycleEmitter };
38
+ export { createLifecycleEmitter };
@@ -1,30 +1,23 @@
1
- import { RunId } from "../types/run-id.mjs";
2
- import { StepId } from "../types/step-id.mjs";
3
- import { LockRecord } from "../types/lock.mjs";
4
- import "../types/step.mjs";
5
- import "../types/run.mjs";
1
+ import { RunId } from "../types/ids.mjs";
6
2
  import { WorkflowErrorRecord } from "../types/error.mjs";
3
+ import { LockRecord } from "../types/lock.mjs";
4
+ import { DeterministicValueRecordedEvent } from "../types/events.mjs";
7
5
  //#region src/engine/lock-replay.d.ts
8
- declare function requireLockWaitDeadlineReplayMatches(recorded: {
9
- readonly stepId: StepId;
10
- readonly timestamp: Temporal.Instant;
11
- readonly value: unknown;
12
- }, timeout: number): void;
13
- declare function requireLockReplayMatches(recorded: LockRecord, expected: {
6
+ export declare function parseLockWaitDeadlineReplay(recorded: DeterministicValueRecordedEvent, timeout: number): Temporal.Instant;
7
+ export declare function requireLockReplayMatches(recorded: LockRecord, expected: {
14
8
  readonly key: string;
15
9
  readonly holderId: string;
16
10
  readonly holderRunId: RunId;
17
11
  readonly leaseDuration: number;
18
12
  }): void;
19
- declare function requireLockReleaseReplayMatches(recorded: LockRecord, expected: {
13
+ export declare function requireLockReleaseReplayMatches(recorded: LockRecord, expected: {
20
14
  readonly key: string;
21
15
  readonly holderId: string;
22
16
  }): void;
23
- declare function requireLockWaitReplayMatches(failedSteps: readonly {
17
+ export declare function requireLockWaitReplayMatches(failedSteps: readonly {
24
18
  readonly error: WorkflowErrorRecord;
25
19
  }[], expected: {
26
20
  readonly key: string;
27
21
  readonly wait: boolean;
28
22
  }): void;
29
- //#endregion
30
- export { requireLockReleaseReplayMatches, requireLockReplayMatches, requireLockWaitDeadlineReplayMatches, requireLockWaitReplayMatches };
23
+ //#endregion
@@ -1,38 +1,25 @@
1
- import { WorkflowReplayDivergenceError, WorkflowRetryableError } from "../errors/failures.mjs";
1
+ import { WorkflowErrorCode } from "../errors/codes.mjs";
2
+ import { WorkflowReplayDivergenceError } from "../errors/failures.mjs";
3
+ import { matchesWorkflowError } from "../errors/records.mjs";
2
4
  import "../errors/mod.mjs";
3
5
  //#region src/engine/lock-replay.ts
4
- function requireLockWaitDeadlineReplayMatches(recorded, timeout) {
5
- if (!(recorded.value instanceof Temporal.Instant)) WorkflowReplayDivergenceError.diverged(`recorded lock wait deadline ${recorded.stepId} is invalid`, {
6
- expectedStepId: recorded.stepId,
7
- actualStepId: recorded.stepId
8
- });
9
- if (recorded.value.since(recorded.timestamp).total({ unit: "millisecond" }) === timeout) return;
10
- WorkflowReplayDivergenceError.diverged(`recorded lock wait deadline ${recorded.stepId} does not match replayed waitTimeout`, {
11
- expectedStepId: recorded.stepId,
12
- actualStepId: recorded.stepId
13
- });
6
+ function parseLockWaitDeadlineReplay(recorded, timeout) {
7
+ if (!(recorded.value instanceof Temporal.Instant)) WorkflowReplayDivergenceError.atStep(recorded.stepId, `recorded lock wait deadline ${recorded.stepId} is invalid`);
8
+ if (recorded.value.since(recorded.timestamp).total({ unit: "millisecond" }) === timeout) return recorded.value;
9
+ WorkflowReplayDivergenceError.atStep(recorded.stepId, `recorded lock wait deadline ${recorded.stepId} does not match replayed waitTimeout`);
14
10
  }
15
11
  function requireLockReplayMatches(recorded, expected) {
16
12
  const recordedLeaseDuration = recorded.leaseExpiresAt.since(recorded.acquiredAt).total({ unit: "millisecond" });
17
13
  if (recorded.key === expected.key && recorded.holderId === expected.holderId && recorded.holderRunId === expected.holderRunId && recordedLeaseDuration === expected.leaseDuration) return;
18
- WorkflowReplayDivergenceError.diverged(`recorded lock step ${recorded.holderStepId ?? recorded.key} does not match replayed lock acquisition`, {
19
- expectedStepId: recorded.holderStepId,
20
- actualStepId: recorded.holderStepId
21
- });
14
+ WorkflowReplayDivergenceError.atStep(recorded.holderStepId, `recorded lock step ${recorded.holderStepId ?? recorded.key} does not match replayed lock acquisition`);
22
15
  }
23
16
  function requireLockReleaseReplayMatches(recorded, expected) {
24
17
  if (recorded.key === expected.key && recorded.holderId === expected.holderId && recorded.releasedAt !== void 0) return;
25
- WorkflowReplayDivergenceError.diverged(`recorded lock step ${recorded.holderStepId ?? recorded.key} does not match replayed lock release`, {
26
- expectedStepId: recorded.holderStepId,
27
- actualStepId: recorded.holderStepId
28
- });
18
+ WorkflowReplayDivergenceError.atStep(recorded.holderStepId, `recorded lock step ${recorded.holderStepId ?? recorded.key} does not match replayed lock release`);
29
19
  }
30
20
  function requireLockWaitReplayMatches(failedSteps, expected) {
31
- if (!failedSteps.some((failed) => WorkflowRetryableError.isLockAlreadyHeld(failed.error, expected.key)) || expected.wait) return;
32
- WorkflowReplayDivergenceError.diverged(`recorded lock ${expected.key} waited but replayed lock acquisition does not allow waiting`, {
33
- expectedStepId: `run:${expected.key}`,
34
- actualStepId: `run:${expected.key}`
35
- });
21
+ if (!failedSteps.some((failed) => matchesWorkflowError(failed.error, WorkflowErrorCode.LOCK_ALREADY_HELD, { key: expected.key })) || expected.wait) return;
22
+ WorkflowReplayDivergenceError.atStep(`run:${expected.key}`, `recorded lock ${expected.key} waited but replayed lock acquisition does not allow waiting`);
36
23
  }
37
24
  //#endregion
38
- export { requireLockReleaseReplayMatches, requireLockReplayMatches, requireLockWaitDeadlineReplayMatches, requireLockWaitReplayMatches };
25
+ export { parseLockWaitDeadlineReplay, requireLockReleaseReplayMatches, requireLockReplayMatches, requireLockWaitReplayMatches };