@temelj/workflow 0.0.0-alpha.1

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 (393) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +38 -0
  3. package/dist/attributes.d.mts +15 -0
  4. package/dist/attributes.mjs +30 -0
  5. package/dist/client/create.d.mts +31 -0
  6. package/dist/client/create.mjs +67 -0
  7. package/dist/client/facades.d.mts +21 -0
  8. package/dist/client/facades.mjs +142 -0
  9. package/dist/client/mod.d.mts +2 -0
  10. package/dist/client/mod.mjs +2 -0
  11. package/dist/client/run-handle.d.mts +66 -0
  12. package/dist/client/run-handle.mjs +156 -0
  13. package/dist/client/worker-options.d.mts +17 -0
  14. package/dist/client/worker-options.mjs +25 -0
  15. package/dist/collection.d.mts +15 -0
  16. package/dist/collection.mjs +33 -0
  17. package/dist/compiled-function.d.mts +27 -0
  18. package/dist/compiled-function.mjs +54 -0
  19. package/dist/definition.d.mts +37 -0
  20. package/dist/definition.mjs +83 -0
  21. package/dist/engine/child-workflow.d.mts +10 -0
  22. package/dist/engine/child-workflow.mjs +333 -0
  23. package/dist/engine/command-identity.d.mts +9 -0
  24. package/dist/engine/command-identity.mjs +14 -0
  25. package/dist/engine/create.d.mts +106 -0
  26. package/dist/engine/create.mjs +402 -0
  27. package/dist/engine/deterministic.d.mts +12 -0
  28. package/dist/engine/deterministic.mjs +102 -0
  29. package/dist/engine/durable-command.d.mts +10 -0
  30. package/dist/engine/durable-command.mjs +17 -0
  31. package/dist/engine/execution-api.d.mts +29 -0
  32. package/dist/engine/execution-api.mjs +33 -0
  33. package/dist/engine/execution-service.d.mts +41 -0
  34. package/dist/engine/execution-service.mjs +288 -0
  35. package/dist/engine/hooks.d.mts +56 -0
  36. package/dist/engine/hooks.mjs +237 -0
  37. package/dist/engine/inspection-api.d.mts +34 -0
  38. package/dist/engine/inspection-api.mjs +77 -0
  39. package/dist/engine/inspection.d.mts +18 -0
  40. package/dist/engine/inspection.mjs +149 -0
  41. package/dist/engine/lifecycle.d.mts +18 -0
  42. package/dist/engine/lifecycle.mjs +38 -0
  43. package/dist/engine/lock-replay.d.mts +30 -0
  44. package/dist/engine/lock-replay.mjs +38 -0
  45. package/dist/engine/lock.d.mts +21 -0
  46. package/dist/engine/lock.mjs +197 -0
  47. package/dist/engine/message.d.mts +47 -0
  48. package/dist/engine/message.mjs +357 -0
  49. package/dist/engine/mod.d.mts +4 -0
  50. package/dist/engine/mod.mjs +2 -0
  51. package/dist/engine/observation.d.mts +35 -0
  52. package/dist/engine/observation.mjs +201 -0
  53. package/dist/engine/recovery.d.mts +26 -0
  54. package/dist/engine/recovery.mjs +92 -0
  55. package/dist/engine/replay.d.mts +41 -0
  56. package/dist/engine/replay.mjs +122 -0
  57. package/dist/engine/retry-policy.d.mts +4 -0
  58. package/dist/engine/retry-policy.mjs +4 -0
  59. package/dist/engine/retry.d.mts +23 -0
  60. package/dist/engine/retry.mjs +75 -0
  61. package/dist/engine/run-data.d.mts +9 -0
  62. package/dist/engine/run-data.mjs +74 -0
  63. package/dist/engine/run-service.d.mts +38 -0
  64. package/dist/engine/run-service.mjs +133 -0
  65. package/dist/engine/run-utils.d.mts +16 -0
  66. package/dist/engine/run-utils.mjs +83 -0
  67. package/dist/engine/schedule.d.mts +25 -0
  68. package/dist/engine/schedule.mjs +207 -0
  69. package/dist/engine/serialization.d.mts +9 -0
  70. package/dist/engine/serialization.mjs +85 -0
  71. package/dist/engine/start-api.d.mts +30 -0
  72. package/dist/engine/start-api.mjs +98 -0
  73. package/dist/engine/state.d.mts +77 -0
  74. package/dist/engine/state.mjs +464 -0
  75. package/dist/engine/step-api.d.mts +9 -0
  76. package/dist/engine/step-api.mjs +25 -0
  77. package/dist/engine/stream.d.mts +55 -0
  78. package/dist/engine/stream.mjs +333 -0
  79. package/dist/engine/summary/active-events.d.mts +34 -0
  80. package/dist/engine/summary/active-events.mjs +69 -0
  81. package/dist/engine/summary/child-workflow-runs.d.mts +24 -0
  82. package/dist/engine/summary/child-workflow-runs.mjs +138 -0
  83. package/dist/engine/summary/child-workflow-waits.d.mts +21 -0
  84. package/dist/engine/summary/child-workflow-waits.mjs +67 -0
  85. package/dist/engine/summary/recovery-child-workflow-waits.d.mts +11 -0
  86. package/dist/engine/summary/recovery-child-workflow-waits.mjs +89 -0
  87. package/dist/engine/summary/recovery-due-runs.d.mts +16 -0
  88. package/dist/engine/summary/recovery-due-runs.mjs +52 -0
  89. package/dist/engine/summary/recovery-failed-runs.d.mts +14 -0
  90. package/dist/engine/summary/recovery-failed-runs.mjs +33 -0
  91. package/dist/engine/summary/recovery-lease-runs.d.mts +16 -0
  92. package/dist/engine/summary/recovery-lease-runs.mjs +69 -0
  93. package/dist/engine/summary/recovery-locks.d.mts +18 -0
  94. package/dist/engine/summary/recovery-locks.mjs +100 -0
  95. package/dist/engine/summary/recovery-message-waits.d.mts +11 -0
  96. package/dist/engine/summary/recovery-message-waits.mjs +74 -0
  97. package/dist/engine/summary/recovery-retry-runs.d.mts +17 -0
  98. package/dist/engine/summary/recovery-retry-runs.mjs +65 -0
  99. package/dist/engine/summary/recovery-run-timestamps.d.mts +13 -0
  100. package/dist/engine/summary/recovery-run-timestamps.mjs +18 -0
  101. package/dist/engine/summary/recovery-runs.d.mts +23 -0
  102. package/dist/engine/summary/recovery-runs.mjs +54 -0
  103. package/dist/engine/summary/recovery-schedules.d.mts +10 -0
  104. package/dist/engine/summary/recovery-schedules.mjs +46 -0
  105. package/dist/engine/summary/recovery-sleep-waits.d.mts +10 -0
  106. package/dist/engine/summary/recovery-sleep-waits.mjs +53 -0
  107. package/dist/engine/summary/recovery-waits.d.mts +21 -0
  108. package/dist/engine/summary/recovery-waits.mjs +29 -0
  109. package/dist/engine/summary/run-availability.d.mts +13 -0
  110. package/dist/engine/summary/run-availability.mjs +37 -0
  111. package/dist/engine/summary/run-cleanup.d.mts +14 -0
  112. package/dist/engine/summary/run-cleanup.mjs +44 -0
  113. package/dist/engine/summary/run-failure.d.mts +14 -0
  114. package/dist/engine/summary/run-failure.mjs +62 -0
  115. package/dist/engine/summary/run-hooks.d.mts +14 -0
  116. package/dist/engine/summary/run-hooks.mjs +63 -0
  117. package/dist/engine/summary/run-lease.d.mts +11 -0
  118. package/dist/engine/summary/run-lease.mjs +64 -0
  119. package/dist/engine/summary/run-message-waits.d.mts +15 -0
  120. package/dist/engine/summary/run-message-waits.mjs +62 -0
  121. package/dist/engine/summary/run-metrics.d.mts +31 -0
  122. package/dist/engine/summary/run-metrics.mjs +93 -0
  123. package/dist/engine/summary/run-retry.d.mts +9 -0
  124. package/dist/engine/summary/run-retry.mjs +69 -0
  125. package/dist/engine/summary/run-sleeps.d.mts +15 -0
  126. package/dist/engine/summary/run-sleeps.mjs +61 -0
  127. package/dist/engine/summary/run-state.d.mts +26 -0
  128. package/dist/engine/summary/run-state.mjs +48 -0
  129. package/dist/engine/summary/run-status.d.mts +16 -0
  130. package/dist/engine/summary/run-status.mjs +35 -0
  131. package/dist/engine/summary/run-streams.d.mts +14 -0
  132. package/dist/engine/summary/run-streams.mjs +46 -0
  133. package/dist/engine/summary/run-transition.d.mts +9 -0
  134. package/dist/engine/summary/run-transition.mjs +39 -0
  135. package/dist/engine/summary/run-workflow.d.mts +9 -0
  136. package/dist/engine/summary/run-workflow.mjs +47 -0
  137. package/dist/engine/summary/step-attempt-active-child-workflows.d.mts +13 -0
  138. package/dist/engine/summary/step-attempt-active-child-workflows.mjs +55 -0
  139. package/dist/engine/summary/step-attempt-active-fields.d.mts +23 -0
  140. package/dist/engine/summary/step-attempt-active-fields.mjs +14 -0
  141. package/dist/engine/summary/step-attempt-active-message-waits.d.mts +12 -0
  142. package/dist/engine/summary/step-attempt-active-message-waits.mjs +47 -0
  143. package/dist/engine/summary/step-attempt-active-sleeps.d.mts +19 -0
  144. package/dist/engine/summary/step-attempt-active-sleeps.mjs +44 -0
  145. package/dist/engine/summary/step-attempt-buckets.d.mts +22 -0
  146. package/dist/engine/summary/step-attempt-buckets.mjs +152 -0
  147. package/dist/engine/summary/step-attempt-failure.d.mts +12 -0
  148. package/dist/engine/summary/step-attempt-failure.mjs +61 -0
  149. package/dist/engine/summary/step-attempt-lifecycle.d.mts +13 -0
  150. package/dist/engine/summary/step-attempt-lifecycle.mjs +19 -0
  151. package/dist/engine/summary/step-attempts.d.mts +11 -0
  152. package/dist/engine/summary/step-attempts.mjs +43 -0
  153. package/dist/engine/summary.d.mts +32 -0
  154. package/dist/engine/summary.mjs +37 -0
  155. package/dist/engine/task.d.mts +6 -0
  156. package/dist/engine/task.mjs +207 -0
  157. package/dist/errors/base.d.mts +99 -0
  158. package/dist/errors/base.mjs +426 -0
  159. package/dist/errors/capability.d.mts +11 -0
  160. package/dist/errors/capability.mjs +23 -0
  161. package/dist/errors/definition.d.mts +21 -0
  162. package/dist/errors/definition.mjs +51 -0
  163. package/dist/errors/details.d.mts +13 -0
  164. package/dist/errors/details.mjs +65 -0
  165. package/dist/errors/failures.d.mts +81 -0
  166. package/dist/errors/failures.mjs +168 -0
  167. package/dist/errors/hook.d.mts +14 -0
  168. package/dist/errors/hook.mjs +30 -0
  169. package/dist/errors/implementation.d.mts +11 -0
  170. package/dist/errors/implementation.mjs +25 -0
  171. package/dist/errors/lock.d.mts +28 -0
  172. package/dist/errors/lock.mjs +70 -0
  173. package/dist/errors/message.d.mts +106 -0
  174. package/dist/errors/message.mjs +122 -0
  175. package/dist/errors/mod.d.mts +17 -0
  176. package/dist/errors/mod.mjs +17 -0
  177. package/dist/errors/record-view.d.mts +11 -0
  178. package/dist/errors/record-view.mjs +24 -0
  179. package/dist/errors/records.d.mts +7 -0
  180. package/dist/errors/records.mjs +280 -0
  181. package/dist/errors/run.d.mts +116 -0
  182. package/dist/errors/run.mjs +232 -0
  183. package/dist/errors/runtime.d.mts +12 -0
  184. package/dist/errors/runtime.mjs +24 -0
  185. package/dist/errors/schedule.d.mts +27 -0
  186. package/dist/errors/schedule.mjs +65 -0
  187. package/dist/errors/step.d.mts +76 -0
  188. package/dist/errors/step.mjs +113 -0
  189. package/dist/errors/stream.d.mts +24 -0
  190. package/dist/errors/stream.mjs +64 -0
  191. package/dist/esbuild.d.mts +7 -0
  192. package/dist/esbuild.mjs +6 -0
  193. package/dist/events/descriptors.d.mts +245 -0
  194. package/dist/events/descriptors.mjs +405 -0
  195. package/dist/events/mod.d.mts +3 -0
  196. package/dist/events/mod.mjs +2 -0
  197. package/dist/history/attempt-key.d.mts +6 -0
  198. package/dist/history/attempt-key.mjs +7 -0
  199. package/dist/history/mod.d.mts +71 -0
  200. package/dist/history/mod.mjs +195 -0
  201. package/dist/history/projection.d.mts +8 -0
  202. package/dist/history/projection.mjs +259 -0
  203. package/dist/history/replay-projection.d.mts +88 -0
  204. package/dist/history/replay-projection.mjs +369 -0
  205. package/dist/history/sequencer.d.mts +16 -0
  206. package/dist/history/sequencer.mjs +78 -0
  207. package/dist/history/step-attempts.d.mts +9 -0
  208. package/dist/history/step-attempts.mjs +50 -0
  209. package/dist/history/timeline.d.mts +16 -0
  210. package/dist/history/timeline.mjs +272 -0
  211. package/dist/history/validator.d.mts +9 -0
  212. package/dist/history/validator.mjs +110 -0
  213. package/dist/inspection/mod.d.mts +5 -0
  214. package/dist/inspection/mod.mjs +3 -0
  215. package/dist/message-options.d.mts +8 -0
  216. package/dist/message-options.mjs +25 -0
  217. package/dist/mod.d.mts +52 -0
  218. package/dist/mod.mjs +26 -0
  219. package/dist/otel/support.d.mts +18 -0
  220. package/dist/otel/support.mjs +102 -0
  221. package/dist/otel.d.mts +30 -0
  222. package/dist/otel.mjs +588 -0
  223. package/dist/pagination.d.mts +25 -0
  224. package/dist/pagination.mjs +73 -0
  225. package/dist/registry.d.mts +20 -0
  226. package/dist/registry.mjs +48 -0
  227. package/dist/rolldown.d.mts +7 -0
  228. package/dist/rolldown.mjs +6 -0
  229. package/dist/rollup.d.mts +7 -0
  230. package/dist/rollup.mjs +6 -0
  231. package/dist/rspack.d.mts +7 -0
  232. package/dist/rspack.mjs +6 -0
  233. package/dist/runtime.d.mts +34 -0
  234. package/dist/runtime.mjs +194 -0
  235. package/dist/step-definition.d.mts +10 -0
  236. package/dist/step-definition.mjs +15 -0
  237. package/dist/store/append-projection.d.mts +15 -0
  238. package/dist/store/append-projection.mjs +26 -0
  239. package/dist/store/capabilities.d.mts +14 -0
  240. package/dist/store/capabilities.mjs +42 -0
  241. package/dist/store/cleanup.d.mts +18 -0
  242. package/dist/store/cleanup.mjs +338 -0
  243. package/dist/store/compaction.d.mts +5 -0
  244. package/dist/store/compaction.mjs +8 -0
  245. package/dist/store/create.d.mts +52 -0
  246. package/dist/store/create.mjs +159 -0
  247. package/dist/store/event-append-project.d.mts +15 -0
  248. package/dist/store/event-append-project.mjs +77 -0
  249. package/dist/store/event-append.d.mts +37 -0
  250. package/dist/store/event-append.mjs +80 -0
  251. package/dist/store/event-history.d.mts +22 -0
  252. package/dist/store/event-history.mjs +75 -0
  253. package/dist/store/event.d.mts +10 -0
  254. package/dist/store/event.mjs +28 -0
  255. package/dist/store/idempotency.d.mts +10 -0
  256. package/dist/store/idempotency.mjs +167 -0
  257. package/dist/store/instrumentation.d.mts +7 -0
  258. package/dist/store/instrumentation.mjs +123 -0
  259. package/dist/store/lock.d.mts +8 -0
  260. package/dist/store/lock.mjs +28 -0
  261. package/dist/store/materialization.d.mts +30 -0
  262. package/dist/store/materialization.mjs +127 -0
  263. package/dist/store/message-index.d.mts +21 -0
  264. package/dist/store/message-index.mjs +121 -0
  265. package/dist/store/mod.d.mts +5 -0
  266. package/dist/store/mod.mjs +4 -0
  267. package/dist/store/query.d.mts +24 -0
  268. package/dist/store/query.mjs +82 -0
  269. package/dist/store/revision.d.mts +4 -0
  270. package/dist/store/revision.mjs +7 -0
  271. package/dist/store/run.d.mts +49 -0
  272. package/dist/store/run.mjs +236 -0
  273. package/dist/store/schedule.d.mts +12 -0
  274. package/dist/store/schedule.mjs +41 -0
  275. package/dist/store/schema.d.mts +14 -0
  276. package/dist/store/schema.mjs +17 -0
  277. package/dist/store/step-attempt.d.mts +14 -0
  278. package/dist/store/step-attempt.mjs +23 -0
  279. package/dist/store/storage-value.d.mts +5 -0
  280. package/dist/store/storage-value.mjs +6 -0
  281. package/dist/store/validation.d.mts +35 -0
  282. package/dist/store/validation.mjs +77 -0
  283. package/dist/store-keys.d.mts +49 -0
  284. package/dist/store-keys.mjs +63 -0
  285. package/dist/telemetry.d.mts +132 -0
  286. package/dist/telemetry.mjs +172 -0
  287. package/dist/temporal.d.mts +23 -0
  288. package/dist/temporal.mjs +59 -0
  289. package/dist/timer.d.mts +12 -0
  290. package/dist/timer.mjs +28 -0
  291. package/dist/types/cleanup.d.mts +112 -0
  292. package/dist/types/cleanup.mjs +22 -0
  293. package/dist/types/client.d.mts +270 -0
  294. package/dist/types/client.mjs +1 -0
  295. package/dist/types/common.d.mts +19 -0
  296. package/dist/types/common.mjs +15 -0
  297. package/dist/types/definition.d.mts +92 -0
  298. package/dist/types/definition.mjs +1 -0
  299. package/dist/types/engine-options.d.mts +76 -0
  300. package/dist/types/engine-options.mjs +1 -0
  301. package/dist/types/engine.d.mts +309 -0
  302. package/dist/types/engine.mjs +1 -0
  303. package/dist/types/error-code.d.mts +256 -0
  304. package/dist/types/error-code.mjs +131 -0
  305. package/dist/types/error.d.mts +236 -0
  306. package/dist/types/error.mjs +48 -0
  307. package/dist/types/events.d.mts +2869 -0
  308. package/dist/types/events.mjs +283 -0
  309. package/dist/types/hook.d.mts +149 -0
  310. package/dist/types/hook.mjs +66 -0
  311. package/dist/types/lock.d.mts +63 -0
  312. package/dist/types/lock.mjs +18 -0
  313. package/dist/types/message-id.d.mts +7 -0
  314. package/dist/types/message-id.mjs +5 -0
  315. package/dist/types/message.d.mts +87 -0
  316. package/dist/types/message.mjs +1 -0
  317. package/dist/types/observation.d.mts +146 -0
  318. package/dist/types/observation.mjs +1 -0
  319. package/dist/types/pagination.d.mts +32 -0
  320. package/dist/types/pagination.mjs +13 -0
  321. package/dist/types/result.d.mts +62 -0
  322. package/dist/types/result.mjs +1 -0
  323. package/dist/types/retry.d.mts +48 -0
  324. package/dist/types/retry.mjs +1 -0
  325. package/dist/types/run-id.d.mts +7 -0
  326. package/dist/types/run-id.mjs +5 -0
  327. package/dist/types/run-list.d.mts +43 -0
  328. package/dist/types/run-list.mjs +1 -0
  329. package/dist/types/run-options.d.mts +86 -0
  330. package/dist/types/run-options.mjs +1 -0
  331. package/dist/types/run.d.mts +355 -0
  332. package/dist/types/run.mjs +207 -0
  333. package/dist/types/runtime.d.mts +143 -0
  334. package/dist/types/runtime.mjs +21 -0
  335. package/dist/types/schedule.d.mts +127 -0
  336. package/dist/types/schedule.mjs +48 -0
  337. package/dist/types/step-attempts.d.mts +326 -0
  338. package/dist/types/step-attempts.mjs +43 -0
  339. package/dist/types/step-id.d.mts +7 -0
  340. package/dist/types/step-id.mjs +5 -0
  341. package/dist/types/step.d.mts +183 -0
  342. package/dist/types/step.mjs +5 -0
  343. package/dist/types/store.d.mts +254 -0
  344. package/dist/types/store.mjs +1 -0
  345. package/dist/types/stream-id.d.mts +7 -0
  346. package/dist/types/stream-id.mjs +5 -0
  347. package/dist/types/stream.d.mts +126 -0
  348. package/dist/types/stream.mjs +1 -0
  349. package/dist/types/summary.d.mts +318 -0
  350. package/dist/types/summary.mjs +1 -0
  351. package/dist/types/telemetry.d.mts +74 -0
  352. package/dist/types/telemetry.mjs +9 -0
  353. package/dist/types/timeline.d.mts +237 -0
  354. package/dist/types/timeline.mjs +1 -0
  355. package/dist/types/vite.d.mts +65 -0
  356. package/dist/types/vite.mjs +1 -0
  357. package/dist/types/worker-id.d.mts +7 -0
  358. package/dist/types/worker-id.mjs +5 -0
  359. package/dist/types/worker.d.mts +94 -0
  360. package/dist/types/worker.mjs +1 -0
  361. package/dist/utility.d.mts +49 -0
  362. package/dist/utility.mjs +122 -0
  363. package/dist/vite/ast.d.mts +23 -0
  364. package/dist/vite/ast.mjs +73 -0
  365. package/dist/vite/error.d.mts +19 -0
  366. package/dist/vite/error.mjs +47 -0
  367. package/dist/vite/generated-name.d.mts +7 -0
  368. package/dist/vite/generated-name.mjs +9 -0
  369. package/dist/vite/manifest.d.mts +7 -0
  370. package/dist/vite/manifest.mjs +106 -0
  371. package/dist/vite/plugin.d.mts +7 -0
  372. package/dist/vite/plugin.mjs +190 -0
  373. package/dist/vite/safety.d.mts +12 -0
  374. package/dist/vite/safety.mjs +96 -0
  375. package/dist/vite/source-edit.d.mts +12 -0
  376. package/dist/vite/source-edit.mjs +44 -0
  377. package/dist/vite/source-map.d.mts +11 -0
  378. package/dist/vite/source-map.mjs +53 -0
  379. package/dist/vite/source.d.mts +7 -0
  380. package/dist/vite/source.mjs +14 -0
  381. package/dist/vite/transform.d.mts +7 -0
  382. package/dist/vite/transform.mjs +405 -0
  383. package/dist/vite.d.mts +6 -0
  384. package/dist/vite.mjs +5 -0
  385. package/dist/webhook.d.mts +16 -0
  386. package/dist/webhook.mjs +17 -0
  387. package/dist/webpack.d.mts +7 -0
  388. package/dist/webpack.mjs +6 -0
  389. package/dist/worker/error.d.mts +11 -0
  390. package/dist/worker/error.mjs +40 -0
  391. package/dist/worker.d.mts +18 -0
  392. package/dist/worker.mjs +427 -0
  393. package/package.json +144 -0
@@ -0,0 +1,106 @@
1
+ import { RunId } from "../types/run-id.mjs";
2
+ import { CleanupMarkerRecord, CleanupRunsOptions, CleanupRunsResult, RetentionPolicyOptions } from "../types/cleanup.mjs";
3
+ import { PageOptions, WorkflowPage } from "../types/pagination.mjs";
4
+ import { ListSchedulesOptions, ListSchedulesPageOptions, ScheduleConfig, ScheduleId, ScheduleRecord, TickSchedulesOptions, TickSchedulesResult } from "../types/schedule.mjs";
5
+ import { WorkflowImplementation, WorkflowStartTarget } from "../types/definition.mjs";
6
+ import { HookInspection, ResumeHookOptions, ResumeWebhookOptions } from "../types/hook.mjs";
7
+ import { AcquireLockOptions, LockRecord, ReleaseLockOptions, ReleaseStaleLockOptions } from "../types/lock.mjs";
8
+ import { WorkflowListRunsOptions, WorkflowListRunsPageOptions, WorkflowListStepAttemptsPageOptions } from "../types/run-list.mjs";
9
+ import { BroadcastMessageChannelOptions, BroadcastMessageInput, BroadcastMessageResult, MessageChannel, SendMessageChannelOptions, SendMessageInput } from "../types/message.mjs";
10
+ import { StreamIdOrName } from "../types/stream-id.mjs";
11
+ import { FollowStreamOptions, ReadStreamOptions, ReadStreamPageOptions, StreamChunk, StreamInfo, StreamPage, StreamState, StreamUpdate, WaitStreamOptions } from "../types/stream.mjs";
12
+ import { WorkflowRecoverySummary, WorkflowRecoverySummaryOptions, WorkflowRunSummary, WorkflowRunSummaryOptions } from "../types/summary.mjs";
13
+ import { WorkflowListStepAttemptsOptions, WorkflowStepAttemptRecord, WorkflowStepAttemptSummary } from "../types/step-attempts.mjs";
14
+ import { ObservationEventHandler, ObservationEventPattern, ObservationUnsubscribe, ScheduleRunCreatedObservationEvent, WorkerOperationObservationEvent } from "../types/observation.mjs";
15
+ import { Timeline } from "../types/timeline.mjs";
16
+ import { ExecutionResult, WorkflowHandle } from "../types/result.mjs";
17
+ import { WorkflowAttributePatch, WorkflowRunRecord } from "../types/run.mjs";
18
+ import { EventRecord } from "../types/events.mjs";
19
+ import { ScheduleNextOptions, WorkflowBatchStartItem, WorkflowExecutionOptions, WorkflowMarkRunPermanentlyFailedOptions, WorkflowReleaseStaleLeaseOptions, WorkflowRerunOptions, WorkflowRescheduleRunOptions, WorkflowResumeOptions, WorkflowRetryFailedRunOptions, WorkflowStartOptions } from "../types/run-options.mjs";
20
+ import { WorkflowMessageIdempotencyIndex, WorkflowStorage, WorkflowStore } from "../types/store.mjs";
21
+ import { CreateWorkflowEngineOptions } from "../types/engine-options.mjs";
22
+ import { WorkflowEngine as WorkflowEngine$1 } from "../types/engine.mjs";
23
+ import "../mod.mjs";
24
+ //#region src/engine/create.d.ts
25
+ /** Creates workflow engine. */
26
+ declare function createWorkflowEngine(options?: CreateWorkflowEngineOptions): WorkflowEngine$1;
27
+ /** Storage-backed workflow engine implementation used by the default client and runtime. */
28
+ declare class WorkflowEngine implements WorkflowEngine$1 {
29
+ #private;
30
+ readonly storage: WorkflowStorage;
31
+ readonly store: WorkflowStore;
32
+ constructor(options?: CreateWorkflowEngineOptions);
33
+ on<Pattern extends ObservationEventPattern>(pattern: Pattern, handler: ObservationEventHandler<Pattern>): ObservationUnsubscribe;
34
+ once<Pattern extends ObservationEventPattern>(pattern: Pattern, handler: ObservationEventHandler<Pattern>): ObservationUnsubscribe;
35
+ off<Pattern extends ObservationEventPattern>(pattern: Pattern, handler: ObservationEventHandler<Pattern>): void;
36
+ listeners(): readonly ObservationEventHandler[];
37
+ listeners<Pattern extends ObservationEventPattern>(pattern: Pattern): readonly ObservationEventHandler<Pattern>[];
38
+ clearListeners(pattern?: ObservationEventPattern): void;
39
+ listenerCount(pattern?: ObservationEventPattern): number;
40
+ close(): Promise<void>;
41
+ observeWorkerOperation(event: WorkerOperationObservationEvent): void;
42
+ observeScheduleRunCreated(event: ScheduleRunCreatedObservationEvent): void;
43
+ startWorkflow<TInput, TOutput, TRawInput = TInput>(workflow: WorkflowStartTarget<TInput, TOutput, TRawInput>, input: TRawInput, options?: WorkflowStartOptions): Promise<WorkflowHandle<TOutput>>;
44
+ startWorkflows<TInput, TOutput, TRawInput = TInput>(workflow: WorkflowStartTarget<TInput, TOutput, TRawInput>, items: readonly WorkflowBatchStartItem<TRawInput>[]): Promise<readonly WorkflowHandle<TOutput>[]>;
45
+ scheduleNextWorkflow<TInput, TOutput, TRawInput = TInput>(workflow: WorkflowStartTarget<TInput, TOutput, TRawInput>, input: TRawInput, options: ScheduleNextOptions): Promise<WorkflowHandle<TOutput>>;
46
+ createSchedule<TInput, TOutput, TRawInput = TInput>(workflow: WorkflowStartTarget<TInput, TOutput, TRawInput>, scheduleOptions: ScheduleConfig<TInput, TRawInput>): Promise<ScheduleRecord<TInput>>;
47
+ upsertSchedule<TInput, TOutput, TRawInput = TInput>(workflow: WorkflowStartTarget<TInput, TOutput, TRawInput>, scheduleOptions: ScheduleConfig<TInput, TRawInput>): Promise<ScheduleRecord<TInput>>;
48
+ getSchedule(scheduleId: ScheduleId): Promise<ScheduleRecord | undefined>;
49
+ listSchedules(options?: ListSchedulesOptions): Promise<readonly ScheduleRecord[]>;
50
+ listSchedulesPage(options?: ListSchedulesPageOptions): Promise<WorkflowPage<ScheduleRecord>>;
51
+ pauseSchedule(scheduleId: ScheduleId): Promise<ScheduleRecord>;
52
+ resumeSchedule(scheduleId: ScheduleId): Promise<ScheduleRecord>;
53
+ archiveSchedule(scheduleId: ScheduleId): Promise<ScheduleRecord>;
54
+ deleteSchedule(scheduleId: ScheduleId): Promise<ScheduleRecord>;
55
+ tickSchedules(options?: TickSchedulesOptions): Promise<TickSchedulesResult>;
56
+ acquireLock(key: string, options: AcquireLockOptions): Promise<LockRecord>;
57
+ getLock(key: string): Promise<LockRecord | undefined>;
58
+ listLocks(): Promise<readonly LockRecord[]>;
59
+ releaseLock(key: string, options: ReleaseLockOptions): Promise<LockRecord>;
60
+ releaseStaleLock(key: string, options?: ReleaseStaleLockOptions): Promise<LockRecord>;
61
+ runWorkflow<TInput, TOutput, TRawInput = TInput>(implementation: WorkflowImplementation<TInput, TOutput, TRawInput>, input: TRawInput, options?: WorkflowExecutionOptions): Promise<WorkflowHandle<TOutput>>;
62
+ runWorkflowNow<TInput, TOutput, TRawInput = TInput>(implementation: WorkflowImplementation<TInput, TOutput, TRawInput>, input: TRawInput, options?: WorkflowExecutionOptions): Promise<ExecutionResult<TOutput>>;
63
+ resumeWorkflow<TInput, TOutput, TRawInput = TInput>(implementation: WorkflowImplementation<TInput, TOutput, TRawInput>, runId: RunId, options?: WorkflowResumeOptions): Promise<ExecutionResult<TOutput>>;
64
+ getRun(runId: RunId): Promise<WorkflowRunRecord | undefined>;
65
+ getEvents(runId: RunId): Promise<readonly EventRecord[]>;
66
+ listEventsPage(runId: RunId, options?: PageOptions): Promise<WorkflowPage<EventRecord>>;
67
+ listRuns(options?: WorkflowListRunsOptions): Promise<readonly WorkflowRunRecord[]>;
68
+ listRunsPage(options?: WorkflowListRunsPageOptions): Promise<WorkflowPage<WorkflowRunRecord>>;
69
+ countRuns(options?: WorkflowListRunsOptions): Promise<number>;
70
+ getRunSummary(options?: WorkflowRunSummaryOptions): Promise<WorkflowRunSummary>;
71
+ getRecoverySummary(options?: WorkflowRecoverySummaryOptions): Promise<WorkflowRecoverySummary>;
72
+ getTimeline(runId: RunId): Promise<Timeline>;
73
+ listStepAttempts(runId: RunId, options?: WorkflowListStepAttemptsOptions): Promise<readonly WorkflowStepAttemptRecord[]>;
74
+ listStepAttemptsPage(runId: RunId, options?: WorkflowListStepAttemptsPageOptions): Promise<WorkflowPage<WorkflowStepAttemptRecord>>;
75
+ countStepAttempts(runId: RunId, options?: WorkflowListStepAttemptsOptions): Promise<number>;
76
+ repairStepAttempts(runId: RunId): Promise<readonly WorkflowStepAttemptRecord[]>;
77
+ repairMessageIdempotencyIndexes(runId: RunId): Promise<readonly WorkflowMessageIdempotencyIndex[]>;
78
+ getStepAttemptSummary(runId: RunId, options?: WorkflowListStepAttemptsOptions): Promise<WorkflowStepAttemptSummary>;
79
+ cleanupRuns(options: CleanupRunsOptions): Promise<CleanupRunsResult>;
80
+ listCleanupMarkers(): Promise<readonly CleanupMarkerRecord[]>;
81
+ applyRetentionPolicy(retentionOptions: RetentionPolicyOptions): Promise<CleanupRunsResult>;
82
+ rerunWorkflow(runId: RunId, options?: WorkflowRerunOptions): Promise<WorkflowHandle<unknown>>;
83
+ rescheduleRun(runId: RunId, options?: WorkflowRescheduleRunOptions): Promise<WorkflowRunRecord>;
84
+ releaseStaleRunLease(runId: RunId, options?: WorkflowReleaseStaleLeaseOptions): Promise<WorkflowRunRecord>;
85
+ retryFailedRun(runId: RunId, options?: WorkflowRetryFailedRunOptions): Promise<WorkflowRunRecord>;
86
+ markRunPermanentlyFailed(runId: RunId, options: WorkflowMarkRunPermanentlyFailedOptions): Promise<WorkflowRunRecord>;
87
+ updateRunMetadata(runId: RunId, metadata: unknown): Promise<WorkflowRunRecord>;
88
+ setRunAttributes(runId: RunId, attributes: WorkflowAttributePatch): Promise<WorkflowRunRecord>;
89
+ cancelRun(runId: RunId): Promise<WorkflowRunRecord>;
90
+ resumeHook(token: string, options?: ResumeHookOptions): Promise<void>;
91
+ resumeWebhook(token: string, options?: ResumeWebhookOptions): Promise<void>;
92
+ disposeHook(token: string): Promise<HookInspection>;
93
+ disposeWebhook(token: string): Promise<HookInspection>;
94
+ getHookByToken(token: string): Promise<HookInspection>;
95
+ getStreamInfo(runId: RunId, streamIdOrName: StreamIdOrName): Promise<StreamInfo>;
96
+ followStream<TChunk = unknown>(runId: RunId, streamIdOrName: StreamIdOrName, followOptions?: FollowStreamOptions): AsyncIterable<StreamUpdate<TChunk>>;
97
+ waitForStream(runId: RunId, streamIdOrName: StreamIdOrName, waitOptions?: WaitStreamOptions): Promise<StreamInfo | undefined>;
98
+ waitForStreamChunk<TChunk = unknown>(runId: RunId, streamIdOrName: StreamIdOrName, afterIndex: number, waitOptions?: WaitStreamOptions): Promise<StreamChunk<TChunk> | undefined>;
99
+ waitForStreamTerminal(runId: RunId, streamIdOrName: StreamIdOrName, waitOptions?: WaitStreamOptions): Promise<StreamInfo | undefined>;
100
+ readStream<TChunk = unknown>(runId: RunId, streamIdOrName: StreamIdOrName, readOptions?: ReadStreamOptions): Promise<StreamState<TChunk>>;
101
+ readStreamPage<TChunk = unknown>(runId: RunId, streamIdOrName: StreamIdOrName, readOptions?: ReadStreamPageOptions): Promise<StreamPage<TChunk>>;
102
+ sendMessage<TPayload, TKey = void>(runId: RunId, messageInput: SendMessageInput | MessageChannel<TPayload, TKey>, channelOptions?: SendMessageChannelOptions<TPayload, TKey>): Promise<void>;
103
+ broadcastMessage<TPayload, TKey = void>(messageInput: BroadcastMessageInput | MessageChannel<TPayload, TKey>, channelOptions?: BroadcastMessageChannelOptions<TPayload, TKey>): Promise<BroadcastMessageResult>;
104
+ }
105
+ //#endregion
106
+ export { WorkflowEngine, createWorkflowEngine };
@@ -0,0 +1,402 @@
1
+ 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";
7
+ 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";
16
+ import { createObservationEmitter } from "./observation.mjs";
17
+ import { resolveScheduleRecord, tickSchedules, updateScheduleStatus, upsertSchedule } from "./schedule.mjs";
18
+ import { createStorage } from "@temelj/storage";
19
+ import { createNoopLogger } from "@temelj/log";
20
+ //#region src/engine/create.ts
21
+ const MAX_CRYPTO_GET_RANDOM_VALUES_BYTES = 65536;
22
+ function defaultDeterministicRandom() {
23
+ return Math.random();
24
+ }
25
+ function defaultDeterministicUuid() {
26
+ return globalThis.crypto.randomUUID();
27
+ }
28
+ function defaultDeterministicBytes(context) {
29
+ const bytes = new Uint8Array(context.length);
30
+ for (let offset = 0; offset < bytes.byteLength; offset += MAX_CRYPTO_GET_RANDOM_VALUES_BYTES) {
31
+ const chunk = bytes.subarray(offset, offset + MAX_CRYPTO_GET_RANDOM_VALUES_BYTES);
32
+ globalThis.crypto.getRandomValues(chunk);
33
+ }
34
+ return bytes;
35
+ }
36
+ /** Creates workflow engine. */
37
+ function createWorkflowEngine(options = {}) {
38
+ return new WorkflowEngine(options);
39
+ }
40
+ /** Storage-backed workflow engine implementation used by the default client and runtime. */
41
+ var WorkflowEngine = class {
42
+ storage;
43
+ store;
44
+ #now;
45
+ #limits;
46
+ #logger;
47
+ #telemetry;
48
+ #observation;
49
+ #startApi;
50
+ #executionApi;
51
+ #inspectionApi;
52
+ #hookService;
53
+ #messageService;
54
+ #streamService;
55
+ #runService;
56
+ #runLifecycle;
57
+ constructor(options = {}) {
58
+ if (options.store !== void 0 && options.storage !== void 0) WorkflowOptionsError.engineStoreAndStorageConflict();
59
+ const telemetry = options.telemetry === false ? void 0 : options.telemetry;
60
+ const storage = options.store === void 0 ? instrumentWorkflowStorage(options.storage ?? createStorage(), telemetry) : void 0;
61
+ this.store = options.store ?? createWorkflowStore({ storage });
62
+ this.storage = this.store.storage;
63
+ const now = options.now ?? Temporal.Now.instant;
64
+ this.#now = now;
65
+ const createRunId = options.createRunId ?? createDefaultRunIdFactory(now);
66
+ const createRecordedId = options.createRecordedId ?? createDefaultWorkflowRecordedIdFactory(createRunId);
67
+ const createDeterministicRandom = options.createDeterministicRandom ?? defaultDeterministicRandom;
68
+ const createDeterministicUuid = options.createDeterministicUuid ?? defaultDeterministicUuid;
69
+ const createDeterministicBytes = options.createDeterministicBytes ?? defaultDeterministicBytes;
70
+ const maximumStepAttemptsPerRun = options.maximumStepAttemptsPerRun ?? 1e3;
71
+ const limits = {
72
+ maximumPersistedValueBytes: options.maximumPersistedValueBytes,
73
+ maximumEventHistoryEvents: options.maximumEventHistoryEvents,
74
+ maximumStreamChunks: options.maximumStreamChunks
75
+ };
76
+ this.#limits = limits;
77
+ const readCurrentRunResult = async (runId) => await readRunResult(this.store, runId, now());
78
+ const logger = options.logger === false ? createNoopLogger() : options.logger ?? createNoopLogger();
79
+ this.#telemetry = telemetry;
80
+ this.#logger = logger;
81
+ const observation = createObservationEmitter(telemetry);
82
+ this.#observation = observation;
83
+ this.#hookService = {
84
+ store: this.store,
85
+ now,
86
+ 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
104
+ };
105
+ const { emitLifecycleEvent, emitResultLifecycleEvent } = createWorkflowLifecycleEmitter(options, observation);
106
+ this.#runLifecycle = {
107
+ emitLifecycleEvent,
108
+ emitRunMetadataUpdated: observation.emitRunMetadataUpdated
109
+ };
110
+ this.#inspectionApi = createWorkflowEngineInspectionApi(this.store, now);
111
+ const executionService = {
112
+ store: this.store,
113
+ now,
114
+ createRecordedId,
115
+ createDeterministicRandom,
116
+ createDeterministicUuid,
117
+ createDeterministicBytes,
118
+ maximumStepAttemptsPerRun,
119
+ limits,
120
+ telemetry,
121
+ logger,
122
+ engine: this,
123
+ readCurrentRunResult,
124
+ emitResultLifecycleEvent,
125
+ observeRunEvent: observation.emitRunEvent,
126
+ observeDurableEventAppended: observation.emitDurableEventAppended,
127
+ observeMessageSent: observation.emitMessageSent,
128
+ observeChildWorkflowStarted: (runId, event) => observation.emitChildWorkflowStarted({
129
+ runId,
130
+ event
131
+ })
132
+ };
133
+ this.#executionApi = createWorkflowEngineExecutionApi({
134
+ store: this.store,
135
+ now,
136
+ 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
+ });
156
+ try {
157
+ telemetry?.bindEngine?.(this);
158
+ } catch {}
159
+ }
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
+ async close() {
179
+ const errors = [];
180
+ try {
181
+ await this.#logger.close?.();
182
+ } catch (error) {
183
+ errors.push(error);
184
+ }
185
+ try {
186
+ await this.#telemetry?.shutdown?.();
187
+ } catch (error) {
188
+ errors.push(error);
189
+ }
190
+ if (errors.length > 0) throw errors[0];
191
+ }
192
+ observeWorkerOperation(event) {
193
+ this.#observation.emitWorkerOperation(event);
194
+ }
195
+ observeScheduleRunCreated(event) {
196
+ this.#observation.emitScheduleRunCreated(event);
197
+ }
198
+ async startWorkflow(workflow, input, options) {
199
+ return this.#startApi.startWorkflow(workflow, input, options);
200
+ }
201
+ async startWorkflows(workflow, items) {
202
+ return this.#startApi.startWorkflows(workflow, items);
203
+ }
204
+ async scheduleNextWorkflow(workflow, input, options) {
205
+ return this.#startApi.scheduleNextWorkflow(workflow, input, options);
206
+ }
207
+ async createSchedule(workflow, scheduleOptions) {
208
+ const definition = defineWorkflowFromTarget(workflow);
209
+ const schedule = resolveScheduleRecord(this.store.namespace, definition, scheduleOptions, this.#now(), this.#limits);
210
+ return this.store.createSchedule(schedule);
211
+ }
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
+ async tickSchedules(options) {
237
+ const timestamp = options?.now ?? this.#now();
238
+ const tickOptions = options === void 0 ? { now: timestamp } : {
239
+ ...options,
240
+ now: timestamp
241
+ };
242
+ const result = await tickSchedules(this.store, this, this.#now, tickOptions);
243
+ this.#observation.emitScheduleTicked({
244
+ result,
245
+ timestamp
246
+ });
247
+ return result;
248
+ }
249
+ async acquireLock(key, options) {
250
+ const acquiredAt = options.now === void 0 ? this.#now() : options.now;
251
+ return acquireLock(this.store, key, options, acquiredAt);
252
+ }
253
+ async getLock(key) {
254
+ return this.store.getLock(key);
255
+ }
256
+ async listLocks() {
257
+ return this.store.listLocks();
258
+ }
259
+ async releaseLock(key, options) {
260
+ const releasedAt = options.now === void 0 ? this.#now() : options.now;
261
+ return releaseLock(this.store, key, options, releasedAt);
262
+ }
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
+ async runWorkflow(implementation, input, options) {
268
+ return this.#executionApi.runWorkflow(implementation, input, options);
269
+ }
270
+ async runWorkflowNow(implementation, input, options) {
271
+ return this.#executionApi.runWorkflowNow(implementation, input, options);
272
+ }
273
+ 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);
293
+ }
294
+ 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;
333
+ }
334
+ 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);
399
+ }
400
+ };
401
+ //#endregion
402
+ export { WorkflowEngine, createWorkflowEngine };
@@ -0,0 +1,12 @@
1
+ import { StepId } from "../types/step-id.mjs";
2
+ import { WorkflowDeterministicApi, WorkflowStepMetadata } from "../types/step.mjs";
3
+ import { WorkflowExecutionEnvironment } from "../types/engine.mjs";
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 };
@@ -0,0 +1,102 @@
1
+ import { WorkflowOptionsError } from "../errors/base.mjs";
2
+ import { WorkflowReplayDivergenceError } from "../errors/failures.mjs";
3
+ import { isNonNegativeSafeInteger } from "../utility.mjs";
4
+ import "../errors/mod.mjs";
5
+ import { toPersistedValue } from "./serialization.mjs";
6
+ import { appendEventIfCurrentExecution } from "./state.mjs";
7
+ import { resolveWorkflowCommandIdentity } from "./command-identity.mjs";
8
+ //#region src/engine/deterministic.ts
9
+ 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
+ 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
+ },
40
+ 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}`);
53
+ });
54
+ return new Uint8Array(bytes);
55
+ }
56
+ };
57
+ return api;
58
+ }
59
+ async function recordWorkflowDeterministicValue(environment, name, createValue, checkRecorded) {
60
+ const { store, history, now, limits, executionOwner, runId } = environment;
61
+ const identity = resolveWorkflowCommandIdentity(history, "deterministic", name);
62
+ const recorded = history.deterministicValue(identity.id);
63
+ if (recorded !== void 0) {
64
+ checkRecorded?.(recorded);
65
+ return recorded.value;
66
+ }
67
+ const value = createValue(identity);
68
+ await appendEventIfCurrentExecution(store, history, {
69
+ kind: "deterministic_value_recorded",
70
+ timestamp: now(),
71
+ stepId: identity.id,
72
+ stepName: identity.name,
73
+ count: identity.count,
74
+ value: toPersistedValue(value, "deterministic value", limits)
75
+ }, executionOwner, limits, void 0, (event, events) => environment.observeDurableEventAppended?.(runId, event, events));
76
+ return value;
77
+ }
78
+ function deterministicValueContext(runId, identity) {
79
+ return {
80
+ runId,
81
+ commandId: identity.id,
82
+ commandName: identity.name,
83
+ commandCount: identity.count
84
+ };
85
+ }
86
+ function isDeterministicRandomValue(value) {
87
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 && value < 1;
88
+ }
89
+ function isDeterministicUuidValue(value) {
90
+ return typeof value === "string" && UUID_PATTERN.test(value);
91
+ }
92
+ function isDeterministicBytesValue(value, length) {
93
+ return value instanceof Uint8Array && value.byteLength === length;
94
+ }
95
+ function invalidDeterministicValue(stepId, expected) {
96
+ WorkflowReplayDivergenceError.diverged(`recorded deterministic value for ${stepId} must be ${expected}`, {
97
+ expectedStepId: stepId,
98
+ actualStepId: stepId
99
+ });
100
+ }
101
+ //#endregion
102
+ export { createWorkflowDeterministicApi, recordWorkflowDeterministicValue };
@@ -0,0 +1,10 @@
1
+ import { EventRecord } from "../types/events.mjs";
2
+ import { WorkflowExecutionEnvironment } from "../types/engine.mjs";
3
+ //#region src/engine/durable-command.d.ts
4
+ type WorkflowDurableStepStartedEvent = Extract<EventRecord, {
5
+ readonly kind: "step_started" | "sleep_started" | "child_workflow_started" | "message_send_started" | "message_wait_started" | "stream_started";
6
+ }>;
7
+ declare function appendDurableStepStartedEvent(environment: WorkflowExecutionEnvironment, event: WorkflowDurableStepStartedEvent): Promise<void>;
8
+ declare function appendDurableStepTerminalEvent(environment: WorkflowExecutionEnvironment, event: EventRecord): Promise<void>;
9
+ //#endregion
10
+ export { appendDurableStepStartedEvent, appendDurableStepTerminalEvent };
@@ -0,0 +1,17 @@
1
+ import { enforceStepAttemptBudget } from "./retry.mjs";
2
+ import { appendEventIfCurrentExecution } from "./state.mjs";
3
+ //#region src/engine/durable-command.ts
4
+ async function appendDurableStepStartedEvent(environment, event) {
5
+ await appendDurableStepEvent(environment, event, { enforceAttemptBudget: true });
6
+ }
7
+ async function appendDurableStepTerminalEvent(environment, event) {
8
+ await appendDurableStepEvent(environment, event);
9
+ }
10
+ async function appendDurableStepEvent(environment, event, options = {}) {
11
+ const { store, runId, history, executionOwner, limits } = environment;
12
+ await appendEventIfCurrentExecution(store, history, event, executionOwner, limits, options.enforceAttemptBudget === true ? () => {
13
+ enforceStepAttemptBudget(runId, history, environment.maximumStepAttemptsPerRun);
14
+ } : void 0, (appendedEvent, events) => environment.observeDurableEventAppended?.(runId, appendedEvent, events));
15
+ }
16
+ //#endregion
17
+ export { appendDurableStepStartedEvent, appendDurableStepTerminalEvent };