awaitly 1.35.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 +29 -4
  14. package/dist/result.d.ts +29 -4
  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-DGs0tySr.d.cts → types-B8NfNRGX.d.ts} +1078 -1502
  24. package/dist/{run-entry-BOuNyVoO.d.ts → types-BZ2f4MRR.d.cts} +1078 -1502
  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 +3 -168
  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-By77n4Fa.d.ts +0 -15
  75. package/dist/di-OJfsohf-.d.cts +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-4sV7mTqj.d.cts +0 -72
  123. package/dist/guards-BIX05ALH.d.ts +0 -72
  124. package/dist/hitl-DFn4Xa_l.d.cts +0 -468
  125. package/dist/hitl-DU5VpKq7.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-CnvBryQB.d.ts +0 -417
  133. package/dist/index-DEZEf8Fs.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-B-8PjnSR.d.cts +0 -831
  149. package/dist/persistence-entry-D8zRkLiT.d.ts +0 -831
  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-BziYHFkD.d.ts +0 -323
  235. package/dist/types-C5jLEUqY.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, ae as WorkflowEvent } from './run-entry-DGs0tySr.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, ae as WorkflowEvent } from './run-entry-BOuNyVoO.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 Le={"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 Re(e){return`https://jagreehal.github.io/awaitly/rules/#${e}`}var or=Object.keys(Le);var ce=class extends Error{_tag};function H(e,r){return class extends ce{_tag=e;constructor(p,a){let S=r?.message?r.message(p??{}):e;if(super(S),this.name=e,r?.slug!==void 0){if(!r.hint)throw new TypeError(`TaggedError: 'hint' is required when 'slug' is set (slug: "${r.slug}")`);Object.defineProperty(this,"code",{value:r.slug,enumerable:!0,writable:!1,configurable:!1}),Object.defineProperty(this,"hint",{value:r.hint,enumerable:!0,writable:!1,configurable:!1}),Object.defineProperty(this,"docsUrl",{value:Re(r.slug),enumerable:!0,writable:!1,configurable:!1})}if(Object.setPrototypeOf(this,new.target.prototype),p&&typeof p=="object"){let m;if(r?.slug!==void 0){let{_tag:_,name:A,message:j,stack:s,code:W,hint:B,docsUrl:te,...$}=p;m=$}else{let{_tag:_,name:A,message:j,stack:s,...W}=p;m=W}let R=Object.prototype.hasOwnProperty.call(m,"cause"),l=R?m.cause:void 0;R&&delete m.cause;let M=a?.cause!==void 0;if(R&&M)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,m),R&&(this.cause=l),M&&(this.cause=a?.cause)}else a?.cause!==void 0&&(this.cause=a.cause)}}}Object.defineProperty(H,Symbol.hasInstance,{value:e=>e instanceof ce});(S=>{function e(m){return m instanceof Error}S.isError=e;function r(m){return m instanceof ce}S.isTaggedError=r;function p(m,R){let l=m._tag,M=R[l];return M(m)}S.match=p;function a(m,R,l){let M=m._tag,_=R[M];return _?_(m):l(m)}S.matchPartial=a})(H||={});var xe=class extends H("TimeoutError",{slug:"runtime-step-timeout",hint:"Increase the step's timeout option, or check why the upstream operation is slow.",message:r=>r.operation?`TimeoutError: ${r.operation} timed out after ${r.ms}ms`:`TimeoutError: Operation timed out after ${r.ms}ms`}){},Ce=class extends H("RetryExhaustedError",{slug:"runtime-retry-exhausted",hint:"All retry attempts failed. Inspect lastError and decide whether to surface it or compensate.",message:r=>r.operation?`RetryExhaustedError: ${r.operation} failed after ${r.attempts} attempts`:`RetryExhaustedError: Operation failed after ${r.attempts} attempts`}){},he=class extends H("RateLimitError",{slug:"runtime-rate-limit",hint:"Wait retryAfterMs before retrying, or apply step.cache to deduplicate calls.",message:r=>r.limiterName?`RateLimitError: Rate limit exceeded for ${r.limiterName}${r.retryAfterMs?`, retry after ${r.retryAfterMs}ms`:""}`:`RateLimitError: Rate limit exceeded${r.retryAfterMs?`, retry after ${r.retryAfterMs}ms`:""}`}){},be=class extends H("CircuitBreakerOpenError",{slug:"runtime-circuit-open",hint:"The circuit is open. Wait for it to half-open or fall back to a degraded path.",message:r=>`CircuitBreakerOpenError: Circuit ${r.circuitName} is ${r.state??"OPEN"}${r.retryAfterMs?`, retry after ${Math.ceil(r.retryAfterMs/1e3)}s`:""}`}){},Ae=class extends H("ValidationError",{message:r=>`ValidationError: Invalid ${r.field} - ${r.reason}`}){},Se=class extends H("NotFoundError",{message:r=>r.id?`NotFoundError: ${r.resource} with id ${r.id} not found`:`NotFoundError: ${r.resource} not found`}){},Pe=class extends H("UnauthorizedError",{message:r=>r.reason?`UnauthorizedError: ${r.reason}`:r.action&&r.resource?`UnauthorizedError: Not authorized to ${r.action} ${r.resource}`:"UnauthorizedError: Access denied"}){},ve=class extends H("NetworkError",{message:r=>r.url?`NetworkError: ${r.reason} (${r.url})`:`NetworkError: ${r.reason}`}){},_e=class extends H("CompensationError",{slug:"runtime-saga-compensation",hint:"A saga compensation step failed. Inspect compensationError and ensure compensation is idempotent.",message:r=>`CompensationError: Failed to compensate step ${r.step}`}){},le=class extends H("UnexpectedError",{slug:"runtime-unexpected",hint:"An unexpected exception escaped a step. Inspect cause; consider returning a typed Result instead of throwing.",message:r=>`UnexpectedError: ${r.cause instanceof Error?r.cause.message:String(r.cause??"unknown")}`}){};function Oe(e){return{ok:!0,value:e}}var Ve=e=>typeof e=="object"&&e!==null&&"ok"in e&&typeof e.ok=="boolean"&&(e.ok?"value"in e:"error"in e),Me=(e,r)=>{let p={},a=new Map;for(let S of Object.keys(e)){let m=e[S];typeof m=="function"&&(p[S]=(...R)=>{let l=(a.get(S)??0)+1;a.set(S,l);let M=l===1?S:`${S}#${l}`;return r(M,async()=>{let _=await m(...R);return Ve(_)?_:Oe(_)})})}return p};function He(e){let r=e.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!r)return;let p=parseFloat(r[1]),a=r[2].toLowerCase();return{_tag:"Duration",millis:p*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[a]??1)}}function $e(e){return new le({cause:e})}function J(e){return{ok:!0,value:e}}function L(e,r){let p=r?.cause;return{ok:!1,error:e,...p!==void 0?{cause:p}:{}}}function ge(e){if(e==null)return"unknown";if(typeof e=="string")return e.trim()||"unknown";if(typeof e=="object"){let r=e;if(typeof r._tag=="string"){let p=r._tag.trim();if(p)return p}if(typeof r.tag=="string"){let p=r.tag.trim();if(p)return p}if(typeof r.code=="string"){let p=r.code.trim();if(p)return p}else if(typeof r.code=="number")return String(r.code);if(e instanceof Error&&e.name){let p=e.name.trim();if(p)return p}}return"unknown"}function qe(e,r){if(!(!r||!e))return r[e]}function Ye(e){let{intent:r,domain:p,owner:a,tags:S,stateChanges:m,emits:R,calls:l}=e;if(!r&&!p&&!a&&!S?.length&&!m?.length&&!R?.length&&!l?.length)return;let M={};return r&&(M.intent=r),p&&(M.domain=p),a&&(M.owner=a),S?.length&&(M.tags=S),m?.length&&(M.stateChanges=m),R?.length&&(M.emits=R),l?.length&&(M.calls=l),M}function q(e,r,p,a,S){let m=ge(e),R=qe(m,r),l={tag:m,origin:p};return R!==void 0&&(l.classification=R),a!==void 0&&(l.attempt=a),S!==void 0&&(l.cumulativeDurationMs=S),l}var ie=Symbol.for("step_timeout_marker");function Ie(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:ie in e}function ze(e){if(!(typeof e!="object"||e===null)){if(e.type==="STEP_TIMEOUT"){let r=e;return{timeoutMs:r.timeoutMs,stepName:r.stepName,stepKey:r.stepKey,attempt:r.attempt}}if(ie in e)return e[ie]}}var Ke=Symbol("early-exit");function Je(e,r){return{[Ke]:!0,error:e,meta:r}}function Ge(e){return typeof e=="object"&&e!==null&&e[Ke]===!0}var Ne=Symbol("mapper-exception");function se(e){return{[Ne]:!0,thrown:e}}function Xe(e){return typeof e=="object"&&e!==null&&e[Ne]===!0}function ye(e,r){let{backoff:p,initialDelay:a,maxDelay:S,jitter:m}=r,R;switch(p){case"fixed":R=a;break;case"linear":R=a*e;break;case"exponential":R=a*Math.pow(2,e-1);break}if(R=Math.min(R,S),m){let l=R*.25*Math.random();R=R+l}return Math.floor(R)}function ke(e){return new Promise(r=>setTimeout(r,e))}var De=Symbol("timeout"),pe=Symbol("timeout-option");function Ze(e){return typeof e=="object"&&e!==null&&e[pe]===!0}async function Qe(e,r,p,a){let S=new AbortController,m=r.onTimeout??"error",R=()=>typeof m=="function"?m({name:p.name,key:p.key,ms:r.ms}):r.error??{type:"STEP_TIMEOUT",stepName:p.name,stepKey:p.key,timeoutMs:r.ms,attempt:p.attempt},l;a?.aborted&&S.abort(a.reason);let M;a&&!a.aborted&&(M=()=>S.abort(a.reason),a.addEventListener("abort",M,{once:!0}));let _=new Promise((j,s)=>{l=setTimeout(()=>{if(m!=="disconnect"&&S.abort(),m==="option"){s({[pe]:!0,ms:r.ms});return}s({[De]:!0,error:R()})},r.ms)}),A;r.signal?A=Promise.resolve(e(S.signal)):A=Promise.resolve(e());try{return await Promise.race([A,_])}catch(j){if(typeof j=="object"&&j!==null&&j[pe]===!0)throw{[pe]:!0,ms:r.ms};if(typeof j=="object"&&j!==null&&j[De]===!0){m==="disconnect"&&A.catch(()=>{});let s=j.error;if(typeof s=="object"&&s!==null&&s.type!=="STEP_TIMEOUT"){let W={timeoutMs:r.ms,stepName:p.name,stepKey:p.key,attempt:p.attempt};ie in s?s[ie]=W:Object.defineProperty(s,ie,{value:W,enumerable:!1,writable:!0,configurable:!1})}throw s}throw j}finally{clearTimeout(l),M&&a&&a.removeEventListener("abort",M)}}var ae={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,shouldRetry:()=>!0,onRetry:()=>{}};async function Te(e,r,p){if(typeof e!="function"){let E=e,K=r;if(typeof K!="function")throw new TypeError("[awaitly] run(deps, fn) requires a callback as the second argument. Example: run({ getUser }, async (s) => s.getUser(id))");return Te(({step:F})=>K(Me(E,F),{step:F}),p)}let a=e,S=r,{onError:m,onEvent:R,catchUnexpected:l,workflowId:M,workflowName:_,context:A,_workflowSignal:j}=S&&typeof S=="object"?S:{},s=M??crypto.randomUUID(),W=l??$e,B=[],te=0,$=E=>E??`step_${++te}`,i=E=>{let K=E.context!==void 0||A===void 0?E:{...E,context:A},N=_!==void 0&&K.workflowName===void 0?{...K,workflowName:_}:K;if(N.type==="step_success"){let F=N.stepId;for(let ee=B.length-1;ee>=0;ee--){let z=B[ee];if(z.type==="race"&&!z.winnerId){z.winnerId=F;break}}}R?.(N,A)},k=Je,D=E=>Ge(E),V=(E,K)=>E,Y=E=>typeof E=="function"?!1:!!(E&&typeof E=="object"&&"ok"in E||E&&typeof E=="object"&&"then"in E&&typeof E.then=="function");try{let K=function(u){let f={};for(let[n,o]of Object.entries(u))if(typeof o=="function")f[n]=o;else if(o&&typeof o=="object"&&"fn"in o)f[n]=o.fn;else throw new TypeError(`step.all: operation "${n}" must be a function or { fn, errors? } object`);return f},N=function(u,f){let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),t=!1;B.push({scopeId:n,type:"parallel"});let c=()=>{if(t)return;t=!0;let d=B.findIndex(w=>w.scopeId===n);d!==-1&&B.splice(d,1),i({type:"scope_end",workflowId:s,scopeId:n,ts:Date.now(),durationMs:performance.now()-o})};i({type:"scope_start",workflowId:s,scopeId:n,scopeType:"parallel",name:u,ts:Date.now()});try{let d=await f();if(c(),!d.ok)throw m?.(d.error,u,A),k(d.error,{origin:"result",resultCause:d.cause});return d.value}catch(d){throw c(),d}})()},F=function(u,f){let n=Object.keys(u),o=f.name??`Parallel(${n.join(", ")})`,t=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let c=performance.now(),d=!1;B.push({scopeId:t,type:"parallel"});let w=()=>{if(d)return;d=!0;let y=B.findIndex(T=>T.scopeId===t);y!==-1&&B.splice(y,1),i({type:"scope_end",workflowId:s,scopeId:t,ts:Date.now(),durationMs:performance.now()-c})};i({type:"scope_start",workflowId:s,scopeId:t,scopeType:"parallel",name:o,ts:Date.now()});try{let y=await new Promise(x=>{if(n.length===0){x([]);return}let v=!1,U=n.length,C=new Array(n.length);for(let I=0;I<n.length;I++){let h=n[I],P=I;Promise.resolve(u[h]()).catch(b=>L({type:"PROMISE_REJECTED",cause:b},{cause:{type:"PROMISE_REJECTION",reason:b}})).then(b=>{if(!v){if(!b.ok){v=!0,x([{key:h,result:b}]);return}C[P]={key:h,result:b},U--,U===0&&x(C)}})}});w();let T={};for(let{key:x,result:v}of y){if(!v.ok)throw m?.(v.error,x,A),k(v.error,{origin:"result",resultCause:v.cause});T[x]=v.value}return T}catch(y){throw w(),y}})()};var ne=K,oe=N,X=F;let E=(u,f,n)=>(async()=>{if(typeof u!="string"||u.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=Ye(o),c=u,d=o.key??u,w=o.key??u,{description:y,retry:T,timeout:x}=o,v=$(d),U=R,C=U?performance.now():0,h=Y(f)?()=>f:f,b={attempts:Math.max(1,T?.attempts??1),backoff:T?.backoff??ae.backoff,initialDelay:T?.initialDelay??ae.initialDelay,maxDelay:T?.maxDelay??ae.maxDelay,jitter:T?.jitter??ae.jitter,shouldRetry:T?.shouldRetry??ae.shouldRetry,onRetry:T?.onRetry??ae.onRetry};R&&i({type:"step_start",workflowId:s,stepId:v,stepKey:d,name:c,description:y,ts:Date.now(),...t&&{metadata:t}});let re;for(let O=1;O<=b.attempts;O++){let We=U?performance.now():0;try{let g;if(x?g=await Qe(h,x,{name:c,key:d,attempt:O},j):g=await h(),g.ok){let Q=performance.now()-C;return i({type:"step_success",workflowId:s,stepId:v,stepKey:d,name:c,description:y,ts:Date.now(),durationMs:Q,...t&&{metadata:t}}),w&&i({type:"step_complete",workflowId:s,stepKey:w,name:c,description:y,ts:Date.now(),durationMs:Q,result:g,...t&&{metadata:t}}),g.value}if(re=g,O<b.attempts&&b.shouldRetry(g.error,O)){let Q=ye(O,b);i({type:"step_retry",workflowId:s,stepId:v,stepKey:d,name:c,ts:Date.now(),attempt:O+1,maxAttempts:b.attempts,delayMs:Q,error:g.error,...t&&{metadata:t},diagnostics:q(g.error,o.errorMeta,"result",O,performance.now()-C)}),b.onRetry(g.error,O,Q),await ke(Q);continue}b.attempts>1&&i({type:"step_retries_exhausted",workflowId:s,stepId:v,stepKey:d,name:c,ts:Date.now(),durationMs:performance.now()-C,attempts:O,lastError:g.error,...t&&{metadata:t},diagnostics:q(g.error,o.errorMeta,"result",O,performance.now()-C)});break}catch(g){let Q=performance.now()-We;if(Ze(g)){let G=g.ms;i({type:"step_timeout",workflowId:s,stepId:v,stepKey:d,name:c,ts:Date.now(),timeoutMs:G,attempt:O,...t&&{metadata:t},diagnostics:q(g,o.errorMeta,"timeout",O)}),i({type:"step_success",workflowId:s,stepId:v,stepKey:d,name:c,description:y,ts:Date.now(),durationMs:performance.now()-C,...t&&{metadata:t}}),w&&i({type:"step_complete",workflowId:s,stepKey:w,name:c,description:y,ts:Date.now(),durationMs:performance.now()-C,result:J(void 0),...t&&{metadata:t}});return}if(D(g))throw i({type:"step_aborted",workflowId:s,stepId:v,stepKey:d,name:c,description:y,ts:Date.now(),durationMs:Q,...t&&{metadata:t}}),g;if(Ie(g)){let G=ze(g),Be=x?.ms??G?.timeoutMs??0;if(i({type:"step_timeout",workflowId:s,stepId:v,stepKey:d,name:c,ts:Date.now(),timeoutMs:Be,attempt:O,...t&&{metadata:t},diagnostics:q(g,o.errorMeta,"timeout",O)}),O<b.attempts&&b.shouldRetry(g,O)){let we=ye(O,b);i({type:"step_retry",workflowId:s,stepId:v,stepKey:d,name:c,ts:Date.now(),attempt:O+1,maxAttempts:b.attempts,delayMs:we,error:g,...t&&{metadata:t},diagnostics:q(g,o.errorMeta,"timeout",O,performance.now()-C)}),b.onRetry(g,O,we),await ke(we);continue}b.attempts>1&&i({type:"step_retries_exhausted",workflowId:s,stepId:v,stepKey:d,name:c,ts:Date.now(),durationMs:performance.now()-C,attempts:O,lastError:g,...t&&{metadata:t},diagnostics:q(g,o.errorMeta,"timeout",O,performance.now()-C)});let fe=performance.now()-C;throw i({type:"step_error",workflowId:s,stepId:v,stepKey:d,name:c,description:y,ts:Date.now(),durationMs:fe,error:g,...t&&{metadata:t},diagnostics:q(g,o.errorMeta,"timeout",O,fe)}),w&&i({type:"step_complete",workflowId:s,stepKey:w,name:c,description:y,ts:Date.now(),durationMs:fe,result:L(g,{cause:g}),meta:{origin:"throw",thrown:g},...t&&{metadata:t}}),m?.(g,c,A),k(g,{origin:"throw",thrown:g})}if(O<b.attempts&&b.shouldRetry(g,O)){let G=ye(O,b);i({type:"step_retry",workflowId:s,stepId:v,stepKey:d,name:c,ts:Date.now(),attempt:O+1,maxAttempts:b.attempts,delayMs:G,error:g,...t&&{metadata:t},diagnostics:q(g,o.errorMeta,"throw",O,performance.now()-C)}),b.onRetry(g,O,G),await ke(G);continue}b.attempts>1&&!Ie(g)&&i({type:"step_retries_exhausted",workflowId:s,stepId:v,stepKey:d,name:c,ts:Date.now(),durationMs:performance.now()-C,attempts:O,lastError:g,...t&&{metadata:t},diagnostics:q(g,o.errorMeta,"throw",O,performance.now()-C)});let me=performance.now()-C,ue;try{ue=W(g)}catch(G){throw se(G)}throw i({type:"step_error",workflowId:s,stepId:v,stepKey:d,name:c,description:y,ts:Date.now(),durationMs:me,error:ue,...t&&{metadata:t},diagnostics:q(g,o.errorMeta,"throw",O,me)}),w&&i({type:"step_complete",workflowId:s,stepKey:w,name:c,description:y,ts:Date.now(),durationMs:me,result:L(ue,{cause:g}),meta:{origin:"throw",thrown:g},...t&&{metadata:t}}),m?.(ue,c,A),k(ue,{origin:"throw",thrown:g})}}let Z=re,Ee=performance.now()-C,de=V(Z.error,{origin:"result",resultCause:Z.cause});throw i({type:"step_error",workflowId:s,stepId:v,stepKey:d,name:c,description:y,ts:Date.now(),durationMs:Ee,error:de,...t&&{metadata:t},diagnostics:q(Z.error,o.errorMeta,"result",b.attempts,Ee)}),w&&i({type:"step_complete",workflowId:s,stepKey:w,name:c,description:y,ts:Date.now(),durationMs:Ee,result:Z,meta:{origin:"result",resultCause:Z.cause},...t&&{metadata:t}}),m?.(de,c,A),k(de,{origin:"result",resultCause:Z.cause})})();E.try=(u,f,n)=>{if(typeof u!="string"||u.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 E.retry(u,async()=>{try{return J(await f())}catch(y){return L(o(y),{cause:y})}},{attempts:n.retry?.attempts??1,...n.retry??{},key:n.key,timeout:n.timeout});let t=n.key??u,c=u,d=u,w=R;return(async()=>{let y=w?performance.now():0;R&&i({type:"step_start",workflowId:s,stepId:d,stepKey:t,name:c,ts:Date.now()});try{let T=await f(),x=performance.now()-y;return i({type:"step_success",workflowId:s,stepId:d,stepKey:t,name:c,ts:Date.now(),durationMs:x}),t&&i({type:"step_complete",workflowId:s,stepKey:t,name:c,ts:Date.now(),durationMs:x,result:J(T)}),T}catch(T){let x=o(T),v=performance.now()-y,U=V(x,{origin:"throw",thrown:T});throw i({type:"step_error",workflowId:s,stepId:d,stepKey:t,name:c,ts:Date.now(),durationMs:v,error:U}),t&&i({type:"step_complete",workflowId:s,stepKey:t,name:c,ts:Date.now(),durationMs:v,result:L(x,{cause:T}),meta:{origin:"throw",thrown:T}}),m?.(U,c,A),k(U,{origin:"throw",thrown:T})}})()},E.fromResult=(u,f,n)=>{if(typeof u!="string"||u.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??u,t=u,c=u,d="error"in n?()=>n.error:n.onError,w=R;return(async()=>{let y=w?performance.now():0;R&&i({type:"step_start",workflowId:s,stepId:c,stepKey:o,name:t,ts:Date.now()});let T=await f();if(T.ok){let x=performance.now()-y;return i({type:"step_success",workflowId:s,stepId:c,stepKey:o,name:t,ts:Date.now(),durationMs:x}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:x,result:J(T.value)}),T.value}else{let x=d(T.error),v=performance.now()-y,U=V(x,{origin:"result",resultCause:T.error});throw i({type:"step_error",workflowId:s,stepId:c,stepKey:o,name:t,ts:Date.now(),durationMs:v,error:U}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:v,result:L(x,{cause:T.error}),meta:{origin:"result",resultCause:T.error}}),m?.(U,t,A),k(U,{origin:"result",resultCause:T.error})}})()},E.fromNullable=(u,f,n,o)=>{if(typeof u!="string"||u.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 E(u,async()=>{let t=await f();return t!=null?J(t):L(n())},o)},E.retry=(u,f,n)=>{if(typeof u!="string"||u.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 E(u,f,{key:n.key??u,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})},E.withTimeout=(u,f,n)=>{if(typeof u!="string"||u.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 E(u,f,{key:n.key??u,timeout:n})},E.sleep=(u,f,n)=>{if(typeof u!="string"||u.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 f=="string"?He(f):f;if(!o)throw new Error(`step.sleep: invalid duration '${f}'`);let t=o.millis,c=n?.signal;return E(u,async()=>{if(j?.aborted||c?.aborted){let d=new Error("Sleep aborted");throw d.name="AbortError",d}return new Promise((d,w)=>{let y={timeoutId:void 0},T=()=>{y.timeoutId&&clearTimeout(y.timeoutId);let x=new Error("Sleep aborted");x.name="AbortError",w(x)};j?.addEventListener("abort",T,{once:!0}),c?.addEventListener("abort",T,{once:!0}),y.timeoutId=setTimeout(()=>{j?.removeEventListener("abort",T),c?.removeEventListener("abort",T),d(J(void 0))},t)})},{key:n?.key??u,description:n?.description})},E.all=((...u)=>{if(typeof u[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 f=u[0],n=u[1];if(typeof n=="function")return N(f,n);if(n&&typeof n=="object"&&!Array.isArray(n)){let t=K(n);return F(t,{name:f})}throw new TypeError("step.all(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),E.race=(u,f)=>{let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),t=!1,c={scopeId:n,type:"race",winnerId:void 0};B.push(c);let d=()=>{if(t)return;t=!0;let w=B.findIndex(y=>y.scopeId===n);w!==-1&&B.splice(w,1),i({type:"scope_end",workflowId:s,scopeId:n,ts:Date.now(),durationMs:performance.now()-o,winnerId:c.winnerId})};i({type:"scope_start",workflowId:s,scopeId:n,scopeType:"race",name:u,ts:Date.now()});try{let w=await f();if(d(),!w.ok)throw m?.(w.error,u,A),k(w.error,{origin:"result",resultCause:w.cause});return w.value}catch(w){throw d(),w}})()},E.if=(u,f,n)=>n(),E.label=E.if,E.branch=async(u,f)=>{let{condition:n,then:o,else:t}=f;if(n())return await o();if(t)return await t()},E.arm=(u,f)=>({fn:u,errors:f}),E.forEach=async(u,f,n)=>{let o=[],t=n.maxIterations,c=0,d="run"in n,w=Symbol.asyncIterator in f?f:(async function*(){yield*f})();for await(let y of w){if(t!==void 0&&c>=t)break;let T;d?T=await n.run(y,c):T=await n.item.handler(y,c,E),o.push(T),c++}return o},E.item=u=>({__forEachItemHandler:!0,handler:u}),E.dep=(u,f)=>f,E.workflow=(u,f,n)=>E(u,f,n),E.map=async(u,f,n,o)=>{let t=o?.concurrency??f.length;return E(u,()=>t>=f.length?Ue(f.map((c,d)=>n(c,d))):(async()=>{let c=[];for(let d=0;d<f.length;d+=t){let w=f.slice(d,d+t),y=await Ue(w.map((T,x)=>n(T,d+x)));if(!y.ok)return y;c.push(...y.value)}return J(c)})(),{key:o?.key})},E.withFallback=(u,f,n)=>{if(typeof u!="string"||u.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??u,t=u,c=$(o),d=R;return(async()=>{let w=d?performance.now():0;R&&i({type:"step_start",workflowId:s,stepId:c,stepKey:o,name:t,ts:Date.now()});let y;try{y=await f()}catch(C){if(D(C))throw i({type:"step_aborted",workflowId:s,stepId:c,stepKey:o,name:t,ts:Date.now(),durationMs:performance.now()-w}),C;let I;try{I=W(C)}catch(P){throw se(P)}if(n.on!==void 0&&n.on!==I){let P=performance.now()-w;throw i({type:"step_error",workflowId:s,stepId:c,stepKey:o,name:t,ts:Date.now(),durationMs:P,error:I}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:P,result:L(I,{cause:C}),meta:{origin:"throw",thrown:C}}),m?.(I,t,A),k(I,{origin:"throw",thrown:C})}let h;try{h=await n.fallback()}catch(P){if(D(P))throw i({type:"step_aborted",workflowId:s,stepId:c,stepKey:o,name:t,ts:Date.now(),durationMs:performance.now()-w}),P;let b;try{b=W(P)}catch(Z){throw se(Z)}let re=performance.now()-w;throw i({type:"step_error",workflowId:s,stepId:c,stepKey:o,name:t,ts:Date.now(),durationMs:re,error:b}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:re,result:L(b,{cause:P}),meta:{origin:"throw",thrown:P}}),m?.(b,t,A),k(b,{origin:"throw",thrown:P})}if(h.ok){let P=performance.now()-w;return i({type:"step_success",workflowId:s,stepId:c,stepKey:o,name:t,ts:Date.now(),durationMs:P}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:P,result:h,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(I)}}),h.value}else{let P=performance.now()-w,b=V(h.error,{origin:"result",resultCause:h.cause});throw i({type:"step_error",workflowId:s,stepId:c,stepKey:o,name:t,ts:Date.now(),durationMs:P,error:b}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:P,result:h,meta:{origin:"result",resultCause:h.cause}}),m?.(b,t,A),k(b,{origin:"result",resultCause:h.cause})}}if(y.ok){let C=performance.now()-w;return i({type:"step_success",workflowId:s,stepId:c,stepKey:o,name:t,ts:Date.now(),durationMs:C}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:C,result:y}),y.value}let T=y.error;if(n.on!==void 0&&n.on!==T){let C=performance.now()-w,I=V(T,{origin:"result",resultCause:y.cause});throw i({type:"step_error",workflowId:s,stepId:c,stepKey:o,name:t,ts:Date.now(),durationMs:C,error:I}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:C,result:y,meta:{origin:"result",resultCause:y.cause}}),m?.(I,t,A),k(I,{origin:"result",resultCause:y.cause})}let x;try{x=await n.fallback()}catch(C){if(D(C))throw i({type:"step_aborted",workflowId:s,stepId:c,stepKey:o,name:t,ts:Date.now(),durationMs:performance.now()-w}),C;let I;try{I=W(C)}catch(P){throw se(P)}let h=performance.now()-w;throw i({type:"step_error",workflowId:s,stepId:c,stepKey:o,name:t,ts:Date.now(),durationMs:h,error:I}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:h,result:L(I,{cause:C}),meta:{origin:"throw",thrown:C}}),m?.(I,t,A),k(I,{origin:"throw",thrown:C})}if(x.ok){let C=performance.now()-w;return i({type:"step_success",workflowId:s,stepId:c,stepKey:o,name:t,ts:Date.now(),durationMs:C}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:C,result:x,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(T)}}),x.value}let v=performance.now()-w,U=V(x.error,{origin:"result",resultCause:x.cause});throw i({type:"step_error",workflowId:s,stepId:c,stepKey:o,name:t,ts:Date.now(),durationMs:v,error:U}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:t,ts:Date.now(),durationMs:v,result:x,meta:{origin:"result",resultCause:x.cause}}),m?.(U,t,A),k(U,{origin:"result",resultCause:x.cause})})()},E.withResource=(u,f)=>{if(typeof u!="string"||u.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=u,o=u,t=$(n),c=R;return(async()=>{let d=c?performance.now():0;R&&i({type:"step_start",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now()});let w;try{w=await f.acquire()}catch(h){if(D(h))throw i({type:"step_aborted",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now(),durationMs:performance.now()-d}),h;let P;try{P=W(h)}catch(re){throw se(re)}let b=performance.now()-d;throw i({type:"step_error",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now(),durationMs:b,error:P}),n&&i({type:"step_complete",workflowId:s,stepKey:n,name:o,ts:Date.now(),durationMs:b,result:L(P,{cause:h}),meta:{origin:"throw",thrown:h}}),m?.(P,o,A),k(P,{origin:"throw",thrown:h})}if(!w.ok){let h=performance.now()-d,P=V(w.error,{origin:"result",resultCause:w.cause});throw i({type:"step_error",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now(),durationMs:h,error:P}),n&&i({type:"step_complete",workflowId:s,stepKey:n,name:o,ts:Date.now(),durationMs:h,result:w,meta:{origin:"result",resultCause:w.cause}}),m?.(P,o,A),k(P,{origin:"result",resultCause:w.cause})}let y=w.value,T,x,v=!1;try{T=await f.use(y)}catch(h){if(D(h)){try{await f.release(y)}catch(P){console.warn(`[awaitly] step.withResource("${u}"): release threw after earlyExit:`,P)}throw h}x=h,v=!0}try{await f.release(y)}catch(h){console.warn(`[awaitly] step.withResource("${u}"): release threw:`,h)}if(v){let h;try{h=W(x)}catch(b){throw se(b)}let P=performance.now()-d;throw i({type:"step_error",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now(),durationMs:P,error:h}),n&&i({type:"step_complete",workflowId:s,stepKey:n,name:o,ts:Date.now(),durationMs:P,result:L(h,{cause:x}),meta:{origin:"throw",thrown:x}}),m?.(h,o,A),k(h,{origin:"throw",thrown:x})}let U=T;if(U.ok){let h=performance.now()-d;return i({type:"step_success",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now(),durationMs:h}),n&&i({type:"step_complete",workflowId:s,stepKey:n,name:o,ts:Date.now(),durationMs:h,result:U}),U.value}let C=performance.now()-d,I=V(U.error,{origin:"result",resultCause:U.cause});throw i({type:"step_error",workflowId:s,stepId:t,stepKey:n,name:o,ts:Date.now(),durationMs:C,error:I}),n&&i({type:"step_complete",workflowId:s,stepKey:n,name:o,ts:Date.now(),durationMs:C,result:U,meta:{origin:"result",resultCause:U.cause}}),m?.(I,o,A),k(I,{origin:"result",resultCause:U.cause})})()};let z=await a({step:E});if(process.env.NODE_ENV!=="production"&&z!==null&&typeof z=="object"&&"ok"in z&&typeof z.ok=="boolean"){let u=z;(u.ok===!0&&"value"in u||u.ok===!1&&"error"in u)&&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 J(z)}catch(E){if(Xe(E))throw E.thrown;if(D(E)){let N=E.meta.origin==="throw"?E.meta.thrown:E.meta.origin==="result"?E.meta.resultCause:void 0;return L(E.error,{cause:N})}let K=W(E);return m?.(K,"unexpected",A),L(K,{cause:E})}}Te.strict=(e,r)=>Te(e,r);async function Ue(e){return e.length===0?J([]):new Promise(r=>{let p=!1,a=e.length,S=new Array(e.length);for(let m=0;m<e.length;m++){let R=m;Promise.resolve(e[R]).catch(l=>L({type:"PROMISE_REJECTED",cause:l},{cause:{type:"PROMISE_REJECTION",reason:l}})).then(l=>{if(!p){if(!l.ok){p=!0,r(l);return}S[R]=l.value,a--,a===0&&r(J(S))}})}})}function je(){return{terminalSeen:!1,steps:new Map,stepKeyToId:new Map,counters:{errors:0,retries:0,cacheHits:0,timeouts:0},integrityWarnings:[]}}function er(e,r){let p=e.steps.get(r);return p||(p={events:[],terminalSeen:!1},e.steps.set(r,p)),p}function rr(e,r){if("stepId"in e&&typeof e.stepId=="string")return e.stepId;if("stepKey"in e&&typeof e.stepKey=="string"){let p=r.stepKeyToId.get(e.stepKey);return p?r.steps.get(p)?.terminalSeen?(r.stepKeyToId.delete(e.stepKey),e.stepKey):p:e.stepKey}}var tr=new Set(["step_success","step_error","step_cache_hit","step_skipped","step_aborted"]);function Fe(e,r,p){let S={tag:p?.tag??ge(e)};return p?.classification&&(S.classification=p.classification),p?.origin&&(S.origin=p.origin),r&&e instanceof Error&&e.stack&&(S.stack=e.stack.split(`
7
- `).map(m=>m.trim())),S}function nr(e){let r=e?.includeStacks??!1,p=e?.redact,a=je();function S(l){switch(l.type){case"workflow_start":a.workflowId=l.workflowId,a.workflowName=l.workflowName,a.startedAt=l.ts;break;case"workflow_success":a.terminalSeen&&a.integrityWarnings.push("Duplicate workflow terminal event: workflow_success"),a.status="success",a.endedAt=l.ts,a.terminalSeen=!0;break;case"workflow_error":a.terminalSeen&&a.integrityWarnings.push("Duplicate workflow terminal event: workflow_error"),a.status="error",a.endedAt=l.ts,a.workflowError=l.error,a.terminalSeen=!0;break;case"workflow_cancelled":a.terminalSeen&&a.integrityWarnings.push("Duplicate workflow terminal event: workflow_cancelled"),a.status="cancelled",a.endedAt=l.ts,a.terminalSeen=!0;break;default:{let M=rr(l,a);if(!M)break;let _=er(a,M);switch(_.events.push(l),l.type){case"step_start":if(_.metadata=l.metadata,_.startTs=l.ts,_.name=l.name,_.key=l.stepKey,l.stepKey&&l.stepId!==l.stepKey){a.stepKeyToId.set(l.stepKey,M);let A=a.steps.get(l.stepKey);A&&A!==_&&A.startTs===void 0&&(_.events.unshift(...A.events),A.terminalSeen&&(_.terminalSeen=!0),a.steps.delete(l.stepKey))}break;case"step_success":case"step_error":case"step_cache_hit":case"step_skipped":case"step_aborted":_.terminalSeen&&a.integrityWarnings.push(`Duplicate step terminal event for step "${M}": ${l.type}`),_.terminalSeen=!0,l.type==="step_error"&&a.counters.errors++,l.type==="step_cache_hit"&&a.counters.cacheHits++,!_.name&&"name"in l&&l.name&&(_.name=l.name),!_.key&&"stepKey"in l&&l.stepKey&&(_.key=l.stepKey),!_.metadata&&"metadata"in l&&l.metadata&&(_.metadata=l.metadata);break;case"step_retry":a.counters.retries++;break;case"step_timeout":a.counters.timeouts++;break}break}}}function m(){let l=[...a.integrityWarnings];a.terminalSeen||l.push("wideEvent() called before workflow terminal event");let M=a.startedAt??0,_=a.endedAt??0,A=[],j=new Map,s=new Map,W=new Map;for(let[i,k]of a.steps){k.events.some(N=>N.type==="step_start")||l.push(`No step_start seen for step "${i}"`);let D="error",V,Y,ne,oe=[...k.events].reverse().find(N=>tr.has(N.type));if(oe){switch(oe.type){case"step_success":D="success";break;case"step_error":D="error";break;case"step_cache_hit":D="cached";break;case"step_skipped":D="skipped";break;case"step_aborted":D="aborted";break}"durationMs"in oe&&typeof oe.durationMs=="number"&&(V=oe.durationMs)}else k.events.some(F=>F.type==="step_timeout")&&(D="error",ne=!0);let X=[...k.events].reverse().find(N=>N.type==="step_error"||N.type==="step_retries_exhausted");if(X){let N="error"in X?X.error:"lastError"in X?X.lastError:void 0,F="diagnostics"in X?X.diagnostics:void 0;if(Y=Fe(N,r,F),Y?.tag&&W.set(Y.tag,(W.get(Y.tag)??0)+1),Y?.classification?.severity){let ee=Y.classification.severity;s.set(ee,(s.get(ee)??0)+1)}}ne===void 0&&k.events.some(F=>F.type==="step_timeout")&&(ne=!0);let E=k.events.filter(N=>N.type==="step_retry").length;if(k.metadata?.domain&&(D==="success"||D==="error")){let N=k.metadata.domain,F=j.get(N);F||(F={total:0,errors:0,totalDuration:0,counted:0},j.set(N,F)),F.total++,D==="error"&&F.errors++,V!==void 0&&(F.totalDuration+=V,F.counted++)}let K={stepId:i,name:k.name??i,status:D};k.key&&(K.key=k.key),V!==void 0&&(K.durationMs=V),k.metadata?.domain&&(K.domain=k.metadata.domain),k.metadata?.owner&&(K.owner=k.metadata.owner),k.metadata?.intent&&(K.intent=k.metadata.intent),k.metadata?.tags?.length&&(K.tags=k.metadata.tags),k.metadata?.calls?.length&&(K.calls=k.metadata.calls),Y&&(K.error=Y),E>0&&(K.retryCount=E),ne&&(K.timedOut=ne),A.push(K)}let B={totalSteps:A.length,errors:a.counters.errors,retries:a.counters.retries,cacheHits:a.counters.cacheHits,timeouts:a.counters.timeouts};if(j.size>0){let i={};for(let[k,D]of j)i[k]={total:D.total,errors:D.errors,avgDurationMs:D.counted>0?D.totalDuration/D.counted:0};B.byDomain=i}if(s.size>0){let i={};for(let[k,D]of s)i[k]=D;B.bySeverity=i}W.size>0&&(B.topFailingTags=[...W.entries()].map(([i,k])=>({tag:i,count:k})).sort((i,k)=>k.count-i.count));let te;a.status==="error"&&a.workflowError!==void 0&&(te=Fe(a.workflowError,r));let $={workflowId:a.workflowId??"unknown",startedAt:new Date(M).toISOString(),endedAt:new Date(_).toISOString(),durationMs:_-M,status:a.status??"error",steps:A,summary:B};return a.workflowName&&($.workflowName=a.workflowName),te&&($.error=te),l.length>0&&($.integrityWarnings=l),p&&($=p($)),$}function R(){a=je()}return{handleEvent:S,wideEvent:m,reset:R}}export{nr as createDiagnosticsCollector};
8
- //# sourceMappingURL=diagnostics.js.map