awaitly 1.34.0 → 2.0.0

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 (241) hide show
  1. package/dist/{duration.d.ts → di-BDlT7InM.d.cts} +15 -1
  2. package/dist/{duration.d.cts → di-BbFFfO8y.d.ts} +15 -1
  3. package/dist/errors-DtXvrCiO.d.cts +708 -0
  4. package/dist/errors-DtXvrCiO.d.ts +708 -0
  5. package/dist/index.cjs +4594 -1
  6. package/dist/index.cjs.map +1 -1
  7. package/dist/index.d.cts +1970 -141
  8. package/dist/index.d.ts +1970 -141
  9. package/dist/index.js +4398 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/result.cjs +641 -1
  12. package/dist/result.cjs.map +1 -1
  13. package/dist/result.d.cts +35 -5
  14. package/dist/result.d.ts +35 -5
  15. package/dist/result.js +561 -1
  16. package/dist/result.js.map +1 -1
  17. package/dist/testing.cjs +4202 -8
  18. package/dist/testing.cjs.map +1 -1
  19. package/dist/testing.d.cts +2 -6
  20. package/dist/testing.d.ts +2 -6
  21. package/dist/testing.js +4154 -8
  22. package/dist/testing.js.map +1 -1
  23. package/dist/{run-entry-D2MmJFj9.d.cts → types-B8NfNRGX.d.ts} +1152 -1499
  24. package/dist/{run-entry-Dduz-is2.d.ts → types-BZ2f4MRR.d.cts} +1152 -1499
  25. package/dist/workflow.cjs +7096 -6
  26. package/dist/workflow.cjs.map +1 -1
  27. package/dist/workflow.d.cts +3346 -22
  28. package/dist/workflow.d.ts +3346 -22
  29. package/dist/workflow.js +6929 -6
  30. package/dist/workflow.js.map +1 -1
  31. package/package.json +13 -178
  32. package/dist/adapters.cjs +0 -7
  33. package/dist/adapters.cjs.map +0 -1
  34. package/dist/adapters.d.cts +0 -179
  35. package/dist/adapters.d.ts +0 -179
  36. package/dist/adapters.js +0 -7
  37. package/dist/adapters.js.map +0 -1
  38. package/dist/batch.cjs +0 -7
  39. package/dist/batch.cjs.map +0 -1
  40. package/dist/batch.d.cts +0 -200
  41. package/dist/batch.d.ts +0 -200
  42. package/dist/batch.js +0 -7
  43. package/dist/batch.js.map +0 -1
  44. package/dist/bind-deps.cjs +0 -2
  45. package/dist/bind-deps.cjs.map +0 -1
  46. package/dist/bind-deps.d.cts +0 -28
  47. package/dist/bind-deps.d.ts +0 -28
  48. package/dist/bind-deps.js +0 -2
  49. package/dist/bind-deps.js.map +0 -1
  50. package/dist/cache.cjs +0 -2
  51. package/dist/cache.cjs.map +0 -1
  52. package/dist/cache.d.cts +0 -269
  53. package/dist/cache.d.ts +0 -269
  54. package/dist/cache.js +0 -2
  55. package/dist/cache.js.map +0 -1
  56. package/dist/circuit-breaker.cjs +0 -7
  57. package/dist/circuit-breaker.cjs.map +0 -1
  58. package/dist/circuit-breaker.d.cts +0 -211
  59. package/dist/circuit-breaker.d.ts +0 -211
  60. package/dist/circuit-breaker.js +0 -7
  61. package/dist/circuit-breaker.js.map +0 -1
  62. package/dist/conditional.cjs +0 -2
  63. package/dist/conditional.cjs.map +0 -1
  64. package/dist/conditional.d.cts +0 -252
  65. package/dist/conditional.d.ts +0 -252
  66. package/dist/conditional.js +0 -2
  67. package/dist/conditional.js.map +0 -1
  68. package/dist/core.cjs +0 -7
  69. package/dist/core.cjs.map +0 -1
  70. package/dist/core.d.cts +0 -5
  71. package/dist/core.d.ts +0 -5
  72. package/dist/core.js +0 -7
  73. package/dist/core.js.map +0 -1
  74. package/dist/di-COl5oFnR.d.cts +0 -15
  75. package/dist/di-CyDj_JyZ.d.ts +0 -15
  76. package/dist/diagnostics.cjs +0 -8
  77. package/dist/diagnostics.cjs.map +0 -1
  78. package/dist/diagnostics.d.cts +0 -68
  79. package/dist/diagnostics.d.ts +0 -68
  80. package/dist/diagnostics.js +0 -8
  81. package/dist/diagnostics.js.map +0 -1
  82. package/dist/durable.cjs +0 -11
  83. package/dist/durable.cjs.map +0 -1
  84. package/dist/durable.d.cts +0 -9
  85. package/dist/durable.d.ts +0 -9
  86. package/dist/durable.js +0 -11
  87. package/dist/durable.js.map +0 -1
  88. package/dist/duration.cjs +0 -2
  89. package/dist/duration.cjs.map +0 -1
  90. package/dist/duration.js +0 -2
  91. package/dist/duration.js.map +0 -1
  92. package/dist/engine.cjs +0 -11
  93. package/dist/engine.cjs.map +0 -1
  94. package/dist/engine.d.cts +0 -115
  95. package/dist/engine.d.ts +0 -115
  96. package/dist/engine.js +0 -11
  97. package/dist/engine.js.map +0 -1
  98. package/dist/errors.cjs +0 -2
  99. package/dist/errors.cjs.map +0 -1
  100. package/dist/errors.d.cts +0 -361
  101. package/dist/errors.d.ts +0 -361
  102. package/dist/errors.js +0 -2
  103. package/dist/errors.js.map +0 -1
  104. package/dist/fetch.cjs +0 -7
  105. package/dist/fetch.cjs.map +0 -1
  106. package/dist/fetch.d.cts +0 -86
  107. package/dist/fetch.d.ts +0 -86
  108. package/dist/fetch.js +0 -7
  109. package/dist/fetch.js.map +0 -1
  110. package/dist/flow.cjs +0 -7
  111. package/dist/flow.cjs.map +0 -1
  112. package/dist/flow.d.cts +0 -163
  113. package/dist/flow.d.ts +0 -163
  114. package/dist/flow.js +0 -7
  115. package/dist/flow.js.map +0 -1
  116. package/dist/functional.cjs +0 -2
  117. package/dist/functional.cjs.map +0 -1
  118. package/dist/functional.d.cts +0 -444
  119. package/dist/functional.d.ts +0 -444
  120. package/dist/functional.js +0 -2
  121. package/dist/functional.js.map +0 -1
  122. package/dist/guards-BodHXLzX.d.cts +0 -72
  123. package/dist/guards-CeWoQ8fn.d.ts +0 -72
  124. package/dist/hitl-BPE_1UiM.d.cts +0 -468
  125. package/dist/hitl-byp570uC.d.ts +0 -468
  126. package/dist/hitl.cjs +0 -7
  127. package/dist/hitl.cjs.map +0 -1
  128. package/dist/hitl.d.cts +0 -442
  129. package/dist/hitl.d.ts +0 -442
  130. package/dist/hitl.js +0 -7
  131. package/dist/hitl.js.map +0 -1
  132. package/dist/index-BYT3amEz.d.ts +0 -417
  133. package/dist/index-C_ak66jy.d.cts +0 -417
  134. package/dist/match-entry-DjI2bLpD.d.cts +0 -209
  135. package/dist/match-entry-DjI2bLpD.d.ts +0 -209
  136. package/dist/match.cjs +0 -2
  137. package/dist/match.cjs.map +0 -1
  138. package/dist/match.d.cts +0 -1
  139. package/dist/match.d.ts +0 -1
  140. package/dist/match.js +0 -2
  141. package/dist/match.js.map +0 -1
  142. package/dist/otel.cjs +0 -2
  143. package/dist/otel.cjs.map +0 -1
  144. package/dist/otel.d.cts +0 -188
  145. package/dist/otel.d.ts +0 -188
  146. package/dist/otel.js +0 -2
  147. package/dist/otel.js.map +0 -1
  148. package/dist/persistence-entry-DOMx3woy.d.ts +0 -822
  149. package/dist/persistence-entry-ymCA4iDu.d.cts +0 -822
  150. package/dist/persistence.cjs +0 -2
  151. package/dist/persistence.cjs.map +0 -1
  152. package/dist/persistence.d.cts +0 -7
  153. package/dist/persistence.d.ts +0 -7
  154. package/dist/persistence.js +0 -2
  155. package/dist/persistence.js.map +0 -1
  156. package/dist/policies.cjs +0 -2
  157. package/dist/policies.cjs.map +0 -1
  158. package/dist/policies.d.cts +0 -379
  159. package/dist/policies.d.ts +0 -379
  160. package/dist/policies.js +0 -2
  161. package/dist/policies.js.map +0 -1
  162. package/dist/ratelimit.cjs +0 -7
  163. package/dist/ratelimit.cjs.map +0 -1
  164. package/dist/ratelimit.d.cts +0 -458
  165. package/dist/ratelimit.d.ts +0 -458
  166. package/dist/ratelimit.js +0 -7
  167. package/dist/ratelimit.js.map +0 -1
  168. package/dist/reliability.cjs +0 -11
  169. package/dist/reliability.cjs.map +0 -1
  170. package/dist/reliability.d.cts +0 -11
  171. package/dist/reliability.d.ts +0 -11
  172. package/dist/reliability.js +0 -11
  173. package/dist/reliability.js.map +0 -1
  174. package/dist/resolver.cjs +0 -7
  175. package/dist/resolver.cjs.map +0 -1
  176. package/dist/resolver.d.cts +0 -68
  177. package/dist/resolver.d.ts +0 -68
  178. package/dist/resolver.js +0 -7
  179. package/dist/resolver.js.map +0 -1
  180. package/dist/resource.cjs +0 -7
  181. package/dist/resource.cjs.map +0 -1
  182. package/dist/resource.d.cts +0 -174
  183. package/dist/resource.d.ts +0 -174
  184. package/dist/resource.js +0 -7
  185. package/dist/resource.js.map +0 -1
  186. package/dist/result/retry.cjs +0 -2
  187. package/dist/result/retry.cjs.map +0 -1
  188. package/dist/result/retry.d.cts +0 -70
  189. package/dist/result/retry.d.ts +0 -70
  190. package/dist/result/retry.js +0 -2
  191. package/dist/result/retry.js.map +0 -1
  192. package/dist/retry.cjs +0 -2
  193. package/dist/retry.cjs.map +0 -1
  194. package/dist/retry.d.cts +0 -388
  195. package/dist/retry.d.ts +0 -388
  196. package/dist/retry.js +0 -2
  197. package/dist/retry.js.map +0 -1
  198. package/dist/run.cjs +0 -7
  199. package/dist/run.cjs.map +0 -1
  200. package/dist/run.d.cts +0 -4
  201. package/dist/run.d.ts +0 -4
  202. package/dist/run.js +0 -7
  203. package/dist/run.js.map +0 -1
  204. package/dist/saga.cjs +0 -11
  205. package/dist/saga.cjs.map +0 -1
  206. package/dist/saga.d.cts +0 -164
  207. package/dist/saga.d.ts +0 -164
  208. package/dist/saga.js +0 -11
  209. package/dist/saga.js.map +0 -1
  210. package/dist/singleflight.cjs +0 -2
  211. package/dist/singleflight.cjs.map +0 -1
  212. package/dist/singleflight.d.cts +0 -145
  213. package/dist/singleflight.d.ts +0 -145
  214. package/dist/singleflight.js +0 -2
  215. package/dist/singleflight.js.map +0 -1
  216. package/dist/slugs.cjs +0 -2
  217. package/dist/slugs.cjs.map +0 -1
  218. package/dist/slugs.d.cts +0 -67
  219. package/dist/slugs.d.ts +0 -67
  220. package/dist/slugs.js +0 -2
  221. package/dist/slugs.js.map +0 -1
  222. package/dist/streaming.cjs +0 -9
  223. package/dist/streaming.cjs.map +0 -1
  224. package/dist/streaming.d.cts +0 -596
  225. package/dist/streaming.d.ts +0 -596
  226. package/dist/streaming.js +0 -9
  227. package/dist/streaming.js.map +0 -1
  228. package/dist/tagged-error.cjs +0 -2
  229. package/dist/tagged-error.cjs.map +0 -1
  230. package/dist/tagged-error.d.cts +0 -275
  231. package/dist/tagged-error.d.ts +0 -275
  232. package/dist/tagged-error.js +0 -2
  233. package/dist/tagged-error.js.map +0 -1
  234. package/dist/types-DQmzO9f4.d.ts +0 -323
  235. package/dist/types-qBUOYi-4.d.cts +0 -323
  236. package/dist/webhook.cjs +0 -7
  237. package/dist/webhook.cjs.map +0 -1
  238. package/dist/webhook.d.cts +0 -499
  239. package/dist/webhook.d.ts +0 -499
  240. package/dist/webhook.js +0 -7
  241. package/dist/webhook.js.map +0 -1
@@ -1,68 +0,0 @@
1
- import { e as ErrorClassification, ag as WorkflowEvent } from './run-entry-D2MmJFj9.cjs';
2
- import './errors.cjs';
3
- import './tagged-error.cjs';
4
- import './slugs.cjs';
5
-
6
- interface WorkflowWideEvent {
7
- workflowId: string;
8
- workflowName?: string;
9
- startedAt: string;
10
- endedAt: string;
11
- durationMs: number;
12
- status: "success" | "error" | "cancelled";
13
- error?: {
14
- tag: string;
15
- classification?: ErrorClassification;
16
- origin?: string;
17
- stack?: string[];
18
- };
19
- steps: Array<{
20
- stepId: string;
21
- name: string;
22
- key?: string;
23
- status: "success" | "error" | "cached" | "skipped" | "aborted";
24
- durationMs?: number;
25
- domain?: string;
26
- owner?: string;
27
- intent?: string;
28
- tags?: readonly string[];
29
- calls?: readonly string[];
30
- error?: {
31
- tag: string;
32
- classification?: ErrorClassification;
33
- origin?: string;
34
- stack?: string[];
35
- };
36
- retryCount?: number;
37
- timedOut?: boolean;
38
- }>;
39
- integrityWarnings?: string[];
40
- summary: {
41
- totalSteps: number;
42
- errors: number;
43
- retries: number;
44
- cacheHits: number;
45
- timeouts: number;
46
- byDomain?: Record<string, {
47
- total: number;
48
- errors: number;
49
- avgDurationMs: number;
50
- }>;
51
- bySeverity?: Record<string, number>;
52
- topFailingTags?: Array<{
53
- tag: string;
54
- count: number;
55
- }>;
56
- };
57
- }
58
- interface DiagnosticsCollectorOptions {
59
- includeStacks?: boolean;
60
- redact?: (event: WorkflowWideEvent) => WorkflowWideEvent;
61
- }
62
- declare function createDiagnosticsCollector(options?: DiagnosticsCollectorOptions): {
63
- handleEvent(event: WorkflowEvent<unknown>): void;
64
- wideEvent(): WorkflowWideEvent;
65
- reset(): void;
66
- };
67
-
68
- export { type DiagnosticsCollectorOptions, type WorkflowWideEvent, createDiagnosticsCollector };
@@ -1,68 +0,0 @@
1
- import { e as ErrorClassification, ag as WorkflowEvent } from './run-entry-Dduz-is2.js';
2
- import './errors.js';
3
- import './tagged-error.js';
4
- import './slugs.js';
5
-
6
- interface WorkflowWideEvent {
7
- workflowId: string;
8
- workflowName?: string;
9
- startedAt: string;
10
- endedAt: string;
11
- durationMs: number;
12
- status: "success" | "error" | "cancelled";
13
- error?: {
14
- tag: string;
15
- classification?: ErrorClassification;
16
- origin?: string;
17
- stack?: string[];
18
- };
19
- steps: Array<{
20
- stepId: string;
21
- name: string;
22
- key?: string;
23
- status: "success" | "error" | "cached" | "skipped" | "aborted";
24
- durationMs?: number;
25
- domain?: string;
26
- owner?: string;
27
- intent?: string;
28
- tags?: readonly string[];
29
- calls?: readonly string[];
30
- error?: {
31
- tag: string;
32
- classification?: ErrorClassification;
33
- origin?: string;
34
- stack?: string[];
35
- };
36
- retryCount?: number;
37
- timedOut?: boolean;
38
- }>;
39
- integrityWarnings?: string[];
40
- summary: {
41
- totalSteps: number;
42
- errors: number;
43
- retries: number;
44
- cacheHits: number;
45
- timeouts: number;
46
- byDomain?: Record<string, {
47
- total: number;
48
- errors: number;
49
- avgDurationMs: number;
50
- }>;
51
- bySeverity?: Record<string, number>;
52
- topFailingTags?: Array<{
53
- tag: string;
54
- count: number;
55
- }>;
56
- };
57
- }
58
- interface DiagnosticsCollectorOptions {
59
- includeStacks?: boolean;
60
- redact?: (event: WorkflowWideEvent) => WorkflowWideEvent;
61
- }
62
- declare function createDiagnosticsCollector(options?: DiagnosticsCollectorOptions): {
63
- handleEvent(event: WorkflowEvent<unknown>): void;
64
- wideEvent(): WorkflowWideEvent;
65
- reset(): void;
66
- };
67
-
68
- export { type DiagnosticsCollectorOptions, type WorkflowWideEvent, createDiagnosticsCollector };
@@ -1,8 +0,0 @@
1
- var Ke={"step-require-id":"step-require-id","step-no-immediate-execution":"step-no-immediate-execution","step-require-thunk-for-key":"step-require-thunk-for-key","step-no-bare-await":"step-no-bare-await","step-no-try-catch-wrap":"step-no-try-catch-wrap","step-stable-cache-keys":"step-stable-cache-keys","workflow-no-floating":"workflow-no-floating","workflow-options-position":"workflow-options-position","workflow-callback-shape":"workflow-callback-shape","workflow-no-callable-form":"workflow-no-callable-form","workflow-no-dynamic-import":"workflow-no-dynamic-import","result-no-floating":"result-no-floating","result-require-handling":"result-require-handling","result-no-double-wrap":"result-no-double-wrap","result-no-manual-propagation":"result-no-manual-propagation","result-no-direct-ok-err":"result-no-direct-ok-err","error-check-unexpected-first":"error-check-unexpected-first","error-access-cause":"error-access-cause","error-normalize":"error-normalize","error-no-throw-in-deps":"error-no-throw-in-deps","concurrency-no-promise-all":"concurrency-no-promise-all","concurrency-no-promise-race":"concurrency-no-promise-race","concurrency-no-promise-allsettled":"concurrency-no-promise-allsettled","runtime-step-timeout":"runtime-step-timeout","runtime-step-aborted":"runtime-step-aborted","runtime-retry-exhausted":"runtime-retry-exhausted","runtime-rate-limit":"runtime-rate-limit","runtime-circuit-open":"runtime-circuit-open","runtime-unexpected":"runtime-unexpected","runtime-resolver-not-found":"runtime-resolver-not-found","runtime-saga-compensation":"runtime-saga-compensation"};function ye(r){return`https://jagreehal.github.io/awaitly/rules/#${r}`}var Qe=Object.keys(Ke);var ae=class extends Error{_tag};function q(r,e){return class extends ae{_tag=r;constructor(c,i){let P=e?.message?e.message(c??{}):r;if(super(P),this.name=r,e?.slug!==void 0){if(!e.hint)throw new TypeError(`TaggedError: 'hint' is required when 'slug' is set (slug: "${e.slug}")`);Object.defineProperty(this,"code",{value:e.slug,enumerable:!0,writable:!1,configurable:!1}),Object.defineProperty(this,"hint",{value:e.hint,enumerable:!0,writable:!1,configurable:!1}),Object.defineProperty(this,"docsUrl",{value:ye(e.slug),enumerable:!0,writable:!1,configurable:!1})}if(Object.setPrototypeOf(this,new.target.prototype),c&&typeof c=="object"){let x;if(e?.slug!==void 0){let{_tag:s,name:U,message:M,stack:j,code:V,hint:l,docsUrl:N,...F}=c;x=F}else{let{_tag:s,name:U,message:M,stack:j,...V}=c;x=V}let S=Object.prototype.hasOwnProperty.call(x,"cause"),u=S?x.cause:void 0;S&&delete x.cause;let A=i?.cause!==void 0;if(S&&A)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,x),S&&(this.cause=u),A&&(this.cause=i?.cause)}else i?.cause!==void 0&&(this.cause=i.cause)}}}Object.defineProperty(q,Symbol.hasInstance,{value:r=>r instanceof ae});(P=>{function r(x){return x instanceof Error}P.isError=r;function e(x){return x instanceof ae}P.isTaggedError=e;function c(x,S){let u=x._tag,A=S[u];return A(x)}P.match=c;function i(x,S,u){let A=x._tag,s=S[A];return s?s(x):u(x)}P.matchPartial=i})(q||={});var ge=class extends q("TimeoutError",{slug:"runtime-step-timeout",hint:"Increase the step's timeout option, or check why the upstream operation is slow.",message:e=>e.operation?`TimeoutError: ${e.operation} timed out after ${e.ms}ms`:`TimeoutError: Operation timed out after ${e.ms}ms`}){},ke=class extends q("RetryExhaustedError",{slug:"runtime-retry-exhausted",hint:"All retry attempts failed. Inspect lastError and decide whether to surface it or compensate.",message:e=>e.operation?`RetryExhaustedError: ${e.operation} failed after ${e.attempts} attempts`:`RetryExhaustedError: Operation failed after ${e.attempts} attempts`}){},Te=class extends q("RateLimitError",{slug:"runtime-rate-limit",hint:"Wait retryAfterMs before retrying, or apply step.cache to deduplicate calls.",message:e=>e.limiterName?`RateLimitError: Rate limit exceeded for ${e.limiterName}${e.retryAfterMs?`, retry after ${e.retryAfterMs}ms`:""}`:`RateLimitError: Rate limit exceeded${e.retryAfterMs?`, retry after ${e.retryAfterMs}ms`:""}`}){},Re=class extends q("CircuitBreakerOpenError",{slug:"runtime-circuit-open",hint:"The circuit is open. Wait for it to half-open or fall back to a degraded path.",message:e=>`CircuitBreakerOpenError: Circuit ${e.circuitName} is ${e.state??"OPEN"}${e.retryAfterMs?`, retry after ${Math.ceil(e.retryAfterMs/1e3)}s`:""}`}){},xe=class extends q("ValidationError",{message:e=>`ValidationError: Invalid ${e.field} - ${e.reason}`}){},he=class extends q("NotFoundError",{message:e=>e.id?`NotFoundError: ${e.resource} with id ${e.id} not found`:`NotFoundError: ${e.resource} not found`}){},be=class extends q("UnauthorizedError",{message:e=>e.reason?`UnauthorizedError: ${e.reason}`:e.action&&e.resource?`UnauthorizedError: Not authorized to ${e.action} ${e.resource}`:"UnauthorizedError: Access denied"}){},Ce=class extends q("NetworkError",{message:e=>e.url?`NetworkError: ${e.reason} (${e.url})`:`NetworkError: ${e.reason}`}){},Se=class extends q("CompensationError",{slug:"runtime-saga-compensation",hint:"A saga compensation step failed. Inspect compensationError and ensure compensation is idempotent.",message:e=>`CompensationError: Failed to compensate step ${e.step}`}){},ie=class extends q("UnexpectedError",{slug:"runtime-unexpected",hint:"An unexpected exception escaped a step. Inspect cause; consider returning a typed Result instead of throwing.",message:e=>`UnexpectedError: ${e.cause instanceof Error?e.cause.message:String(e.cause??"unknown")}`}){};function je(r){let e=r.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!e)return;let c=parseFloat(e[1]),i=e[2].toLowerCase();return{_tag:"Duration",millis:c*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[i]??1)}}function We(r){return new ie({cause:r})}function z(r){return{ok:!0,value:r}}function H(r,e){let c=e?.cause;return{ok:!1,error:r,...c!==void 0?{cause:c}:{}}}function fe(r){if(r==null)return"unknown";if(typeof r=="string")return r.trim()||"unknown";if(typeof r=="object"){let e=r;if(typeof e._tag=="string"){let c=e._tag.trim();if(c)return c}if(typeof e.tag=="string"){let c=e.tag.trim();if(c)return c}if(typeof e.code=="string"){let c=e.code.trim();if(c)return c}else if(typeof e.code=="number")return String(e.code);if(r instanceof Error&&r.name){let c=r.name.trim();if(c)return c}}return"unknown"}function Fe(r,e){if(!(!e||!r))return e[r]}function Le(r){let{intent:e,domain:c,owner:i,tags:P,stateChanges:x,emits:S,calls:u}=r;if(!e&&!c&&!i&&!P?.length&&!x?.length&&!S?.length&&!u?.length)return;let A={};return e&&(A.intent=e),c&&(A.domain=c),i&&(A.owner=i),P?.length&&(A.tags=P),x?.length&&(A.stateChanges=x),S?.length&&(A.emits=S),u?.length&&(A.calls=u),A}function Y(r,e,c,i,P){let x=fe(r),S=Fe(x,e),u={tag:x,origin:c};return S!==void 0&&(u.classification=S),i!==void 0&&(u.attempt=i),P!==void 0&&(u.cumulativeDurationMs=P),u}var oe=Symbol.for("step_timeout_marker");function Ae(r){return typeof r!="object"||r===null?!1:r.type==="STEP_TIMEOUT"?!0:oe in r}function Be(r){if(!(typeof r!="object"||r===null)){if(r.type==="STEP_TIMEOUT"){let e=r;return{timeoutMs:e.timeoutMs,stepName:e.stepName,stepKey:e.stepKey,attempt:e.attempt}}if(oe in r)return r[oe]}}var Me=Symbol("early-exit");function $e(r,e){return{[Me]:!0,error:r,meta:e}}function He(r){return typeof r=="object"&&r!==null&&r[Me]===!0}var Oe=Symbol("mapper-exception");function re(r){return{[Oe]:!0,thrown:r}}function Ve(r){return typeof r=="object"&&r!==null&&r[Oe]===!0}function Ee(r,e){let{backoff:c,initialDelay:i,maxDelay:P,jitter:x}=e,S;switch(c){case"fixed":S=i;break;case"linear":S=i*r;break;case"exponential":S=i*Math.pow(2,r-1);break}if(S=Math.min(S,P),x){let u=S*.25*Math.random();S=S+u}return Math.floor(S)}function we(r){return new Promise(e=>setTimeout(e,r))}var _e=Symbol("timeout"),ue=Symbol("timeout-option");function qe(r){return typeof r=="object"&&r!==null&&r[ue]===!0}async function Ye(r,e,c,i){let P=new AbortController,x=e.onTimeout??"error",S=()=>typeof x=="function"?x({name:c.name,key:c.key,ms:e.ms}):e.error??{type:"STEP_TIMEOUT",stepName:c.name,stepKey:c.key,timeoutMs:e.ms,attempt:c.attempt},u;i?.aborted&&P.abort(i.reason);let A;i&&!i.aborted&&(A=()=>P.abort(i.reason),i.addEventListener("abort",A,{once:!0}));let s=new Promise((M,j)=>{u=setTimeout(()=>{if(x!=="disconnect"&&P.abort(),x==="option"){j({[ue]:!0,ms:e.ms});return}j({[_e]:!0,error:S()})},e.ms)}),U;e.signal?U=Promise.resolve(r(P.signal)):U=Promise.resolve(r());try{return await Promise.race([U,s])}catch(M){if(typeof M=="object"&&M!==null&&M[ue]===!0)throw{[ue]:!0,ms:e.ms};if(typeof M=="object"&&M!==null&&M[_e]===!0){x==="disconnect"&&U.catch(()=>{});let j=M.error;if(typeof j=="object"&&j!==null&&j.type!=="STEP_TIMEOUT"){let V={timeoutMs:e.ms,stepName:c.name,stepKey:c.key,attempt:c.attempt};oe in j?j[oe]=V:Object.defineProperty(j,oe,{value:V,enumerable:!1,writable:!0,configurable:!1})}throw j}throw M}finally{clearTimeout(u),A&&i&&i.removeEventListener("abort",A)}}var ne={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,shouldRetry:()=>!0,onRetry:()=>{}};async function ve(r,e){let{onError:c,onEvent:i,catchUnexpected:P,workflowId:x,workflowName:S,context:u,_workflowSignal:A}=e&&typeof e=="object"?e:{},s=x??crypto.randomUUID(),U=P??We,M=[],j=0,V=d=>d??`step_${++j}`,l=d=>{let L=d.context!==void 0||u===void 0?d:{...d,context:u},B=S!==void 0&&L.workflowName===void 0?{...L,workflowName:S}:L;if(B.type==="step_success"){let Z=B.stepId;for(let $=M.length-1;$>=0;$--){let I=M[$];if(I.type==="race"&&!I.winnerId){I.winnerId=Z;break}}}i?.(B,u)},N=$e,F=d=>He(d),K=(d,L)=>d,v=d=>typeof d=="function"?!1:!!(d&&typeof d=="object"&&"ok"in d||d&&typeof d=="object"&&"then"in d&&typeof d.then=="function");try{let L=function(a){let E={};for(let[n,o]of Object.entries(a))if(typeof o=="function")E[n]=o;else if(o&&typeof o=="object"&&"fn"in o)E[n]=o.fn;else throw new TypeError(`step.all: operation "${n}" must be a function or { fn, errors? } object`);return E},B=function(a,E){let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),t=!1;M.push({scopeId:n,type:"parallel"});let p=()=>{if(t)return;t=!0;let m=M.findIndex(w=>w.scopeId===n);m!==-1&&M.splice(m,1),l({type:"scope_end",workflowId:s,scopeId:n,ts:Date.now(),durationMs:performance.now()-o})};l({type:"scope_start",workflowId:s,scopeId:n,scopeType:"parallel",name:a,ts:Date.now()});try{let m=await E();if(p(),!m.ok)throw c?.(m.error,a,u),N(m.error,{origin:"result",resultCause:m.cause});return m.value}catch(m){throw p(),m}})()},Z=function(a,E){let n=Object.keys(a),o=E.name??`Parallel(${n.join(", ")})`,t=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let p=performance.now(),m=!1;M.push({scopeId:t,type:"parallel"});let w=()=>{if(m)return;m=!0;let f=M.findIndex(y=>y.scopeId===t);f!==-1&&M.splice(f,1),l({type:"scope_end",workflowId:s,scopeId:t,ts:Date.now(),durationMs:performance.now()-p})};l({type:"scope_start",workflowId:s,scopeId:t,scopeType:"parallel",name:o,ts:Date.now()});try{let f=await new Promise(k=>{if(n.length===0){k([]);return}let C=!1,D=n.length,T=new Array(n.length);for(let O=0;O<n.length;O++){let R=n[O],b=O;Promise.resolve(a[R]()).catch(h=>H({type:"PROMISE_REJECTED",cause:h},{cause:{type:"PROMISE_REJECTION",reason:h}})).then(h=>{if(!C){if(!h.ok){C=!0,k([{key:R,result:h}]);return}T[b]={key:R,result:h},D--,D===0&&k(T)}})}});w();let y={};for(let{key:k,result:C}of f){if(!C.ok)throw c?.(C.error,k,u),N(C.error,{origin:"result",resultCause:C.cause});y[k]=C.value}return y}catch(f){throw w(),f}})()};var W=L,te=B,J=Z;let d=(a,E,n)=>(async()=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let o=n??{},t=Le(o),p=a,m=o.key??a,w=o.key??a,{description:f,retry:y,timeout:k}=o,C=V(m),D=i,T=D?performance.now():0,R=v(E)?()=>E:E,h={attempts:Math.max(1,y?.attempts??1),backoff:y?.backoff??ne.backoff,initialDelay:y?.initialDelay??ne.initialDelay,maxDelay:y?.maxDelay??ne.maxDelay,jitter:y?.jitter??ne.jitter,shouldRetry:y?.shouldRetry??ne.shouldRetry,onRetry:y?.onRetry??ne.onRetry};i&&l({type:"step_start",workflowId:s,stepId:C,stepKey:m,name:p,description:f,ts:Date.now(),...t&&{metadata:t}});let ee;for(let _=1;_<=h.attempts;_++){let Ue=D?performance.now():0;try{let g;if(k?g=await Ye(R,k,{name:p,key:m,attempt:_},A):g=await R(),g.ok){let Q=performance.now()-T;return l({type:"step_success",workflowId:s,stepId:C,stepKey:m,name:p,description:f,ts:Date.now(),durationMs:Q,...t&&{metadata:t}}),w&&l({type:"step_complete",workflowId:s,stepKey:w,name:p,description:f,ts:Date.now(),durationMs:Q,result:g,...t&&{metadata:t}}),g.value}if(ee=g,_<h.attempts&&h.shouldRetry(g.error,_)){let Q=Ee(_,h);l({type:"step_retry",workflowId:s,stepId:C,stepKey:m,name:p,ts:Date.now(),attempt:_+1,maxAttempts:h.attempts,delayMs:Q,error:g.error,...t&&{metadata:t},diagnostics:Y(g.error,o.errorMeta,"result",_,performance.now()-T)}),h.onRetry(g.error,_,Q),await we(Q);continue}h.attempts>1&&l({type:"step_retries_exhausted",workflowId:s,stepId:C,stepKey:m,name:p,ts:Date.now(),durationMs:performance.now()-T,attempts:_,lastError:g.error,...t&&{metadata:t},diagnostics:Y(g.error,o.errorMeta,"result",_,performance.now()-T)});break}catch(g){let Q=performance.now()-Ue;if(qe(g)){let G=g.ms;l({type:"step_timeout",workflowId:s,stepId:C,stepKey:m,name:p,ts:Date.now(),timeoutMs:G,attempt:_,...t&&{metadata:t},diagnostics:Y(g,o.errorMeta,"timeout",_)}),l({type:"step_success",workflowId:s,stepId:C,stepKey:m,name:p,description:f,ts:Date.now(),durationMs:performance.now()-T,...t&&{metadata:t}}),w&&l({type:"step_complete",workflowId:s,stepKey:w,name:p,description:f,ts:Date.now(),durationMs:performance.now()-T,result:z(void 0),...t&&{metadata:t}});return}if(F(g))throw l({type:"step_aborted",workflowId:s,stepId:C,stepKey:m,name:p,description:f,ts:Date.now(),durationMs:Q,...t&&{metadata:t}}),g;if(Ae(g)){let G=Be(g),Ne=k?.ms??G?.timeoutMs??0;if(l({type:"step_timeout",workflowId:s,stepId:C,stepKey:m,name:p,ts:Date.now(),timeoutMs:Ne,attempt:_,...t&&{metadata:t},diagnostics:Y(g,o.errorMeta,"timeout",_)}),_<h.attempts&&h.shouldRetry(g,_)){let me=Ee(_,h);l({type:"step_retry",workflowId:s,stepId:C,stepKey:m,name:p,ts:Date.now(),attempt:_+1,maxAttempts:h.attempts,delayMs:me,error:g,...t&&{metadata:t},diagnostics:Y(g,o.errorMeta,"timeout",_,performance.now()-T)}),h.onRetry(g,_,me),await we(me);continue}h.attempts>1&&l({type:"step_retries_exhausted",workflowId:s,stepId:C,stepKey:m,name:p,ts:Date.now(),durationMs:performance.now()-T,attempts:_,lastError:g,...t&&{metadata:t},diagnostics:Y(g,o.errorMeta,"timeout",_,performance.now()-T)});let de=performance.now()-T;throw l({type:"step_error",workflowId:s,stepId:C,stepKey:m,name:p,description:f,ts:Date.now(),durationMs:de,error:g,...t&&{metadata:t},diagnostics:Y(g,o.errorMeta,"timeout",_,de)}),w&&l({type:"step_complete",workflowId:s,stepKey:w,name:p,description:f,ts:Date.now(),durationMs:de,result:H(g,{cause:g}),meta:{origin:"throw",thrown:g},...t&&{metadata:t}}),c?.(g,p,u),N(g,{origin:"throw",thrown:g})}if(_<h.attempts&&h.shouldRetry(g,_)){let G=Ee(_,h);l({type:"step_retry",workflowId:s,stepId:C,stepKey:m,name:p,ts:Date.now(),attempt:_+1,maxAttempts:h.attempts,delayMs:G,error:g,...t&&{metadata:t},diagnostics:Y(g,o.errorMeta,"throw",_,performance.now()-T)}),h.onRetry(g,_,G),await we(G);continue}h.attempts>1&&!Ae(g)&&l({type:"step_retries_exhausted",workflowId:s,stepId:C,stepKey:m,name:p,ts:Date.now(),durationMs:performance.now()-T,attempts:_,lastError:g,...t&&{metadata:t},diagnostics:Y(g,o.errorMeta,"throw",_,performance.now()-T)});let pe=performance.now()-T,se;try{se=U(g)}catch(G){throw re(G)}throw l({type:"step_error",workflowId:s,stepId:C,stepKey:m,name:p,description:f,ts:Date.now(),durationMs:pe,error:se,...t&&{metadata:t},diagnostics:Y(g,o.errorMeta,"throw",_,pe)}),w&&l({type:"step_complete",workflowId:s,stepKey:w,name:p,description:f,ts:Date.now(),durationMs:pe,result:H(se,{cause:g}),meta:{origin:"throw",thrown:g},...t&&{metadata:t}}),c?.(se,p,u),N(se,{origin:"throw",thrown:g})}}let X=ee,ce=performance.now()-T,le=K(X.error,{origin:"result",resultCause:X.cause});throw l({type:"step_error",workflowId:s,stepId:C,stepKey:m,name:p,description:f,ts:Date.now(),durationMs:ce,error:le,...t&&{metadata:t},diagnostics:Y(X.error,o.errorMeta,"result",h.attempts,ce)}),w&&l({type:"step_complete",workflowId:s,stepKey:w,name:p,description:f,ts:Date.now(),durationMs:ce,result:X,meta:{origin:"result",resultCause:X.cause},...t&&{metadata:t}}),c?.(le,p,u),N(le,{origin:"result",resultCause:X.cause})})();d.try=(a,E,n)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.try() requires an explicit string ID as the first argument. Example: step.try("parse", () => JSON.parse(str), { error: "PARSE_ERROR" })');let o="error"in n?()=>n.error:n.onError;if(n.retry||n.timeout)return d.retry(a,async()=>{try{return z(await E())}catch(f){return H(o(f),{cause:f})}},{attempts:n.retry?.attempts??1,...n.retry??{},key:n.key,timeout:n.timeout});let t=n.key??a,p=a,m=a,w=i;return(async()=>{let f=w?performance.now():0;i&&l({type:"step_start",workflowId:s,stepId:m,stepKey:t,name:p,ts:Date.now()});try{let y=await E(),k=performance.now()-f;return l({type:"step_success",workflowId:s,stepId:m,stepKey:t,name:p,ts:Date.now(),durationMs:k}),t&&l({type:"step_complete",workflowId:s,stepKey:t,name:p,ts:Date.now(),durationMs:k,result:z(y)}),y}catch(y){let k=o(y),C=performance.now()-f,D=K(k,{origin:"throw",thrown:y});throw l({type:"step_error",workflowId:s,stepId:m,stepKey:t,name:p,ts:Date.now(),durationMs:C,error:D}),t&&l({type:"step_complete",workflowId:s,stepKey:t,name:p,ts:Date.now(),durationMs:C,result:H(k,{cause:y}),meta:{origin:"throw",thrown:y}}),c?.(D,p,u),N(D,{origin:"throw",thrown:y})}})()},d.fromResult=(a,E,n)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.fromResult() requires an explicit string ID as the first argument. Example: step.fromResult("callProvider", () => callProvider(input), { onError: (e) => ({ type: "FAILED" }) })');let o=n.key??a,t=a,p=a,m="error"in n?()=>n.error:n.onError,w=i;return(async()=>{let f=w?performance.now():0;i&&l({type:"step_start",workflowId:s,stepId:p,stepKey:o,name:t,ts:Date.now()});let y=await E();if(y.ok){let k=performance.now()-f;return l({type:"step_success",workflowId:s,stepId:p,stepKey:o,name:t,ts:Date.now(),durationMs:k}),o&&l({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:k,result:z(y.value)}),y.value}else{let k=m(y.error),C=performance.now()-f,D=K(k,{origin:"result",resultCause:y.error});throw l({type:"step_error",workflowId:s,stepId:p,stepKey:o,name:t,ts:Date.now(),durationMs:C,error:D}),o&&l({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:C,result:H(k,{cause:y.error}),meta:{origin:"result",resultCause:y.error}}),c?.(D,t,u),N(D,{origin:"result",resultCause:y.error})}})()},d.fromNullable=(a,E,n,o)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.fromNullable() requires an explicit string ID as the first argument. Example: step.fromNullable("getUser", () => db.find(id), () => ({ type: "NOT_FOUND" }))');return d(a,async()=>{let t=await E();return t!=null?z(t):H(n())},o)},d.retry=(a,E,n)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.retry() requires an explicit string ID as the first argument. Example: step.retry("fetchData", () => fetchData(), { attempts: 3 })');return d(a,E,{key:n.key??a,retry:{attempts:n.attempts,backoff:n.backoff,initialDelay:n.initialDelay,maxDelay:n.maxDelay,jitter:n.jitter,shouldRetry:n.shouldRetry,onRetry:n.onRetry},timeout:n.timeout})},d.withTimeout=(a,E,n)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.withTimeout() requires an explicit string ID as the first argument. Example: step.withTimeout("slowOp", () => slowOp(), { ms: 5000 })');return d(a,E,{key:n.key??a,timeout:n})},d.sleep=(a,E,n)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let o=typeof E=="string"?je(E):E;if(!o)throw new Error(`step.sleep: invalid duration '${E}'`);let t=o.millis,p=n?.signal;return d(a,async()=>{if(A?.aborted||p?.aborted){let m=new Error("Sleep aborted");throw m.name="AbortError",m}return new Promise((m,w)=>{let f={timeoutId:void 0},y=()=>{f.timeoutId&&clearTimeout(f.timeoutId);let k=new Error("Sleep aborted");k.name="AbortError",w(k)};A?.addEventListener("abort",y,{once:!0}),p?.addEventListener("abort",y,{once:!0}),f.timeoutId=setTimeout(()=>{A?.removeEventListener("abort",y),p?.removeEventListener("abort",y),m(z(void 0))},t)})},{key:n?.key??a,description:n?.description})},d.all=((...a)=>{if(typeof a[0]!="string")throw new TypeError("step.all(name, ...): first argument must be a string (step name). Example: step.all('Fetch data', { user: () => fetchUser(), posts: () => fetchPosts() })");let E=a[0],n=a[1];if(typeof n=="function")return B(E,n);if(n&&typeof n=="object"&&!Array.isArray(n)){let t=L(n);return Z(t,{name:E})}throw new TypeError("step.all(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),d.race=(a,E)=>{let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),t=!1,p={scopeId:n,type:"race",winnerId:void 0};M.push(p);let m=()=>{if(t)return;t=!0;let w=M.findIndex(f=>f.scopeId===n);w!==-1&&M.splice(w,1),l({type:"scope_end",workflowId:s,scopeId:n,ts:Date.now(),durationMs:performance.now()-o,winnerId:p.winnerId})};l({type:"scope_start",workflowId:s,scopeId:n,scopeType:"race",name:a,ts:Date.now()});try{let w=await E();if(m(),!w.ok)throw c?.(w.error,a,u),N(w.error,{origin:"result",resultCause:w.cause});return w.value}catch(w){throw m(),w}})()},d.if=(a,E,n)=>n(),d.label=d.if,d.branch=async(a,E)=>{let{condition:n,then:o,else:t}=E;if(n())return await o();if(t)return await t()},d.arm=(a,E)=>({fn:a,errors:E}),d.forEach=async(a,E,n)=>{let o=[],t=n.maxIterations,p=0,m="run"in n,w=Symbol.asyncIterator in E?E:(async function*(){yield*E})();for await(let f of w){if(t!==void 0&&p>=t)break;let y;m?y=await n.run(f,p):y=await n.item.handler(f,p,d),o.push(y),p++}return o},d.item=a=>({__forEachItemHandler:!0,handler:a}),d.dep=(a,E)=>E,d.workflow=(a,E,n)=>d(a,E,n),d.map=async(a,E,n,o)=>{let t=o?.concurrency??E.length;return d(a,()=>t>=E.length?Pe(E.map((p,m)=>n(p,m))):(async()=>{let p=[];for(let m=0;m<E.length;m+=t){let w=E.slice(m,m+t),f=await Pe(w.map((y,k)=>n(y,m+k)));if(!f.ok)return f;p.push(...f.value)}return z(p)})(),{key:o?.key})},d.withFallback=(a,E,n)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.withFallback() requires an explicit string ID as the first argument. Example: step.withFallback("getUser", () => fetchUser(id), { fallback: () => fetchFromCache(id) })');let o=n.key??a,t=a,p=V(o),m=i;return(async()=>{let w=m?performance.now():0;i&&l({type:"step_start",workflowId:s,stepId:p,stepKey:o,name:t,ts:Date.now()});let f;try{f=await E()}catch(T){if(F(T))throw l({type:"step_aborted",workflowId:s,stepId:p,stepKey:o,name:t,ts:Date.now(),durationMs:performance.now()-w}),T;let O;try{O=U(T)}catch(b){throw re(b)}if(n.on!==void 0&&n.on!==O){let b=performance.now()-w;throw l({type:"step_error",workflowId:s,stepId:p,stepKey:o,name:t,ts:Date.now(),durationMs:b,error:O}),o&&l({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:b,result:H(O,{cause:T}),meta:{origin:"throw",thrown:T}}),c?.(O,t,u),N(O,{origin:"throw",thrown:T})}let R;try{R=await n.fallback()}catch(b){if(F(b))throw l({type:"step_aborted",workflowId:s,stepId:p,stepKey:o,name:t,ts:Date.now(),durationMs:performance.now()-w}),b;let h;try{h=U(b)}catch(X){throw re(X)}let ee=performance.now()-w;throw l({type:"step_error",workflowId:s,stepId:p,stepKey:o,name:t,ts:Date.now(),durationMs:ee,error:h}),o&&l({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:ee,result:H(h,{cause:b}),meta:{origin:"throw",thrown:b}}),c?.(h,t,u),N(h,{origin:"throw",thrown:b})}if(R.ok){let b=performance.now()-w;return l({type:"step_success",workflowId:s,stepId:p,stepKey:o,name:t,ts:Date.now(),durationMs:b}),o&&l({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:b,result:R,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(O)}}),R.value}else{let b=performance.now()-w,h=K(R.error,{origin:"result",resultCause:R.cause});throw l({type:"step_error",workflowId:s,stepId:p,stepKey:o,name:t,ts:Date.now(),durationMs:b,error:h}),o&&l({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:b,result:R,meta:{origin:"result",resultCause:R.cause}}),c?.(h,t,u),N(h,{origin:"result",resultCause:R.cause})}}if(f.ok){let T=performance.now()-w;return l({type:"step_success",workflowId:s,stepId:p,stepKey:o,name:t,ts:Date.now(),durationMs:T}),o&&l({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:T,result:f}),f.value}let y=f.error;if(n.on!==void 0&&n.on!==y){let T=performance.now()-w,O=K(y,{origin:"result",resultCause:f.cause});throw l({type:"step_error",workflowId:s,stepId:p,stepKey:o,name:t,ts:Date.now(),durationMs:T,error:O}),o&&l({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:T,result:f,meta:{origin:"result",resultCause:f.cause}}),c?.(O,t,u),N(O,{origin:"result",resultCause:f.cause})}let k;try{k=await n.fallback()}catch(T){if(F(T))throw l({type:"step_aborted",workflowId:s,stepId:p,stepKey:o,name:t,ts:Date.now(),durationMs:performance.now()-w}),T;let O;try{O=U(T)}catch(b){throw re(b)}let R=performance.now()-w;throw l({type:"step_error",workflowId:s,stepId:p,stepKey:o,name:t,ts:Date.now(),durationMs:R,error:O}),o&&l({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:R,result:H(O,{cause:T}),meta:{origin:"throw",thrown:T}}),c?.(O,t,u),N(O,{origin:"throw",thrown:T})}if(k.ok){let T=performance.now()-w;return l({type:"step_success",workflowId:s,stepId:p,stepKey:o,name:t,ts:Date.now(),durationMs:T}),o&&l({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:T,result:k,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(y)}}),k.value}let C=performance.now()-w,D=K(k.error,{origin:"result",resultCause:k.cause});throw l({type:"step_error",workflowId:s,stepId:p,stepKey:o,name:t,ts:Date.now(),durationMs:C,error:D}),o&&l({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:C,result:k,meta:{origin:"result",resultCause:k.cause}}),c?.(D,t,u),N(D,{origin:"result",resultCause:k.cause})})()},d.withResource=(a,E)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.withResource() requires an explicit string ID as the first argument. Example: step.withResource("useDb", { acquire: () => connect(), use: (db) => query(db), release: (db) => db.close() })');let n=a,o=a,t=V(n),p=i;return(async()=>{let m=p?performance.now():0;i&&l({type:"step_start",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now()});let w;try{w=await E.acquire()}catch(R){if(F(R))throw l({type:"step_aborted",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now(),durationMs:performance.now()-m}),R;let b;try{b=U(R)}catch(ee){throw re(ee)}let h=performance.now()-m;throw l({type:"step_error",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now(),durationMs:h,error:b}),n&&l({type:"step_complete",workflowId:s,stepKey:n,name:o,ts:Date.now(),durationMs:h,result:H(b,{cause:R}),meta:{origin:"throw",thrown:R}}),c?.(b,o,u),N(b,{origin:"throw",thrown:R})}if(!w.ok){let R=performance.now()-m,b=K(w.error,{origin:"result",resultCause:w.cause});throw l({type:"step_error",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now(),durationMs:R,error:b}),n&&l({type:"step_complete",workflowId:s,stepKey:n,name:o,ts:Date.now(),durationMs:R,result:w,meta:{origin:"result",resultCause:w.cause}}),c?.(b,o,u),N(b,{origin:"result",resultCause:w.cause})}let f=w.value,y,k,C=!1;try{y=await E.use(f)}catch(R){if(F(R)){try{await E.release(f)}catch(b){console.warn(`[awaitly] step.withResource("${a}"): release threw after earlyExit:`,b)}throw R}k=R,C=!0}try{await E.release(f)}catch(R){console.warn(`[awaitly] step.withResource("${a}"): release threw:`,R)}if(C){let R;try{R=U(k)}catch(h){throw re(h)}let b=performance.now()-m;throw l({type:"step_error",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now(),durationMs:b,error:R}),n&&l({type:"step_complete",workflowId:s,stepKey:n,name:o,ts:Date.now(),durationMs:b,result:H(R,{cause:k}),meta:{origin:"throw",thrown:k}}),c?.(R,o,u),N(R,{origin:"throw",thrown:k})}let D=y;if(D.ok){let R=performance.now()-m;return l({type:"step_success",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now(),durationMs:R}),n&&l({type:"step_complete",workflowId:s,stepKey:n,name:o,ts:Date.now(),durationMs:R,result:D}),D.value}let T=performance.now()-m,O=K(D.error,{origin:"result",resultCause:D.cause});throw l({type:"step_error",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now(),durationMs:T,error:O}),n&&l({type:"step_complete",workflowId:s,stepKey:n,name:o,ts:Date.now(),durationMs:T,result:D,meta:{origin:"result",resultCause:D.cause}}),c?.(O,o,u),N(O,{origin:"result",resultCause:D.cause})})()};let I=await r({step:d});if(process.env.NODE_ENV!=="production"&&I!==null&&typeof I=="object"&&"ok"in I&&typeof I.ok=="boolean"){let a=I;(a.ok===!0&&"value"in a||a.ok===!1&&"error"in a)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
2
-
3
- Incorrect: return ok({ data });
4
- Correct: return { data };
5
-
6
- See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return z(I)}catch(d){if(Ve(d))throw d.thrown;if(F(d)){let B=d.meta.origin==="throw"?d.meta.thrown:d.meta.origin==="result"?d.meta.resultCause:void 0;return H(d.error,{cause:B})}let L=U(d);return c?.(L,"unexpected",u),H(L,{cause:d})}}ve.strict=(r,e)=>ve(r,e);async function Pe(r){return r.length===0?z([]):new Promise(e=>{let c=!1,i=r.length,P=new Array(r.length);for(let x=0;x<r.length;x++){let S=x;Promise.resolve(r[S]).catch(u=>H({type:"PROMISE_REJECTED",cause:u},{cause:{type:"PROMISE_REJECTION",reason:u}})).then(u=>{if(!c){if(!u.ok){c=!0,e(u);return}P[S]=u.value,i--,i===0&&e(z(P))}})}})}function Ie(){return{terminalSeen:!1,steps:new Map,stepKeyToId:new Map,counters:{errors:0,retries:0,cacheHits:0,timeouts:0},integrityWarnings:[]}}function ze(r,e){let c=r.steps.get(e);return c||(c={events:[],terminalSeen:!1},r.steps.set(e,c)),c}function Je(r,e){if("stepId"in r&&typeof r.stepId=="string")return r.stepId;if("stepKey"in r&&typeof r.stepKey=="string"){let c=e.stepKeyToId.get(r.stepKey);return c?e.steps.get(c)?.terminalSeen?(e.stepKeyToId.delete(r.stepKey),r.stepKey):c:r.stepKey}}var Ge=new Set(["step_success","step_error","step_cache_hit","step_skipped","step_aborted"]);function De(r,e,c){let P={tag:c?.tag??fe(r)};return c?.classification&&(P.classification=c.classification),c?.origin&&(P.origin=c.origin),e&&r instanceof Error&&r.stack&&(P.stack=r.stack.split(`
7
- `).map(x=>x.trim())),P}function Xe(r){let e=r?.includeStacks??!1,c=r?.redact,i=Ie();function P(u){switch(u.type){case"workflow_start":i.workflowId=u.workflowId,i.workflowName=u.workflowName,i.startedAt=u.ts;break;case"workflow_success":i.terminalSeen&&i.integrityWarnings.push("Duplicate workflow terminal event: workflow_success"),i.status="success",i.endedAt=u.ts,i.terminalSeen=!0;break;case"workflow_error":i.terminalSeen&&i.integrityWarnings.push("Duplicate workflow terminal event: workflow_error"),i.status="error",i.endedAt=u.ts,i.workflowError=u.error,i.terminalSeen=!0;break;case"workflow_cancelled":i.terminalSeen&&i.integrityWarnings.push("Duplicate workflow terminal event: workflow_cancelled"),i.status="cancelled",i.endedAt=u.ts,i.terminalSeen=!0;break;default:{let A=Je(u,i);if(!A)break;let s=ze(i,A);switch(s.events.push(u),u.type){case"step_start":if(s.metadata=u.metadata,s.startTs=u.ts,s.name=u.name,s.key=u.stepKey,u.stepKey&&u.stepId!==u.stepKey){i.stepKeyToId.set(u.stepKey,A);let U=i.steps.get(u.stepKey);U&&U!==s&&U.startTs===void 0&&(s.events.unshift(...U.events),U.terminalSeen&&(s.terminalSeen=!0),i.steps.delete(u.stepKey))}break;case"step_success":case"step_error":case"step_cache_hit":case"step_skipped":case"step_aborted":s.terminalSeen&&i.integrityWarnings.push(`Duplicate step terminal event for step "${A}": ${u.type}`),s.terminalSeen=!0,u.type==="step_error"&&i.counters.errors++,u.type==="step_cache_hit"&&i.counters.cacheHits++,!s.name&&"name"in u&&u.name&&(s.name=u.name),!s.key&&"stepKey"in u&&u.stepKey&&(s.key=u.stepKey),!s.metadata&&"metadata"in u&&u.metadata&&(s.metadata=u.metadata);break;case"step_retry":i.counters.retries++;break;case"step_timeout":i.counters.timeouts++;break}break}}}function x(){let u=[...i.integrityWarnings];i.terminalSeen||u.push("wideEvent() called before workflow terminal event");let A=i.startedAt??0,s=i.endedAt??0,U=[],M=new Map,j=new Map,V=new Map;for(let[K,v]of i.steps){v.events.some(I=>I.type==="step_start")||u.push(`No step_start seen for step "${K}"`);let W="error",te,J,d,L=[...v.events].reverse().find(I=>Ge.has(I.type));if(L){switch(L.type){case"step_success":W="success";break;case"step_error":W="error";break;case"step_cache_hit":W="cached";break;case"step_skipped":W="skipped";break;case"step_aborted":W="aborted";break}"durationMs"in L&&typeof L.durationMs=="number"&&(te=L.durationMs)}else v.events.some(a=>a.type==="step_timeout")&&(W="error",d=!0);let B=[...v.events].reverse().find(I=>I.type==="step_error"||I.type==="step_retries_exhausted");if(B){let I="error"in B?B.error:"lastError"in B?B.lastError:void 0,a="diagnostics"in B?B.diagnostics:void 0;if(J=De(I,e,a),J?.tag&&V.set(J.tag,(V.get(J.tag)??0)+1),J?.classification?.severity){let E=J.classification.severity;j.set(E,(j.get(E)??0)+1)}}d===void 0&&v.events.some(a=>a.type==="step_timeout")&&(d=!0);let Z=v.events.filter(I=>I.type==="step_retry").length;if(v.metadata?.domain&&(W==="success"||W==="error")){let I=v.metadata.domain,a=M.get(I);a||(a={total:0,errors:0,totalDuration:0,counted:0},M.set(I,a)),a.total++,W==="error"&&a.errors++,te!==void 0&&(a.totalDuration+=te,a.counted++)}let $={stepId:K,name:v.name??K,status:W};v.key&&($.key=v.key),te!==void 0&&($.durationMs=te),v.metadata?.domain&&($.domain=v.metadata.domain),v.metadata?.owner&&($.owner=v.metadata.owner),v.metadata?.intent&&($.intent=v.metadata.intent),v.metadata?.tags?.length&&($.tags=v.metadata.tags),v.metadata?.calls?.length&&($.calls=v.metadata.calls),J&&($.error=J),Z>0&&($.retryCount=Z),d&&($.timedOut=d),U.push($)}let l={totalSteps:U.length,errors:i.counters.errors,retries:i.counters.retries,cacheHits:i.counters.cacheHits,timeouts:i.counters.timeouts};if(M.size>0){let K={};for(let[v,W]of M)K[v]={total:W.total,errors:W.errors,avgDurationMs:W.counted>0?W.totalDuration/W.counted:0};l.byDomain=K}if(j.size>0){let K={};for(let[v,W]of j)K[v]=W;l.bySeverity=K}V.size>0&&(l.topFailingTags=[...V.entries()].map(([K,v])=>({tag:K,count:v})).sort((K,v)=>v.count-K.count));let N;i.status==="error"&&i.workflowError!==void 0&&(N=De(i.workflowError,e));let F={workflowId:i.workflowId??"unknown",startedAt:new Date(A).toISOString(),endedAt:new Date(s).toISOString(),durationMs:s-A,status:i.status??"error",steps:U,summary:l};return i.workflowName&&(F.workflowName=i.workflowName),N&&(F.error=N),u.length>0&&(F.integrityWarnings=u),c&&(F=c(F)),F}function S(){i=Ie()}return{handleEvent:P,wideEvent:x,reset:S}}export{Xe as createDiagnosticsCollector};
8
- //# sourceMappingURL=diagnostics.js.map