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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (461) hide show
  1. package/README.md +394 -2
  2. package/dist/attributes.d.mts +11 -9
  3. package/dist/attributes.mjs +23 -5
  4. package/dist/bundle.d.mts +5 -23
  5. package/dist/bundle.mjs +2 -18
  6. package/dist/client/create.d.mts +26 -23
  7. package/dist/client/create.mjs +26 -32
  8. package/dist/client/facades.d.mts +12 -18
  9. package/dist/client/facades.mjs +102 -93
  10. package/dist/client/mod.mjs +1 -2
  11. package/dist/client/run-handle.d.mts +17 -54
  12. package/dist/client/run-handle.mjs +35 -105
  13. package/dist/client/worker-options.d.mts +8 -8
  14. package/dist/client/worker-options.mjs +11 -11
  15. package/dist/cloudflare/cloudflare.d.mts +4 -5
  16. package/dist/cloudflare/codec.d.mts +28 -13
  17. package/dist/cloudflare/codec.mjs +40 -17
  18. package/dist/cloudflare/entrypoint.d.mts +3 -4
  19. package/dist/cloudflare/entrypoint.mjs +4 -3
  20. package/dist/cloudflare/execution.d.mts +3 -4
  21. package/dist/cloudflare/execution.mjs +20 -13
  22. package/dist/cloudflare/host.d.mts +6 -7
  23. package/dist/cloudflare/host.mjs +7 -6
  24. package/dist/cloudflare/mod.d.mts +4 -4
  25. package/dist/cloudflare/mod.mjs +2 -2
  26. package/dist/cloudflare/name.d.mts +3 -4
  27. package/dist/cloudflare/name.mjs +3 -3
  28. package/dist/cloudflare/registry.d.mts +3 -23
  29. package/dist/cloudflare/registry.mjs +2 -20
  30. package/dist/cloudflare/runtime.d.mts +11 -18
  31. package/dist/cloudflare/runtime.mjs +52 -73
  32. package/dist/cloudflare/step.d.mts +6 -6
  33. package/dist/cloudflare/step.mjs +69 -57
  34. package/dist/cloudflare/types.d.mts +17 -36
  35. package/dist/collection.d.mts +8 -11
  36. package/dist/collection.mjs +10 -14
  37. package/dist/compiled-function.d.mts +14 -19
  38. package/dist/compiled-function.mjs +12 -24
  39. package/dist/compiled.d.mts +4 -0
  40. package/dist/compiled.mjs +4 -0
  41. package/dist/compiler/ast.d.mts +26 -0
  42. package/dist/{vite → compiler}/ast.mjs +24 -16
  43. package/dist/{vite → compiler}/error.d.mts +4 -6
  44. package/dist/{vite → compiler}/error.mjs +14 -16
  45. package/dist/compiler/manifest.d.mts +6 -0
  46. package/dist/{vite → compiler}/manifest.mjs +9 -7
  47. package/dist/compiler/plugin.d.mts +7 -0
  48. package/dist/{vite → compiler}/plugin.mjs +45 -46
  49. package/dist/compiler/safety.d.mts +12 -0
  50. package/dist/{vite → compiler}/safety.mjs +5 -11
  51. package/dist/{vite → compiler}/source-edit.d.mts +3 -4
  52. package/dist/{vite → compiler}/source-edit.mjs +1 -1
  53. package/dist/{vite → compiler}/source-map.d.mts +4 -3
  54. package/dist/{vite → compiler}/source-map.mjs +3 -3
  55. package/dist/compiler/source.d.mts +7 -0
  56. package/dist/{vite → compiler}/source.mjs +1 -1
  57. package/dist/compiler/transform.d.mts +12 -0
  58. package/dist/{vite → compiler}/transform.mjs +37 -38
  59. package/dist/definition.d.mts +17 -25
  60. package/dist/definition.mjs +19 -35
  61. package/dist/engine/child-workflow.d.mts +5 -9
  62. package/dist/engine/child-workflow.mjs +46 -67
  63. package/dist/engine/command-identity.d.mts +5 -6
  64. package/dist/engine/command-identity.mjs +9 -5
  65. package/dist/engine/context.d.mts +17 -0
  66. package/dist/engine/create.d.mts +36 -94
  67. package/dist/engine/create.mjs +55 -260
  68. package/dist/engine/deterministic.d.mts +6 -11
  69. package/dist/engine/deterministic.mjs +47 -68
  70. package/dist/engine/durable-command.d.mts +5 -5
  71. package/dist/engine/durable-command.mjs +2 -2
  72. package/dist/engine/execution-service.d.mts +20 -24
  73. package/dist/engine/execution-service.mjs +54 -52
  74. package/dist/engine/hooks.d.mts +17 -39
  75. package/dist/engine/hooks.mjs +73 -94
  76. package/dist/engine/inspection.d.mts +23 -15
  77. package/dist/engine/inspection.mjs +55 -29
  78. package/dist/engine/lifecycle.d.mts +6 -12
  79. package/dist/engine/lifecycle.mjs +5 -5
  80. package/dist/engine/lock-replay.d.mts +8 -15
  81. package/dist/engine/lock-replay.mjs +12 -25
  82. package/dist/engine/lock.d.mts +10 -15
  83. package/dist/engine/lock.mjs +65 -51
  84. package/dist/engine/message.d.mts +14 -34
  85. package/dist/engine/message.mjs +94 -127
  86. package/dist/engine/observation.d.mts +9 -11
  87. package/dist/engine/observation.mjs +18 -27
  88. package/dist/engine/replay.d.mts +18 -19
  89. package/dist/engine/replay.mjs +32 -56
  90. package/dist/engine/resume.d.mts +16 -0
  91. package/dist/engine/resume.mjs +24 -0
  92. package/dist/engine/retry.d.mts +15 -19
  93. package/dist/engine/retry.mjs +17 -17
  94. package/dist/engine/run-data.d.mts +4 -8
  95. package/dist/engine/run-data.mjs +24 -22
  96. package/dist/engine/run-service.d.mts +24 -33
  97. package/dist/engine/run-service.mjs +125 -93
  98. package/dist/engine/run-utils.d.mts +11 -13
  99. package/dist/engine/run-utils.mjs +23 -46
  100. package/dist/engine/schedule.d.mts +8 -22
  101. package/dist/engine/schedule.mjs +37 -34
  102. package/dist/engine/serialization.d.mts +9 -6
  103. package/dist/engine/serialization.mjs +30 -21
  104. package/dist/engine/signals.d.mts +23 -0
  105. package/dist/engine/signals.mjs +41 -0
  106. package/dist/engine/start.d.mts +18 -0
  107. package/dist/engine/start.mjs +88 -0
  108. package/dist/engine/state.d.mts +37 -67
  109. package/dist/engine/state.mjs +127 -282
  110. package/dist/engine/step-api.d.mts +5 -8
  111. package/dist/engine/step-api.mjs +16 -16
  112. package/dist/engine/stream-reader.d.mts +12 -0
  113. package/dist/engine/stream-reader.mjs +154 -0
  114. package/dist/engine/stream.d.mts +9 -54
  115. package/dist/engine/stream.mjs +54 -196
  116. package/dist/engine/summary/recovery.d.mts +35 -0
  117. package/dist/engine/summary/recovery.mjs +363 -0
  118. package/dist/engine/summary/runs.d.mts +43 -0
  119. package/dist/engine/summary/runs.mjs +294 -0
  120. package/dist/engine/summary/step-attempts.d.mts +5 -10
  121. package/dist/engine/summary/step-attempts.mjs +157 -36
  122. package/dist/engine/summary/tally.d.mts +44 -0
  123. package/dist/engine/summary/tally.mjs +142 -0
  124. package/dist/engine/task.d.mts +4 -5
  125. package/dist/engine/task.mjs +40 -48
  126. package/dist/errors/base.d.mts +17 -77
  127. package/dist/errors/base.mjs +26 -327
  128. package/dist/errors/capability.d.mts +3 -6
  129. package/dist/errors/capability.mjs +4 -8
  130. package/dist/errors/codes.d.mts +116 -0
  131. package/dist/{types/error-code.mjs → errors/codes.mjs} +2 -17
  132. package/dist/errors/definition.d.mts +3 -17
  133. package/dist/errors/definition.mjs +5 -42
  134. package/dist/errors/failures.d.mts +17 -51
  135. package/dist/errors/failures.mjs +35 -102
  136. package/dist/errors/hook.d.mts +5 -9
  137. package/dist/errors/hook.mjs +4 -16
  138. package/dist/errors/implementation.d.mts +3 -6
  139. package/dist/errors/implementation.mjs +7 -12
  140. package/dist/errors/lock.d.mts +7 -20
  141. package/dist/errors/lock.mjs +8 -44
  142. package/dist/errors/message.d.mts +14 -59
  143. package/dist/errors/message.mjs +13 -39
  144. package/dist/errors/mod.d.mts +4 -5
  145. package/dist/errors/mod.mjs +5 -7
  146. package/dist/errors/records.d.mts +10 -4
  147. package/dist/errors/records.mjs +256 -256
  148. package/dist/errors/run.d.mts +27 -68
  149. package/dist/errors/run.mjs +31 -85
  150. package/dist/errors/schedule.d.mts +7 -18
  151. package/dist/errors/schedule.mjs +7 -39
  152. package/dist/errors/step.d.mts +12 -45
  153. package/dist/errors/step.mjs +13 -34
  154. package/dist/errors/stream.d.mts +8 -16
  155. package/dist/errors/stream.mjs +7 -41
  156. package/dist/esbuild.d.mts +6 -4
  157. package/dist/esbuild.mjs +2 -1
  158. package/dist/events/descriptors.d.mts +12 -241
  159. package/dist/events/descriptors.mjs +12 -5
  160. package/dist/history/projection.d.mts +4 -6
  161. package/dist/history/projection.mjs +22 -26
  162. package/dist/history/replay-projection.d.mts +44 -48
  163. package/dist/history/replay-projection.mjs +41 -50
  164. package/dist/history/{mod.d.mts → replay.d.mts} +16 -21
  165. package/dist/history/{mod.mjs → replay.mjs} +21 -25
  166. package/dist/history/sequencer.d.mts +10 -11
  167. package/dist/history/sequencer.mjs +11 -7
  168. package/dist/history/step-attempts.d.mts +4 -7
  169. package/dist/history/step-attempts.mjs +8 -9
  170. package/dist/history/timeline.d.mts +4 -13
  171. package/dist/history/timeline.mjs +46 -265
  172. package/dist/history/validator.d.mts +5 -7
  173. package/dist/history/validator.mjs +9 -24
  174. package/dist/hook-token.d.mts +7 -0
  175. package/dist/hook-token.mjs +32 -0
  176. package/dist/ids.d.mts +8 -0
  177. package/dist/ids.mjs +21 -0
  178. package/dist/message-options.d.mts +11 -5
  179. package/dist/message-options.mjs +9 -7
  180. package/dist/mod.d.mts +32 -36
  181. package/dist/mod.mjs +9 -13
  182. package/dist/otel/metrics.d.mts +31 -0
  183. package/dist/otel/metrics.mjs +60 -0
  184. package/dist/otel/mod.d.mts +3 -0
  185. package/dist/otel/mod.mjs +3 -0
  186. package/dist/otel/spans.d.mts +24 -0
  187. package/dist/otel/spans.mjs +218 -0
  188. package/dist/otel/support.d.mts +15 -8
  189. package/dist/otel/support.mjs +18 -40
  190. package/dist/{otel.d.mts → otel/telemetry.d.mts} +5 -6
  191. package/dist/otel/telemetry.mjs +305 -0
  192. package/dist/pagination.d.mts +6 -12
  193. package/dist/pagination.mjs +10 -14
  194. package/dist/registry.d.mts +8 -5
  195. package/dist/registry.mjs +19 -10
  196. package/dist/rolldown.d.mts +6 -4
  197. package/dist/rolldown.mjs +2 -1
  198. package/dist/rollup.d.mts +6 -4
  199. package/dist/rollup.mjs +2 -1
  200. package/dist/rspack.d.mts +6 -4
  201. package/dist/rspack.mjs +2 -1
  202. package/dist/run-status.d.mts +29 -0
  203. package/dist/run-status.mjs +42 -0
  204. package/dist/schema/common.d.mts +22 -0
  205. package/dist/schema/common.mjs +54 -0
  206. package/dist/schema/error.d.mts +17 -0
  207. package/dist/schema/error.mjs +39 -0
  208. package/dist/schema/events.d.mts +446 -0
  209. package/dist/schema/events.mjs +235 -0
  210. package/dist/schema/pagination.d.mts +5 -0
  211. package/dist/schema/pagination.mjs +11 -0
  212. package/dist/schema/persisted-value.d.mts +8 -0
  213. package/dist/schema/persisted-value.mjs +94 -0
  214. package/dist/schema/run.d.mts +51 -0
  215. package/dist/schema/run.mjs +88 -0
  216. package/dist/schema/store.d.mts +94 -0
  217. package/dist/schema/store.mjs +116 -0
  218. package/dist/step-definition.d.mts +4 -9
  219. package/dist/step-definition.mjs +2 -2
  220. package/dist/store/capabilities.d.mts +8 -9
  221. package/dist/store/capabilities.mjs +7 -7
  222. package/dist/store/cleanup.d.mts +9 -14
  223. package/dist/store/cleanup.mjs +86 -85
  224. package/dist/store/create.d.mts +28 -29
  225. package/dist/store/create.mjs +10 -11
  226. package/dist/store/events.d.mts +48 -0
  227. package/dist/store/events.mjs +263 -0
  228. package/dist/store/indexes.d.mts +25 -0
  229. package/dist/store/indexes.mjs +282 -0
  230. package/dist/store/instrumentation.d.mts +2 -3
  231. package/dist/store/instrumentation.mjs +30 -30
  232. package/dist/store/lock.d.mts +4 -5
  233. package/dist/store/lock.mjs +5 -7
  234. package/dist/store/materialization.d.mts +10 -17
  235. package/dist/store/materialization.mjs +39 -33
  236. package/dist/store/mod.d.mts +3 -3
  237. package/dist/store/mod.mjs +2 -2
  238. package/dist/store/query.d.mts +13 -17
  239. package/dist/store/query.mjs +13 -13
  240. package/dist/store/run.d.mts +25 -34
  241. package/dist/store/run.mjs +67 -108
  242. package/dist/store/schedule.d.mts +6 -8
  243. package/dist/store/schedule.mjs +11 -11
  244. package/dist/store/step-attempt.d.mts +9 -12
  245. package/dist/store/step-attempt.mjs +9 -9
  246. package/dist/store/storage-value.d.mts +3 -3
  247. package/dist/store/storage-value.mjs +17 -1
  248. package/dist/store/validation.d.mts +17 -20
  249. package/dist/store/validation.mjs +30 -33
  250. package/dist/store-keys.d.mts +35 -47
  251. package/dist/store-keys.mjs +9 -17
  252. package/dist/telemetry.d.mts +16 -16
  253. package/dist/telemetry.mjs +3 -3
  254. package/dist/temporal.d.mts +11 -16
  255. package/dist/temporal.mjs +8 -9
  256. package/dist/timer.d.mts +12 -10
  257. package/dist/timer.mjs +11 -3
  258. package/dist/types/cleanup.d.mts +13 -50
  259. package/dist/types/cleanup.mjs +1 -22
  260. package/dist/types/client.d.mts +101 -162
  261. package/dist/types/{vite.d.mts → compiler.d.mts} +17 -24
  262. package/dist/types/compiler.mjs +1 -0
  263. package/dist/types/definition.d.mts +22 -34
  264. package/dist/types/engine-options.d.mts +10 -17
  265. package/dist/types/engine.d.mts +15 -274
  266. package/dist/types/error.d.mts +15 -217
  267. package/dist/types/error.mjs +1 -48
  268. package/dist/types/events.d.mts +59 -2730
  269. package/dist/types/events.mjs +1 -283
  270. package/dist/types/hook.d.mts +27 -85
  271. package/dist/types/hook.mjs +1 -66
  272. package/dist/types/ids.d.mts +9 -0
  273. package/dist/types/ids.mjs +1 -0
  274. package/dist/types/lock.d.mts +8 -26
  275. package/dist/types/lock.mjs +1 -18
  276. package/dist/types/message.d.mts +29 -43
  277. package/dist/types/observation.d.mts +43 -58
  278. package/dist/types/pagination.d.mts +6 -22
  279. package/dist/types/pagination.mjs +1 -13
  280. package/dist/types/result.d.mts +11 -43
  281. package/dist/types/retry.d.mts +7 -14
  282. package/dist/types/run-list.d.mts +9 -11
  283. package/dist/types/run-options.d.mts +25 -32
  284. package/dist/types/run.d.mts +35 -315
  285. package/dist/types/run.mjs +1 -207
  286. package/dist/types/runtime.d.mts +33 -145
  287. package/dist/types/runtime.mjs +1 -21
  288. package/dist/types/schedule.d.mts +13 -72
  289. package/dist/types/schedule.mjs +1 -48
  290. package/dist/types/step-attempts.d.mts +65 -261
  291. package/dist/types/step-attempts.mjs +1 -43
  292. package/dist/types/step.d.mts +66 -77
  293. package/dist/types/step.mjs +1 -5
  294. package/dist/types/store.d.mts +50 -182
  295. package/dist/types/stream.d.mts +19 -40
  296. package/dist/types/summary.d.mts +174 -278
  297. package/dist/types/telemetry.d.mts +23 -28
  298. package/dist/types/telemetry.mjs +1 -9
  299. package/dist/types/timeline.d.mts +46 -233
  300. package/dist/types/worker.d.mts +22 -29
  301. package/dist/values.d.mts +15 -0
  302. package/dist/values.mjs +57 -0
  303. package/dist/vite.d.mts +5 -6
  304. package/dist/vite.mjs +3 -4
  305. package/dist/webpack.d.mts +6 -4
  306. package/dist/webpack.mjs +2 -1
  307. package/dist/worker/error.d.mts +2 -9
  308. package/dist/worker/error.mjs +20 -32
  309. package/dist/worker/missing-implementation.d.mts +19 -0
  310. package/dist/worker/missing-implementation.mjs +62 -0
  311. package/dist/worker/worker.d.mts +18 -0
  312. package/dist/{worker.mjs → worker/worker.mjs} +64 -118
  313. package/package.json +28 -47
  314. package/dist/engine/execution-api.d.mts +0 -29
  315. package/dist/engine/execution-api.mjs +0 -33
  316. package/dist/engine/inspection-api.d.mts +0 -34
  317. package/dist/engine/inspection-api.mjs +0 -78
  318. package/dist/engine/mod.d.mts +0 -4
  319. package/dist/engine/mod.mjs +0 -2
  320. package/dist/engine/recovery.d.mts +0 -26
  321. package/dist/engine/recovery.mjs +0 -92
  322. package/dist/engine/retry-policy.d.mts +0 -4
  323. package/dist/engine/retry-policy.mjs +0 -4
  324. package/dist/engine/start-api.d.mts +0 -30
  325. package/dist/engine/start-api.mjs +0 -99
  326. package/dist/engine/summary/active-events.d.mts +0 -34
  327. package/dist/engine/summary/active-events.mjs +0 -69
  328. package/dist/engine/summary/child-workflow-runs.d.mts +0 -24
  329. package/dist/engine/summary/child-workflow-runs.mjs +0 -138
  330. package/dist/engine/summary/child-workflow-waits.d.mts +0 -21
  331. package/dist/engine/summary/child-workflow-waits.mjs +0 -67
  332. package/dist/engine/summary/recovery-child-workflow-waits.d.mts +0 -11
  333. package/dist/engine/summary/recovery-child-workflow-waits.mjs +0 -89
  334. package/dist/engine/summary/recovery-due-runs.d.mts +0 -16
  335. package/dist/engine/summary/recovery-due-runs.mjs +0 -52
  336. package/dist/engine/summary/recovery-failed-runs.d.mts +0 -14
  337. package/dist/engine/summary/recovery-failed-runs.mjs +0 -33
  338. package/dist/engine/summary/recovery-lease-runs.d.mts +0 -16
  339. package/dist/engine/summary/recovery-lease-runs.mjs +0 -69
  340. package/dist/engine/summary/recovery-locks.d.mts +0 -18
  341. package/dist/engine/summary/recovery-locks.mjs +0 -100
  342. package/dist/engine/summary/recovery-message-waits.d.mts +0 -11
  343. package/dist/engine/summary/recovery-message-waits.mjs +0 -74
  344. package/dist/engine/summary/recovery-retry-runs.d.mts +0 -17
  345. package/dist/engine/summary/recovery-retry-runs.mjs +0 -65
  346. package/dist/engine/summary/recovery-run-timestamps.d.mts +0 -13
  347. package/dist/engine/summary/recovery-run-timestamps.mjs +0 -18
  348. package/dist/engine/summary/recovery-runs.d.mts +0 -23
  349. package/dist/engine/summary/recovery-runs.mjs +0 -54
  350. package/dist/engine/summary/recovery-schedules.d.mts +0 -10
  351. package/dist/engine/summary/recovery-schedules.mjs +0 -46
  352. package/dist/engine/summary/recovery-sleep-waits.d.mts +0 -10
  353. package/dist/engine/summary/recovery-sleep-waits.mjs +0 -53
  354. package/dist/engine/summary/recovery-waits.d.mts +0 -21
  355. package/dist/engine/summary/recovery-waits.mjs +0 -29
  356. package/dist/engine/summary/run-availability.d.mts +0 -13
  357. package/dist/engine/summary/run-availability.mjs +0 -37
  358. package/dist/engine/summary/run-cleanup.d.mts +0 -14
  359. package/dist/engine/summary/run-cleanup.mjs +0 -44
  360. package/dist/engine/summary/run-failure.d.mts +0 -14
  361. package/dist/engine/summary/run-failure.mjs +0 -62
  362. package/dist/engine/summary/run-hooks.d.mts +0 -14
  363. package/dist/engine/summary/run-hooks.mjs +0 -63
  364. package/dist/engine/summary/run-lease.d.mts +0 -11
  365. package/dist/engine/summary/run-lease.mjs +0 -64
  366. package/dist/engine/summary/run-message-waits.d.mts +0 -15
  367. package/dist/engine/summary/run-message-waits.mjs +0 -62
  368. package/dist/engine/summary/run-metrics.d.mts +0 -31
  369. package/dist/engine/summary/run-metrics.mjs +0 -93
  370. package/dist/engine/summary/run-retry.d.mts +0 -9
  371. package/dist/engine/summary/run-retry.mjs +0 -69
  372. package/dist/engine/summary/run-sleeps.d.mts +0 -15
  373. package/dist/engine/summary/run-sleeps.mjs +0 -61
  374. package/dist/engine/summary/run-state.d.mts +0 -26
  375. package/dist/engine/summary/run-state.mjs +0 -48
  376. package/dist/engine/summary/run-status.d.mts +0 -16
  377. package/dist/engine/summary/run-status.mjs +0 -35
  378. package/dist/engine/summary/run-streams.d.mts +0 -14
  379. package/dist/engine/summary/run-streams.mjs +0 -46
  380. package/dist/engine/summary/run-transition.d.mts +0 -9
  381. package/dist/engine/summary/run-transition.mjs +0 -39
  382. package/dist/engine/summary/run-workflow.d.mts +0 -9
  383. package/dist/engine/summary/run-workflow.mjs +0 -47
  384. package/dist/engine/summary/step-attempt-active-child-workflows.d.mts +0 -13
  385. package/dist/engine/summary/step-attempt-active-child-workflows.mjs +0 -55
  386. package/dist/engine/summary/step-attempt-active-fields.d.mts +0 -23
  387. package/dist/engine/summary/step-attempt-active-fields.mjs +0 -14
  388. package/dist/engine/summary/step-attempt-active-message-waits.d.mts +0 -12
  389. package/dist/engine/summary/step-attempt-active-message-waits.mjs +0 -47
  390. package/dist/engine/summary/step-attempt-active-sleeps.d.mts +0 -19
  391. package/dist/engine/summary/step-attempt-active-sleeps.mjs +0 -44
  392. package/dist/engine/summary/step-attempt-buckets.d.mts +0 -22
  393. package/dist/engine/summary/step-attempt-buckets.mjs +0 -152
  394. package/dist/engine/summary/step-attempt-failure.d.mts +0 -12
  395. package/dist/engine/summary/step-attempt-failure.mjs +0 -61
  396. package/dist/engine/summary/step-attempt-lifecycle.d.mts +0 -13
  397. package/dist/engine/summary/step-attempt-lifecycle.mjs +0 -19
  398. package/dist/engine/summary.d.mts +0 -32
  399. package/dist/engine/summary.mjs +0 -37
  400. package/dist/errors/details.d.mts +0 -13
  401. package/dist/errors/details.mjs +0 -66
  402. package/dist/errors/record-view.d.mts +0 -11
  403. package/dist/errors/record-view.mjs +0 -24
  404. package/dist/errors/runtime.d.mts +0 -12
  405. package/dist/errors/runtime.mjs +0 -24
  406. package/dist/events/mod.d.mts +0 -3
  407. package/dist/events/mod.mjs +0 -2
  408. package/dist/history/attempt-key.d.mts +0 -6
  409. package/dist/history/attempt-key.mjs +0 -7
  410. package/dist/inspection/mod.d.mts +0 -5
  411. package/dist/inspection/mod.mjs +0 -3
  412. package/dist/otel.mjs +0 -590
  413. package/dist/runtime.d.mts +0 -35
  414. package/dist/runtime.mjs +0 -198
  415. package/dist/store/append-projection.d.mts +0 -15
  416. package/dist/store/append-projection.mjs +0 -26
  417. package/dist/store/compaction.d.mts +0 -5
  418. package/dist/store/compaction.mjs +0 -8
  419. package/dist/store/event-append-project.d.mts +0 -15
  420. package/dist/store/event-append-project.mjs +0 -77
  421. package/dist/store/event-append.d.mts +0 -37
  422. package/dist/store/event-append.mjs +0 -80
  423. package/dist/store/event-history.d.mts +0 -22
  424. package/dist/store/event-history.mjs +0 -75
  425. package/dist/store/event.d.mts +0 -10
  426. package/dist/store/event.mjs +0 -28
  427. package/dist/store/idempotency.d.mts +0 -10
  428. package/dist/store/idempotency.mjs +0 -167
  429. package/dist/store/message-index.d.mts +0 -21
  430. package/dist/store/message-index.mjs +0 -122
  431. package/dist/store/revision.d.mts +0 -4
  432. package/dist/store/revision.mjs +0 -7
  433. package/dist/store/schema.d.mts +0 -14
  434. package/dist/store/schema.mjs +0 -17
  435. package/dist/types/common.d.mts +0 -20
  436. package/dist/types/common.mjs +0 -16
  437. package/dist/types/error-code.d.mts +0 -256
  438. package/dist/types/message-id.d.mts +0 -7
  439. package/dist/types/message-id.mjs +0 -5
  440. package/dist/types/run-id.d.mts +0 -7
  441. package/dist/types/run-id.mjs +0 -5
  442. package/dist/types/step-id.d.mts +0 -7
  443. package/dist/types/step-id.mjs +0 -5
  444. package/dist/types/stream-id.d.mts +0 -7
  445. package/dist/types/stream-id.mjs +0 -5
  446. package/dist/types/worker-id.d.mts +0 -7
  447. package/dist/types/worker-id.mjs +0 -5
  448. package/dist/utility.d.mts +0 -49
  449. package/dist/utility.mjs +0 -122
  450. package/dist/vite/ast.d.mts +0 -23
  451. package/dist/vite/generated-name.d.mts +0 -7
  452. package/dist/vite/generated-name.mjs +0 -9
  453. package/dist/vite/manifest.d.mts +0 -7
  454. package/dist/vite/plugin.d.mts +0 -7
  455. package/dist/vite/safety.d.mts +0 -12
  456. package/dist/vite/source.d.mts +0 -7
  457. package/dist/vite/transform.d.mts +0 -7
  458. package/dist/webhook.d.mts +0 -16
  459. package/dist/webhook.mjs +0 -17
  460. package/dist/worker.d.mts +0 -19
  461. /package/dist/{types/vite.mjs → engine/context.mjs} +0 -0
@@ -1,78 +1,64 @@
1
+ import { WorkflowErrorCode } from "../errors/codes.mjs";
1
2
  import { WorkflowStateError } from "../errors/base.mjs";
2
3
  import { WorkflowDurationError, WorkflowReplayDivergenceError } from "../errors/failures.mjs";
3
- import { getRequiredRun, safeDuration } from "../utility.mjs";
4
4
  import { WorkflowMessageDeliveryError, WorkflowMessageIdempotencyConflictError, WorkflowMessageWaitTimeoutError } from "../errors/message.mjs";
5
- import { resolveBroadcastMessageInput, resolveSendMessageInput, resolveWaitForMessageInput } from "../message-options.mjs";
6
5
  import { workflowErrorFromRecord } from "../errors/records.mjs";
7
- import { captureTelemetryContext } from "../telemetry.mjs";
6
+ import { createMessageWait, resolveBroadcastMessageInput, resolveSendMessageInput } from "../message-options.mjs";
7
+ import { History } from "../history/replay.mjs";
8
+ import { safeDuration } from "../values.mjs";
9
+ import { getRequiredRun } from "../store/query.mjs";
8
10
  import { serializeError, toOptionalPersistedValue } from "./serialization.mjs";
9
- import { WorkflowHistory } from "../history/mod.mjs";
10
- import { enforceWorkflowEventHistoryNextLimit } from "./retry.mjs";
11
- import { WorkflowSuspended } from "./state.mjs";
12
- import { resolveWorkflowCommandIdentity, resolveWorkflowCommandIdentityFromCandidates } from "./command-identity.mjs";
13
- import { appendDurableStepStartedEvent, appendDurableStepTerminalEvent } from "./durable-command.mjs";
14
- import { requireMessageSendReplayMatches, requireRecordedDurableTerminalStarted } from "./replay.mjs";
11
+ import { enforceEventHistoryNextLimit } from "./retry.mjs";
12
+ import { Suspended } from "./signals.mjs";
13
+ import { resolveCommandIdentity, resolveCommandIdentityFromCandidates } from "./command-identity.mjs";
14
+ import { appendDurableEvent, appendDurableStepStartedEvent } from "./durable-command.mjs";
15
+ import { captureTelemetryContext } from "../telemetry.mjs";
16
+ import { recordedInstant, requireMessageSendReplayMatches, requireRecordedDurableTerminalStarted } from "./replay.mjs";
15
17
  import { validateStandardSchema } from "@temelj/standard-schema";
16
18
  import { deepEquals } from "@temelj/value";
17
19
  //#region src/engine/message.ts
18
20
  const MAX_MESSAGE_DELIVERY_APPEND_ATTEMPTS = 16;
19
- function createWorkflowStepMessageApi(environment) {
21
+ function createStepMessageApi(environment) {
20
22
  const { store, history, now, limits } = environment;
21
23
  return {
22
24
  async send(targetRunId, messageInput, channelOptions) {
23
25
  const options = await resolveSendMessageInput(messageInput, channelOptions);
24
26
  const idempotencyKey = options.idempotencyKey;
25
- const identity = resolveWorkflowCommandIdentity(history, "message-send", options.messageId);
27
+ const identity = resolveCommandIdentity(history, "message-send", options.messageId);
26
28
  const started = history.startedMessageSend(identity.id);
27
29
  const completed = history.completedMessageSend(identity.id);
30
+ const nextMessageSend = {
31
+ targetRunId,
32
+ messageId: options.messageId,
33
+ payload: toOptionalPersistedValue(options.payload, "message payload", limits),
34
+ idempotencyKey
35
+ };
28
36
  if (completed !== void 0) {
29
37
  requireRecordedDurableTerminalStarted(identity, history.hasStartedEventBeforeTerminalEvent(completed));
30
- requireMessageSendReplayMatches(identity, started, completed, {
31
- targetRunId,
32
- messageId: options.messageId,
33
- payload: toOptionalPersistedValue(options.payload, "message payload", limits),
34
- idempotencyKey
35
- });
36
- if (!(completed.timestamp instanceof Temporal.Instant)) WorkflowReplayDivergenceError.diverged(`recorded message-send step ${identity.id} has invalid completion timestamp: ` + String(completed.timestamp), {
37
- expectedStepId: identity.id,
38
- actualStepId: identity.id
39
- });
38
+ requireMessageSendReplayMatches(identity, started, completed, nextMessageSend);
39
+ recordedInstant("message-send", identity, "completion", completed.timestamp);
40
40
  return;
41
41
  }
42
42
  const failed = history.failedMessageSend(identity.id);
43
43
  if (failed !== void 0) {
44
44
  requireRecordedDurableTerminalStarted(identity, history.hasStartedEventBeforeTerminalEvent(failed));
45
- requireMessageSendReplayMatches(identity, started, failed, {
46
- targetRunId,
47
- messageId: options.messageId,
48
- payload: toOptionalPersistedValue(options.payload, "message payload", limits),
49
- idempotencyKey
50
- });
51
- if (!(failed.timestamp instanceof Temporal.Instant)) WorkflowReplayDivergenceError.diverged(`recorded message-send step ${identity.id} has invalid failure timestamp: ` + String(failed.timestamp), {
52
- expectedStepId: identity.id,
53
- actualStepId: identity.id
54
- });
45
+ requireMessageSendReplayMatches(identity, started, failed, nextMessageSend);
46
+ recordedInstant("message-send", identity, "failure", failed.timestamp);
55
47
  throw workflowErrorFromRecord(failed.error);
56
48
  }
57
- const nextMessageSend = {
58
- targetRunId,
59
- messageId: options.messageId,
60
- payload: toOptionalPersistedValue(options.payload, "message payload", limits),
61
- idempotencyKey
62
- };
63
49
  if (started === void 0) {
64
- const timestamp = now();
65
- await appendDurableStepStartedEvent(environment, {
50
+ const durableEvent = {
66
51
  kind: "message_send_started",
67
- timestamp,
52
+ timestamp: now(),
68
53
  stepId: identity.id,
69
54
  stepName: identity.name,
70
55
  count: identity.count,
71
56
  targetRunId: nextMessageSend.targetRunId,
72
57
  messageId: nextMessageSend.messageId,
73
58
  payload: nextMessageSend.payload,
74
- ...nextMessageSend.idempotencyKey === void 0 ? {} : { idempotencyKey: nextMessageSend.idempotencyKey }
75
- });
59
+ idempotencyKey: nextMessageSend.idempotencyKey
60
+ };
61
+ await appendDurableStepStartedEvent(environment, durableEvent);
76
62
  } else requireMessageSendReplayMatches(identity, started, started, nextMessageSend);
77
63
  try {
78
64
  await sendWorkflowMessage(store, targetRunId, {
@@ -80,7 +66,7 @@ function createWorkflowStepMessageApi(environment) {
80
66
  idempotencyKey
81
67
  }, now, limits, environment.observeMessageSent, environment.telemetry);
82
68
  } catch (error) {
83
- await appendDurableStepTerminalEvent(environment, {
69
+ await appendDurableEvent(environment, {
84
70
  kind: "message_send_failed",
85
71
  timestamp: now(),
86
72
  stepId: identity.id,
@@ -91,7 +77,7 @@ function createWorkflowStepMessageApi(environment) {
91
77
  });
92
78
  throw error;
93
79
  }
94
- await appendDurableStepTerminalEvent(environment, {
80
+ await appendDurableEvent(environment, {
95
81
  kind: "message_send_completed",
96
82
  timestamp: now(),
97
83
  stepId: identity.id,
@@ -100,22 +86,20 @@ function createWorkflowStepMessageApi(environment) {
100
86
  messageId: options.messageId
101
87
  });
102
88
  },
103
- async wait(messageInput, channelOptions) {
104
- return await waitForWorkflowMessage(environment, resolveWaitForMessageInput(messageInput, channelOptions));
105
- }
89
+ wait: createMessageWait((options) => waitForMessage(environment, options))
106
90
  };
107
91
  }
108
- async function sendWorkflowMessageInput(service, runId, messageInput, channelOptions) {
109
- const telemetryContext = captureTelemetryContext(service.telemetry);
92
+ async function sendMessageInput(context, runId, messageInput, channelOptions) {
93
+ const telemetryContext = captureTelemetryContext(context.telemetry);
110
94
  const messageOptions = await resolveSendMessageInput(messageInput, channelOptions);
111
- await sendWorkflowMessage(service.store, runId, messageOptions, service.now, service.limits, service.observeMessageSent, service.telemetry, telemetryContext);
95
+ await sendWorkflowMessage(context.store, runId, messageOptions, context.now, context.limits, context.observation.emitMessageSent, context.telemetry, telemetryContext);
112
96
  }
113
- async function broadcastWorkflowMessageInput(service, messageInput, channelOptions) {
114
- const telemetryContext = captureTelemetryContext(service.telemetry);
97
+ async function broadcastMessageInput(context, messageInput, channelOptions) {
98
+ const telemetryContext = captureTelemetryContext(context.telemetry);
115
99
  const messageOptions = await resolveBroadcastMessageInput(messageInput, channelOptions);
116
- toOptionalPersistedValue(messageOptions.payload, "message payload", service.limits);
117
- const targets = await broadcastMessageTargets(service.store, messageOptions.target);
118
- for (const target of targets) await sendWorkflowMessage(service.store, target.id, messageOptions, service.now, service.limits, service.observeMessageSent, service.telemetry, telemetryContext);
100
+ toOptionalPersistedValue(messageOptions.payload, "message payload", context.limits);
101
+ const targets = await broadcastMessageTargets(context.store, messageOptions.target);
102
+ for (const target of targets) await sendWorkflowMessage(context.store, target.id, messageOptions, context.now, context.limits, context.observation.emitMessageSent, context.telemetry, telemetryContext);
119
103
  return {
120
104
  messageId: messageOptions.messageId,
121
105
  runIds: targets.map((target) => target.id),
@@ -123,77 +107,81 @@ async function broadcastWorkflowMessageInput(service, messageInput, channelOptio
123
107
  };
124
108
  }
125
109
  async function sendWorkflowMessage(store, runId, options, now, limits, observeMessageSent, telemetry, traceContext) {
126
- const targetRunId = runId;
127
110
  const idempotencyKey = options.idempotencyKey;
128
111
  const telemetryContext = traceContext ?? captureTelemetryContext(telemetry);
129
- const run = await getRequiredRun(store, targetRunId);
112
+ const run = await getRequiredRun(store, runId);
130
113
  const payload = toOptionalPersistedValue(options.payload, "message payload", limits);
131
114
  let timestamp;
132
115
  let appendedEvents;
133
116
  for (let attempt = 0; attempt < MAX_MESSAGE_DELIVERY_APPEND_ATTEMPTS && appendedEvents === void 0; attempt++) {
134
- const currentRun = attempt === 0 ? run : await getRequiredRun(store, targetRunId);
135
- const currentEvents = await store.getEvents(targetRunId);
136
- const currentHistory = new WorkflowHistory(currentEvents);
117
+ const currentRun = attempt === 0 ? run : await getRequiredRun(store, runId);
118
+ const currentEvents = await store.getEvents(runId);
119
+ const currentHistory = new History(currentEvents);
137
120
  if (idempotencyKey !== void 0) {
138
121
  const existingMessage = currentHistory.messageByIdempotencyKey(idempotencyKey);
139
122
  if (existingMessage !== void 0) {
140
123
  if (existingMessage.messageId === options.messageId && deepEquals(existingMessage.payload, payload)) {
141
- await wakeRunForMessageEvent(store, targetRunId, existingMessage);
124
+ await wakeRunForMessageEvent(store, runId, existingMessage);
142
125
  return;
143
126
  }
144
127
  WorkflowMessageIdempotencyConflictError.conflict({
145
- runId: targetRunId,
128
+ runId,
146
129
  messageId: options.messageId,
147
130
  idempotencyKey
148
131
  });
149
132
  }
150
- await requireMessageIdempotencyIndexUnclaimed(store, targetRunId, options.messageId, idempotencyKey);
133
+ await requireMessageIdempotencyIndexUnclaimed(store, runId, options.messageId, idempotencyKey);
151
134
  }
152
135
  if (currentRun.status === "completed" || currentRun.status === "failed" || currentRun.status === "canceled") WorkflowMessageDeliveryError.cannotSend({
153
- runId: targetRunId,
136
+ runId,
154
137
  status: currentRun.status,
155
138
  messageId: options.messageId
156
139
  });
157
140
  const waiterStepIds = currentHistory.activeMessageWaitStepIds(options.messageId);
158
141
  timestamp ??= now();
159
- enforceWorkflowEventHistoryNextLimit(currentEvents, limits);
160
- appendedEvents = await store.appendEventIfRunCurrent(currentRun, {
142
+ enforceEventHistoryNextLimit(currentEvents, limits);
143
+ const durableEvent1 = {
161
144
  kind: "message_sent",
162
145
  timestamp,
163
146
  messageId: options.messageId,
164
147
  payload,
165
- ...waiterStepIds.length === 0 ? {} : { waiterStepIds },
166
- ...idempotencyKey === void 0 ? {} : { idempotencyKey },
167
- ...telemetryContext === void 0 ? {} : { telemetryContext }
168
- });
148
+ waiterStepIds: waiterStepIds.length !== 0 ? waiterStepIds : void 0,
149
+ idempotencyKey,
150
+ telemetryContext
151
+ };
152
+ appendedEvents = await store.appendEventIfRunCurrent(currentRun, durableEvent1);
169
153
  }
170
154
  if (appendedEvents === void 0) {
171
- const currentRun = await getRequiredRun(store, targetRunId);
155
+ const currentRun = await getRequiredRun(store, runId);
172
156
  if (currentRun.status === "completed" || currentRun.status === "failed" || currentRun.status === "canceled") WorkflowMessageDeliveryError.cannotSend({
173
- runId: targetRunId,
157
+ runId,
174
158
  status: currentRun.status,
175
159
  messageId: options.messageId
176
160
  });
177
- WorkflowStateError.failedMessageAppend(targetRunId);
161
+ throw new WorkflowStateError(`Failed to append workflow message for run ${runId}`, {
162
+ code: WorkflowErrorCode.STATE_MESSAGE_APPEND_FAILED,
163
+ details: { runId }
164
+ });
178
165
  }
179
- const appendedHistory = new WorkflowHistory(appendedEvents);
166
+ const appendedHistory = new History(appendedEvents);
180
167
  if (idempotencyKey !== void 0) {
181
168
  const existingMessage = appendedHistory.messageByIdempotencyKey(idempotencyKey);
182
169
  if (existingMessage !== void 0 && !workflowMessageSendMatches(existingMessage, options, payload)) WorkflowMessageIdempotencyConflictError.conflict({
183
- runId: targetRunId,
170
+ runId,
184
171
  messageId: options.messageId,
185
172
  idempotencyKey
186
173
  });
187
174
  }
188
- const messageEvent = appendedHistory.messageForSend(options.messageId, idempotencyKey) ?? {
175
+ let messageEvent = appendedHistory.messageForSend(options.messageId, idempotencyKey);
176
+ if (messageEvent === void 0) messageEvent = {
189
177
  kind: "message_sent",
190
178
  timestamp: timestamp ?? now(),
191
179
  messageId: options.messageId,
192
180
  payload,
193
- ...telemetryContext === void 0 ? {} : { telemetryContext }
181
+ telemetryContext
194
182
  };
195
- observeMessageSent?.(targetRunId, messageEvent);
196
- await wakeRunForMessageEvent(store, targetRunId, messageEvent);
183
+ observeMessageSent?.(runId, messageEvent);
184
+ await wakeRunForMessageEvent(store, runId, messageEvent);
197
185
  }
198
186
  async function broadcastMessageTargets(store, target) {
199
187
  return (await store.listRuns(target)).filter((run) => !(run.status === "completed" || run.status === "failed" || run.status === "canceled"));
@@ -208,9 +196,9 @@ async function requireMessageIdempotencyIndexUnclaimed(store, runId, messageId,
208
196
  function workflowMessageSendMatches(event, options, payload) {
209
197
  return event.messageId === options.messageId && deepEquals(event.payload, payload);
210
198
  }
211
- async function waitForWorkflowMessage(environment, options) {
212
- const { runId, history, now, limits, executionOwner } = environment;
213
- const identity = resolveWorkflowCommandIdentityFromCandidates(history, "message-wait", [
199
+ async function waitForMessage(environment, options) {
200
+ const { runId, history, now, executionOwner } = environment;
201
+ const identity = resolveCommandIdentityFromCandidates(history, "message-wait", [
214
202
  options.commandId,
215
203
  options.name,
216
204
  options.messageId
@@ -231,28 +219,23 @@ async function waitForWorkflowMessage(environment, options) {
231
219
  if (started !== void 0) requireMessageWaitReplayMatches(identity, started, started, options);
232
220
  const timeoutAt = started?.timeoutAt === void 0 ? options.timeout === void 0 ? void 0 : (() => {
233
221
  const timeout = safeDuration(options.timeout.total({ unit: "millisecond" }), "Workflow messageId timeout");
234
- if (timeout <= 0) WorkflowDurationError.signalTimeoutPositive();
222
+ if (timeout <= 0) throw new WorkflowDurationError("Workflow message timeout must be greater than zero");
235
223
  return now().add(Temporal.Duration.from({ milliseconds: timeout }));
236
- })() : (() => {
237
- if (!(started.timeoutAt instanceof Temporal.Instant)) WorkflowReplayDivergenceError.diverged(`recorded message-wait step ${identity.id} has invalid timeout timestamp: ` + String(started.timeoutAt), {
238
- expectedStepId: identity.id,
239
- actualStepId: identity.id
240
- });
241
- return started.timeoutAt;
242
- })();
224
+ })() : recordedInstant("message-wait", identity, "timeout", started.timeoutAt);
243
225
  let waitStartedAt;
244
226
  if (started === void 0) {
245
227
  waitStartedAt = now();
246
- await appendDurableStepStartedEvent(environment, {
228
+ const durableEvent2 = {
247
229
  kind: "message_wait_started",
248
230
  timestamp: waitStartedAt,
249
231
  stepId: identity.id,
250
232
  stepName: identity.name,
251
233
  count: identity.count,
252
234
  messageId: options.messageId,
253
- ...options.source === void 0 ? {} : { source: options.source },
254
- ...timeoutAt === void 0 ? {} : { timeoutAt }
255
- });
235
+ source: options.source,
236
+ timeoutAt
237
+ };
238
+ await appendDurableStepStartedEvent(environment, durableEvent2);
256
239
  }
257
240
  const messageId = history.messageForWait(options.messageId, identity.id, timeoutAt);
258
241
  if (messageId !== void 0) {
@@ -260,7 +243,7 @@ async function waitForWorkflowMessage(environment, options) {
260
243
  try {
261
244
  payload = options.schema === void 0 ? messageId.payload : await validateStandardSchema(options.schema, messageId.payload, "Workflow message validation failed");
262
245
  } catch (error) {
263
- await appendDurableStepTerminalEvent(environment, {
246
+ await appendDurableEvent(environment, {
264
247
  kind: "message_wait_failed",
265
248
  timestamp: now(),
266
249
  stepId: identity.id,
@@ -270,28 +253,29 @@ async function waitForWorkflowMessage(environment, options) {
270
253
  });
271
254
  throw error;
272
255
  }
273
- const persistedPayload = toOptionalPersistedValue(payload, "messageId payload", limits);
274
- await appendDurableStepTerminalEvent(environment, {
256
+ const persistedPayload = messageId.payload;
257
+ const durableEvent3 = {
275
258
  kind: "message_wait_completed",
276
259
  timestamp: now(),
277
260
  stepId: identity.id,
278
261
  stepName: identity.name,
279
262
  messageId: options.messageId,
280
- ...persistedPayload === void 0 ? {} : { payload: persistedPayload },
263
+ payload: persistedPayload,
281
264
  messageTimestamp: messageId.timestamp,
282
- ...messageId.telemetryContext === void 0 ? {} : { telemetryContext: messageId.telemetryContext }
283
- });
265
+ telemetryContext: messageId.telemetryContext
266
+ };
267
+ await appendDurableEvent(environment, durableEvent3);
284
268
  return payload;
285
269
  }
286
270
  if (timeoutAt !== void 0 && Temporal.Instant.compare(timeoutAt, now()) <= 0) {
287
- const error = WorkflowMessageWaitTimeoutError.create({
271
+ const error = new WorkflowMessageWaitTimeoutError({
288
272
  runId,
289
273
  stepId: identity.id,
290
274
  stepName: identity.name,
291
275
  messageId: options.messageId,
292
276
  timeoutAt
293
277
  });
294
- await appendDurableStepTerminalEvent(environment, {
278
+ await appendDurableEvent(environment, {
295
279
  kind: "message_wait_failed",
296
280
  timestamp: now(),
297
281
  stepId: identity.id,
@@ -301,38 +285,23 @@ async function waitForWorkflowMessage(environment, options) {
301
285
  });
302
286
  throw error;
303
287
  }
304
- WorkflowSuspended.until(messageWaitAvailableAt(now, timeoutAt, executionOwner.deadlineAt));
288
+ Suspended.until(messageWaitAvailableAt(now, timeoutAt, executionOwner.deadlineAt));
305
289
  }
306
290
  function requireMessageWaitReplayMatches(identity, started, event, options) {
307
291
  const recordedMessage = started?.messageId ?? event.messageId;
308
- if (started !== void 0 && !(started.timestamp instanceof Temporal.Instant)) WorkflowReplayDivergenceError.diverged(`recorded message-wait step ${identity.id} has invalid start timestamp: ` + String(started.timestamp), {
309
- expectedStepId: identity.id,
310
- actualStepId: identity.id
311
- });
312
- if (recordedMessage !== options.messageId) WorkflowReplayDivergenceError.diverged(`recorded message-wait step ${identity.id} waited for ${recordedMessage}, but replay waited for ${options.messageId}`, {
313
- expectedStepId: identity.id,
314
- actualStepId: identity.id
315
- });
292
+ if (started !== void 0) recordedInstant("message-wait", identity, "start", started.timestamp);
293
+ if (recordedMessage !== options.messageId) WorkflowReplayDivergenceError.atStep(identity.id, `recorded message-wait step ${identity.id} waited for ${recordedMessage}, but replay waited for ${options.messageId}`);
316
294
  if (started !== void 0 && started.source !== options.source) {
317
295
  const recordedSource = started.source ?? "message";
318
296
  const replaySource = options.source ?? "message";
319
- WorkflowReplayDivergenceError.diverged(`recorded message-wait step ${identity.id} was created by ${recordedSource}, but replay used ${replaySource}`, {
320
- expectedStepId: identity.id,
321
- actualStepId: identity.id
322
- });
297
+ WorkflowReplayDivergenceError.atStep(identity.id, `recorded message-wait step ${identity.id} was created by ${recordedSource}, but replay used ${replaySource}`);
323
298
  }
324
299
  if (started !== void 0 && started.timeoutAt === void 0 !== (options.timeout === void 0)) {
325
300
  const recordedTimeout = started.timeoutAt === void 0 ? "no timeout" : started.timeoutAt;
326
301
  const replayTimeout = options.timeout === void 0 ? "no timeout" : "a timeout";
327
- WorkflowReplayDivergenceError.diverged(`recorded message-wait step ${identity.id} had ${String(recordedTimeout)}, but replay used ${replayTimeout}`, {
328
- expectedStepId: identity.id,
329
- actualStepId: identity.id
330
- });
302
+ WorkflowReplayDivergenceError.atStep(identity.id, `recorded message-wait step ${identity.id} had ${String(recordedTimeout)}, but replay used ${replayTimeout}`);
331
303
  }
332
- if (event.kind === "message_wait_completed" && !(event.messageTimestamp instanceof Temporal.Instant)) WorkflowReplayDivergenceError.diverged(`recorded message-wait step ${identity.id} has invalid messageId timestamp: ` + String(event.messageTimestamp), {
333
- expectedStepId: identity.id,
334
- actualStepId: identity.id
335
- });
304
+ if (event.kind === "message_wait_completed") recordedInstant("message-wait", identity, "messageId", event.messageTimestamp);
336
305
  }
337
306
  function messageWaitAvailableAt(now, timeoutAt, deadlineAt) {
338
307
  return [timeoutAt, deadlineAt].filter((value) => value !== void 0).sort((left, right) => Temporal.Instant.compare(left, right))[0] ?? now().add(Temporal.Duration.from({ milliseconds: 2 ** 31 - 1 }));
@@ -341,7 +310,7 @@ async function wakeRunForMessageEvent(store, runId, messageEvent) {
341
310
  const run = await store.getRun(runId);
342
311
  if (run === void 0 || run.status !== "waiting") return;
343
312
  const events = await store.getEvents(runId);
344
- const activeWaits = new WorkflowHistory(events).activeMessageWaitStepIds(messageEvent.messageId);
313
+ const activeWaits = new History(events).activeMessageWaitStepIds(messageEvent.messageId);
345
314
  if (!(messageEvent.waiterStepIds === void 0 ? activeWaits.length > 0 : activeWaits.some((stepId) => messageEvent.waiterStepIds?.includes(stepId)))) return;
346
315
  await store.updateRunIfCurrent(run, {
347
316
  ...run,
@@ -349,12 +318,10 @@ async function wakeRunForMessageEvent(store, runId, messageEvent) {
349
318
  updatedAt: messageEvent.timestamp,
350
319
  lastTransitionAt: messageEvent.timestamp,
351
320
  lastTransitionReason: "waiting",
352
- deadlineAt: run.deadlineAt,
353
- retryAt: run.retryAt,
354
321
  error: void 0,
355
322
  output: void 0,
356
323
  finishedAt: void 0
357
324
  });
358
325
  }
359
326
  //#endregion
360
- export { broadcastWorkflowMessageInput, createWorkflowStepMessageApi, messageWaitAvailableAt, requireMessageWaitReplayMatches, sendWorkflowMessage, sendWorkflowMessageInput, waitForWorkflowMessage, wakeRunForMessageEvent };
327
+ export { broadcastMessageInput, createStepMessageApi, sendMessageInput, sendWorkflowMessage, waitForMessage };
@@ -1,14 +1,14 @@
1
- import { MessageId } from "../types/message-id.mjs";
2
- import { RunId } from "../types/run-id.mjs";
1
+ import { MessageId, RunId } from "../types/ids.mjs";
3
2
  import { CleanupRunsResult } from "../types/cleanup.mjs";
3
+ import { HookKind } from "../types/hook.mjs";
4
4
  import { ChildWorkflowStartedObservationEvent, ObservationEmitter as ObservationEmitter$1, ObservationEventHandler, ObservationEventPattern, ScheduleRunCreatedObservationEvent, ScheduleTickObservationEvent, WorkerOperationObservationEvent } from "../types/observation.mjs";
5
5
  import { Telemetry, TelemetryContext } from "../types/telemetry.mjs";
6
- import { WorkflowRunRecord } from "../types/run.mjs";
6
+ import { RunRecord } from "../types/run.mjs";
7
7
  import { EventRecord, MessageSentEvent } from "../types/events.mjs";
8
8
  import { StorageValue } from "@temelj/storage";
9
9
  //#region src/engine/observation.d.ts
10
- declare function createObservationEmitter(telemetry?: Telemetry): ObservationEmitter$1;
11
- declare class ObservationEmitter implements ObservationEmitter$1 {
10
+ export declare function createObservationEmitter(telemetry?: Telemetry): ObservationEmitter$1;
11
+ export declare class ObservationEmitter implements ObservationEmitter$1 {
12
12
  #private;
13
13
  constructor(telemetry?: Telemetry);
14
14
  on<Pattern extends ObservationEventPattern>(pattern: Pattern, handler: ObservationEventHandler<Pattern>): () => void;
@@ -18,12 +18,11 @@ declare class ObservationEmitter implements ObservationEmitter$1 {
18
18
  listenerCount(pattern?: ObservationEventPattern): number;
19
19
  listeners(): readonly ObservationEventHandler[];
20
20
  listeners<Pattern extends ObservationEventPattern>(pattern: Pattern): readonly ObservationEventHandler<Pattern>[];
21
- emitRunEvent(run: WorkflowRunRecord, previousRun?: WorkflowRunRecord): void;
22
- emitRunMetadataUpdated(run: WorkflowRunRecord, previousRun?: WorkflowRunRecord): void;
21
+ emitRunEvent(run: RunRecord, previousRun?: RunRecord): void;
22
+ emitRunMetadataUpdated(run: RunRecord, previousRun?: RunRecord): void;
23
23
  emitDurableEventAppended(runId: RunId, event: EventRecord, appendedEvents: readonly EventRecord[]): void;
24
24
  emitMessageSent(runId: RunId, event: MessageSentEvent): void;
25
- emitHookResumed(runId: RunId, messageId: MessageId, payload: StorageValue | undefined, traceContext: TelemetryContext | undefined): void;
26
- emitWebhookResumed(runId: RunId, messageId: MessageId, payload: StorageValue | undefined, traceContext: TelemetryContext | undefined): void;
25
+ emitHookResumed(kind: HookKind, runId: RunId, messageId: MessageId, payload: StorageValue | undefined, traceContext: TelemetryContext | undefined): void;
27
26
  emitChildWorkflowStarted(event: ChildWorkflowStartedObservationEvent): void;
28
27
  emitCleanupCompleted(result: CleanupRunsResult): void;
29
28
  emitRetentionApplied(result: CleanupRunsResult): void;
@@ -31,5 +30,4 @@ declare class ObservationEmitter implements ObservationEmitter$1 {
31
30
  emitScheduleTicked(event: ScheduleTickObservationEvent): void;
32
31
  emitScheduleRunCreated(event: ScheduleRunCreatedObservationEvent): void;
33
32
  }
34
- //#endregion
35
- export { ObservationEmitter, createObservationEmitter };
33
+ //#endregion
@@ -1,8 +1,7 @@
1
- import { makeWorkflowStepAttemptKey } from "../history/attempt-key.mjs";
2
- import { observeTelemetry } from "../telemetry.mjs";
1
+ import { stepAttemptKey } from "../store-keys.mjs";
3
2
  import { getWorkflowEventStepAttemptKey } from "../events/descriptors.mjs";
4
- import "../history/mod.mjs";
5
- import { createWorkflowStepAttempts } from "../history/step-attempts.mjs";
3
+ import { createStepAttempts } from "../history/step-attempts.mjs";
4
+ import { observeTelemetry } from "../telemetry.mjs";
6
5
  import { createPubSub } from "@temelj/event";
7
6
  //#region src/engine/observation.ts
8
7
  function createObservationEmitter(telemetry) {
@@ -11,9 +10,9 @@ function createObservationEmitter(telemetry) {
11
10
  var ObservationEmitter = class {
12
11
  #events = createPubSub();
13
12
  #telemetry;
14
- #emit = (event, payload) => {
15
- this.#events.emit(event, payload);
16
- observeTelemetry(this.#telemetry, event, payload);
13
+ #emit = (...event) => {
14
+ this.#events.emit(event[0], event[1]);
15
+ observeTelemetry(this.#telemetry, ...event);
17
16
  };
18
17
  constructor(telemetry) {
19
18
  this.#telemetry = telemetry;
@@ -28,7 +27,6 @@ var ObservationEmitter = class {
28
27
  this.emitDurableEventAppended = this.emitDurableEventAppended.bind(this);
29
28
  this.emitMessageSent = this.emitMessageSent.bind(this);
30
29
  this.emitHookResumed = this.emitHookResumed.bind(this);
31
- this.emitWebhookResumed = this.emitWebhookResumed.bind(this);
32
30
  this.emitChildWorkflowStarted = this.emitChildWorkflowStarted.bind(this);
33
31
  this.emitCleanupCompleted = this.emitCleanupCompleted.bind(this);
34
32
  this.emitRetentionApplied = this.emitRetentionApplied.bind(this);
@@ -70,28 +68,21 @@ var ObservationEmitter = class {
70
68
  emitStreamUpdated(this.#emit, runId, event);
71
69
  }
72
70
  emitMessageSent(runId, event) {
73
- this.#emit("workflow:message-sent", {
71
+ const observation = {
74
72
  runId,
75
73
  messageId: event.messageId,
76
74
  payload: event.payload,
77
75
  timestamp: event.timestamp,
78
- ...event.telemetryContext === void 0 ? {} : { traceContext: event.telemetryContext }
79
- });
80
- }
81
- emitHookResumed(runId, messageId, payload, traceContext) {
82
- this.#emit("workflow:hook-resumed", {
83
- runId,
84
- messageId,
85
- ...payload === void 0 ? {} : { payload },
86
- ...traceContext === void 0 ? {} : { traceContext }
87
- });
76
+ traceContext: event.telemetryContext
77
+ };
78
+ this.#emit("workflow:message-sent", observation);
88
79
  }
89
- emitWebhookResumed(runId, messageId, payload, traceContext) {
90
- this.#emit("workflow:webhook-resumed", {
80
+ emitHookResumed(kind, runId, messageId, payload, traceContext) {
81
+ this.#emit(`workflow:${kind}-resumed`, {
91
82
  runId,
92
83
  messageId,
93
- ...payload === void 0 ? {} : { payload },
94
- ...traceContext === void 0 ? {} : { traceContext }
84
+ payload,
85
+ traceContext
95
86
  });
96
87
  }
97
88
  emitChildWorkflowStarted(event) {
@@ -121,7 +112,7 @@ function emitStepAttemptUpdated(emit, runId, event, events) {
121
112
  return;
122
113
  }
123
114
  if (key === void 0) return;
124
- const attempt = createWorkflowStepAttempts(runId, events).find((current) => makeWorkflowStepAttemptKey(current.stepId, current.attempt) === key);
115
+ const attempt = createStepAttempts(runId, events).find((current) => stepAttemptKey(current.stepId, current.attempt) === key);
125
116
  if (attempt === void 0) return;
126
117
  emit("workflow:step-attempt-updated", {
127
118
  runId,
@@ -138,8 +129,8 @@ function emitStreamUpdated(emit, runId, event) {
138
129
  timestamp: event.timestamp,
139
130
  stepId: event.stepId,
140
131
  stepName: event.stepName,
141
- ...event.kind === "stream_chunk" ? { index: event.index } : {},
142
- ...event.kind === "stream_failed" ? { error: event.error } : {}
132
+ index: event.kind === "stream_chunk" ? event.index : void 0,
133
+ error: event.kind === "stream_failed" ? event.error : void 0
143
134
  });
144
135
  }
145
136
  function emitRunEvent(emit, run, previousRun) {
@@ -192,7 +183,7 @@ function makeRunObservationEvent(run, previousRun) {
192
183
  reason: run.lastTransitionReason,
193
184
  timestamp: run.lastTransitionAt,
194
185
  workflowName: run.workflowName,
195
- ...run.workflowVersion === void 0 ? {} : { workflowVersion: run.workflowVersion }
186
+ workflowVersion: run.workflowVersion
196
187
  };
197
188
  }
198
189
  //#endregion
@@ -1,29 +1,28 @@
1
- import { MessageId } from "../types/message-id.mjs";
2
- import { RunId } from "../types/run-id.mjs";
3
- import { WorkflowStepRunConfig } from "../types/step.mjs";
4
- import { WorkflowAttributePatch, WorkflowStepIdentity } from "../types/run.mjs";
1
+ import { MessageId, RunId } from "../types/ids.mjs";
2
+ import { StepRunConfig } from "../types/step.mjs";
3
+ import { AttributePatch, StepIdentity } from "../types/run.mjs";
5
4
  import { EventRecord } from "../types/events.mjs";
6
- import "../history/mod.mjs";
7
- import { WorkflowExecutionEnvironment } from "../types/engine.mjs";
5
+ import "../history/replay.mjs";
6
+ import { ExecutionEnvironment } from "../types/engine.mjs";
8
7
  import { StorageValue } from "@temelj/storage";
9
8
  //#region src/engine/replay.d.ts
10
- declare function isRunStepTerminalForStartedAttempt(terminal: Extract<EventRecord, {
9
+ export declare function isRunStepTerminalForStartedAttempt(terminal: Extract<EventRecord, {
11
10
  readonly kind: "step_completed" | "step_failed";
12
11
  }>, started: Extract<EventRecord, {
13
12
  readonly kind: "step_started";
14
13
  }>): boolean;
15
- declare function requireRecordedDurableStepStarted(identity: WorkflowStepIdentity, started: boolean): void;
16
- declare function requireRecordedDurableTerminalStarted(identity: WorkflowStepIdentity, hasStartedEventBeforeTerminal: boolean): void;
17
- declare function requireRunStepReplayTimeoutMatches(identity: WorkflowStepIdentity, started: Extract<EventRecord, {
14
+ export declare function requireRecordedDurableStepStarted(identity: StepIdentity, started: boolean): void;
15
+ export declare function requireRecordedDurableTerminalStarted(identity: StepIdentity, hasStartedEventBeforeTerminal: boolean): void;
16
+ export declare function requireRunStepReplayTimeoutMatches(identity: StepIdentity, started: Extract<EventRecord, {
18
17
  readonly kind: "step_started";
19
- }> | undefined, config: WorkflowStepRunConfig): void;
20
- declare function requireMetadataReplayMatches(identity: WorkflowStepIdentity, recorded: Extract<EventRecord, {
18
+ }> | undefined, config: StepRunConfig): void;
19
+ export declare function requireMetadataReplayMatches(identity: StepIdentity, recorded: Extract<EventRecord, {
21
20
  readonly kind: "metadata_set";
22
21
  }>, metadata: StorageValue): void;
23
- declare function requireAttributesReplayMatches(identity: WorkflowStepIdentity, recorded: Extract<EventRecord, {
22
+ export declare function requireAttributesReplayMatches(identity: StepIdentity, recorded: Extract<EventRecord, {
24
23
  readonly kind: "attributes_set";
25
- }>, attributes: WorkflowAttributePatch): void;
26
- declare function requireMessageSendReplayMatches(identity: WorkflowStepIdentity, started: Extract<EventRecord, {
24
+ }>, attributes: AttributePatch): void;
25
+ export declare function requireMessageSendReplayMatches(identity: StepIdentity, started: Extract<EventRecord, {
27
26
  readonly kind: "message_send_started";
28
27
  }> | undefined, terminal: Extract<EventRecord, {
29
28
  readonly kind: "message_send_started" | "message_send_completed" | "message_send_failed";
@@ -33,9 +32,9 @@ declare function requireMessageSendReplayMatches(identity: WorkflowStepIdentity,
33
32
  readonly payload?: StorageValue;
34
33
  readonly idempotencyKey?: string;
35
34
  }): void;
36
- declare function sleepUntil(environment: WorkflowExecutionEnvironment, name: string, initialUntil: Temporal.Instant, options: {
35
+ export declare function sleepUntil(environment: ExecutionEnvironment, name: string, initialUntil: Temporal.Instant, options: {
37
36
  readonly duration?: Temporal.Duration;
38
37
  }): Promise<void>;
39
- declare function recordedStepCompletionTimestamp(identity: WorkflowStepIdentity, value: Temporal.Instant): Temporal.Instant;
40
- //#endregion
41
- export { isRunStepTerminalForStartedAttempt, recordedStepCompletionTimestamp, requireAttributesReplayMatches, requireMessageSendReplayMatches, requireMetadataReplayMatches, requireRecordedDurableStepStarted, requireRecordedDurableTerminalStarted, requireRunStepReplayTimeoutMatches, sleepUntil };
38
+ /** A timestamp read from history; anything else in its place is a replay divergence. */
39
+ export declare function recordedInstant(kind: string, identity: StepIdentity, label: string, value: Temporal.Instant): Temporal.Instant;
40
+ //#endregion