@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,67 @@
1
+ import { makeWorkflowRunStepAttemptKey } from "../../utility.mjs";
2
+ import { optionalProperty, sortedStringSet } from "../../collection.mjs";
3
+ import { earliestOptionalTimestamp, shouldReplaceWorkflowEarliestDefinedInstant } from "../../temporal.mjs";
4
+ import { summarizeChildWorkflowRuns } from "./child-workflow-runs.mjs";
5
+ //#region src/engine/summary/child-workflow-waits.ts
6
+ /** Creates a reducer for active child workflow waits across workflow runs. */
7
+ function createWorkflowRunChildWorkflowWaitSummaryReducer() {
8
+ const waits = createWorkflowRunChildWorkflowWaitAccumulator();
9
+ return {
10
+ addChildWorkflowAttempts(runId, attempts, childRuns) {
11
+ for (const attempt of attempts) addWorkflowRunChildWorkflowWaitAttempt(waits, runId, attempt);
12
+ for (const childRun of childRuns) waits.childRunRecords.set(childRun.id, childRun);
13
+ },
14
+ finish() {
15
+ return finishWorkflowRunChildWorkflowWaitSummary(waits);
16
+ }
17
+ };
18
+ }
19
+ function createWorkflowRunChildWorkflowWaitAccumulator() {
20
+ return {
21
+ total: 0,
22
+ attemptKeys: /* @__PURE__ */ new Set(),
23
+ childRunIds: /* @__PURE__ */ new Set(),
24
+ childRunRecords: /* @__PURE__ */ new Map(),
25
+ runIds: /* @__PURE__ */ new Set(),
26
+ stepIds: /* @__PURE__ */ new Set(),
27
+ workflows: /* @__PURE__ */ new Set()
28
+ };
29
+ }
30
+ function addWorkflowRunChildWorkflowWaitAttempt(waits, runId, attempt) {
31
+ const attemptKey = makeWorkflowRunStepAttemptKey(runId, attempt);
32
+ waits.total++;
33
+ waits.runIds.add(runId);
34
+ waits.stepIds.add(attempt.stepId);
35
+ waits.attemptKeys.add(attemptKey);
36
+ waits.oldestStartedAt = earliestOptionalTimestamp(waits.oldestStartedAt, attempt.startedAt);
37
+ if (shouldReplaceWorkflowEarliestDefinedInstant(waits.nextTimeoutAt, attempt.timeoutAt)) setWorkflowRunChildWorkflowWaitNextTimeout(waits, runId, attempt, attemptKey);
38
+ if (attempt.childRunId !== void 0) waits.childRunIds.add(attempt.childRunId);
39
+ if (attempt.workflowName !== void 0) waits.workflows.add(attempt.workflowVersion === void 0 ? attempt.workflowName : `${attempt.workflowName}@${attempt.workflowVersion}`);
40
+ }
41
+ function setWorkflowRunChildWorkflowWaitNextTimeout(waits, runId, attempt, attemptKey) {
42
+ waits.nextTimeoutAt = attempt.timeoutAt;
43
+ waits.nextTimeoutRunId = runId;
44
+ waits.nextTimeoutStepId = attempt.stepId;
45
+ waits.nextTimeoutAttemptKey = attemptKey;
46
+ }
47
+ function finishWorkflowRunChildWorkflowWaitSummary(waits) {
48
+ return waits.total === 0 ? {} : { childWorkflow: {
49
+ activeWaits: waits.total,
50
+ activeWaitRuns: waits.runIds.size,
51
+ waitRunIds: sortedStringSet(waits.runIds),
52
+ waitStepIds: sortedStringSet(waits.stepIds),
53
+ waitAttemptKeys: sortedStringSet(waits.attemptKeys),
54
+ childRunIds: sortedStringSet(waits.childRunIds),
55
+ workflows: sortedStringSet(waits.workflows),
56
+ ...summarizeChildWorkflowRuns([...waits.childRunRecords.values()]),
57
+ ...optionalProperty("oldestWaitStartedAt", waits.oldestStartedAt),
58
+ ...waits.nextTimeoutAt === void 0 ? {} : {
59
+ nextWaitTimeoutAt: waits.nextTimeoutAt,
60
+ ...optionalProperty("nextWaitTimeoutRunId", waits.nextTimeoutRunId),
61
+ ...optionalProperty("nextWaitTimeoutStepId", waits.nextTimeoutStepId),
62
+ ...optionalProperty("nextWaitTimeoutAttemptKey", waits.nextTimeoutAttemptKey)
63
+ }
64
+ } };
65
+ }
66
+ //#endregion
67
+ export { createWorkflowRunChildWorkflowWaitSummaryReducer };
@@ -0,0 +1,11 @@
1
+ import { WorkflowRecoveryChildWorkflowWaitSummary } from "../../types/summary.mjs";
2
+ import { WorkflowStepAttemptRecord } from "../../types/step-attempts.mjs";
3
+ import { WorkflowRunRecord } from "../../types/run.mjs";
4
+ //#region src/engine/summary/recovery-child-workflow-waits.d.ts
5
+ interface WorkflowRecoveryChildWorkflowWaitSummaryReducer {
6
+ addAttempts(attempts: readonly WorkflowStepAttemptRecord[]): void;
7
+ finish(): WorkflowRecoveryChildWorkflowWaitSummary;
8
+ }
9
+ declare function createWorkflowRecoveryChildWorkflowWaitSummaryReducer(childRuns: readonly WorkflowRunRecord[], now: Temporal.Instant): WorkflowRecoveryChildWorkflowWaitSummaryReducer;
10
+ //#endregion
11
+ export { WorkflowRecoveryChildWorkflowWaitSummaryReducer, createWorkflowRecoveryChildWorkflowWaitSummaryReducer };
@@ -0,0 +1,89 @@
1
+ import { earliestWorkflowRecoveryTimestamp } from "./recovery-run-timestamps.mjs";
2
+ //#region src/engine/summary/recovery-child-workflow-waits.ts
3
+ function createWorkflowRecoveryChildWorkflowWaitSummaryReducer(childRuns, now) {
4
+ const childWorkflow = createWorkflowChildWorkflowWaitAccumulator();
5
+ const childByRunId = new Map(childRuns.map((run) => [run.id, run]));
6
+ return {
7
+ addAttempts(attempts) {
8
+ for (const attempt of attempts) addWorkflowChildWorkflowWaitAttempt(childWorkflow, attempt, childByRunId, now);
9
+ },
10
+ finish() {
11
+ return finishWorkflowChildWorkflowWaitSummary(childWorkflow);
12
+ }
13
+ };
14
+ }
15
+ function createWorkflowChildWorkflowWaitAccumulator() {
16
+ return {
17
+ runIds: /* @__PURE__ */ new Set(),
18
+ terminalRunIds: /* @__PURE__ */ new Set(),
19
+ missingRunIds: /* @__PURE__ */ new Set(),
20
+ timedOutRunIds: /* @__PURE__ */ new Set(),
21
+ terminalStepIds: /* @__PURE__ */ new Set(),
22
+ missingStepIds: /* @__PURE__ */ new Set(),
23
+ timedOutStepIds: /* @__PURE__ */ new Set(),
24
+ childRunIds: /* @__PURE__ */ new Set(),
25
+ completedChildRunIds: /* @__PURE__ */ new Set(),
26
+ failedChildRunIds: /* @__PURE__ */ new Set(),
27
+ canceledChildRunIds: /* @__PURE__ */ new Set()
28
+ };
29
+ }
30
+ function addWorkflowChildWorkflowWaitAttempt(childWorkflow, attempt, childByRunId, now) {
31
+ if (attempt.status !== "running" || attempt.kind !== "workflow") return;
32
+ childWorkflow.runIds.add(attempt.runId);
33
+ if (!addResolvedWorkflowChildWorkflowWaitAttempt(childWorkflow, attempt, childByRunId)) addTimedOutWorkflowChildWorkflowWaitAttempt(childWorkflow, attempt, now);
34
+ }
35
+ function addResolvedWorkflowChildWorkflowWaitAttempt(childWorkflow, attempt, childByRunId) {
36
+ if (attempt.childRunId === void 0) {
37
+ addMissingWorkflowChildWorkflowWaitAttempt(childWorkflow, attempt);
38
+ return true;
39
+ }
40
+ childWorkflow.childRunIds.add(attempt.childRunId);
41
+ const child = childByRunId.get(attempt.childRunId);
42
+ if (child === void 0) {
43
+ addMissingWorkflowChildWorkflowWaitAttempt(childWorkflow, attempt);
44
+ return true;
45
+ }
46
+ if (child.status !== "completed" && child.status !== "failed" && child.status !== "canceled") return false;
47
+ childWorkflow.terminalRunIds.add(attempt.runId);
48
+ childWorkflow.terminalStepIds.add(attempt.stepId);
49
+ if (child.status === "completed") childWorkflow.completedChildRunIds.add(child.id);
50
+ else if (child.status === "failed") childWorkflow.failedChildRunIds.add(child.id);
51
+ else childWorkflow.canceledChildRunIds.add(child.id);
52
+ return true;
53
+ }
54
+ function addMissingWorkflowChildWorkflowWaitAttempt(childWorkflow, attempt) {
55
+ childWorkflow.missingRunIds.add(attempt.runId);
56
+ childWorkflow.missingStepIds.add(attempt.stepId);
57
+ }
58
+ function addTimedOutWorkflowChildWorkflowWaitAttempt(childWorkflow, attempt, now) {
59
+ if (attempt.timeoutAt === void 0) return;
60
+ if (Temporal.Instant.compare(attempt.timeoutAt, now) <= 0) {
61
+ childWorkflow.timedOutRunIds.add(attempt.runId);
62
+ childWorkflow.timedOutStepIds.add(attempt.stepId);
63
+ return;
64
+ }
65
+ childWorkflow.nextTimeout = earliestWorkflowRecoveryTimestamp(childWorkflow.nextTimeout, attempt.runId, attempt.timeoutAt);
66
+ }
67
+ function finishWorkflowChildWorkflowWaitSummary(childWorkflow) {
68
+ return {
69
+ active: childWorkflow.runIds.size,
70
+ terminal: childWorkflow.terminalRunIds.size,
71
+ missing: childWorkflow.missingRunIds.size,
72
+ timedOut: childWorkflow.timedOutRunIds.size,
73
+ runIds: [...childWorkflow.runIds].sort(),
74
+ terminalRunIds: [...childWorkflow.terminalRunIds].sort(),
75
+ missingRunIds: [...childWorkflow.missingRunIds].sort(),
76
+ timedOutRunIds: [...childWorkflow.timedOutRunIds].sort(),
77
+ terminalStepIds: [...childWorkflow.terminalStepIds].sort(),
78
+ missingStepIds: [...childWorkflow.missingStepIds].sort(),
79
+ timedOutStepIds: [...childWorkflow.timedOutStepIds].sort(),
80
+ childRunIds: [...childWorkflow.childRunIds].sort(),
81
+ completedChildRunIds: [...childWorkflow.completedChildRunIds].sort(),
82
+ failedChildRunIds: [...childWorkflow.failedChildRunIds].sort(),
83
+ canceledChildRunIds: [...childWorkflow.canceledChildRunIds].sort(),
84
+ ...childWorkflow.nextTimeout === void 0 ? {} : { nextTimeoutAt: childWorkflow.nextTimeout.timestamp },
85
+ ...childWorkflow.nextTimeout === void 0 ? {} : { nextTimeoutRunId: childWorkflow.nextTimeout.runId }
86
+ };
87
+ }
88
+ //#endregion
89
+ export { createWorkflowRecoveryChildWorkflowWaitSummaryReducer };
@@ -0,0 +1,16 @@
1
+ import { WorkflowRecoveryDueSummary } from "../../types/summary.mjs";
2
+ import { WorkflowRunRecord } from "../../types/run.mjs";
3
+ import { WorkflowRecoveryTimestamp } from "./recovery-run-timestamps.mjs";
4
+ //#region src/engine/summary/recovery-due-runs.d.ts
5
+ interface WorkflowRecoveryDueRunSummaryParts {
6
+ readonly due: WorkflowRecoveryDueSummary;
7
+ readonly dueRunIds: readonly string[];
8
+ readonly nextAvailable?: WorkflowRecoveryTimestamp;
9
+ }
10
+ interface WorkflowRecoveryDueRunSummaryReducer {
11
+ addRun(run: WorkflowRunRecord): void;
12
+ finish(): WorkflowRecoveryDueRunSummaryParts;
13
+ }
14
+ declare function createWorkflowRecoveryDueRunSummaryReducer(now: Temporal.Instant): WorkflowRecoveryDueRunSummaryReducer;
15
+ //#endregion
16
+ export { WorkflowRecoveryDueRunSummaryParts, WorkflowRecoveryDueRunSummaryReducer, createWorkflowRecoveryDueRunSummaryReducer };
@@ -0,0 +1,52 @@
1
+ import { isScheduledWorkflowRunStatus } from "../../utility.mjs";
2
+ import { earliestWorkflowRecoveryTimestamp, isWorkflowRecoveryRunDueAt } from "./recovery-run-timestamps.mjs";
3
+ //#region src/engine/summary/recovery-due-runs.ts
4
+ function createWorkflowRecoveryDueRunSummaryReducer(now) {
5
+ const due = createWorkflowRecoveryDueRunAccumulator();
6
+ return {
7
+ addRun(run) {
8
+ addWorkflowRecoveryDueRun(due, run, now);
9
+ },
10
+ finish() {
11
+ return {
12
+ due: finishWorkflowRecoveryDueSummary(due),
13
+ dueRunIds: [...due.runIds].sort(),
14
+ ...due.nextAvailable === void 0 ? {} : { nextAvailable: due.nextAvailable }
15
+ };
16
+ }
17
+ };
18
+ }
19
+ function createWorkflowRecoveryDueRunAccumulator() {
20
+ return {
21
+ runIds: /* @__PURE__ */ new Set(),
22
+ pendingRunIds: /* @__PURE__ */ new Set(),
23
+ waitingRunIds: /* @__PURE__ */ new Set(),
24
+ invalidScheduleRunIds: /* @__PURE__ */ new Set()
25
+ };
26
+ }
27
+ function addWorkflowRecoveryDueRun(due, run, now) {
28
+ if (!isScheduledWorkflowRunStatus(run.status)) return;
29
+ const availableAt = run.availableAt;
30
+ if (isWorkflowRecoveryRunDueAt(availableAt, now)) {
31
+ due.runIds.add(run.id);
32
+ if (run.status === "pending") due.pendingRunIds.add(run.id);
33
+ else due.waitingRunIds.add(run.id);
34
+ return;
35
+ }
36
+ if (availableAt !== void 0) due.nextAvailable = earliestWorkflowRecoveryTimestamp(due.nextAvailable, run.id, availableAt);
37
+ }
38
+ function finishWorkflowRecoveryDueSummary(due) {
39
+ return {
40
+ total: due.runIds.size,
41
+ runIds: [...due.runIds].sort(),
42
+ pendingRunIds: [...due.pendingRunIds].sort(),
43
+ waitingRunIds: [...due.waitingRunIds].sort(),
44
+ invalidScheduleRunIds: [...due.invalidScheduleRunIds].sort(),
45
+ ...due.nextAvailable === void 0 ? {} : {
46
+ nextAvailableAt: due.nextAvailable.timestamp,
47
+ nextAvailableRunId: due.nextAvailable.runId
48
+ }
49
+ };
50
+ }
51
+ //#endregion
52
+ export { createWorkflowRecoveryDueRunSummaryReducer };
@@ -0,0 +1,14 @@
1
+ import { WorkflowRecoveryFailedSummary } from "../../types/summary.mjs";
2
+ import { WorkflowRunRecord } from "../../types/run.mjs";
3
+ //#region src/engine/summary/recovery-failed-runs.d.ts
4
+ interface WorkflowRecoveryFailedRunSummaryParts {
5
+ readonly failed: WorkflowRecoveryFailedSummary;
6
+ readonly failedRunIds: readonly string[];
7
+ }
8
+ interface WorkflowRecoveryFailedRunSummaryReducer {
9
+ addRun(run: WorkflowRunRecord): void;
10
+ finish(): WorkflowRecoveryFailedRunSummaryParts;
11
+ }
12
+ declare function createWorkflowRecoveryFailedRunSummaryReducer(): WorkflowRecoveryFailedRunSummaryReducer;
13
+ //#endregion
14
+ export { WorkflowRecoveryFailedRunSummaryParts, WorkflowRecoveryFailedRunSummaryReducer, createWorkflowRecoveryFailedRunSummaryReducer };
@@ -0,0 +1,33 @@
1
+ import { latestOptionalWorkflowRecoveryInstant } from "./recovery-run-timestamps.mjs";
2
+ //#region src/engine/summary/recovery-failed-runs.ts
3
+ function createWorkflowRecoveryFailedRunSummaryReducer() {
4
+ const failed = createWorkflowRecoveryFailedRunAccumulator();
5
+ return {
6
+ addRun(run) {
7
+ addWorkflowRecoveryFailedRun(failed, run);
8
+ },
9
+ finish() {
10
+ return {
11
+ failed: finishWorkflowRecoveryFailedSummary(failed),
12
+ failedRunIds: [...failed.runIds].sort()
13
+ };
14
+ }
15
+ };
16
+ }
17
+ function createWorkflowRecoveryFailedRunAccumulator() {
18
+ return { runIds: /* @__PURE__ */ new Set() };
19
+ }
20
+ function addWorkflowRecoveryFailedRun(failed, run) {
21
+ if (run.status !== "failed") return;
22
+ failed.runIds.add(run.id);
23
+ failed.latestFailedAt = latestOptionalWorkflowRecoveryInstant(failed.latestFailedAt, run.finishedAt);
24
+ }
25
+ function finishWorkflowRecoveryFailedSummary(failed) {
26
+ return {
27
+ total: failed.runIds.size,
28
+ runIds: [...failed.runIds].sort(),
29
+ ...failed.latestFailedAt === void 0 ? {} : { latestFailedAt: failed.latestFailedAt }
30
+ };
31
+ }
32
+ //#endregion
33
+ export { createWorkflowRecoveryFailedRunSummaryReducer };
@@ -0,0 +1,16 @@
1
+ import { WorkflowRecoveryLeaseSummary } from "../../types/summary.mjs";
2
+ import { WorkflowRunRecord } from "../../types/run.mjs";
3
+ import { WorkflowRecoveryTimestamp } from "./recovery-run-timestamps.mjs";
4
+ //#region src/engine/summary/recovery-lease-runs.d.ts
5
+ interface WorkflowRecoveryLeaseRunSummaryParts {
6
+ readonly lease: WorkflowRecoveryLeaseSummary;
7
+ readonly staleRunIds: readonly string[];
8
+ readonly nextLeaseExpires?: WorkflowRecoveryTimestamp;
9
+ }
10
+ interface WorkflowRecoveryLeaseRunSummaryReducer {
11
+ addRun(run: WorkflowRunRecord): void;
12
+ finish(): WorkflowRecoveryLeaseRunSummaryParts;
13
+ }
14
+ declare function createWorkflowRecoveryLeaseRunSummaryReducer(now: Temporal.Instant): WorkflowRecoveryLeaseRunSummaryReducer;
15
+ //#endregion
16
+ export { WorkflowRecoveryLeaseRunSummaryParts, WorkflowRecoveryLeaseRunSummaryReducer, createWorkflowRecoveryLeaseRunSummaryReducer };
@@ -0,0 +1,69 @@
1
+ import { earliestWorkflowRecoveryInstant, earliestWorkflowRecoveryTimestamp } from "./recovery-run-timestamps.mjs";
2
+ //#region src/engine/summary/recovery-lease-runs.ts
3
+ function createWorkflowRecoveryLeaseRunSummaryReducer(now) {
4
+ const lease = createWorkflowRecoveryLeaseRunAccumulator();
5
+ return {
6
+ addRun(run) {
7
+ addWorkflowRecoveryLeaseRun(lease, run, now);
8
+ },
9
+ finish() {
10
+ return {
11
+ lease: finishWorkflowRecoveryLeaseSummary(lease),
12
+ staleRunIds: [...lease.staleRunIds].sort(),
13
+ ...lease.nextExpires === void 0 ? {} : { nextLeaseExpires: lease.nextExpires }
14
+ };
15
+ }
16
+ };
17
+ }
18
+ function createWorkflowRecoveryLeaseRunAccumulator() {
19
+ return {
20
+ runIds: /* @__PURE__ */ new Set(),
21
+ staleRunIds: /* @__PURE__ */ new Set(),
22
+ ownerlessRunIds: /* @__PURE__ */ new Set(),
23
+ missingExpiresAtRunIds: /* @__PURE__ */ new Set(),
24
+ invalidExpiresAtRunIds: /* @__PURE__ */ new Set(),
25
+ expiredRunIds: /* @__PURE__ */ new Set(),
26
+ workerIds: /* @__PURE__ */ new Set()
27
+ };
28
+ }
29
+ function addWorkflowRecoveryLeaseRun(lease, run, now) {
30
+ if (run.status !== "running") return;
31
+ lease.runIds.add(run.id);
32
+ if (run.workerId !== void 0) lease.workerIds.add(run.workerId);
33
+ else {
34
+ lease.staleRunIds.add(run.id);
35
+ lease.ownerlessRunIds.add(run.id);
36
+ }
37
+ if (run.leaseExpiresAt === void 0) {
38
+ lease.staleRunIds.add(run.id);
39
+ lease.missingExpiresAtRunIds.add(run.id);
40
+ return;
41
+ }
42
+ if (Temporal.Instant.compare(run.leaseExpiresAt, now) <= 0) {
43
+ lease.staleRunIds.add(run.id);
44
+ lease.expiredRunIds.add(run.id);
45
+ lease.oldestStaleAt = earliestWorkflowRecoveryInstant(lease.oldestStaleAt, run.leaseExpiresAt);
46
+ return;
47
+ }
48
+ if (run.workerId !== void 0) lease.nextExpires = earliestWorkflowRecoveryTimestamp(lease.nextExpires, run.id, run.leaseExpiresAt);
49
+ }
50
+ function finishWorkflowRecoveryLeaseSummary(lease) {
51
+ return {
52
+ total: lease.runIds.size,
53
+ stale: lease.staleRunIds.size,
54
+ runIds: [...lease.runIds].sort(),
55
+ staleRunIds: [...lease.staleRunIds].sort(),
56
+ ownerlessRunIds: [...lease.ownerlessRunIds].sort(),
57
+ missingExpiresAtRunIds: [...lease.missingExpiresAtRunIds].sort(),
58
+ invalidExpiresAtRunIds: [...lease.invalidExpiresAtRunIds].sort(),
59
+ expiredRunIds: [...lease.expiredRunIds].sort(),
60
+ workerIds: [...lease.workerIds].sort(),
61
+ ...lease.nextExpires === void 0 ? {} : {
62
+ nextExpiresAt: lease.nextExpires.timestamp,
63
+ nextExpiringRunId: lease.nextExpires.runId
64
+ },
65
+ ...lease.oldestStaleAt === void 0 ? {} : { oldestStaleAt: lease.oldestStaleAt }
66
+ };
67
+ }
68
+ //#endregion
69
+ export { createWorkflowRecoveryLeaseRunSummaryReducer };
@@ -0,0 +1,18 @@
1
+ import { LockRecord } from "../../types/lock.mjs";
2
+ import { WorkflowRecoveryLockSummary } from "../../types/summary.mjs";
3
+ import { WorkflowStepAttemptRecord } from "../../types/step-attempts.mjs";
4
+ import { WorkflowRunRecord } from "../../types/run.mjs";
5
+ //#region src/engine/summary/recovery-locks.d.ts
6
+ interface WorkflowRecoveryLockWaitDetails {
7
+ readonly key: string;
8
+ readonly waitDeadlineAt?: Temporal.Instant;
9
+ }
10
+ interface WorkflowRecoveryLockSummaryReducer {
11
+ addLock(lock: LockRecord): void;
12
+ addLockWaitAttempt(attempt: WorkflowStepAttemptRecord): void;
13
+ finish(): WorkflowRecoveryLockSummary;
14
+ }
15
+ declare function createWorkflowRecoveryLockSummaryReducer(runs: readonly WorkflowRunRecord[], now: Temporal.Instant): WorkflowRecoveryLockSummaryReducer;
16
+ declare function workflowRecoveryLockWaitDetails(attempt: WorkflowStepAttemptRecord): WorkflowRecoveryLockWaitDetails | undefined;
17
+ //#endregion
18
+ export { WorkflowRecoveryLockSummaryReducer, WorkflowRecoveryLockWaitDetails, createWorkflowRecoveryLockSummaryReducer, workflowRecoveryLockWaitDetails };
@@ -0,0 +1,100 @@
1
+ import { WorkflowRetryableError } from "../../errors/failures.mjs";
2
+ import "../../errors/mod.mjs";
3
+ import { earliestWorkflowRecoveryInstant, earliestWorkflowRecoveryTimestamp } from "./recovery-run-timestamps.mjs";
4
+ //#region src/engine/summary/recovery-locks.ts
5
+ function createWorkflowRecoveryLockSummaryReducer(runs, now) {
6
+ const locks = createWorkflowRecoveryLockAccumulator();
7
+ const runById = new Map(runs.map((run) => [run.id, run]));
8
+ return {
9
+ addLock(lock) {
10
+ addWorkflowRecoveryLock(locks, lock, now);
11
+ },
12
+ addLockWaitAttempt(attempt) {
13
+ addWorkflowRecoveryLockWaitAttempt(locks, attempt, runById, now);
14
+ },
15
+ finish() {
16
+ return finishWorkflowRecoveryLockSummary(locks);
17
+ }
18
+ };
19
+ }
20
+ function createWorkflowRecoveryLockAccumulator() {
21
+ return {
22
+ dueWaitingRunIds: /* @__PURE__ */ new Set(),
23
+ holderIds: /* @__PURE__ */ new Set(),
24
+ keys: /* @__PURE__ */ new Set(),
25
+ staleKeys: /* @__PURE__ */ new Set(),
26
+ waitingKeys: /* @__PURE__ */ new Set(),
27
+ waitingRunIds: /* @__PURE__ */ new Set(),
28
+ waitingStepIds: /* @__PURE__ */ new Set()
29
+ };
30
+ }
31
+ function addWorkflowRecoveryLock(locks, lock, now) {
32
+ if (lock.releasedAt !== void 0) return;
33
+ locks.keys.add(lock.key);
34
+ if (lock.holderId !== void 0) locks.holderIds.add(lock.holderId);
35
+ if (Temporal.Instant.compare(lock.leaseExpiresAt, now) <= 0) {
36
+ locks.staleKeys.add(lock.key);
37
+ locks.oldestStaleAt = earliestWorkflowRecoveryInstant(locks.oldestStaleAt, lock.leaseExpiresAt);
38
+ return;
39
+ }
40
+ locks.nextExpires = earliestWorkflowRecoveryLockExpiration(locks.nextExpires, lock.key, lock.leaseExpiresAt);
41
+ }
42
+ function addWorkflowRecoveryLockWaitAttempt(locks, attempt, runById, now) {
43
+ const details = workflowRecoveryLockWaitDetails(attempt);
44
+ if (details === void 0) return;
45
+ const run = runById.get(attempt.runId);
46
+ if (run === void 0 || run.status !== "waiting" || run.retryReason !== "step") return;
47
+ locks.waitingRunIds.add(attempt.runId);
48
+ locks.waitingStepIds.add(attempt.stepId);
49
+ locks.waitingKeys.add(details.key);
50
+ if (run.retryAt === void 0 || Temporal.Instant.compare(run.retryAt, now) <= 0) locks.dueWaitingRunIds.add(attempt.runId);
51
+ if (details.waitDeadlineAt !== void 0 && Temporal.Instant.compare(details.waitDeadlineAt, now) > 0) locks.nextWaitDeadline = earliestWorkflowRecoveryTimestamp(locks.nextWaitDeadline, attempt.runId, details.waitDeadlineAt);
52
+ }
53
+ function finishWorkflowRecoveryLockSummary(locks) {
54
+ return {
55
+ total: locks.keys.size,
56
+ stale: locks.staleKeys.size,
57
+ keys: [...locks.keys].sort(),
58
+ staleKeys: [...locks.staleKeys].sort(),
59
+ holderIds: [...locks.holderIds].sort(),
60
+ waitingRunIds: [...locks.waitingRunIds].sort(),
61
+ dueWaitingRunIds: [...locks.dueWaitingRunIds].sort(),
62
+ waitingStepIds: [...locks.waitingStepIds].sort(),
63
+ waitingKeys: [...locks.waitingKeys].sort(),
64
+ ...locks.nextExpires === void 0 ? {} : {
65
+ nextExpiresAt: locks.nextExpires.timestamp,
66
+ nextExpiringKey: locks.nextExpires.key
67
+ },
68
+ ...locks.oldestStaleAt === void 0 ? {} : { oldestStaleAt: locks.oldestStaleAt },
69
+ ...locks.nextWaitDeadline === void 0 ? {} : {
70
+ nextWaitDeadlineAt: locks.nextWaitDeadline.timestamp,
71
+ nextWaitDeadlineRunId: locks.nextWaitDeadline.runId
72
+ }
73
+ };
74
+ }
75
+ function workflowRecoveryLockWaitDetails(attempt) {
76
+ const error = attempt.error;
77
+ if (!(attempt.status === "failed" && attempt.kind === "run" && error !== void 0 && WorkflowRetryableError.isLockAlreadyHeld(error) && typeof error.details?.key === "string" && error.details.key.trim() !== "")) return;
78
+ const waitDeadlineAt = workflowLockWaitDeadline(attempt);
79
+ return {
80
+ key: error.details.key,
81
+ ...waitDeadlineAt === void 0 ? {} : { waitDeadlineAt }
82
+ };
83
+ }
84
+ function workflowLockWaitDeadline(attempt) {
85
+ const deadline = attempt.error?.details?.waitDeadlineAt;
86
+ if (!(typeof deadline === "string" && deadline.trim() !== "")) return;
87
+ try {
88
+ return Temporal.Instant.from(deadline);
89
+ } catch {
90
+ return;
91
+ }
92
+ }
93
+ function earliestWorkflowRecoveryLockExpiration(current, key, timestamp) {
94
+ return current === void 0 || Temporal.Instant.compare(timestamp, current.timestamp) < 0 ? {
95
+ key,
96
+ timestamp
97
+ } : current;
98
+ }
99
+ //#endregion
100
+ export { createWorkflowRecoveryLockSummaryReducer, workflowRecoveryLockWaitDetails };
@@ -0,0 +1,11 @@
1
+ import { WorkflowRecoveryMessageWaitSummary } from "../../types/summary.mjs";
2
+ import { WorkflowStepAttemptRecord } from "../../types/step-attempts.mjs";
3
+ import { EventRecord } from "../../types/events.mjs";
4
+ //#region src/engine/summary/recovery-message-waits.d.ts
5
+ interface WorkflowRecoveryMessageWaitSummaryReducer {
6
+ addAttempts(attempts: readonly WorkflowStepAttemptRecord[]): void;
7
+ finish(): WorkflowRecoveryMessageWaitSummary;
8
+ }
9
+ declare function createWorkflowRecoveryMessageWaitSummaryReducer(eventsByRunId: ReadonlyMap<string, readonly EventRecord[]>, now: Temporal.Instant): WorkflowRecoveryMessageWaitSummaryReducer;
10
+ //#endregion
11
+ export { WorkflowRecoveryMessageWaitSummaryReducer, createWorkflowRecoveryMessageWaitSummaryReducer };
@@ -0,0 +1,74 @@
1
+ import { WorkflowHistory } from "../../history/mod.mjs";
2
+ import { earliestWorkflowRecoveryTimestamp } from "./recovery-run-timestamps.mjs";
3
+ //#region src/engine/summary/recovery-message-waits.ts
4
+ function createWorkflowRecoveryMessageWaitSummaryReducer(eventsByRunId, now) {
5
+ const message = createMessageWaitAccumulator();
6
+ const historiesByRunId = workflowHistoriesByRunId(eventsByRunId);
7
+ return {
8
+ addAttempts(attempts) {
9
+ for (const attempt of attempts) addMessageWaitAttempt(message, attempt, historiesByRunId, now);
10
+ },
11
+ finish() {
12
+ return finishMessageWaitSummary(message);
13
+ }
14
+ };
15
+ }
16
+ function createMessageWaitAccumulator() {
17
+ return {
18
+ runIds: /* @__PURE__ */ new Set(),
19
+ readyRunIds: /* @__PURE__ */ new Set(),
20
+ timedOutRunIds: /* @__PURE__ */ new Set(),
21
+ readyStepIds: /* @__PURE__ */ new Set(),
22
+ timedOutStepIds: /* @__PURE__ */ new Set(),
23
+ messageIds: /* @__PURE__ */ new Set()
24
+ };
25
+ }
26
+ function addMessageWaitAttempt(message, attempt, historiesByRunId, now) {
27
+ if (attempt.status !== "running" || attempt.kind !== "message-wait") return;
28
+ message.runIds.add(attempt.runId);
29
+ if (!addReadyMessageWaitAttempt(message, attempt, historiesByRunId)) addTimedOutMessageWaitAttempt(message, attempt, now);
30
+ }
31
+ function addReadyMessageWaitAttempt(message, attempt, historiesByRunId) {
32
+ if (attempt.messageId === void 0) return false;
33
+ message.messageIds.add(attempt.messageId);
34
+ if (!messageWasDeliveredForAttempt(historiesByRunId.get(attempt.runId), attempt)) return false;
35
+ message.readyRunIds.add(attempt.runId);
36
+ message.readyStepIds.add(attempt.stepId);
37
+ return true;
38
+ }
39
+ function messageWasDeliveredForAttempt(history, attempt) {
40
+ return history !== void 0 && attempt.messageId !== void 0 && history.messageForWait(attempt.messageId, attempt.stepId, attempt.timeoutAt) !== void 0;
41
+ }
42
+ function addTimedOutMessageWaitAttempt(message, attempt, now) {
43
+ if (attempt.timeoutAt === void 0) return;
44
+ if (Temporal.Instant.compare(attempt.timeoutAt, now) <= 0) {
45
+ message.timedOutRunIds.add(attempt.runId);
46
+ message.timedOutStepIds.add(attempt.stepId);
47
+ return;
48
+ }
49
+ message.nextTimeout = earliestWorkflowRecoveryTimestamp(message.nextTimeout, attempt.runId, attempt.timeoutAt);
50
+ }
51
+ function workflowHistoriesByRunId(eventsByRunId) {
52
+ const histories = /* @__PURE__ */ new Map();
53
+ for (const [runId, events] of eventsByRunId) histories.set(runId, new WorkflowHistory(events));
54
+ return histories;
55
+ }
56
+ function finishMessageWaitSummary(message) {
57
+ return {
58
+ active: message.runIds.size,
59
+ ready: message.readyRunIds.size,
60
+ timedOut: message.timedOutRunIds.size,
61
+ runIds: [...message.runIds].sort(),
62
+ readyRunIds: [...message.readyRunIds].sort(),
63
+ timedOutRunIds: [...message.timedOutRunIds].sort(),
64
+ readyStepIds: [...message.readyStepIds].sort(),
65
+ timedOutStepIds: [...message.timedOutStepIds].sort(),
66
+ messages: [...message.messageIds].sort(),
67
+ ...message.nextTimeout === void 0 ? {} : {
68
+ nextTimeoutAt: message.nextTimeout.timestamp,
69
+ nextTimeoutRunId: message.nextTimeout.runId
70
+ }
71
+ };
72
+ }
73
+ //#endregion
74
+ export { createWorkflowRecoveryMessageWaitSummaryReducer };
@@ -0,0 +1,17 @@
1
+ import { WorkflowRecoveryMissingImplementationSummary, WorkflowRecoveryRetrySummary } from "../../types/summary.mjs";
2
+ import { WorkflowRunRecord } from "../../types/run.mjs";
3
+ import { WorkflowRecoveryTimestamp } from "./recovery-run-timestamps.mjs";
4
+ //#region src/engine/summary/recovery-retry-runs.d.ts
5
+ interface WorkflowRecoveryRetryRunSummaryParts {
6
+ readonly retry: WorkflowRecoveryRetrySummary;
7
+ readonly missingImplementation: WorkflowRecoveryMissingImplementationSummary;
8
+ readonly dueRetryRunIds: readonly string[];
9
+ readonly nextRetry?: WorkflowRecoveryTimestamp;
10
+ }
11
+ interface WorkflowRecoveryRetryRunSummaryReducer {
12
+ addRun(run: WorkflowRunRecord): void;
13
+ finish(): WorkflowRecoveryRetryRunSummaryParts;
14
+ }
15
+ declare function createWorkflowRecoveryRetryRunSummaryReducer(now: Temporal.Instant): WorkflowRecoveryRetryRunSummaryReducer;
16
+ //#endregion
17
+ export { WorkflowRecoveryRetryRunSummaryParts, WorkflowRecoveryRetryRunSummaryReducer, createWorkflowRecoveryRetryRunSummaryReducer };
@@ -0,0 +1,65 @@
1
+ import { isScheduledWorkflowRunStatus } from "../../utility.mjs";
2
+ import { earliestWorkflowRecoveryTimestamp, isWorkflowRecoveryRunDueAt } from "./recovery-run-timestamps.mjs";
3
+ //#region src/engine/summary/recovery-retry-runs.ts
4
+ function createWorkflowRecoveryRetryRunSummaryReducer(now) {
5
+ const retry = createWorkflowRecoveryRetryRunAccumulator();
6
+ return {
7
+ addRun(run) {
8
+ addWorkflowRecoveryRetryRun(retry, run, now);
9
+ },
10
+ finish() {
11
+ return {
12
+ retry: finishWorkflowRecoveryRetrySummary(retry),
13
+ missingImplementation: finishWorkflowRecoveryMissingImplementationSummary(retry),
14
+ dueRetryRunIds: [...retry.dueRunIds].sort(),
15
+ ...retry.next === void 0 ? {} : { nextRetry: retry.next }
16
+ };
17
+ }
18
+ };
19
+ }
20
+ function createWorkflowRecoveryRetryRunAccumulator() {
21
+ return {
22
+ runIds: /* @__PURE__ */ new Set(),
23
+ dueRunIds: /* @__PURE__ */ new Set(),
24
+ missingImplementationRunIds: /* @__PURE__ */ new Set(),
25
+ dueMissingImplementationRunIds: /* @__PURE__ */ new Set()
26
+ };
27
+ }
28
+ function addWorkflowRecoveryRetryRun(retry, run, now) {
29
+ if (!isScheduledWorkflowRunStatus(run.status) || run.retryReason === void 0) return;
30
+ retry.runIds.add(run.id);
31
+ const retryAt = run.retryAt;
32
+ const due = isWorkflowRecoveryRunDueAt(retryAt, now);
33
+ if (due) retry.dueRunIds.add(run.id);
34
+ else if (retryAt !== void 0) retry.next = earliestWorkflowRecoveryTimestamp(retry.next, run.id, retryAt);
35
+ if (run.retryReason !== "missing_implementation") return;
36
+ retry.missingImplementationRunIds.add(run.id);
37
+ if (due) retry.dueMissingImplementationRunIds.add(run.id);
38
+ else if (retryAt !== void 0) retry.nextMissingImplementation = earliestWorkflowRecoveryTimestamp(retry.nextMissingImplementation, run.id, retryAt);
39
+ }
40
+ function finishWorkflowRecoveryRetrySummary(retry) {
41
+ return {
42
+ total: retry.runIds.size,
43
+ due: retry.dueRunIds.size,
44
+ runIds: [...retry.runIds].sort(),
45
+ dueRunIds: [...retry.dueRunIds].sort(),
46
+ ...retry.next === void 0 ? {} : {
47
+ nextRetryAt: retry.next.timestamp,
48
+ nextRetryRunId: retry.next.runId
49
+ }
50
+ };
51
+ }
52
+ function finishWorkflowRecoveryMissingImplementationSummary(retry) {
53
+ return {
54
+ total: retry.missingImplementationRunIds.size,
55
+ due: retry.dueMissingImplementationRunIds.size,
56
+ runIds: [...retry.missingImplementationRunIds].sort(),
57
+ dueRunIds: [...retry.dueMissingImplementationRunIds].sort(),
58
+ ...retry.nextMissingImplementation === void 0 ? {} : {
59
+ nextRetryAt: retry.nextMissingImplementation.timestamp,
60
+ nextRetryRunId: retry.nextMissingImplementation.runId
61
+ }
62
+ };
63
+ }
64
+ //#endregion
65
+ export { createWorkflowRecoveryRetryRunSummaryReducer };