@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
package/dist/otel.mjs ADDED
@@ -0,0 +1,588 @@
1
+ import { optionalDurationBetweenMilliseconds } from "./temporal.mjs";
2
+ import { WORKFLOW_ATTRIBUTES, WORKFLOW_INSTRUMENTATION_NAME, WORKFLOW_INSTRUMENTATION_VERSION, WORKFLOW_MESSAGING_ATTRIBUTES, WORKFLOW_METRIC_NAMES, WORKFLOW_SPAN_NAMES, WORKFLOW_SYSTEM } from "./telemetry.mjs";
3
+ import { getEventDescriptor } from "./events/descriptors.mjs";
4
+ import { WorkflowHistory } from "./history/mod.mjs";
5
+ import { contextFromTraceContext, errorRecordToException, spanLinkFromTraceContext, streamStatusFromEventKind, toException, withRunSpanStatus, withSpanStatus } from "./otel/support.mjs";
6
+ import { SpanStatusCode, context, metrics, propagation, trace } from "@opentelemetry/api";
7
+ //#region src/otel.ts
8
+ function createOpenTelemetryTelemetry(options = {}) {
9
+ return new OpenTelemetryWorkflowTelemetry(options);
10
+ }
11
+ var OpenTelemetryWorkflowTelemetry = class {
12
+ #tracer = trace.getTracer(WORKFLOW_INSTRUMENTATION_NAME, WORKFLOW_INSTRUMENTATION_VERSION);
13
+ #meter = metrics.getMeter(WORKFLOW_INSTRUMENTATION_NAME, WORKFLOW_INSTRUMENTATION_VERSION);
14
+ #options;
15
+ #runTransitions = this.#meter.createCounter(WORKFLOW_METRIC_NAMES.runTransitions, { description: "Count of workflow run transitions." });
16
+ #runDuration = this.#meter.createHistogram(WORKFLOW_METRIC_NAMES.runDuration, {
17
+ description: "Workflow run duration in milliseconds.",
18
+ unit: "ms"
19
+ });
20
+ #eventsAppended = this.#meter.createCounter(WORKFLOW_METRIC_NAMES.eventsAppended, { description: "Count of durable workflow events appended." });
21
+ #stepAttempts = this.#meter.createCounter(WORKFLOW_METRIC_NAMES.stepAttempts, { description: "Count of workflow step attempt updates." });
22
+ #stepDuration = this.#meter.createHistogram(WORKFLOW_METRIC_NAMES.stepDuration, {
23
+ description: "Workflow step attempt duration in milliseconds.",
24
+ unit: "ms"
25
+ });
26
+ #messagesSent = this.#meter.createCounter(WORKFLOW_METRIC_NAMES.messagesSent, { description: "Count of workflow messages sent." });
27
+ #messageWaitLatency = this.#meter.createHistogram(WORKFLOW_METRIC_NAMES.messageWaitLatency, {
28
+ description: "Latency from workflow message wait creation to message receipt.",
29
+ unit: "ms"
30
+ });
31
+ #hooksResumed = this.#meter.createCounter(WORKFLOW_METRIC_NAMES.hooksResumed, { description: "Count of workflow hooks resumed." });
32
+ #hookResumeLatency = this.#meter.createHistogram(WORKFLOW_METRIC_NAMES.hookResumeLatency, {
33
+ description: "Latency from workflow hook wait creation to hook resume message receipt.",
34
+ unit: "ms"
35
+ });
36
+ #streamUpdates = this.#meter.createCounter(WORKFLOW_METRIC_NAMES.streamUpdates, { description: "Count of workflow stream updates." });
37
+ #cleanupDeletedRuns = this.#meter.createCounter(WORKFLOW_METRIC_NAMES.cleanupDeletedRuns, { description: "Count of workflow runs deleted by cleanup or retention operations." });
38
+ #runGauge;
39
+ #workerActiveExecutionsGauge;
40
+ #workerClaims = this.#meter.createCounter(WORKFLOW_METRIC_NAMES.workerClaims, { description: "Count of workflow run claims by workers." });
41
+ #workerClaimFailures = this.#meter.createCounter(WORKFLOW_METRIC_NAMES.workerClaimFailures, { description: "Count of failed targeted workflow run claims by workers." });
42
+ #workerHeartbeatFailures = this.#meter.createCounter(WORKFLOW_METRIC_NAMES.workerHeartbeatFailures, { description: "Count of failed workflow worker heartbeat lease extensions." });
43
+ #workerLeaseExtensions = this.#meter.createCounter(WORKFLOW_METRIC_NAMES.workerLeaseExtensions, { description: "Count of workflow run lease extension attempts." });
44
+ #workerLeaseReleases = this.#meter.createCounter(WORKFLOW_METRIC_NAMES.workerLeaseReleases, { description: "Count of workflow run lease releases." });
45
+ #pendingToClaimedLatency = this.#meter.createHistogram(WORKFLOW_METRIC_NAMES.pendingToClaimedLatency, {
46
+ description: "Latency from workflow availability to worker claim in milliseconds.",
47
+ unit: "ms"
48
+ });
49
+ #waitingToResumedLatency = this.#meter.createHistogram(WORKFLOW_METRIC_NAMES.runWaitingToResumedLatency, {
50
+ description: "Latency from workflow waiting state to resumed execution in milliseconds.",
51
+ unit: "ms"
52
+ });
53
+ #retryScheduled = this.#meter.createCounter(WORKFLOW_METRIC_NAMES.retryScheduled, { description: "Count of workflow retries scheduled." });
54
+ #retryExhausted = this.#meter.createCounter(WORKFLOW_METRIC_NAMES.retryExhausted, { description: "Count of workflow retries exhausted into permanent failure." });
55
+ #retryDelay = this.#meter.createHistogram(WORKFLOW_METRIC_NAMES.retryDelay, {
56
+ description: "Delay until a scheduled workflow retry in milliseconds.",
57
+ unit: "ms"
58
+ });
59
+ #scheduleDueToRunCreatedLatency = this.#meter.createHistogram(WORKFLOW_METRIC_NAMES.scheduleDueToRunCreatedLatency, {
60
+ description: "Latency from recurring schedule fire time to scheduled run creation.",
61
+ unit: "ms"
62
+ });
63
+ #storageOperationDuration = this.#meter.createHistogram(WORKFLOW_METRIC_NAMES.storageOperationDuration, {
64
+ description: "Workflow storage/backend operation duration in milliseconds.",
65
+ unit: "ms"
66
+ });
67
+ #storageOperationErrors = this.#meter.createCounter(WORKFLOW_METRIC_NAMES.storageOperationErrors, { description: "Count of workflow storage/backend operation failures." });
68
+ #engine;
69
+ constructor(options) {
70
+ this.#options = options;
71
+ this.#runGauge = this.#meter.createObservableGauge(WORKFLOW_METRIC_NAMES.runs, { description: "Current count of workflow runs by status." });
72
+ this.#workerActiveExecutionsGauge = this.#meter.createObservableGauge(WORKFLOW_METRIC_NAMES.workerActiveExecutions, { description: "Current count of workflow runs actively held by workers." });
73
+ this.#runGauge.addCallback(async (result) => {
74
+ if (this.#engine?.getRunSummary === void 0) return;
75
+ try {
76
+ const summary = await this.#engine.getRunSummary();
77
+ for (const [status, count] of Object.entries(summary.status)) result.observe(count, this.#attributes({ [WORKFLOW_ATTRIBUTES.runStatus]: status }));
78
+ } catch {
79
+ return;
80
+ }
81
+ });
82
+ this.#workerActiveExecutionsGauge.addCallback(async (result) => {
83
+ if (this.#engine?.getRunSummary === void 0) return;
84
+ try {
85
+ const summary = await this.#engine.getRunSummary();
86
+ result.observe(summary.status.running, this.#attributes({ [WORKFLOW_ATTRIBUTES.runStatus]: "running" }));
87
+ } catch {
88
+ return;
89
+ }
90
+ });
91
+ }
92
+ captureContext() {
93
+ const carrier = {};
94
+ propagation.inject(context.active(), carrier);
95
+ return Object.keys(carrier).length === 0 ? void 0 : {
96
+ ...carrier.traceparent === void 0 ? {} : { traceparent: carrier.traceparent },
97
+ ...carrier.tracestate === void 0 ? {} : { tracestate: carrier.tracestate }
98
+ };
99
+ }
100
+ async withRunExecution(telemetryContext, callback) {
101
+ const parent = contextFromTraceContext(telemetryContext.traceContext);
102
+ return await this.#tracer.startActiveSpan(this.#runExecutionSpanName(telemetryContext), { attributes: this.#attributes({
103
+ [WORKFLOW_ATTRIBUTES.workflowName]: telemetryContext.run.workflowName,
104
+ ...telemetryContext.run.workflowVersion === void 0 ? {} : { [WORKFLOW_ATTRIBUTES.workflowVersion]: telemetryContext.run.workflowVersion },
105
+ [WORKFLOW_ATTRIBUTES.runId]: telemetryContext.run.id,
106
+ [WORKFLOW_ATTRIBUTES.namespace]: telemetryContext.run.namespace,
107
+ ...telemetryContext.run.attempts === void 0 ? {} : { [WORKFLOW_ATTRIBUTES.runAttempt]: telemetryContext.run.attempts },
108
+ ...telemetryContext.run.workerId === void 0 ? {} : { [WORKFLOW_ATTRIBUTES.workerId]: telemetryContext.run.workerId }
109
+ }) }, parent, async (span) => await withRunSpanStatus(span, callback));
110
+ }
111
+ async withStepExecution(telemetryContext, callback) {
112
+ return await this.#tracer.startActiveSpan(this.#stepExecutionSpanName(telemetryContext), { attributes: this.#attributes({
113
+ [WORKFLOW_ATTRIBUTES.workflowName]: telemetryContext.run.workflowName,
114
+ ...telemetryContext.run.workflowVersion === void 0 ? {} : { [WORKFLOW_ATTRIBUTES.workflowVersion]: telemetryContext.run.workflowVersion },
115
+ [WORKFLOW_ATTRIBUTES.runId]: telemetryContext.run.id,
116
+ [WORKFLOW_ATTRIBUTES.stepId]: telemetryContext.step.id,
117
+ [WORKFLOW_ATTRIBUTES.stepName]: telemetryContext.step.name,
118
+ [WORKFLOW_ATTRIBUTES.stepKind]: telemetryContext.step.kind,
119
+ [WORKFLOW_ATTRIBUTES.stepAttempt]: telemetryContext.attempt,
120
+ ...telemetryContext.timeoutAt === void 0 ? {} : { [WORKFLOW_ATTRIBUTES.stepTimeoutAt]: telemetryContext.timeoutAt.toString() }
121
+ }) }, async (span) => await withSpanStatus(span, callback));
122
+ }
123
+ async withStorageOperation(telemetryContext, callback) {
124
+ const startedAt = Date.now();
125
+ const attributes = this.#attributes({
126
+ [WORKFLOW_ATTRIBUTES.storageOperation]: telemetryContext.operation,
127
+ [WORKFLOW_ATTRIBUTES.storageBackend]: telemetryContext.backend
128
+ });
129
+ if (this.#options.includeStorageOperationSpans === false) try {
130
+ const result = await callback();
131
+ this.#recordStorageOperationResult(startedAt, attributes, "success");
132
+ return result;
133
+ } catch (error) {
134
+ this.#recordStorageOperationResult(startedAt, attributes, "failure");
135
+ throw error;
136
+ }
137
+ return await this.#tracer.startActiveSpan(WORKFLOW_SPAN_NAMES.storageOperation, { attributes }, async (span) => {
138
+ try {
139
+ const result = await callback();
140
+ this.#recordStorageOperationResult(startedAt, attributes, "success");
141
+ span.setAttribute(WORKFLOW_ATTRIBUTES.storageOperationStatus, "success");
142
+ span.setStatus({ code: SpanStatusCode.OK });
143
+ return result;
144
+ } catch (error) {
145
+ this.#recordStorageOperationResult(startedAt, attributes, "failure");
146
+ span.setAttribute(WORKFLOW_ATTRIBUTES.storageOperationStatus, "failure");
147
+ span.recordException(toException(error));
148
+ span.setStatus({ code: SpanStatusCode.ERROR });
149
+ throw error;
150
+ } finally {
151
+ span.end();
152
+ }
153
+ });
154
+ }
155
+ recordRunExecution(telemetryContext) {
156
+ const result = telemetryContext.result;
157
+ if (result?.kind === "completed" || result?.kind === "failed") {
158
+ const duration = optionalDurationBetweenMilliseconds(result.run.startedAt ?? result.run.createdAt, result.run.finishedAt);
159
+ if (duration !== void 0) this.#runDuration.record(duration, this.#attributes({
160
+ [WORKFLOW_ATTRIBUTES.workflowName]: result.run.workflowName,
161
+ ...result.run.workflowVersion === void 0 ? {} : { [WORKFLOW_ATTRIBUTES.workflowVersion]: result.run.workflowVersion },
162
+ [WORKFLOW_ATTRIBUTES.runStatus]: result.run.status
163
+ }));
164
+ }
165
+ }
166
+ observe(name, payload) {
167
+ switch (name) {
168
+ case "workflow:run-created":
169
+ case "workflow:run-waiting":
170
+ case "workflow:run-rescheduled":
171
+ case "workflow:run-manual-retry":
172
+ case "workflow:run-completed":
173
+ case "workflow:run-canceled": {
174
+ const event = payload;
175
+ this.#recordRunTransition(event);
176
+ break;
177
+ }
178
+ case "workflow:run-failed": {
179
+ const event = payload;
180
+ this.#recordRunTransition(event);
181
+ this.#recordRetryExhausted(event);
182
+ break;
183
+ }
184
+ case "workflow:run-permanently-failed": {
185
+ const event = payload;
186
+ this.#recordRunTransition(event);
187
+ this.#recordRetryExhausted(event);
188
+ break;
189
+ }
190
+ case "workflow:run-claimed": {
191
+ const event = payload;
192
+ this.#recordRunTransition(event);
193
+ const attributes = this.#runMetricAttributes(event, { [WORKFLOW_ATTRIBUTES.workerOperation]: event.reason });
194
+ this.#workerClaims.add(1, attributes);
195
+ const latency = optionalDurationBetweenMilliseconds(event.previousRun?.availableAt ?? event.run.availableAt ?? event.run.createdAt, event.timestamp);
196
+ if (latency !== void 0) this.#pendingToClaimedLatency.record(latency, attributes);
197
+ break;
198
+ }
199
+ case "workflow:run-started": {
200
+ const event = payload;
201
+ this.#recordRunTransition(event);
202
+ if (event.previousRun?.status !== "waiting") break;
203
+ const latency = optionalDurationBetweenMilliseconds(event.previousRun.availableAt ?? event.previousRun.lastTransitionAt, event.timestamp);
204
+ if (latency !== void 0) this.#waitingToResumedLatency.record(latency, this.#runMetricAttributes(event));
205
+ break;
206
+ }
207
+ case "workflow:run-lease-released": {
208
+ const event = payload;
209
+ this.#recordRunTransition(event);
210
+ this.#workerLeaseReleases.add(1, this.#runMetricAttributes(event));
211
+ break;
212
+ }
213
+ case "workflow:run-retrying": {
214
+ const event = payload;
215
+ this.#recordRunTransition(event);
216
+ const attributes = event.run.retryReason === void 0 ? this.#runMetricAttributes(event) : this.#runMetricAttributes(event, { [WORKFLOW_ATTRIBUTES.retryReason]: event.run.retryReason });
217
+ this.#retryScheduled.add(1, attributes);
218
+ const delay = optionalDurationBetweenMilliseconds(event.timestamp, event.run.retryAt);
219
+ if (delay !== void 0) this.#retryDelay.record(delay, attributes);
220
+ break;
221
+ }
222
+ case "workflow:durable-event-appended": {
223
+ const event = payload;
224
+ const descriptor = getEventDescriptor(event.event.kind);
225
+ this.#eventsAppended.add(1, this.#attributes({
226
+ [WORKFLOW_ATTRIBUTES.eventKind]: descriptor.kind,
227
+ [WORKFLOW_ATTRIBUTES.eventCategory]: descriptor.category
228
+ }));
229
+ const history = new WorkflowHistory(event.events);
230
+ this.#recordDurableEventLatency(event, history);
231
+ this.#recordDurableSleepSpan(event, history);
232
+ this.#recordChildWorkflowOperationSpan(event, history);
233
+ break;
234
+ }
235
+ case "workflow:step-attempt-updated": {
236
+ const event = payload;
237
+ const attributes = this.#attributes({
238
+ [WORKFLOW_ATTRIBUTES.stepKind]: event.attempt.kind,
239
+ [WORKFLOW_ATTRIBUTES.stepStatus]: event.attempt.status,
240
+ ...this.#options.includeStepNameMetricAttribute ? { [WORKFLOW_ATTRIBUTES.stepName]: event.attempt.stepName } : {}
241
+ });
242
+ this.#stepAttempts.add(1, attributes);
243
+ if (event.attempt.status === "completed" || event.attempt.status === "failed") {
244
+ const duration = optionalDurationBetweenMilliseconds(event.attempt.startedAt, event.attempt.finishedAt);
245
+ if (duration !== void 0) this.#stepDuration.record(duration, attributes);
246
+ }
247
+ break;
248
+ }
249
+ case "workflow:message-sent": {
250
+ const event = payload;
251
+ this.#messagesSent.add(1, this.#attributes({}));
252
+ this.#recordMessageSentSpan(event);
253
+ break;
254
+ }
255
+ case "workflow:hook-resumed": {
256
+ const event = payload;
257
+ this.#hooksResumed.add(1, this.#attributes({ [WORKFLOW_ATTRIBUTES.hookKind]: "hook" }));
258
+ this.#recordHookResumeSpan("hook", event);
259
+ break;
260
+ }
261
+ case "workflow:webhook-resumed": {
262
+ const event = payload;
263
+ this.#hooksResumed.add(1, this.#attributes({ [WORKFLOW_ATTRIBUTES.hookKind]: "webhook" }));
264
+ this.#recordHookResumeSpan("webhook", event);
265
+ break;
266
+ }
267
+ case "workflow:stream-updated": {
268
+ const event = payload;
269
+ this.#streamUpdates.add(1, this.#attributes({
270
+ [WORKFLOW_ATTRIBUTES.streamEventKind]: event.eventKind,
271
+ [WORKFLOW_ATTRIBUTES.streamStatus]: streamStatusFromEventKind(event.eventKind)
272
+ }));
273
+ this.#recordStreamOperationSpan(event);
274
+ break;
275
+ }
276
+ case "workflow:child-workflow-started": {
277
+ const event = payload;
278
+ this.#recordChildWorkflowStartedSpan(event);
279
+ break;
280
+ }
281
+ case "workflow:cleanup-completed": {
282
+ const event = payload;
283
+ this.#cleanupDeletedRuns.add(event.result.deletedRuns, this.#attributes({ [WORKFLOW_ATTRIBUTES.cleanupSource]: "cleanup" }));
284
+ this.#recordCleanupOperationSpan("cleanup", event);
285
+ break;
286
+ }
287
+ case "workflow:retention-applied": {
288
+ const event = payload;
289
+ this.#cleanupDeletedRuns.add(event.result.deletedRuns, this.#attributes({ [WORKFLOW_ATTRIBUTES.cleanupSource]: "retention" }));
290
+ this.#recordCleanupOperationSpan("retention", event);
291
+ break;
292
+ }
293
+ case "workflow:worker-operation": {
294
+ const event = payload;
295
+ const attributes = this.#attributes({
296
+ [WORKFLOW_ATTRIBUTES.workerOperation]: event.operation,
297
+ [WORKFLOW_ATTRIBUTES.workerOperationStatus]: event.status
298
+ });
299
+ if (event.operation === "claim" && event.status === "failure") this.#workerClaimFailures.add(1, attributes);
300
+ if (event.operation === "heartbeat" && event.status === "failure") this.#workerHeartbeatFailures.add(1, attributes);
301
+ if (event.operation === "lease_extension") this.#workerLeaseExtensions.add(1, attributes);
302
+ if (event.operation === "lease_release") this.#workerLeaseReleases.add(1, attributes);
303
+ this.#recordWorkerOperationSpan(event);
304
+ break;
305
+ }
306
+ case "workflow:schedule-ticked": {
307
+ const event = payload;
308
+ this.#recordScheduleTickSpan(event);
309
+ break;
310
+ }
311
+ case "workflow:schedule-run-created": {
312
+ const event = payload;
313
+ const attributes = this.#attributes({
314
+ [WORKFLOW_ATTRIBUTES.workflowName]: event.workflowName,
315
+ ...event.workflowVersion === void 0 ? {} : { [WORKFLOW_ATTRIBUTES.workflowVersion]: event.workflowVersion }
316
+ });
317
+ const latency = optionalDurationBetweenMilliseconds(event.fireAt, event.timestamp);
318
+ if (latency !== void 0) this.#scheduleDueToRunCreatedLatency.record(latency, attributes);
319
+ this.#recordScheduleRunCreatedSpan(event);
320
+ break;
321
+ }
322
+ }
323
+ }
324
+ bindEngine(engine) {
325
+ this.#engine = engine;
326
+ }
327
+ async shutdown() {
328
+ const errors = [];
329
+ try {
330
+ await this.#options.forceFlush?.();
331
+ } catch (error) {
332
+ errors.push(error);
333
+ }
334
+ try {
335
+ await this.#options.shutdown?.();
336
+ } catch (error) {
337
+ errors.push(error);
338
+ }
339
+ if (errors.length > 0) throw errors[0];
340
+ }
341
+ #recordRunTransition(event) {
342
+ this.#runTransitions.add(1, this.#runMetricAttributes(event));
343
+ }
344
+ #recordRetryExhausted(event) {
345
+ const retryReason = event.previousRun?.retryReason ?? ((event.previousRun?.attempts ?? event.run.attempts ?? 1) > 1 ? "workflow" : void 0);
346
+ if (retryReason === void 0) return;
347
+ this.#retryExhausted.add(1, this.#runMetricAttributes(event, {
348
+ [WORKFLOW_ATTRIBUTES.retryReason]: retryReason,
349
+ [WORKFLOW_ATTRIBUTES.retryExhausted]: true
350
+ }));
351
+ }
352
+ #attributes(attributes) {
353
+ return {
354
+ ...this.#options.serviceNamespace === void 0 ? {} : { "service.namespace": this.#options.serviceNamespace },
355
+ [WORKFLOW_ATTRIBUTES.system]: WORKFLOW_SYSTEM,
356
+ ...attributes
357
+ };
358
+ }
359
+ #runExecutionSpanName(telemetryContext) {
360
+ return this.#options.includeNamesInSpanNames === true ? `${WORKFLOW_SPAN_NAMES.runExecution} ${telemetryContext.run.workflowName}` : WORKFLOW_SPAN_NAMES.runExecution;
361
+ }
362
+ #stepExecutionSpanName(telemetryContext) {
363
+ return this.#options.includeNamesInSpanNames === true ? `${WORKFLOW_SPAN_NAMES.stepExecution} ${telemetryContext.step.name}` : WORKFLOW_SPAN_NAMES.stepExecution;
364
+ }
365
+ #recordStorageOperationResult(startedAt, attributes, status) {
366
+ const resultAttributes = {
367
+ ...attributes,
368
+ [WORKFLOW_ATTRIBUTES.storageOperationStatus]: status
369
+ };
370
+ this.#storageOperationDuration.record(Date.now() - startedAt, resultAttributes);
371
+ if (status === "failure") this.#storageOperationErrors.add(1, resultAttributes);
372
+ }
373
+ #runMetricAttributes(event, attributes = {}) {
374
+ return this.#attributes({
375
+ [WORKFLOW_ATTRIBUTES.workflowName]: event.workflowName,
376
+ ...event.workflowVersion === void 0 ? {} : { [WORKFLOW_ATTRIBUTES.workflowVersion]: event.workflowVersion },
377
+ [WORKFLOW_ATTRIBUTES.runStatus]: event.status,
378
+ [WORKFLOW_ATTRIBUTES.runTransition]: event.reason,
379
+ ...attributes
380
+ });
381
+ }
382
+ #recordDurableEventLatency(event, history) {
383
+ if (event.event.kind !== "message_wait_completed") return;
384
+ const completed = event.event;
385
+ const started = history.startedMessageWaitForCompleted(completed);
386
+ if (started === void 0) return;
387
+ const latency = optionalDurationBetweenMilliseconds(started.timestamp, completed.messageTimestamp);
388
+ if (latency === void 0) return;
389
+ const source = started.source ?? "message";
390
+ const attributes = this.#attributes({ [WORKFLOW_ATTRIBUTES.messageSource]: source });
391
+ this.#messageWaitLatency.record(latency, attributes);
392
+ if (source === "hook" || source === "webhook") this.#hookResumeLatency.record(latency, this.#attributes({ [WORKFLOW_ATTRIBUTES.hookKind]: source }));
393
+ this.#recordMessageWaitSpan(completed, started, history);
394
+ }
395
+ #recordDurableSleepSpan(event, history) {
396
+ if (event.event.kind !== "sleep_completed") return;
397
+ const completed = event.event;
398
+ const started = history.startedSleepForCompleted(completed);
399
+ if (started === void 0) return;
400
+ const requestedDuration = started.duration === void 0 ? void 0 : started.duration.total({ unit: "millisecond" });
401
+ const actualDuration = optionalDurationBetweenMilliseconds(started.timestamp, completed.timestamp);
402
+ const span = this.#tracer.startSpan(WORKFLOW_SPAN_NAMES.sleep, { attributes: this.#attributes({
403
+ [WORKFLOW_ATTRIBUTES.runId]: event.runId,
404
+ [WORKFLOW_ATTRIBUTES.stepId]: completed.stepId,
405
+ [WORKFLOW_ATTRIBUTES.stepName]: completed.stepName,
406
+ [WORKFLOW_ATTRIBUTES.stepKind]: "sleep",
407
+ [WORKFLOW_ATTRIBUTES.sleepUntil]: started.until.toString(),
408
+ ...requestedDuration === void 0 ? {} : { [WORKFLOW_ATTRIBUTES.sleepDurationMs]: requestedDuration },
409
+ ...actualDuration === void 0 ? {} : { [WORKFLOW_ATTRIBUTES.sleepActualMs]: actualDuration }
410
+ }) });
411
+ span.setStatus({ code: SpanStatusCode.OK });
412
+ span.end();
413
+ }
414
+ #recordChildWorkflowOperationSpan(event, history) {
415
+ if (event.event.kind !== "child_workflow_completed" && event.event.kind !== "child_workflow_failed") return;
416
+ const terminal = event.event;
417
+ const started = history.startedChildWorkflowForTerminal(terminal);
418
+ const duration = started === void 0 ? void 0 : optionalDurationBetweenMilliseconds(started.timestamp, terminal.timestamp);
419
+ const failed = terminal.kind === "child_workflow_failed";
420
+ const span = this.#tracer.startSpan(WORKFLOW_SPAN_NAMES.childWorkflowOperation, { attributes: this.#attributes({
421
+ [WORKFLOW_ATTRIBUTES.runId]: event.runId,
422
+ [WORKFLOW_ATTRIBUTES.stepId]: terminal.stepId,
423
+ [WORKFLOW_ATTRIBUTES.stepName]: terminal.stepName,
424
+ [WORKFLOW_ATTRIBUTES.stepKind]: "workflow",
425
+ [WORKFLOW_ATTRIBUTES.stepAttempt]: terminal.attempt,
426
+ [WORKFLOW_ATTRIBUTES.childWorkflowOperation]: failed ? "fail" : "complete",
427
+ [WORKFLOW_ATTRIBUTES.childWorkflowRunId]: terminal.childRunId,
428
+ ...started === void 0 ? {} : {
429
+ [WORKFLOW_ATTRIBUTES.childWorkflowName]: started.workflowName,
430
+ ...started.workflowVersion === void 0 ? {} : { [WORKFLOW_ATTRIBUTES.childWorkflowVersion]: started.workflowVersion }
431
+ },
432
+ [WORKFLOW_ATTRIBUTES.childWorkflowStatus]: failed ? "failed" : "completed",
433
+ ...duration === void 0 ? {} : { [WORKFLOW_ATTRIBUTES.childWorkflowDurationMs]: duration },
434
+ ...failed ? { [WORKFLOW_ATTRIBUTES.errorKind]: terminal.error.name } : {}
435
+ }) });
436
+ if (failed) {
437
+ span.recordException(errorRecordToException(terminal.error));
438
+ span.setStatus({
439
+ code: SpanStatusCode.ERROR,
440
+ message: terminal.error.message
441
+ });
442
+ } else span.setStatus({ code: SpanStatusCode.OK });
443
+ span.end();
444
+ }
445
+ #recordChildWorkflowStartedSpan(event) {
446
+ const started = event.event;
447
+ const span = this.#tracer.startSpan(WORKFLOW_SPAN_NAMES.childWorkflowOperation, { attributes: this.#attributes({
448
+ [WORKFLOW_ATTRIBUTES.runId]: event.runId,
449
+ [WORKFLOW_ATTRIBUTES.stepId]: started.stepId,
450
+ [WORKFLOW_ATTRIBUTES.stepName]: started.stepName,
451
+ [WORKFLOW_ATTRIBUTES.stepKind]: "workflow",
452
+ [WORKFLOW_ATTRIBUTES.stepAttempt]: started.attempt,
453
+ [WORKFLOW_ATTRIBUTES.childWorkflowOperation]: "start",
454
+ [WORKFLOW_ATTRIBUTES.childWorkflowRunId]: started.childRunId,
455
+ [WORKFLOW_ATTRIBUTES.childWorkflowName]: started.workflowName,
456
+ ...started.workflowVersion === void 0 ? {} : { [WORKFLOW_ATTRIBUTES.childWorkflowVersion]: started.workflowVersion },
457
+ [WORKFLOW_ATTRIBUTES.childWorkflowStatus]: "started"
458
+ }) });
459
+ span.setStatus({ code: SpanStatusCode.OK });
460
+ span.end();
461
+ }
462
+ #recordMessageSentSpan(event) {
463
+ const parent = contextFromTraceContext(event.traceContext);
464
+ const span = this.#tracer.startSpan(WORKFLOW_SPAN_NAMES.messageSend, { attributes: this.#attributes({
465
+ [WORKFLOW_ATTRIBUTES.runId]: event.runId,
466
+ [WORKFLOW_ATTRIBUTES.messageId]: event.messageId,
467
+ [WORKFLOW_MESSAGING_ATTRIBUTES.system]: "temelj.workflow",
468
+ [WORKFLOW_MESSAGING_ATTRIBUTES.destinationName]: event.runId,
469
+ [WORKFLOW_MESSAGING_ATTRIBUTES.messageId]: event.messageId,
470
+ [WORKFLOW_MESSAGING_ATTRIBUTES.operationName]: "send",
471
+ [WORKFLOW_MESSAGING_ATTRIBUTES.operationType]: "publish"
472
+ }) }, parent);
473
+ span.setStatus({ code: SpanStatusCode.OK });
474
+ span.end();
475
+ }
476
+ #recordHookResumeSpan(kind, event) {
477
+ const parent = contextFromTraceContext(event.traceContext);
478
+ const span = this.#tracer.startSpan(WORKFLOW_SPAN_NAMES.hookResume, { attributes: this.#attributes({
479
+ [WORKFLOW_ATTRIBUTES.hookKind]: kind,
480
+ [WORKFLOW_ATTRIBUTES.runId]: event.runId,
481
+ [WORKFLOW_ATTRIBUTES.messageId]: event.messageId,
482
+ [WORKFLOW_MESSAGING_ATTRIBUTES.system]: "temelj.workflow",
483
+ [WORKFLOW_MESSAGING_ATTRIBUTES.destinationName]: event.runId,
484
+ [WORKFLOW_MESSAGING_ATTRIBUTES.messageId]: event.messageId,
485
+ [WORKFLOW_MESSAGING_ATTRIBUTES.operationName]: "resume",
486
+ [WORKFLOW_MESSAGING_ATTRIBUTES.operationType]: "publish"
487
+ }) }, parent);
488
+ span.setStatus({ code: SpanStatusCode.OK });
489
+ span.end();
490
+ }
491
+ #recordScheduleRunCreatedSpan(event) {
492
+ const span = this.#tracer.startSpan(WORKFLOW_SPAN_NAMES.scheduleRunCreate, { attributes: this.#attributes({
493
+ [WORKFLOW_ATTRIBUTES.workflowName]: event.workflowName,
494
+ ...event.workflowVersion === void 0 ? {} : { [WORKFLOW_ATTRIBUTES.workflowVersion]: event.workflowVersion },
495
+ [WORKFLOW_ATTRIBUTES.scheduleId]: event.scheduleId,
496
+ [WORKFLOW_ATTRIBUTES.scheduleFireAt]: event.fireAt.toString(),
497
+ [WORKFLOW_ATTRIBUTES.runId]: event.runId
498
+ }) });
499
+ span.setStatus({ code: SpanStatusCode.OK });
500
+ span.end();
501
+ }
502
+ #recordScheduleTickSpan(event) {
503
+ const span = this.#tracer.startSpan(WORKFLOW_SPAN_NAMES.scheduleTick, { attributes: this.#attributes({
504
+ [WORKFLOW_ATTRIBUTES.scheduleTickedRuns]: event.result.ticked,
505
+ [WORKFLOW_ATTRIBUTES.scheduleTickedSchedules]: event.result.scheduleIds.length,
506
+ ...event.result.nextScheduleAt === void 0 ? {} : { [WORKFLOW_ATTRIBUTES.scheduleNextAt]: event.result.nextScheduleAt.toString() }
507
+ }) });
508
+ span.setStatus({ code: SpanStatusCode.OK });
509
+ span.end();
510
+ }
511
+ #recordWorkerOperationSpan(event) {
512
+ const span = this.#tracer.startSpan(WORKFLOW_SPAN_NAMES.workerOperation, { attributes: this.#attributes({
513
+ [WORKFLOW_ATTRIBUTES.workerId]: event.workerId,
514
+ ...event.runId === void 0 ? {} : { [WORKFLOW_ATTRIBUTES.runId]: event.runId },
515
+ ...event.run === void 0 ? {} : {
516
+ [WORKFLOW_ATTRIBUTES.workflowName]: event.run.workflowName,
517
+ ...event.run.workflowVersion === void 0 ? {} : { [WORKFLOW_ATTRIBUTES.workflowVersion]: event.run.workflowVersion },
518
+ [WORKFLOW_ATTRIBUTES.runStatus]: event.run.status
519
+ },
520
+ [WORKFLOW_ATTRIBUTES.workerOperation]: event.operation,
521
+ [WORKFLOW_ATTRIBUTES.workerOperationStatus]: event.status
522
+ }) });
523
+ if (event.status === "failure") {
524
+ span.setStatus({ code: SpanStatusCode.ERROR });
525
+ if (event.error !== void 0) span.recordException(toException(event.error));
526
+ } else span.setStatus({ code: SpanStatusCode.OK });
527
+ span.end();
528
+ }
529
+ #recordCleanupOperationSpan(source, event) {
530
+ const span = this.#tracer.startSpan(WORKFLOW_SPAN_NAMES.cleanupOperation, { attributes: this.#attributes({
531
+ [WORKFLOW_ATTRIBUTES.cleanupSource]: source,
532
+ [WORKFLOW_ATTRIBUTES.cleanupDeletedRuns]: event.result.deletedRuns,
533
+ [WORKFLOW_ATTRIBUTES.cleanupCreatedMarkers]: event.result.createdCleanupMarkers,
534
+ [WORKFLOW_ATTRIBUTES.cleanupDeletedMarkers]: event.result.deletedCleanupMarkers,
535
+ [WORKFLOW_ATTRIBUTES.cleanupDeletedEvents]: event.result.deletedEvents,
536
+ [WORKFLOW_ATTRIBUTES.cleanupDeletedStepAttempts]: event.result.deletedStepAttempts,
537
+ [WORKFLOW_ATTRIBUTES.cleanupDeletedIdempotencyKeys]: event.result.deletedIdempotencyKeys,
538
+ [WORKFLOW_ATTRIBUTES.cleanupDeletedMessageIdempotencyKeys]: event.result.deletedMessageIdempotencyKeys,
539
+ ...event.result.dryRun === void 0 ? {} : { [WORKFLOW_ATTRIBUTES.cleanupDryRun]: event.result.dryRun },
540
+ [WORKFLOW_ATTRIBUTES.cleanupMatchedRuns]: event.result.matchedRuns ?? event.result.runIds.length
541
+ }) });
542
+ span.setStatus({ code: SpanStatusCode.OK });
543
+ span.end();
544
+ }
545
+ #recordStreamOperationSpan(event) {
546
+ const span = this.#tracer.startSpan(WORKFLOW_SPAN_NAMES.streamOperation, { attributes: this.#attributes({
547
+ [WORKFLOW_ATTRIBUTES.runId]: event.runId,
548
+ [WORKFLOW_ATTRIBUTES.streamId]: event.streamId,
549
+ [WORKFLOW_ATTRIBUTES.streamEventKind]: event.eventKind,
550
+ [WORKFLOW_ATTRIBUTES.streamStatus]: streamStatusFromEventKind(event.eventKind),
551
+ [WORKFLOW_ATTRIBUTES.stepId]: event.stepId,
552
+ [WORKFLOW_ATTRIBUTES.stepName]: event.stepName,
553
+ ...event.index === void 0 ? {} : { [WORKFLOW_ATTRIBUTES.streamIndex]: event.index },
554
+ ...event.error === void 0 ? {} : { [WORKFLOW_ATTRIBUTES.errorKind]: event.error.name }
555
+ }) });
556
+ if (event.error === void 0) span.setStatus({ code: SpanStatusCode.OK });
557
+ else {
558
+ span.recordException(errorRecordToException(event.error));
559
+ span.setStatus({
560
+ code: SpanStatusCode.ERROR,
561
+ message: event.error.message
562
+ });
563
+ }
564
+ span.end();
565
+ }
566
+ #recordMessageWaitSpan(completed, started, history) {
567
+ const message = history.messageSentByTimestamp(completed.messageId, completed.messageTimestamp);
568
+ const link = spanLinkFromTraceContext(completed.telemetryContext ?? message?.telemetryContext);
569
+ return this.#tracer.startActiveSpan(WORKFLOW_SPAN_NAMES.messageWait, {
570
+ attributes: this.#attributes({
571
+ [WORKFLOW_ATTRIBUTES.messageId]: completed.messageId,
572
+ [WORKFLOW_ATTRIBUTES.messageSource]: started.source ?? "message",
573
+ [WORKFLOW_ATTRIBUTES.stepId]: completed.stepId,
574
+ [WORKFLOW_ATTRIBUTES.stepName]: completed.stepName,
575
+ [WORKFLOW_MESSAGING_ATTRIBUTES.system]: "temelj.workflow",
576
+ [WORKFLOW_MESSAGING_ATTRIBUTES.messageId]: completed.messageId,
577
+ [WORKFLOW_MESSAGING_ATTRIBUTES.operationName]: "receive",
578
+ [WORKFLOW_MESSAGING_ATTRIBUTES.operationType]: "receive"
579
+ }),
580
+ ...link === void 0 ? {} : { links: [link] }
581
+ }, (span) => {
582
+ span.setStatus({ code: SpanStatusCode.OK });
583
+ span.end();
584
+ });
585
+ }
586
+ };
587
+ //#endregion
588
+ export { createOpenTelemetryTelemetry };
@@ -0,0 +1,25 @@
1
+ import { StepId } from "./types/step-id.mjs";
2
+ import { CursorKeyPart, PageOptions, WorkflowPage } from "./types/pagination.mjs";
3
+ import "./types/step.mjs";
4
+ //#region src/pagination.d.ts
5
+ declare function pageItems<TItem>(items: readonly TItem[], options: PageOptions | undefined, label: string, cursorKey: (item: TItem, index: number) => readonly CursorKeyPart[]): WorkflowPage<TItem>;
6
+ declare function makeWorkflowRunCursorKey(run: {
7
+ readonly createdAt: Temporal.Instant;
8
+ readonly id: string;
9
+ }): readonly [number, string];
10
+ declare function makeWorkflowEventCursorKey(_event: unknown, index: number): readonly [number];
11
+ declare function makeWorkflowStepAttemptCursorKey(attempt: {
12
+ readonly startedAt: Temporal.Instant;
13
+ readonly stepId: StepId;
14
+ readonly attempt: number;
15
+ }): readonly [number, StepId, number];
16
+ declare function makeScheduleCursorKey(schedule: {
17
+ readonly nextFireAt: Temporal.Instant;
18
+ readonly createdAt: Temporal.Instant;
19
+ readonly id: string;
20
+ }): readonly [number, number, string];
21
+ declare function makeStreamChunkCursorKey(chunk: {
22
+ readonly index: number;
23
+ }): readonly [number];
24
+ //#endregion
25
+ export { makeScheduleCursorKey, makeStreamChunkCursorKey, makeWorkflowEventCursorKey, makeWorkflowRunCursorKey, makeWorkflowStepAttemptCursorKey, pageItems };