@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,20 +1,18 @@
1
+ import { WorkflowErrorCode } from "../errors/codes.mjs";
1
2
  import { WorkflowOptionsError } from "../errors/base.mjs";
2
- import { createDefaultRunIdFactory, createDefaultWorkflowRecordedIdFactory } from "../utility.mjs";
3
- import { defineWorkflowFromTarget } from "../definition.mjs";
4
- import { readRunResult, retentionCleanupOptions } from "./run-utils.mjs";
5
- import { cancelWorkflowRun, markWorkflowRunPermanentlyFailed, releaseStaleWorkflowRunLease, rerunWorkflowRun, rescheduleWorkflowRun, retryFailedWorkflowRun, setWorkflowRunAttributes, updateWorkflowRunMetadata } from "./run-service.mjs";
6
- import { createWorkflowEngineStartApi } from "./start-api.mjs";
3
+ import { defineFromTarget } from "../definition.mjs";
4
+ import { createDefaultRecordedIdFactory, createDefaultRunIdFactory } from "../ids.mjs";
5
+ import { getWorkflowRunSummary } from "./inspection.mjs";
6
+ import { readRunResult } from "./run-utils.mjs";
7
+ import { rerunRun } from "./run-service.mjs";
8
+ import { acquireLock, releaseLock } from "./lock.mjs";
9
+ import { resolveScheduleRecord, tickSchedules } from "./schedule.mjs";
10
+ import { getRunRef, resolveScheduleNextOptions, startRun } from "./start.mjs";
7
11
  import { createWorkflowStore } from "../store/create.mjs";
8
- import { instrumentWorkflowStorage } from "../store/instrumentation.mjs";
9
- import { broadcastWorkflowMessageInput, sendWorkflowMessageInput } from "./message.mjs";
10
- import { disposeHook, disposeWebhook, getHookByToken, resumeHook, resumeWebhook } from "./hooks.mjs";
11
- import { acquireLock, releaseLock, releaseStaleLock } from "./lock.mjs";
12
- import { followStreamForRun, getStreamInfoForRun, readStreamForRun, readStreamPageForRun, waitForStreamChunkForRun, waitForStreamForRun, waitForStreamTerminalForRun } from "./stream.mjs";
13
- import { createWorkflowEngineExecutionApi } from "./execution-api.mjs";
14
- import { createWorkflowEngineInspectionApi } from "./inspection-api.mjs";
15
- import { createWorkflowLifecycleEmitter } from "./lifecycle.mjs";
12
+ import { instrumentStorage } from "../store/instrumentation.mjs";
13
+ import { createLifecycleEmitter } from "./lifecycle.mjs";
16
14
  import { createObservationEmitter } from "./observation.mjs";
17
- import { resolveScheduleRecord, tickSchedules, updateScheduleStatus, upsertSchedule } from "./schedule.mjs";
15
+ import { resumeRun } from "./resume.mjs";
18
16
  import { createStorage } from "@temelj/storage";
19
17
  import { createNoopLogger } from "@temelj/log";
20
18
  //#region src/engine/create.ts
@@ -33,11 +31,10 @@ function defaultDeterministicBytes(context) {
33
31
  }
34
32
  return bytes;
35
33
  }
36
- /** Creates workflow engine. */
37
34
  function createWorkflowEngine(options = {}) {
38
35
  return new WorkflowEngine(options);
39
36
  }
40
- /** Storage-backed workflow engine implementation used by the default client and runtime. */
37
+ /** Executes workflows against a store; the client and workers build on it. */
41
38
  var WorkflowEngine = class {
42
39
  storage;
43
40
  store;
@@ -45,25 +42,21 @@ var WorkflowEngine = class {
45
42
  #limits;
46
43
  #logger;
47
44
  #telemetry;
48
- #observation;
49
- #startApi;
50
- #executionApi;
51
- #inspectionApi;
52
- #hookService;
53
- #messageService;
54
- #streamService;
55
- #runService;
56
- #runLifecycle;
45
+ observation;
46
+ #resumeServices;
47
+ /** Shared by the engine's services and the client facades. */
48
+ context;
49
+ lifecycle;
57
50
  constructor(options = {}) {
58
- if (options.store !== void 0 && options.storage !== void 0) WorkflowOptionsError.engineStoreAndStorageConflict();
51
+ if (options.store !== void 0 && options.storage !== void 0) throw new WorkflowOptionsError("Workflow engine options cannot include both store and storage", { code: WorkflowErrorCode.OPTIONS_ENGINE_STORE_STORAGE_CONFLICT });
59
52
  const telemetry = options.telemetry === false ? void 0 : options.telemetry;
60
- const storage = options.store === void 0 ? instrumentWorkflowStorage(options.storage ?? createStorage(), telemetry) : void 0;
53
+ const storage = options.store === void 0 ? instrumentStorage(options.storage ?? createStorage(), telemetry) : void 0;
61
54
  this.store = options.store ?? createWorkflowStore({ storage });
62
55
  this.storage = this.store.storage;
63
56
  const now = options.now ?? Temporal.Now.instant;
64
57
  this.#now = now;
65
58
  const createRunId = options.createRunId ?? createDefaultRunIdFactory(now);
66
- const createRecordedId = options.createRecordedId ?? createDefaultWorkflowRecordedIdFactory(createRunId);
59
+ const createRecordedId = options.createRecordedId ?? createDefaultRecordedIdFactory(createRunId);
67
60
  const createDeterministicRandom = options.createDeterministicRandom ?? defaultDeterministicRandom;
68
61
  const createDeterministicUuid = options.createDeterministicUuid ?? defaultDeterministicUuid;
69
62
  const createDeterministicBytes = options.createDeterministicBytes ?? defaultDeterministicBytes;
@@ -74,40 +67,26 @@ var WorkflowEngine = class {
74
67
  maximumStreamChunks: options.maximumStreamChunks
75
68
  };
76
69
  this.#limits = limits;
77
- const readCurrentRunResult = async (runId) => await readRunResult(this.store, runId, now());
70
+ const readCurrentRunResult = async (definition, runId) => await readRunResult(this.store, definition, runId, now());
78
71
  const logger = options.logger === false ? createNoopLogger() : options.logger ?? createNoopLogger();
79
72
  this.#telemetry = telemetry;
80
73
  this.#logger = logger;
81
74
  const observation = createObservationEmitter(telemetry);
82
- this.#observation = observation;
83
- this.#hookService = {
75
+ this.observation = observation;
76
+ this.context = {
84
77
  store: this.store,
85
78
  now,
86
79
  limits,
87
- emitMessageSent: observation.emitMessageSent,
88
- emitHookResumed: observation.emitHookResumed,
89
- emitWebhookResumed: observation.emitWebhookResumed,
90
- telemetry
91
- };
92
- this.#messageService = {
93
- store: this.store,
94
- now,
95
- limits,
96
- observeMessageSent: observation.emitMessageSent,
97
- telemetry
98
- };
99
- this.#streamService = { store: this.store };
100
- this.#runService = {
101
- store: this.store,
102
- now,
103
- limits
80
+ observation,
81
+ telemetry,
82
+ logger,
83
+ createRunId
104
84
  };
105
- const { emitLifecycleEvent, emitResultLifecycleEvent } = createWorkflowLifecycleEmitter(options, observation);
106
- this.#runLifecycle = {
85
+ const { emitLifecycleEvent, emitResultLifecycleEvent } = createLifecycleEmitter(options, observation);
86
+ this.lifecycle = {
107
87
  emitLifecycleEvent,
108
88
  emitRunMetadataUpdated: observation.emitRunMetadataUpdated
109
89
  };
110
- this.#inspectionApi = createWorkflowEngineInspectionApi(this.store, now);
111
90
  const executionService = {
112
91
  store: this.store,
113
92
  now,
@@ -130,51 +109,15 @@ var WorkflowEngine = class {
130
109
  event
131
110
  })
132
111
  };
133
- this.#executionApi = createWorkflowEngineExecutionApi({
134
- store: this.store,
135
- now,
112
+ this.#resumeServices = {
113
+ context: this.context,
136
114
  executionService,
137
- emitResultLifecycleEvent,
138
- starter: this,
139
- resumer: this
140
- });
141
- this.#startApi = createWorkflowEngineStartApi({
142
- store: this.store,
143
- now,
144
- limits,
145
- createRunId,
146
- telemetry,
147
- emitRunEvent: observation.emitRunEvent,
148
- starter: this,
149
- handleOperations: {
150
- getTimeline: async (runId) => await this.getTimeline(runId),
151
- setMetadata: async (runId, metadata) => await this.updateRunMetadata(runId, metadata),
152
- setAttributes: async (runId, attributes) => await this.setRunAttributes(runId, attributes),
153
- cancel: async (runId) => await this.cancelRun(runId)
154
- }
155
- });
115
+ emitResultLifecycleEvent
116
+ };
156
117
  try {
157
118
  telemetry?.bindEngine?.(this);
158
119
  } catch {}
159
120
  }
160
- on(pattern, handler) {
161
- return this.#observation.on(pattern, handler);
162
- }
163
- once(pattern, handler) {
164
- return this.#observation.once(pattern, handler);
165
- }
166
- off(pattern, handler) {
167
- return this.#observation.off(pattern, handler);
168
- }
169
- listeners(pattern) {
170
- return pattern === void 0 ? this.#observation.listeners() : this.#observation.listeners(pattern);
171
- }
172
- clearListeners(pattern) {
173
- return this.#observation.clearListeners(pattern);
174
- }
175
- listenerCount(pattern) {
176
- return this.#observation.listenerCount(pattern);
177
- }
178
121
  async close() {
179
122
  const errors = [];
180
123
  try {
@@ -189,50 +132,25 @@ var WorkflowEngine = class {
189
132
  }
190
133
  if (errors.length > 0) throw errors[0];
191
134
  }
192
- observeWorkerOperation(event) {
193
- this.#observation.emitWorkerOperation(event);
194
- }
195
- observeScheduleRunCreated(event) {
196
- this.#observation.emitScheduleRunCreated(event);
197
- }
198
135
  async startWorkflow(workflow, input, options) {
199
- return this.#startApi.startWorkflow(workflow, input, options);
136
+ return await startRun(this, workflow, input, options);
200
137
  }
201
138
  async startWorkflows(workflow, items) {
202
- return this.#startApi.startWorkflows(workflow, items);
139
+ const handles = [];
140
+ for (const item of items) handles.push(await this.startWorkflow(workflow, item.input, item.options));
141
+ return handles;
142
+ }
143
+ async getRunRef(runId) {
144
+ return await getRunRef(this, runId);
203
145
  }
204
146
  async scheduleNextWorkflow(workflow, input, options) {
205
- return this.#startApi.scheduleNextWorkflow(workflow, input, options);
147
+ return await this.startWorkflow(workflow, input, resolveScheduleNextOptions(options, this.context.now).start);
206
148
  }
207
149
  async createSchedule(workflow, scheduleOptions) {
208
- const definition = defineWorkflowFromTarget(workflow);
209
- const schedule = resolveScheduleRecord(this.store.namespace, definition, scheduleOptions, this.#now(), this.#limits);
150
+ const definition = defineFromTarget(workflow);
151
+ const schedule = await resolveScheduleRecord(this.store.namespace, definition, scheduleOptions, this.#now(), this.#limits);
210
152
  return this.store.createSchedule(schedule);
211
153
  }
212
- async upsertSchedule(workflow, scheduleOptions) {
213
- return upsertSchedule(this.store, defineWorkflowFromTarget(workflow), scheduleOptions, this.#now(), this.#limits);
214
- }
215
- async getSchedule(scheduleId) {
216
- return this.store.getSchedule(scheduleId);
217
- }
218
- async listSchedules(options) {
219
- return this.store.listSchedules(options);
220
- }
221
- async listSchedulesPage(options) {
222
- return this.store.listSchedulesPage(options);
223
- }
224
- async pauseSchedule(scheduleId) {
225
- return updateScheduleStatus(this.store, scheduleId, "paused", this.#now());
226
- }
227
- async resumeSchedule(scheduleId) {
228
- return updateScheduleStatus(this.store, scheduleId, "active", this.#now());
229
- }
230
- async archiveSchedule(scheduleId) {
231
- return updateScheduleStatus(this.store, scheduleId, "archived", this.#now());
232
- }
233
- async deleteSchedule(scheduleId) {
234
- return updateScheduleStatus(this.store, scheduleId, "deleted", this.#now());
235
- }
236
154
  async tickSchedules(options) {
237
155
  const timestamp = options?.now ?? this.#now();
238
156
  const tickOptions = options === void 0 ? { now: timestamp } : {
@@ -240,7 +158,7 @@ var WorkflowEngine = class {
240
158
  now: timestamp
241
159
  };
242
160
  const result = await tickSchedules(this.store, this, this.#now, tickOptions);
243
- this.#observation.emitScheduleTicked({
161
+ this.observation.emitScheduleTicked({
244
162
  result,
245
163
  timestamp
246
164
  });
@@ -250,152 +168,29 @@ var WorkflowEngine = class {
250
168
  const acquiredAt = options.now === void 0 ? this.#now() : options.now;
251
169
  return acquireLock(this.store, key, options, acquiredAt);
252
170
  }
253
- async getLock(key) {
254
- return this.store.getLock(key);
255
- }
256
- async listLocks() {
257
- return this.store.listLocks();
258
- }
259
171
  async releaseLock(key, options) {
260
172
  const releasedAt = options.now === void 0 ? this.#now() : options.now;
261
173
  return releaseLock(this.store, key, options, releasedAt);
262
174
  }
263
- async releaseStaleLock(key, options) {
264
- const releasedAt = options?.now === void 0 ? this.#now() : options.now;
265
- return releaseStaleLock(this.store, key, releasedAt);
266
- }
267
175
  async runWorkflow(implementation, input, options) {
268
- return this.#executionApi.runWorkflow(implementation, input, options);
176
+ return await this.startWorkflow(implementation.definition, input, options?.start);
269
177
  }
270
178
  async runWorkflowNow(implementation, input, options) {
271
- return this.#executionApi.runWorkflowNow(implementation, input, options);
179
+ const handle = await this.startWorkflow(implementation.definition, input, options?.start);
180
+ return await this.resumeWorkflow(implementation, handle.runId, { signal: options?.signal });
272
181
  }
273
182
  async resumeWorkflow(implementation, runId, options) {
274
- return this.#executionApi.resumeWorkflow(implementation, runId, options);
275
- }
276
- async getRun(runId) {
277
- return this.#inspectionApi.getRun(runId);
278
- }
279
- async getEvents(runId) {
280
- return this.#inspectionApi.getEvents(runId);
281
- }
282
- async listEventsPage(runId, options) {
283
- return this.#inspectionApi.listEventsPage(runId, options);
284
- }
285
- async listRuns(options) {
286
- return this.#inspectionApi.listRuns(options);
287
- }
288
- async listRunsPage(options) {
289
- return this.#inspectionApi.listRunsPage(options);
290
- }
291
- async countRuns(options) {
292
- return this.#inspectionApi.countRuns(options);
183
+ return await resumeRun(this.#resumeServices, implementation, runId, options);
293
184
  }
294
185
  async getRunSummary(options) {
295
- return this.#inspectionApi.getRunSummary(options);
296
- }
297
- async getRecoverySummary(options) {
298
- return this.#inspectionApi.getRecoverySummary(options);
299
- }
300
- async getTimeline(runId) {
301
- return this.#inspectionApi.getTimeline(runId);
302
- }
303
- async listStepAttempts(runId, options) {
304
- return this.#inspectionApi.listStepAttempts(runId, options);
305
- }
306
- async listStepAttemptsPage(runId, options) {
307
- return this.#inspectionApi.listStepAttemptsPage(runId, options);
308
- }
309
- async countStepAttempts(runId, options) {
310
- return this.#inspectionApi.countStepAttempts(runId, options);
311
- }
312
- async repairStepAttempts(runId) {
313
- return this.#inspectionApi.repairStepAttempts(runId);
314
- }
315
- async repairMessageIdempotencyIndexes(runId) {
316
- return this.#inspectionApi.repairMessageIdempotencyIndexes(runId);
317
- }
318
- async getStepAttemptSummary(runId, options) {
319
- return this.#inspectionApi.getStepAttemptSummary(runId, options);
320
- }
321
- async cleanupRuns(options) {
322
- const result = await this.store.cleanupRuns(options);
323
- this.#observation.emitCleanupCompleted(result);
324
- return result;
325
- }
326
- async listCleanupMarkers() {
327
- return this.store.listCleanupMarkers();
328
- }
329
- async applyRetentionPolicy(retentionOptions) {
330
- const result = await this.store.cleanupRuns(retentionCleanupOptions(retentionOptions, this.#now));
331
- this.#observation.emitRetentionApplied(result);
332
- return result;
186
+ return await getWorkflowRunSummary({
187
+ store: this.store,
188
+ now: this.#now(),
189
+ filters: options
190
+ });
333
191
  }
334
192
  async rerunWorkflow(runId, options) {
335
- return rerunWorkflowRun(this.#runService, async (definition, input, startOptions) => await this.startWorkflow(definition, input, startOptions), runId, options);
336
- }
337
- async rescheduleRun(runId, options) {
338
- return rescheduleWorkflowRun(this.#runService, this.#runLifecycle, runId, options);
339
- }
340
- async releaseStaleRunLease(runId, options) {
341
- return releaseStaleWorkflowRunLease(this.#runService, this.#runLifecycle, runId, options);
342
- }
343
- async retryFailedRun(runId, options) {
344
- return retryFailedWorkflowRun(this.#runService, this.#runLifecycle, runId, options);
345
- }
346
- async markRunPermanentlyFailed(runId, options) {
347
- return markWorkflowRunPermanentlyFailed(this.#runService, this.#runLifecycle, runId, options);
348
- }
349
- async updateRunMetadata(runId, metadata) {
350
- return updateWorkflowRunMetadata(this.#runService, this.#runLifecycle, runId, metadata);
351
- }
352
- async setRunAttributes(runId, attributes) {
353
- return setWorkflowRunAttributes(this.#runService, runId, attributes);
354
- }
355
- async cancelRun(runId) {
356
- return cancelWorkflowRun(this.#runService, this.#runLifecycle, runId);
357
- }
358
- async resumeHook(token, options) {
359
- await resumeHook(token, options, this.#hookService);
360
- }
361
- async resumeWebhook(token, options) {
362
- await resumeWebhook(token, options, this.#hookService);
363
- }
364
- async disposeHook(token) {
365
- return disposeHook(token, this.#hookService);
366
- }
367
- async disposeWebhook(token) {
368
- return disposeWebhook(token, this.#hookService);
369
- }
370
- async getHookByToken(token) {
371
- return getHookByToken(token, this.store, this.#now());
372
- }
373
- async getStreamInfo(runId, streamIdOrName) {
374
- return getStreamInfoForRun(this.#streamService, runId, streamIdOrName);
375
- }
376
- followStream(runId, streamIdOrName, followOptions) {
377
- return followStreamForRun(this.#streamService, runId, streamIdOrName, followOptions);
378
- }
379
- async waitForStream(runId, streamIdOrName, waitOptions) {
380
- return waitForStreamForRun(this.#streamService, runId, streamIdOrName, waitOptions);
381
- }
382
- async waitForStreamChunk(runId, streamIdOrName, afterIndex, waitOptions) {
383
- return waitForStreamChunkForRun(this.#streamService, runId, streamIdOrName, afterIndex, waitOptions);
384
- }
385
- async waitForStreamTerminal(runId, streamIdOrName, waitOptions) {
386
- return waitForStreamTerminalForRun(this.#streamService, runId, streamIdOrName, waitOptions);
387
- }
388
- async readStream(runId, streamIdOrName, readOptions) {
389
- return readStreamForRun(this.#streamService, runId, streamIdOrName, readOptions);
390
- }
391
- async readStreamPage(runId, streamIdOrName, readOptions) {
392
- return readStreamPageForRun(this.#streamService, runId, streamIdOrName, readOptions);
393
- }
394
- async sendMessage(runId, messageInput, channelOptions) {
395
- await sendWorkflowMessageInput(this.#messageService, runId, messageInput, channelOptions);
396
- }
397
- async broadcastMessage(messageInput, channelOptions) {
398
- return broadcastWorkflowMessageInput(this.#messageService, messageInput, channelOptions);
193
+ return rerunRun(this.context, (definition, input, startOptions) => this.startWorkflow(definition, input, startOptions), runId, options);
399
194
  }
400
195
  };
401
196
  //#endregion
@@ -1,12 +1,7 @@
1
- import { StepId } from "../types/step-id.mjs";
2
- import { WorkflowDeterministicApi, WorkflowStepMetadata } from "../types/step.mjs";
3
- import { WorkflowExecutionEnvironment } from "../types/engine.mjs";
1
+ import { DeterministicApi, StepMetadata } from "../types/step.mjs";
2
+ import { DeterministicValueRecordedEvent } from "../types/events.mjs";
3
+ import { ExecutionEnvironment } from "../types/engine.mjs";
4
4
  //#region src/engine/deterministic.d.ts
5
- declare function createWorkflowDeterministicApi(environment: WorkflowExecutionEnvironment): WorkflowDeterministicApi;
6
- declare function recordWorkflowDeterministicValue<TValue>(environment: WorkflowExecutionEnvironment, name: string, createValue: (identity: WorkflowStepMetadata) => TValue, checkRecorded?: (recorded: {
7
- readonly stepId: StepId;
8
- readonly timestamp: Temporal.Instant;
9
- readonly value: unknown;
10
- }) => void): Promise<TValue>;
11
- //#endregion
12
- export { createWorkflowDeterministicApi, recordWorkflowDeterministicValue };
5
+ export declare function createDeterministicApi(environment: ExecutionEnvironment): DeterministicApi;
6
+ export declare function recordDeterministicValue<TValue>(environment: ExecutionEnvironment, name: string, createValue: (identity: StepMetadata) => TValue, readRecorded: (recorded: DeterministicValueRecordedEvent) => NoInfer<TValue>): Promise<TValue>;
7
+ //#endregion
@@ -1,102 +1,81 @@
1
+ import { WorkflowErrorCode } from "../errors/codes.mjs";
1
2
  import { WorkflowOptionsError } from "../errors/base.mjs";
2
3
  import { WorkflowReplayDivergenceError } from "../errors/failures.mjs";
3
- import { isNonNegativeSafeInteger } from "../utility.mjs";
4
4
  import "../errors/mod.mjs";
5
+ import { isNonNegativeSafeInteger } from "../values.mjs";
5
6
  import { toPersistedValue } from "./serialization.mjs";
6
- import { appendEventIfCurrentExecution } from "./state.mjs";
7
- import { resolveWorkflowCommandIdentity } from "./command-identity.mjs";
7
+ import { resolveCommandIdentity } from "./command-identity.mjs";
8
+ import { appendDurableEvent } from "./durable-command.mjs";
9
+ import { isNumber, isString } from "@temelj/value";
8
10
  //#region src/engine/deterministic.ts
9
11
  const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu;
10
- function createWorkflowDeterministicApi(environment) {
11
- const { now, runId } = environment;
12
+ function createDeterministicApi(environment) {
13
+ const { runId } = environment;
14
+ /** Records a generated value, checking it both when it is created and when it is replayed. */
15
+ const checked = async (commandId, expected, isValid, create) => await recordDeterministicValue(environment, commandId, (identity) => {
16
+ const value = create({
17
+ runId,
18
+ commandId: identity.id,
19
+ commandName: identity.name,
20
+ commandCount: identity.count
21
+ });
22
+ if (!isValid(value)) invalidDeterministicValue(identity.id, expected);
23
+ return value;
24
+ }, (recorded) => {
25
+ if (!isValid(recorded.value)) invalidDeterministicValue(recorded.stepId, expected);
26
+ return recorded.value;
27
+ });
12
28
  const api = {
13
- async now(commandId = "now") {
14
- return await recordWorkflowDeterministicValue(environment, commandId, () => now());
15
- },
16
- async random(commandId = "random") {
17
- return await recordWorkflowDeterministicValue(environment, commandId, (identity) => {
18
- const value = environment.createDeterministicRandom(deterministicValueContext(runId, identity));
19
- if (!isDeterministicRandomValue(value)) invalidDeterministicValue(identity.id, "a finite number in [0, 1)");
20
- return value;
21
- }, (recorded) => {
22
- if (!isDeterministicRandomValue(recorded.value)) invalidDeterministicValue(recorded.stepId, "a finite number in [0, 1)");
23
- });
24
- },
25
- async recordedId(commandId = "recorded-id") {
26
- return await recordWorkflowDeterministicValue(environment, commandId, (identity) => environment.createRecordedId(deterministicValueContext(runId, identity)));
27
- },
28
- async id(commandId = "id") {
29
- return await api.recordedId(commandId);
30
- },
31
- async uuid(commandId = "uuid") {
32
- return await recordWorkflowDeterministicValue(environment, commandId, (identity) => {
33
- const value = environment.createDeterministicUuid(deterministicValueContext(runId, identity));
34
- if (!isDeterministicUuidValue(value)) invalidDeterministicValue(identity.id, "a UUID string");
35
- return value;
36
- }, (recorded) => {
37
- if (!isDeterministicUuidValue(recorded.value)) invalidDeterministicValue(recorded.stepId, "a UUID string");
38
- });
39
- },
29
+ now: async (commandId = "now") => await checked(commandId, "a Temporal.Instant", isInstant, () => environment.now()),
30
+ random: async (commandId = "random") => await checked(commandId, "a finite number in [0, 1)", isDeterministicRandomValue, environment.createDeterministicRandom),
31
+ recordedId: async (commandId = "recorded-id") => await checked(commandId, "a recorded ID string", isString, environment.createRecordedId),
32
+ id: async (commandId = "id") => await api.recordedId(commandId),
33
+ uuid: async (commandId = "uuid") => await checked(commandId, "a UUID string", isDeterministicUuidValue, environment.createDeterministicUuid),
40
34
  async bytes(commandId, length) {
41
- if (typeof commandId !== "string") WorkflowOptionsError.string("Workflow deterministic bytes commandId");
42
- if (commandId.trim() === "") WorkflowOptionsError.nonBlank("Workflow deterministic bytes commandId");
43
- if (!isNonNegativeSafeInteger(length)) WorkflowOptionsError.nonNegativeSafeInteger("Workflow deterministic bytes length");
44
- const bytes = await recordWorkflowDeterministicValue(environment, commandId, (identity) => {
45
- const value = environment.createDeterministicBytes({
46
- ...deterministicValueContext(runId, identity),
47
- length
48
- });
49
- if (!isDeterministicBytesValue(value, length)) invalidDeterministicValue(identity.id, `a Uint8Array with length ${length}`);
50
- return new Uint8Array(value);
51
- }, (recorded) => {
52
- if (!isDeterministicBytesValue(recorded.value, length)) invalidDeterministicValue(recorded.stepId, `a Uint8Array with length ${length}`);
35
+ if (commandId.trim() === "") throw new WorkflowOptionsError("Workflow deterministic bytes commandId must not be blank", {
36
+ code: WorkflowErrorCode.OPTIONS_EXPECTED_NON_BLANK,
37
+ details: { label: "Workflow deterministic bytes commandId" }
53
38
  });
39
+ if (!isNonNegativeSafeInteger(length)) WorkflowOptionsError.nonNegativeSafeInteger("Workflow deterministic bytes length");
40
+ const bytes = await checked(commandId, `a Uint8Array with length ${length}`, (value) => isDeterministicBytesValue(value, length), (context) => environment.createDeterministicBytes({
41
+ ...context,
42
+ length
43
+ }));
54
44
  return new Uint8Array(bytes);
55
45
  }
56
46
  };
57
47
  return api;
58
48
  }
59
- async function recordWorkflowDeterministicValue(environment, name, createValue, checkRecorded) {
60
- const { store, history, now, limits, executionOwner, runId } = environment;
61
- const identity = resolveWorkflowCommandIdentity(history, "deterministic", name);
49
+ function isInstant(value) {
50
+ return value instanceof Temporal.Instant;
51
+ }
52
+ async function recordDeterministicValue(environment, name, createValue, readRecorded) {
53
+ const { history, now, limits } = environment;
54
+ const identity = resolveCommandIdentity(history, "deterministic", name);
62
55
  const recorded = history.deterministicValue(identity.id);
63
- if (recorded !== void 0) {
64
- checkRecorded?.(recorded);
65
- return recorded.value;
66
- }
56
+ if (recorded !== void 0) return readRecorded(recorded);
67
57
  const value = createValue(identity);
68
- await appendEventIfCurrentExecution(store, history, {
58
+ await appendDurableEvent(environment, {
69
59
  kind: "deterministic_value_recorded",
70
60
  timestamp: now(),
71
61
  stepId: identity.id,
72
62
  stepName: identity.name,
73
63
  count: identity.count,
74
64
  value: toPersistedValue(value, "deterministic value", limits)
75
- }, executionOwner, limits, void 0, (event, events) => environment.observeDurableEventAppended?.(runId, event, events));
65
+ });
76
66
  return value;
77
67
  }
78
- function deterministicValueContext(runId, identity) {
79
- return {
80
- runId,
81
- commandId: identity.id,
82
- commandName: identity.name,
83
- commandCount: identity.count
84
- };
85
- }
86
68
  function isDeterministicRandomValue(value) {
87
- return typeof value === "number" && Number.isFinite(value) && value >= 0 && value < 1;
69
+ return isNumber(value) && Number.isFinite(value) && value >= 0 && value < 1;
88
70
  }
89
71
  function isDeterministicUuidValue(value) {
90
- return typeof value === "string" && UUID_PATTERN.test(value);
72
+ return isString(value) && UUID_PATTERN.test(value);
91
73
  }
92
74
  function isDeterministicBytesValue(value, length) {
93
75
  return value instanceof Uint8Array && value.byteLength === length;
94
76
  }
95
77
  function invalidDeterministicValue(stepId, expected) {
96
- WorkflowReplayDivergenceError.diverged(`recorded deterministic value for ${stepId} must be ${expected}`, {
97
- expectedStepId: stepId,
98
- actualStepId: stepId
99
- });
78
+ WorkflowReplayDivergenceError.atStep(stepId, `recorded deterministic value for ${stepId} must be ${expected}`);
100
79
  }
101
80
  //#endregion
102
- export { createWorkflowDeterministicApi, recordWorkflowDeterministicValue };
81
+ export { createDeterministicApi, recordDeterministicValue };
@@ -1,10 +1,10 @@
1
1
  import { EventRecord } from "../types/events.mjs";
2
- import { WorkflowExecutionEnvironment } from "../types/engine.mjs";
2
+ import { ExecutionEnvironment } from "../types/engine.mjs";
3
3
  //#region src/engine/durable-command.d.ts
4
- type WorkflowDurableStepStartedEvent = Extract<EventRecord, {
4
+ type DurableStepStartedEvent = Extract<EventRecord, {
5
5
  readonly kind: "step_started" | "sleep_started" | "child_workflow_started" | "message_send_started" | "message_wait_started" | "stream_started";
6
6
  }>;
7
- declare function appendDurableStepStartedEvent(environment: WorkflowExecutionEnvironment, event: WorkflowDurableStepStartedEvent): Promise<void>;
8
- declare function appendDurableStepTerminalEvent(environment: WorkflowExecutionEnvironment, event: EventRecord): Promise<void>;
7
+ export declare function appendDurableStepStartedEvent(environment: ExecutionEnvironment, event: DurableStepStartedEvent): Promise<void>;
8
+ export declare function appendDurableEvent(environment: ExecutionEnvironment, event: EventRecord): Promise<void>;
9
9
  //#endregion
10
- export { appendDurableStepStartedEvent, appendDurableStepTerminalEvent };
10
+ export {};
@@ -4,7 +4,7 @@ import { appendEventIfCurrentExecution } from "./state.mjs";
4
4
  async function appendDurableStepStartedEvent(environment, event) {
5
5
  await appendDurableStepEvent(environment, event, { enforceAttemptBudget: true });
6
6
  }
7
- async function appendDurableStepTerminalEvent(environment, event) {
7
+ async function appendDurableEvent(environment, event) {
8
8
  await appendDurableStepEvent(environment, event);
9
9
  }
10
10
  async function appendDurableStepEvent(environment, event, options = {}) {
@@ -14,4 +14,4 @@ async function appendDurableStepEvent(environment, event, options = {}) {
14
14
  } : void 0, (appendedEvent, events) => environment.observeDurableEventAppended?.(runId, appendedEvent, events));
15
15
  }
16
16
  //#endregion
17
- export { appendDurableStepStartedEvent, appendDurableStepTerminalEvent };
17
+ export { appendDurableEvent, appendDurableStepStartedEvent };