awaitly 1.31.1 → 1.32.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 (169) hide show
  1. package/dist/adapters.cjs +2 -2
  2. package/dist/adapters.cjs.map +1 -1
  3. package/dist/adapters.d.cts +3 -1
  4. package/dist/adapters.d.ts +3 -1
  5. package/dist/adapters.js +2 -2
  6. package/dist/adapters.js.map +1 -1
  7. package/dist/batch.cjs +2 -2
  8. package/dist/batch.cjs.map +1 -1
  9. package/dist/batch.d.cts +3 -1
  10. package/dist/batch.d.ts +3 -1
  11. package/dist/batch.js +2 -2
  12. package/dist/batch.js.map +1 -1
  13. package/dist/circuit-breaker.cjs +2 -2
  14. package/dist/circuit-breaker.cjs.map +1 -1
  15. package/dist/circuit-breaker.d.cts +3 -1
  16. package/dist/circuit-breaker.d.ts +3 -1
  17. package/dist/circuit-breaker.js +2 -2
  18. package/dist/circuit-breaker.js.map +1 -1
  19. package/dist/conditional.d.cts +3 -1
  20. package/dist/conditional.d.ts +3 -1
  21. package/dist/core.cjs +2 -2
  22. package/dist/core.cjs.map +1 -1
  23. package/dist/core.d.cts +2 -1
  24. package/dist/core.d.ts +2 -1
  25. package/dist/core.js +2 -2
  26. package/dist/core.js.map +1 -1
  27. package/dist/diagnostics.cjs +3 -3
  28. package/dist/diagnostics.cjs.map +1 -1
  29. package/dist/diagnostics.d.cts +3 -1
  30. package/dist/diagnostics.d.ts +3 -1
  31. package/dist/diagnostics.js +3 -3
  32. package/dist/diagnostics.js.map +1 -1
  33. package/dist/durable.cjs +3 -3
  34. package/dist/durable.cjs.map +1 -1
  35. package/dist/durable.d.cts +8 -361
  36. package/dist/durable.d.ts +8 -361
  37. package/dist/durable.js +3 -3
  38. package/dist/durable.js.map +1 -1
  39. package/dist/engine.cjs +11 -0
  40. package/dist/engine.cjs.map +1 -0
  41. package/dist/engine.d.cts +114 -0
  42. package/dist/engine.d.ts +114 -0
  43. package/dist/engine.js +11 -0
  44. package/dist/engine.js.map +1 -0
  45. package/dist/errors-entry-CMH73Eym.d.cts +339 -0
  46. package/dist/errors-entry-DOt5UUl4.d.ts +339 -0
  47. package/dist/errors.cjs +1 -1
  48. package/dist/errors.cjs.map +1 -1
  49. package/dist/errors.d.cts +2 -318
  50. package/dist/errors.d.ts +2 -318
  51. package/dist/errors.js +1 -1
  52. package/dist/errors.js.map +1 -1
  53. package/dist/fetch.cjs +2 -2
  54. package/dist/fetch.cjs.map +1 -1
  55. package/dist/fetch.d.cts +3 -1
  56. package/dist/fetch.d.ts +3 -1
  57. package/dist/fetch.js +2 -2
  58. package/dist/fetch.js.map +1 -1
  59. package/dist/functional.cjs +1 -1
  60. package/dist/functional.cjs.map +1 -1
  61. package/dist/functional.d.cts +2 -0
  62. package/dist/functional.d.ts +2 -0
  63. package/dist/functional.js +1 -1
  64. package/dist/functional.js.map +1 -1
  65. package/dist/{guards-PU64_GKv.d.cts → guards-B79mP5Q8.d.cts} +3 -3
  66. package/dist/{guards-B5lgMJq0.d.ts → guards-BUq6NJCM.d.ts} +3 -3
  67. package/dist/{hitl-Dyiy0R1v.d.cts → hitl-BCqkMAHw.d.cts} +2 -2
  68. package/dist/{hitl-BjeSm1sJ.d.ts → hitl-BZtPx0aU.d.ts} +2 -2
  69. package/dist/hitl.cjs +2 -2
  70. package/dist/hitl.cjs.map +1 -1
  71. package/dist/hitl.d.cts +9 -6
  72. package/dist/hitl.d.ts +9 -6
  73. package/dist/hitl.js +2 -2
  74. package/dist/hitl.js.map +1 -1
  75. package/dist/index-BVUAOWGG.d.ts +417 -0
  76. package/dist/index-CQnpmUcC.d.cts +417 -0
  77. package/dist/index.cjs +1 -1
  78. package/dist/index.cjs.map +1 -1
  79. package/dist/index.d.cts +4 -3
  80. package/dist/index.d.ts +4 -3
  81. package/dist/index.js +1 -1
  82. package/dist/index.js.map +1 -1
  83. package/dist/otel.d.cts +3 -1
  84. package/dist/otel.d.ts +3 -1
  85. package/dist/{persistence-entry-B3ukwbb5.d.ts → persistence-entry-ClFhxd2Q.d.ts} +11 -5
  86. package/dist/{persistence-entry-CgVzswbg.d.cts → persistence-entry-jflY61az.d.cts} +11 -5
  87. package/dist/persistence.d.cts +6 -3
  88. package/dist/persistence.d.ts +6 -3
  89. package/dist/policies.d.cts +3 -1
  90. package/dist/policies.d.ts +3 -1
  91. package/dist/ratelimit.cjs +2 -2
  92. package/dist/ratelimit.cjs.map +1 -1
  93. package/dist/ratelimit.d.cts +3 -1
  94. package/dist/ratelimit.d.ts +3 -1
  95. package/dist/ratelimit.js +2 -2
  96. package/dist/ratelimit.js.map +1 -1
  97. package/dist/reliability.cjs +2 -2
  98. package/dist/reliability.cjs.map +1 -1
  99. package/dist/reliability.d.cts +3 -1
  100. package/dist/reliability.d.ts +3 -1
  101. package/dist/reliability.js +2 -2
  102. package/dist/reliability.js.map +1 -1
  103. package/dist/resolver.cjs +2 -2
  104. package/dist/resolver.cjs.map +1 -1
  105. package/dist/resolver.d.cts +5 -3
  106. package/dist/resolver.d.ts +5 -3
  107. package/dist/resolver.js +2 -2
  108. package/dist/resolver.js.map +1 -1
  109. package/dist/resource.cjs +2 -2
  110. package/dist/resource.cjs.map +1 -1
  111. package/dist/resource.d.cts +3 -1
  112. package/dist/resource.d.ts +3 -1
  113. package/dist/resource.js +2 -2
  114. package/dist/resource.js.map +1 -1
  115. package/dist/result/retry.cjs +1 -1
  116. package/dist/result/retry.cjs.map +1 -1
  117. package/dist/result/retry.d.cts +2 -0
  118. package/dist/result/retry.d.ts +2 -0
  119. package/dist/result/retry.js +1 -1
  120. package/dist/result/retry.js.map +1 -1
  121. package/dist/result.cjs +1 -1
  122. package/dist/result.cjs.map +1 -1
  123. package/dist/result.d.cts +8 -23
  124. package/dist/result.d.ts +8 -23
  125. package/dist/result.js +1 -1
  126. package/dist/result.js.map +1 -1
  127. package/dist/{run-entry-C1uFytM6.d.cts → run-entry-rw7zll_G.d.ts} +16 -45
  128. package/dist/{run-entry-C1uFytM6.d.ts → run-entry-yQu63Yj9.d.cts} +16 -45
  129. package/dist/run.cjs +2 -2
  130. package/dist/run.cjs.map +1 -1
  131. package/dist/run.d.cts +3 -1
  132. package/dist/run.d.ts +3 -1
  133. package/dist/run.js +2 -2
  134. package/dist/run.js.map +1 -1
  135. package/dist/saga.cjs +2 -2
  136. package/dist/saga.cjs.map +1 -1
  137. package/dist/saga.d.cts +3 -1
  138. package/dist/saga.d.ts +3 -1
  139. package/dist/saga.js +2 -2
  140. package/dist/saga.js.map +1 -1
  141. package/dist/singleflight.d.cts +3 -1
  142. package/dist/singleflight.d.ts +3 -1
  143. package/dist/streaming.cjs +4 -4
  144. package/dist/streaming.cjs.map +1 -1
  145. package/dist/streaming.d.cts +5 -3
  146. package/dist/streaming.d.ts +5 -3
  147. package/dist/streaming.js +4 -4
  148. package/dist/streaming.js.map +1 -1
  149. package/dist/testing.cjs +8 -4
  150. package/dist/testing.cjs.map +1 -1
  151. package/dist/testing.d.cts +87 -4
  152. package/dist/testing.d.ts +87 -4
  153. package/dist/testing.js +8 -4
  154. package/dist/testing.js.map +1 -1
  155. package/dist/{types-wa_wTOn3.d.ts → types-CuWK5AlK.d.ts} +1 -1
  156. package/dist/{types-DUWrNIJu.d.cts → types-uR3JpwvF.d.cts} +1 -1
  157. package/dist/webhook.cjs +2 -2
  158. package/dist/webhook.cjs.map +1 -1
  159. package/dist/webhook.d.cts +7 -4
  160. package/dist/webhook.d.ts +7 -4
  161. package/dist/webhook.js +2 -2
  162. package/dist/webhook.js.map +1 -1
  163. package/dist/workflow.cjs +3 -3
  164. package/dist/workflow.cjs.map +1 -1
  165. package/dist/workflow.d.cts +47 -11
  166. package/dist/workflow.d.ts +47 -11
  167. package/dist/workflow.js +3 -3
  168. package/dist/workflow.js.map +1 -1
  169. package/package.json +15 -1
@@ -1,5 +1,7 @@
1
- import { R as Result, C as CauseOf, f as ErrorOf, q as UnexpectedError, ah as WorkflowEvent, ax as StepFailureMeta, ai as RunStep, c as AsyncResult } from './run-entry-C1uFytM6.js';
2
- import { S as StreamStore } from './types-wa_wTOn3.js';
1
+ import { R as Result, C as CauseOf, f as ErrorOf, ad as WorkflowEvent, at as StepFailureMeta, ae as RunStep, c as AsyncResult } from './run-entry-rw7zll_G.js';
2
+ import { S as StreamStore } from './types-CuWK5AlK.js';
3
+ import { StandardSchemaV1 } from '@standard-schema/spec';
4
+ import { U as UnexpectedError } from './errors-entry-DOt5UUl4.js';
3
5
 
4
6
  /**
5
7
  * awaitly/persistence
@@ -463,16 +465,20 @@ type RunConfig<E, U = UnexpectedError, C = void, Deps = unknown> = ExecutionOpti
463
465
  };
464
466
  /**
465
467
  * Workflow options. Error union is always closed: E | U.
466
- * When catchUnexpected is omitted, U defaults to UnexpectedError (legacy shape).
468
+ * When catchUnexpected is omitted, U defaults to UnexpectedError.
467
469
  */
468
470
  type WorkflowOptions<E, U = UnexpectedError, C = void, Errs extends readonly string[] = readonly string[]> = {
471
+ /** Standard Schema for input validation. Works with Zod, Valibot, ArkType, etc. */
472
+ inputSchema?: StandardSchemaV1;
473
+ /** Input data to validate against inputSchema and pass to workflow context. */
474
+ input?: unknown;
469
475
  /** Short description for labels/tooltips (static analysis) */
470
476
  description?: string;
471
477
  /** Full markdown documentation (static analysis) */
472
478
  markdown?: string;
473
479
  /**
474
480
  * Map uncaught exceptions (and cancellation) to your error type U.
475
- * When omitted, U = UnexpectedError and the default mapper returns the legacy UnexpectedError object.
481
+ * When omitted, U = UnexpectedError and the default mapper returns an UnexpectedError instance.
476
482
  */
477
483
  catchUnexpected?: (cause: unknown) => U;
478
484
  /**
@@ -807,4 +813,4 @@ interface GatedStepOptions<TArgs, T> {
807
813
  metadata?: Record<string, unknown>;
808
814
  }
809
815
 
810
- export { type ApprovalRejected as A, serializeError as B, type CausesOfDeps as C, serializeThrown as D, type ErrorsOfDeps as E, type GatedStepOptions as G, type JSONValue as J, type MemoryCacheOptions as M, type PendingApproval as P, type ResumeState as R, type SnapshotStore as S, type Workflow as W, type ApprovalStepOptions as a, type AnyResultFn as b, type WorkflowSnapshot as c, type WorkflowContext as d, type WorkflowCancelledError as e, type PendingHook as f, type StepResult as g, type WorkflowOptions as h, type ExecutionOptions as i, type ResumeStateEntry as j, type RunConfig as k, type RunWithStateResult as l, type SerializedCause as m, SnapshotDecodeError as n, SnapshotFormatError as o, SnapshotMismatchError as p, type SnapshotWarning as q, type StepCache as r, type WorkflowFn as s, assertValidSnapshot as t, isWorkflowSnapshot as u, looksLikeWorkflowSnapshot as v, mergeSnapshots as w, validateSnapshot as x, createMemoryCache as y, deserializeCauseNew as z };
816
+ export { type ApprovalRejected as A, serializeError as B, type CausesOfDeps as C, serializeThrown as D, type ErrorsOfDeps as E, type GatedStepOptions as G, type JSONValue as J, type MemoryCacheOptions as M, type PendingApproval as P, type ResumeState as R, type SnapshotStore as S, type WorkflowCancelledError as W, type Workflow as a, type ApprovalStepOptions as b, type PendingHook as c, type WorkflowSnapshot as d, type AnyResultFn as e, type WorkflowContext as f, type StepResult as g, type WorkflowOptions as h, type ExecutionOptions as i, type ResumeStateEntry as j, type RunConfig as k, type RunWithStateResult as l, type SerializedCause as m, SnapshotDecodeError as n, SnapshotFormatError as o, SnapshotMismatchError as p, type SnapshotWarning as q, type StepCache as r, type WorkflowFn as s, assertValidSnapshot as t, isWorkflowSnapshot as u, looksLikeWorkflowSnapshot as v, mergeSnapshots as w, validateSnapshot as x, createMemoryCache as y, deserializeCauseNew as z };
@@ -1,5 +1,7 @@
1
- import { R as Result, C as CauseOf, f as ErrorOf, q as UnexpectedError, ah as WorkflowEvent, ax as StepFailureMeta, ai as RunStep, c as AsyncResult } from './run-entry-C1uFytM6.cjs';
2
- import { S as StreamStore } from './types-DUWrNIJu.cjs';
1
+ import { R as Result, C as CauseOf, f as ErrorOf, ad as WorkflowEvent, at as StepFailureMeta, ae as RunStep, c as AsyncResult } from './run-entry-yQu63Yj9.cjs';
2
+ import { S as StreamStore } from './types-uR3JpwvF.cjs';
3
+ import { StandardSchemaV1 } from '@standard-schema/spec';
4
+ import { U as UnexpectedError } from './errors-entry-CMH73Eym.cjs';
3
5
 
4
6
  /**
5
7
  * awaitly/persistence
@@ -463,16 +465,20 @@ type RunConfig<E, U = UnexpectedError, C = void, Deps = unknown> = ExecutionOpti
463
465
  };
464
466
  /**
465
467
  * Workflow options. Error union is always closed: E | U.
466
- * When catchUnexpected is omitted, U defaults to UnexpectedError (legacy shape).
468
+ * When catchUnexpected is omitted, U defaults to UnexpectedError.
467
469
  */
468
470
  type WorkflowOptions<E, U = UnexpectedError, C = void, Errs extends readonly string[] = readonly string[]> = {
471
+ /** Standard Schema for input validation. Works with Zod, Valibot, ArkType, etc. */
472
+ inputSchema?: StandardSchemaV1;
473
+ /** Input data to validate against inputSchema and pass to workflow context. */
474
+ input?: unknown;
469
475
  /** Short description for labels/tooltips (static analysis) */
470
476
  description?: string;
471
477
  /** Full markdown documentation (static analysis) */
472
478
  markdown?: string;
473
479
  /**
474
480
  * Map uncaught exceptions (and cancellation) to your error type U.
475
- * When omitted, U = UnexpectedError and the default mapper returns the legacy UnexpectedError object.
481
+ * When omitted, U = UnexpectedError and the default mapper returns an UnexpectedError instance.
476
482
  */
477
483
  catchUnexpected?: (cause: unknown) => U;
478
484
  /**
@@ -807,4 +813,4 @@ interface GatedStepOptions<TArgs, T> {
807
813
  metadata?: Record<string, unknown>;
808
814
  }
809
815
 
810
- export { type ApprovalRejected as A, serializeError as B, type CausesOfDeps as C, serializeThrown as D, type ErrorsOfDeps as E, type GatedStepOptions as G, type JSONValue as J, type MemoryCacheOptions as M, type PendingApproval as P, type ResumeState as R, type SnapshotStore as S, type Workflow as W, type ApprovalStepOptions as a, type AnyResultFn as b, type WorkflowSnapshot as c, type WorkflowContext as d, type WorkflowCancelledError as e, type PendingHook as f, type StepResult as g, type WorkflowOptions as h, type ExecutionOptions as i, type ResumeStateEntry as j, type RunConfig as k, type RunWithStateResult as l, type SerializedCause as m, SnapshotDecodeError as n, SnapshotFormatError as o, SnapshotMismatchError as p, type SnapshotWarning as q, type StepCache as r, type WorkflowFn as s, assertValidSnapshot as t, isWorkflowSnapshot as u, looksLikeWorkflowSnapshot as v, mergeSnapshots as w, validateSnapshot as x, createMemoryCache as y, deserializeCauseNew as z };
816
+ export { type ApprovalRejected as A, serializeError as B, type CausesOfDeps as C, serializeThrown as D, type ErrorsOfDeps as E, type GatedStepOptions as G, type JSONValue as J, type MemoryCacheOptions as M, type PendingApproval as P, type ResumeState as R, type SnapshotStore as S, type WorkflowCancelledError as W, type Workflow as a, type ApprovalStepOptions as b, type PendingHook as c, type WorkflowSnapshot as d, type AnyResultFn as e, type WorkflowContext as f, type StepResult as g, type WorkflowOptions as h, type ExecutionOptions as i, type ResumeStateEntry as j, type RunConfig as k, type RunWithStateResult as l, type SerializedCause as m, SnapshotDecodeError as n, SnapshotFormatError as o, SnapshotMismatchError as p, type SnapshotWarning as q, type StepCache as r, type WorkflowFn as s, assertValidSnapshot as t, isWorkflowSnapshot as u, looksLikeWorkflowSnapshot as v, mergeSnapshots as w, validateSnapshot as x, createMemoryCache as y, deserializeCauseNew as z };
@@ -1,3 +1,6 @@
1
- export { J as JSONValue, M as MemoryCacheOptions, m as SerializedCause, n as SnapshotDecodeError, o as SnapshotFormatError, p as SnapshotMismatchError, S as SnapshotStore, q as SnapshotWarning, g as StepResult, c as WorkflowSnapshot, t as assertValidSnapshot, y as createMemoryCache, z as deserializeCauseNew, v as looksLikeWorkflowSnapshot, w as mergeSnapshots, B as serializeError, D as serializeThrown, x as validateSnapshot } from './persistence-entry-CgVzswbg.cjs';
2
- import './run-entry-C1uFytM6.cjs';
3
- import './types-DUWrNIJu.cjs';
1
+ export { J as JSONValue, M as MemoryCacheOptions, m as SerializedCause, n as SnapshotDecodeError, o as SnapshotFormatError, p as SnapshotMismatchError, S as SnapshotStore, q as SnapshotWarning, g as StepResult, d as WorkflowSnapshot, t as assertValidSnapshot, y as createMemoryCache, z as deserializeCauseNew, v as looksLikeWorkflowSnapshot, w as mergeSnapshots, B as serializeError, D as serializeThrown, x as validateSnapshot } from './persistence-entry-jflY61az.cjs';
2
+ import './run-entry-yQu63Yj9.cjs';
3
+ import './errors-entry-CMH73Eym.cjs';
4
+ import './tagged-error.cjs';
5
+ import './types-uR3JpwvF.cjs';
6
+ import '@standard-schema/spec';
@@ -1,3 +1,6 @@
1
- export { J as JSONValue, M as MemoryCacheOptions, m as SerializedCause, n as SnapshotDecodeError, o as SnapshotFormatError, p as SnapshotMismatchError, S as SnapshotStore, q as SnapshotWarning, g as StepResult, c as WorkflowSnapshot, t as assertValidSnapshot, y as createMemoryCache, z as deserializeCauseNew, v as looksLikeWorkflowSnapshot, w as mergeSnapshots, B as serializeError, D as serializeThrown, x as validateSnapshot } from './persistence-entry-B3ukwbb5.js';
2
- import './run-entry-C1uFytM6.js';
3
- import './types-wa_wTOn3.js';
1
+ export { J as JSONValue, M as MemoryCacheOptions, m as SerializedCause, n as SnapshotDecodeError, o as SnapshotFormatError, p as SnapshotMismatchError, S as SnapshotStore, q as SnapshotWarning, g as StepResult, d as WorkflowSnapshot, t as assertValidSnapshot, y as createMemoryCache, z as deserializeCauseNew, v as looksLikeWorkflowSnapshot, w as mergeSnapshots, B as serializeError, D as serializeThrown, x as validateSnapshot } from './persistence-entry-ClFhxd2Q.js';
2
+ import './run-entry-rw7zll_G.js';
3
+ import './errors-entry-DOt5UUl4.js';
4
+ import './tagged-error.js';
5
+ import './types-CuWK5AlK.js';
6
+ import '@standard-schema/spec';
@@ -1,4 +1,6 @@
1
- import { aj as StepOptions, ak as RetryOptions, at as TimeoutOptions } from './run-entry-C1uFytM6.cjs';
1
+ import { ag as StepOptions, af as RetryOptions, ap as TimeoutOptions } from './run-entry-yQu63Yj9.cjs';
2
+ import './errors-entry-CMH73Eym.cjs';
3
+ import './tagged-error.cjs';
2
4
 
3
5
  /**
4
6
  * awaitly/policies
@@ -1,4 +1,6 @@
1
- import { aj as StepOptions, ak as RetryOptions, at as TimeoutOptions } from './run-entry-C1uFytM6.js';
1
+ import { ag as StepOptions, af as RetryOptions, ap as TimeoutOptions } from './run-entry-rw7zll_G.js';
2
+ import './errors-entry-DOt5UUl4.js';
3
+ import './tagged-error.js';
2
4
 
3
5
  /**
4
6
  * awaitly/policies
@@ -1,7 +1,7 @@
1
- "use strict";var ie=Object.defineProperty;var Ae=Object.getOwnPropertyDescriptor;var Pe=Object.getOwnPropertyNames;var _e=Object.prototype.hasOwnProperty;var Me=(n,u)=>{for(var i in u)ie(n,i,{get:u[i],enumerable:!0})},ve=(n,u,i,y)=>{if(u&&typeof u=="object"||typeof u=="function")for(let x of Pe(u))!_e.call(n,x)&&x!==i&&ie(n,x,{get:()=>u[x],enumerable:!(y=Ae(u,x))||y.enumerable});return n};var Oe=n=>ve(ie({},"__esModule",{value:!0}),n);var Xe={};Me(Xe,{createCombinedLimiter:()=>Re,createConcurrencyLimiter:()=>me,createCostBasedRateLimiter:()=>xe,createFixedWindowLimiter:()=>ge,createRateLimiter:()=>pe,isQueueFullError:()=>le,isRateLimitExceededError:()=>ke,rateLimiterPresets:()=>Ce});module.exports=Oe(Xe);function De(n){let u=n.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!u)return;let i=parseFloat(u[1]),y=u[2].toLowerCase();return{_tag:"Duration",millis:i*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[y]??1)}}var Ie="UNEXPECTED_ERROR";function Ue(n){return Ie}function K(n){return{ok:!0,value:n}}function N(n,u){let i=u?.cause;return{ok:!1,error:n,...i!==void 0?{cause:i}:{}}}function Le(n){if(n==null)return"unknown";if(typeof n=="string")return n.trim()||"unknown";if(typeof n=="object"){let u=n;if(typeof u._tag=="string"){let i=u._tag.trim();if(i)return i}if(typeof u.tag=="string"){let i=u.tag.trim();if(i)return i}if(typeof u.code=="string"){let i=u.code.trim();if(i)return i}else if(typeof u.code=="number")return String(u.code);if(n instanceof Error&&n.name){let i=n.name.trim();if(i)return i}}return"unknown"}function Ne(n,u){if(!(!u||!n))return u[n]}function Fe(n){let{intent:u,domain:i,owner:y,tags:x,stateChanges:f,emits:k,calls:E}=n;if(!u&&!i&&!y&&!x?.length&&!f?.length&&!k?.length&&!E?.length)return;let M={};return u&&(M.intent=u),i&&(M.domain=i),y&&(M.owner=y),x?.length&&(M.tags=x),f?.length&&(M.stateChanges=f),k?.length&&(M.emits=k),E?.length&&(M.calls=E),M}function j(n,u,i,y,x){let f=Le(n),k=Ne(f,u),E={tag:f,origin:i};return k!==void 0&&(E.classification=k),y!==void 0&&(E.attempt=y),x!==void 0&&(E.cumulativeDurationMs=x),E}var H=Symbol.for("step_timeout_marker");function Ee(n){return typeof n!="object"||n===null?!1:n.type==="STEP_TIMEOUT"?!0:H in n}function je(n){if(!(typeof n!="object"||n===null)){if(n.type==="STEP_TIMEOUT"){let u=n;return{timeoutMs:u.timeoutMs,stepName:u.stepName,stepKey:u.stepKey,attempt:u.attempt}}if(H in n)return n[H]}}var fe=Symbol("early-exit");function Ke(n,u){return{[fe]:!0,error:n,meta:u}}function Be(n){return typeof n=="object"&&n!==null&&n[fe]===!0}var Te=Symbol("mapper-exception");function J(n){return{[Te]:!0,thrown:n}}function We(n){return typeof n=="object"&&n!==null&&n[Te]===!0}function ue(n,u){let{backoff:i,initialDelay:y,maxDelay:x,jitter:f}=u,k;switch(i){case"fixed":k=y;break;case"linear":k=y*n;break;case"exponential":k=y*Math.pow(2,n-1);break}if(k=Math.min(k,x),f){let E=k*.25*Math.random();k=k+E}return Math.floor(k)}function ce(n){return new Promise(u=>setTimeout(u,n))}var de=Symbol("timeout"),te=Symbol("timeout-option");function qe(n){return typeof n=="object"&&n!==null&&n[te]===!0}async function Ve(n,u,i,y){let x=new AbortController,f=u.onTimeout??"error",k=()=>typeof f=="function"?f({name:i.name,key:i.key,ms:u.ms}):u.error??{type:"STEP_TIMEOUT",stepName:i.name,stepKey:i.key,timeoutMs:u.ms,attempt:i.attempt},E;y?.aborted&&x.abort(y.reason);let M;y&&!y.aborted&&(M=()=>x.abort(y.reason),y.addEventListener("abort",M,{once:!0}));let o=new Promise((R,w)=>{E=setTimeout(()=>{if(f!=="disconnect"&&x.abort(),f==="option"){w({[te]:!0,ms:u.ms});return}w({[de]:!0,error:k()})},u.ms)}),D;u.signal?D=Promise.resolve(n(x.signal)):D=Promise.resolve(n());try{return await Promise.race([D,o])}catch(R){if(typeof R=="object"&&R!==null&&R[te]===!0)throw{[te]:!0,ms:u.ms};if(typeof R=="object"&&R!==null&&R[de]===!0){f==="disconnect"&&D.catch(()=>{});let w=R.error;if(typeof w=="object"&&w!==null&&w.type!=="STEP_TIMEOUT"){let C={timeoutMs:u.ms,stepName:i.name,stepKey:i.key,attempt:i.attempt};H in w?w[H]=C:Object.defineProperty(w,H,{value:C,enumerable:!1,writable:!0,configurable:!1})}throw w}throw R}finally{clearTimeout(E),M&&y&&y.removeEventListener("abort",M)}}var z={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function ye(n,u){let{onError:i,onEvent:y,catchUnexpected:x,workflowId:f,workflowName:k,context:E,_workflowSignal:M}=u&&typeof u=="object"?u:{},o=f??crypto.randomUUID(),D=x??Ue,R=[],w=0,C=p=>p??`step_${++w}`,s=p=>{let W=p.context!==void 0||E===void 0?p:{...p,context:E},X=k!==void 0&&W.workflowName===void 0?{...W,workflowName:k}:W;if(X.type==="step_success"){let Z=X.stepId;for(let ee=R.length-1;ee>=0;ee--){let q=R[ee];if(q.type==="race"&&!q.winnerId){q.winnerId=Z;break}}}y?.(X,E)},I=Ke,F=p=>Be(p),B=(p,W)=>p,be=p=>typeof p=="function"?!1:!!(p&&typeof p=="object"&&"ok"in p||p&&typeof p=="object"&&"then"in p&&typeof p.then=="function");try{let W=function(a){let m={};for(let[r,t]of Object.entries(a))if(typeof t=="function")m[r]=t;else if(t&&typeof t=="object"&&"fn"in t)m[r]=t.fn;else throw new TypeError(`step.parallel: operation "${r}" must be a function or { fn, errors? } object`);return m},X=function(a,m){let r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1;R.push({scopeId:r,type:"parallel"});let c=()=>{if(e)return;e=!0;let l=R.findIndex(d=>d.scopeId===r);l!==-1&&R.splice(l,1),s({type:"scope_end",workflowId:o,scopeId:r,ts:Date.now(),durationMs:performance.now()-t})};s({type:"scope_start",workflowId:o,scopeId:r,scopeType:"parallel",name:a,ts:Date.now()});try{let l=await m();if(c(),!l.ok)throw i?.(l.error,a,E),I(l.error,{origin:"result",resultCause:l.cause});return l.value}catch(l){throw c(),l}})()},Z=function(a,m){let r=Object.keys(a),t=m.name??`Parallel(${r.join(", ")})`,e=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let c=performance.now(),l=!1;R.push({scopeId:e,type:"parallel"});let d=()=>{if(l)return;l=!0;let T=R.findIndex(g=>g.scopeId===e);T!==-1&&R.splice(T,1),s({type:"scope_end",workflowId:o,scopeId:e,ts:Date.now(),durationMs:performance.now()-c})};s({type:"scope_start",workflowId:o,scopeId:e,scopeType:"parallel",name:t,ts:Date.now()});try{let T=await new Promise(h=>{if(r.length===0){h([]);return}let v=!1,L=r.length,S=new Array(r.length);for(let U=0;U<r.length;U++){let A=r[U],_=U;Promise.resolve(a[A]()).catch(P=>N({type:"PROMISE_REJECTED",cause:P},{cause:{type:"PROMISE_REJECTION",reason:P}})).then(P=>{if(!v){if(!P.ok){v=!0,h([{key:A,result:P}]);return}S[_]={key:A,result:P},L--,L===0&&h(S)}})}});d();let g={};for(let{key:h,result:v}of T){if(!v.ok)throw i?.(v.error,h,E),I(v.error,{origin:"result",resultCause:v.cause});g[h]=v.value}return g}catch(T){throw d(),T}})()};var Qe=W,Ye=X,$e=Z;let p=(a,m,r)=>(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 t=r??{},e=Fe(t),c=a,l=t.key??a,d=t.key??a,{description:T,retry:g,timeout:h}=t,v=C(l),L=y,S=L?performance.now():0,A=be(m)?()=>m:m,P={attempts:Math.max(1,g?.attempts??1),backoff:g?.backoff??z.backoff,initialDelay:g?.initialDelay??z.initialDelay,maxDelay:g?.maxDelay??z.maxDelay,jitter:g?.jitter??z.jitter,retryOn:g?.retryOn??z.retryOn,onRetry:g?.onRetry??z.onRetry};y&&s({type:"step_start",workflowId:o,stepId:v,stepKey:l,name:c,description:T,ts:Date.now(),...e&&{metadata:e}});let $;for(let O=1;O<=P.attempts;O++){let he=L?performance.now():0;try{let b;if(h?b=await Ve(A,h,{name:c,key:l,attempt:O},M):b=await A(),b.ok){let Y=performance.now()-S;return s({type:"step_success",workflowId:o,stepId:v,stepKey:l,name:c,description:T,ts:Date.now(),durationMs:Y,...e&&{metadata:e}}),d&&s({type:"step_complete",workflowId:o,stepKey:d,name:c,description:T,ts:Date.now(),durationMs:Y,result:b,...e&&{metadata:e}}),b.value}if($=b,O<P.attempts&&P.retryOn(b.error,O)){let Y=ue(O,P);s({type:"step_retry",workflowId:o,stepId:v,stepKey:l,name:c,ts:Date.now(),attempt:O+1,maxAttempts:P.attempts,delayMs:Y,error:b.error,...e&&{metadata:e},diagnostics:j(b.error,t.errorMeta,"result",O,performance.now()-S)}),P.onRetry(b.error,O,Y),await ce(Y);continue}P.attempts>1&&s({type:"step_retries_exhausted",workflowId:o,stepId:v,stepKey:l,name:c,ts:Date.now(),durationMs:performance.now()-S,attempts:O,lastError:b.error,...e&&{metadata:e},diagnostics:j(b.error,t.errorMeta,"result",O,performance.now()-S)});break}catch(b){let Y=performance.now()-he;if(qe(b)){let V=b.ms;s({type:"step_timeout",workflowId:o,stepId:v,stepKey:l,name:c,ts:Date.now(),timeoutMs:V,attempt:O,...e&&{metadata:e},diagnostics:j(b,t.errorMeta,"timeout",O)}),s({type:"step_success",workflowId:o,stepId:v,stepKey:l,name:c,description:T,ts:Date.now(),durationMs:performance.now()-S,...e&&{metadata:e}}),d&&s({type:"step_complete",workflowId:o,stepKey:d,name:c,description:T,ts:Date.now(),durationMs:performance.now()-S,result:K(void 0),...e&&{metadata:e}});return}if(F(b))throw s({type:"step_aborted",workflowId:o,stepId:v,stepKey:l,name:c,description:T,ts:Date.now(),durationMs:Y,...e&&{metadata:e}}),b;if(Ee(b)){let V=je(b),Se=h?.ms??V?.timeoutMs??0;if(s({type:"step_timeout",workflowId:o,stepId:v,stepKey:l,name:c,ts:Date.now(),timeoutMs:Se,attempt:O,...e&&{metadata:e},diagnostics:j(b,t.errorMeta,"timeout",O)}),O<P.attempts&&P.retryOn(b,O)){let ae=ue(O,P);s({type:"step_retry",workflowId:o,stepId:v,stepKey:l,name:c,ts:Date.now(),attempt:O+1,maxAttempts:P.attempts,delayMs:ae,error:b,...e&&{metadata:e},diagnostics:j(b,t.errorMeta,"timeout",O,performance.now()-S)}),P.onRetry(b,O,ae),await ce(ae);continue}P.attempts>1&&s({type:"step_retries_exhausted",workflowId:o,stepId:v,stepKey:l,name:c,ts:Date.now(),durationMs:performance.now()-S,attempts:O,lastError:b,...e&&{metadata:e},diagnostics:j(b,t.errorMeta,"timeout",O,performance.now()-S)});let se=performance.now()-S;throw s({type:"step_error",workflowId:o,stepId:v,stepKey:l,name:c,description:T,ts:Date.now(),durationMs:se,error:b,...e&&{metadata:e},diagnostics:j(b,t.errorMeta,"timeout",O,se)}),d&&s({type:"step_complete",workflowId:o,stepKey:d,name:c,description:T,ts:Date.now(),durationMs:se,result:N(b,{cause:b}),meta:{origin:"throw",thrown:b},...e&&{metadata:e}}),i?.(b,c,E),I(b,{origin:"throw",thrown:b})}if(O<P.attempts&&P.retryOn(b,O)){let V=ue(O,P);s({type:"step_retry",workflowId:o,stepId:v,stepKey:l,name:c,ts:Date.now(),attempt:O+1,maxAttempts:P.attempts,delayMs:V,error:b,...e&&{metadata:e},diagnostics:j(b,t.errorMeta,"throw",O,performance.now()-S)}),P.onRetry(b,O,V),await ce(V);continue}P.attempts>1&&!Ee(b)&&s({type:"step_retries_exhausted",workflowId:o,stepId:v,stepKey:l,name:c,ts:Date.now(),durationMs:performance.now()-S,attempts:O,lastError:b,...e&&{metadata:e},diagnostics:j(b,t.errorMeta,"throw",O,performance.now()-S)});let oe=performance.now()-S,G;try{G=D(b)}catch(V){throw J(V)}throw s({type:"step_error",workflowId:o,stepId:v,stepKey:l,name:c,description:T,ts:Date.now(),durationMs:oe,error:G,...e&&{metadata:e},diagnostics:j(b,t.errorMeta,"throw",O,oe)}),d&&s({type:"step_complete",workflowId:o,stepKey:d,name:c,description:T,ts:Date.now(),durationMs:oe,result:N(G,{cause:b}),meta:{origin:"throw",thrown:b},...e&&{metadata:e}}),i?.(G,c,E),I(G,{origin:"throw",thrown:b})}}let Q=$,re=performance.now()-S,ne=B(Q.error,{origin:"result",resultCause:Q.cause});throw s({type:"step_error",workflowId:o,stepId:v,stepKey:l,name:c,description:T,ts:Date.now(),durationMs:re,error:ne,...e&&{metadata:e},diagnostics:j(Q.error,t.errorMeta,"result",P.attempts,re)}),d&&s({type:"step_complete",workflowId:o,stepKey:d,name:c,description:T,ts:Date.now(),durationMs:re,result:Q,meta:{origin:"result",resultCause:Q.cause},...e&&{metadata:e}}),i?.(ne,c,E),I(ne,{origin:"result",resultCause:Q.cause})})();p.try=(a,m,r)=>{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 t=r.key??a,e=a,c=a,l="error"in r?()=>r.error:r.onError,d=y;return(async()=>{let T=d?performance.now():0;y&&s({type:"step_start",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now()});try{let g=await m(),h=performance.now()-T;return s({type:"step_success",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:h}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:h,result:K(g)}),g}catch(g){let h=l(g),v=performance.now()-T,L=B(h,{origin:"throw",thrown:g});throw s({type:"step_error",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:v,error:L}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:v,result:N(h,{cause:g}),meta:{origin:"throw",thrown:g}}),i?.(L,e,E),I(L,{origin:"throw",thrown:g})}})()},p.fromResult=(a,m,r)=>{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 t=r.key??a,e=a,c=a,l="error"in r?()=>r.error:r.onError,d=y;return(async()=>{let T=d?performance.now():0;y&&s({type:"step_start",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now()});let g=await m();if(g.ok){let h=performance.now()-T;return s({type:"step_success",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:h}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:h,result:K(g.value)}),g.value}else{let h=l(g.error),v=performance.now()-T,L=B(h,{origin:"result",resultCause:g.error});throw s({type:"step_error",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:v,error:L}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:v,result:N(h,{cause:g.error}),meta:{origin:"result",resultCause:g.error}}),i?.(L,e,E),I(L,{origin:"result",resultCause:g.error})}})()},p.fromNullable=(a,m,r,t)=>{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 p(a,async()=>{let e=await m();return e!=null?K(e):N(r())},t)},p.retry=(a,m,r)=>{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 p(a,m,{key:r.key??a,retry:{attempts:r.attempts,backoff:r.backoff,initialDelay:r.initialDelay,maxDelay:r.maxDelay,jitter:r.jitter,retryOn:r.retryOn,onRetry:r.onRetry},timeout:r.timeout})},p.withTimeout=(a,m,r)=>{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 p(a,m,{key:r.key??a,timeout:r})},p.sleep=(a,m,r)=>{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 t=typeof m=="string"?De(m):m;if(!t)throw new Error(`step.sleep: invalid duration '${m}'`);let e=t.millis,c=r?.signal;return p(a,async()=>{if(M?.aborted||c?.aborted){let l=new Error("Sleep aborted");throw l.name="AbortError",l}return new Promise((l,d)=>{let T={timeoutId:void 0},g=()=>{T.timeoutId&&clearTimeout(T.timeoutId);let h=new Error("Sleep aborted");h.name="AbortError",d(h)};M?.addEventListener("abort",g,{once:!0}),c?.addEventListener("abort",g,{once:!0}),T.timeoutId=setTimeout(()=>{M?.removeEventListener("abort",g),c?.removeEventListener("abort",g),l(K(void 0))},e)})},{key:r?.key??a,description:r?.description})},p.parallel=((...a)=>{if(typeof a[0]!="string")throw new TypeError("step.parallel(name, ...): first argument must be a string (step name). Example: step.parallel('Fetch data', { user: () => fetchUser(), posts: () => fetchPosts() })");let m=a[0],r=a[1];if(typeof r=="function")return X(m,r);if(r&&typeof r=="object"&&!Array.isArray(r)){let e=W(r);return Z(e,{name:m})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),p.race=(a,m)=>{let r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1,c={scopeId:r,type:"race",winnerId:void 0};R.push(c);let l=()=>{if(e)return;e=!0;let d=R.findIndex(T=>T.scopeId===r);d!==-1&&R.splice(d,1),s({type:"scope_end",workflowId:o,scopeId:r,ts:Date.now(),durationMs:performance.now()-t,winnerId:c.winnerId})};s({type:"scope_start",workflowId:o,scopeId:r,scopeType:"race",name:a,ts:Date.now()});try{let d=await m();if(l(),!d.ok)throw i?.(d.error,a,E),I(d.error,{origin:"result",resultCause:d.cause});return d.value}catch(d){throw l(),d}})()},p.allSettled=(a,m)=>{let r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1;R.push({scopeId:r,type:"allSettled"});let c=()=>{if(e)return;e=!0;let l=R.findIndex(d=>d.scopeId===r);l!==-1&&R.splice(l,1),s({type:"scope_end",workflowId:o,scopeId:r,ts:Date.now(),durationMs:performance.now()-t})};s({type:"scope_start",workflowId:o,scopeId:r,scopeType:"allSettled",name:a,ts:Date.now()});try{let l=await m();if(c(),!l.ok)throw i?.(l.error,a,E),I(l.error,{origin:"result",resultCause:l.cause});return l.value}catch(l){throw c(),l}})()},p.if=(a,m,r)=>r(),p.label=p.if,p.branch=async(a,m)=>{let{condition:r,then:t,else:e}=m;if(r())return await t();if(e)return await e()},p.arm=(a,m)=>({fn:a,errors:m}),p.forEach=async(a,m,r)=>{let t=[],e=r.maxIterations,c=0,l="run"in r,d=Symbol.asyncIterator in m?m:(async function*(){yield*m})();for await(let T of d){if(e!==void 0&&c>=e)break;let g;l?g=await r.run(T,c):g=await r.item.handler(T,c,p),t.push(g),c++}return t},p.item=a=>({__forEachItemHandler:!0,handler:a}),p.dep=(a,m)=>m,p.run=(a,m,r)=>p(a,()=>m,r),p.workflow=(a,m,r)=>p(a,m,r),p.andThen=(a,m,r,t)=>p(a,()=>r(m),t),p.match=async(a,m,r,t)=>p(a,async()=>{let e=await m;return e.ok?K(await r.ok(e.value)):K(await r.err(e.error,e.cause))},t),p.all=p.parallel,p.map=async(a,m,r,t)=>{let e=t?.concurrency??m.length;return p(a,()=>e>=m.length?we(m.map((c,l)=>r(c,l))):(async()=>{let c=[];for(let l=0;l<m.length;l+=e){let d=m.slice(l,l+e),T=await we(d.map((g,h)=>r(g,l+h)));if(!T.ok)return T;c.push(...T.value)}return K(c)})(),{key:t?.key})},p.withFallback=(a,m,r)=>{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 t=r.key??a,e=a,c=C(t),l=y;return(async()=>{let d=l?performance.now():0;y&&s({type:"step_start",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now()});let T;try{T=await m()}catch(S){if(F(S))throw s({type:"step_aborted",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-d}),S;let U;try{U=D(S)}catch(_){throw J(_)}if(r.on!==void 0&&r.on!==U){let _=performance.now()-d;throw s({type:"step_error",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:_,error:U}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:_,result:N(U,{cause:S}),meta:{origin:"throw",thrown:S}}),i?.(U,e,E),I(U,{origin:"throw",thrown:S})}let A;try{A=await r.fallback()}catch(_){if(F(_))throw s({type:"step_aborted",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-d}),_;let P;try{P=D(_)}catch(Q){throw J(Q)}let $=performance.now()-d;throw s({type:"step_error",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:$,error:P}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:$,result:N(P,{cause:_}),meta:{origin:"throw",thrown:_}}),i?.(P,e,E),I(P,{origin:"throw",thrown:_})}if(A.ok){let _=performance.now()-d;return s({type:"step_success",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:_}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:_,result:A,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(U)}}),A.value}else{let _=performance.now()-d,P=B(A.error,{origin:"result",resultCause:A.cause});throw s({type:"step_error",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:_,error:P}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:_,result:A,meta:{origin:"result",resultCause:A.cause}}),i?.(P,e,E),I(P,{origin:"result",resultCause:A.cause})}}if(T.ok){let S=performance.now()-d;return s({type:"step_success",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:S}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:S,result:T}),T.value}let g=T.error;if(r.on!==void 0&&r.on!==g){let S=performance.now()-d,U=B(g,{origin:"result",resultCause:T.cause});throw s({type:"step_error",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:S,error:U}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:S,result:T,meta:{origin:"result",resultCause:T.cause}}),i?.(U,e,E),I(U,{origin:"result",resultCause:T.cause})}let h;try{h=await r.fallback()}catch(S){if(F(S))throw s({type:"step_aborted",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-d}),S;let U;try{U=D(S)}catch(_){throw J(_)}let A=performance.now()-d;throw s({type:"step_error",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:A,error:U}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:A,result:N(U,{cause:S}),meta:{origin:"throw",thrown:S}}),i?.(U,e,E),I(U,{origin:"throw",thrown:S})}if(h.ok){let S=performance.now()-d;return s({type:"step_success",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:S}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:S,result:h,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(g)}}),h.value}let v=performance.now()-d,L=B(h.error,{origin:"result",resultCause:h.cause});throw s({type:"step_error",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:v,error:L}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:v,result:h,meta:{origin:"result",resultCause:h.cause}}),i?.(L,e,E),I(L,{origin:"result",resultCause:h.cause})})()},p.withResource=(a,m)=>{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 r=a,t=a,e=C(r),c=y;return(async()=>{let l=c?performance.now():0;y&&s({type:"step_start",workflowId:o,stepId:e,stepKey:r,name:t,ts:Date.now()});let d;try{d=await m.acquire()}catch(A){if(F(A))throw s({type:"step_aborted",workflowId:o,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:performance.now()-l}),A;let _;try{_=D(A)}catch($){throw J($)}let P=performance.now()-l;throw s({type:"step_error",workflowId:o,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:P,error:_}),r&&s({type:"step_complete",workflowId:o,stepKey:r,name:t,ts:Date.now(),durationMs:P,result:N(_,{cause:A}),meta:{origin:"throw",thrown:A}}),i?.(_,t,E),I(_,{origin:"throw",thrown:A})}if(!d.ok){let A=performance.now()-l,_=B(d.error,{origin:"result",resultCause:d.cause});throw s({type:"step_error",workflowId:o,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:A,error:_}),r&&s({type:"step_complete",workflowId:o,stepKey:r,name:t,ts:Date.now(),durationMs:A,result:d,meta:{origin:"result",resultCause:d.cause}}),i?.(_,t,E),I(_,{origin:"result",resultCause:d.cause})}let T=d.value,g,h,v=!1;try{g=await m.use(T)}catch(A){if(F(A)){try{await m.release(T)}catch(_){console.warn(`[awaitly] step.withResource("${a}"): release threw after earlyExit:`,_)}throw A}h=A,v=!0}try{await m.release(T)}catch(A){console.warn(`[awaitly] step.withResource("${a}"): release threw:`,A)}if(v){let A;try{A=D(h)}catch(P){throw J(P)}let _=performance.now()-l;throw s({type:"step_error",workflowId:o,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:_,error:A}),r&&s({type:"step_complete",workflowId:o,stepKey:r,name:t,ts:Date.now(),durationMs:_,result:N(A,{cause:h}),meta:{origin:"throw",thrown:h}}),i?.(A,t,E),I(A,{origin:"throw",thrown:h})}let L=g;if(L.ok){let A=performance.now()-l;return s({type:"step_success",workflowId:o,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:A}),r&&s({type:"step_complete",workflowId:o,stepKey:r,name:t,ts:Date.now(),durationMs:A,result:L}),L.value}let S=performance.now()-l,U=B(L.error,{origin:"result",resultCause:L.cause});throw s({type:"step_error",workflowId:o,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:S,error:U}),r&&s({type:"step_complete",workflowId:o,stepKey:r,name:t,ts:Date.now(),durationMs:S,result:L,meta:{origin:"result",resultCause:L.cause}}),i?.(U,t,E),I(U,{origin:"result",resultCause:L.cause})})()};let q=await n({step:p});if(process.env.NODE_ENV!=="production"&&q!==null&&typeof q=="object"&&"ok"in q&&typeof q.ok=="boolean"){let a=q;(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().
1
+ "use strict";var le=Object.defineProperty;var je=Object.getOwnPropertyDescriptor;var Ke=Object.getOwnPropertyNames;var Be=Object.prototype.hasOwnProperty;var We=(r,e)=>{for(var i in e)le(r,i,{get:e[i],enumerable:!0})},$e=(r,e,i,y)=>{if(e&&typeof e=="object"||typeof e=="function")for(let R of Ke(e))!Be.call(r,R)&&R!==i&&le(r,R,{get:()=>e[R],enumerable:!(y=je(e,R))||y.enumerable});return r};var Ve=r=>$e(le({},"__esModule",{value:!0}),r);var rt={};We(rt,{createCombinedLimiter:()=>Oe,createConcurrencyLimiter:()=>ye,createCostBasedRateLimiter:()=>De,createFixedWindowLimiter:()=>Ie,createRateLimiter:()=>de,isQueueFullError:()=>Ee,isRateLimitExceededError:()=>ve,rateLimiterPresets:()=>Ue});module.exports=Ve(rt);var ee=class extends Error{_tag};function F(r,e){return class extends ee{_tag=r;constructor(i,y){let R=e?.message?e.message(i??{}):r;if(super(R),this.name=r,Object.setPrototypeOf(this,new.target.prototype),i&&typeof i=="object"){let{_tag:E,name:T,message:m,stack:_,...s}=i,M=Object.prototype.hasOwnProperty.call(s,"cause"),k=M?s.cause:void 0;M&&delete s.cause;let f=y?.cause!==void 0;if(M&&f)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,s),M&&(this.cause=k),f&&(this.cause=y?.cause)}else y?.cause!==void 0&&(this.cause=y.cause)}}}Object.defineProperty(F,Symbol.hasInstance,{value:r=>r instanceof ee});(R=>{function r(E){return E instanceof Error}R.isError=r;function e(E){return E instanceof ee}R.isTaggedError=e;function i(E,T){let m=E._tag,_=T[m];return _(E)}R.match=i;function y(E,T,m){let _=E._tag,s=T[_];return s?s(E):m(E)}R.matchPartial=y})(F||={});var we=class extends F("TimeoutError",{message:e=>e.operation?`TimeoutError: ${e.operation} timed out after ${e.ms}ms`:`TimeoutError: Operation timed out after ${e.ms}ms`}){},fe=class extends F("RetryExhaustedError",{message:e=>e.operation?`RetryExhaustedError: ${e.operation} failed after ${e.attempts} attempts`:`RetryExhaustedError: Operation failed after ${e.attempts} attempts`}){},Te=class extends F("RateLimitError",{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`:""}`}){},ge=class extends F("CircuitBreakerOpenError",{message:e=>`CircuitBreakerOpenError: Circuit ${e.circuitName} is ${e.state??"OPEN"}${e.retryAfterMs?`, retry after ${Math.ceil(e.retryAfterMs/1e3)}s`:""}`}){},ke=class extends F("ValidationError",{message:e=>`ValidationError: Invalid ${e.field} - ${e.reason}`}){},Re=class extends F("NotFoundError",{message:e=>e.id?`NotFoundError: ${e.resource} with id ${e.id} not found`:`NotFoundError: ${e.resource} not found`}){},xe=class extends F("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 F("NetworkError",{message:e=>e.url?`NetworkError: ${e.reason} (${e.url})`:`NetworkError: ${e.reason}`}){},he=class extends F("CompensationError",{message:e=>`CompensationError: Failed to compensate step ${e.step}`}){},ne=class extends F("UnexpectedError",{message:e=>`UnexpectedError: ${e.cause instanceof Error?e.cause.message:String(e.cause??"unknown")}`}){};function qe(r){let e=r.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!e)return;let i=parseFloat(e[1]),y=e[2].toLowerCase();return{_tag:"Duration",millis:i*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[y]??1)}}function He(r){return new ne({cause:r})}function B(r){return{ok:!0,value:r}}function N(r,e){let i=e?.cause;return{ok:!1,error:r,...i!==void 0?{cause:i}:{}}}function ze(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 i=e._tag.trim();if(i)return i}if(typeof e.tag=="string"){let i=e.tag.trim();if(i)return i}if(typeof e.code=="string"){let i=e.code.trim();if(i)return i}else if(typeof e.code=="number")return String(e.code);if(r instanceof Error&&r.name){let i=r.name.trim();if(i)return i}}return"unknown"}function Qe(r,e){if(!(!e||!r))return e[r]}function Ye(r){let{intent:e,domain:i,owner:y,tags:R,stateChanges:E,emits:T,calls:m}=r;if(!e&&!i&&!y&&!R?.length&&!E?.length&&!T?.length&&!m?.length)return;let _={};return e&&(_.intent=e),i&&(_.domain=i),y&&(_.owner=y),R?.length&&(_.tags=R),E?.length&&(_.stateChanges=E),T?.length&&(_.emits=T),m?.length&&(_.calls=m),_}function K(r,e,i,y,R){let E=ze(r),T=Qe(E,e),m={tag:E,origin:i};return T!==void 0&&(m.classification=T),y!==void 0&&(m.attempt=y),R!==void 0&&(m.cumulativeDurationMs=R),m}var G=Symbol.for("step_timeout_marker");function be(r){return typeof r!="object"||r===null?!1:r.type==="STEP_TIMEOUT"?!0:G in r}function Xe(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(G in r)return r[G]}}var _e=Symbol("early-exit");function Je(r,e){return{[_e]:!0,error:r,meta:e}}function Ge(r){return typeof r=="object"&&r!==null&&r[_e]===!0}var Me=Symbol("mapper-exception");function X(r){return{[Me]:!0,thrown:r}}function Ze(r){return typeof r=="object"&&r!==null&&r[Me]===!0}function pe(r,e){let{backoff:i,initialDelay:y,maxDelay:R,jitter:E}=e,T;switch(i){case"fixed":T=y;break;case"linear":T=y*r;break;case"exponential":T=y*Math.pow(2,r-1);break}if(T=Math.min(T,R),E){let m=T*.25*Math.random();T=T+m}return Math.floor(T)}function me(r){return new Promise(e=>setTimeout(e,r))}var Se=Symbol("timeout"),oe=Symbol("timeout-option");function et(r){return typeof r=="object"&&r!==null&&r[oe]===!0}async function tt(r,e,i,y){let R=new AbortController,E=e.onTimeout??"error",T=()=>typeof E=="function"?E({name:i.name,key:i.key,ms:e.ms}):e.error??{type:"STEP_TIMEOUT",stepName:i.name,stepKey:i.key,timeoutMs:e.ms,attempt:i.attempt},m;y?.aborted&&R.abort(y.reason);let _;y&&!y.aborted&&(_=()=>R.abort(y.reason),y.addEventListener("abort",_,{once:!0}));let s=new Promise((k,f)=>{m=setTimeout(()=>{if(E!=="disconnect"&&R.abort(),E==="option"){f({[oe]:!0,ms:e.ms});return}f({[Se]:!0,error:T()})},e.ms)}),M;e.signal?M=Promise.resolve(r(R.signal)):M=Promise.resolve(r());try{return await Promise.race([M,s])}catch(k){if(typeof k=="object"&&k!==null&&k[oe]===!0)throw{[oe]:!0,ms:e.ms};if(typeof k=="object"&&k!==null&&k[Se]===!0){E==="disconnect"&&M.catch(()=>{});let f=k.error;if(typeof f=="object"&&f!==null&&f.type!=="STEP_TIMEOUT"){let C={timeoutMs:e.ms,stepName:i.name,stepKey:i.key,attempt:i.attempt};G in f?f[G]=C:Object.defineProperty(f,G,{value:C,enumerable:!1,writable:!0,configurable:!1})}throw f}throw k}finally{clearTimeout(m),_&&y&&y.removeEventListener("abort",_)}}var J={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function Ae(r,e){let{onError:i,onEvent:y,catchUnexpected:R,workflowId:E,workflowName:T,context:m,_workflowSignal:_}=e&&typeof e=="object"?e:{},s=E??crypto.randomUUID(),M=R??He,k=[],f=0,C=p=>p??`step_${++f}`,a=p=>{let $=p.context!==void 0||m===void 0?p:{...p,context:m},H=T!==void 0&&$.workflowName===void 0?{...$,workflowName:T}:$;if(H.type==="step_success"){let te=H.stepId;for(let re=k.length-1;re>=0;re--){let V=k[re];if(V.type==="race"&&!V.winnerId){V.winnerId=te;break}}}y?.(H,m)},D=Je,j=p=>Ge(p),W=(p,$)=>p,Le=p=>typeof p=="function"?!1:!!(p&&typeof p=="object"&&"ok"in p||p&&typeof p=="object"&&"then"in p&&typeof p.then=="function");try{let $=function(u){let d={};for(let[o,n]of Object.entries(u))if(typeof n=="function")d[o]=n;else if(n&&typeof n=="object"&&"fn"in n)d[o]=n.fn;else throw new TypeError(`step.parallel: operation "${o}" must be a function or { fn, errors? } object`);return d},H=function(u,d){let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),t=!1;k.push({scopeId:o,type:"parallel"});let c=()=>{if(t)return;t=!0;let l=k.findIndex(w=>w.scopeId===o);l!==-1&&k.splice(l,1),a({type:"scope_end",workflowId:s,scopeId:o,ts:Date.now(),durationMs:performance.now()-n})};a({type:"scope_start",workflowId:s,scopeId:o,scopeType:"parallel",name:u,ts:Date.now()});try{let l=await d();if(c(),!l.ok)throw i?.(l.error,u,m),D(l.error,{origin:"result",resultCause:l.cause});return l.value}catch(l){throw c(),l}})()},te=function(u,d){let o=Object.keys(u),n=d.name??`Parallel(${o.join(", ")})`,t=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let c=performance.now(),l=!1;k.push({scopeId:t,type:"parallel"});let w=()=>{if(l)return;l=!0;let g=k.findIndex(x=>x.scopeId===t);g!==-1&&k.splice(g,1),a({type:"scope_end",workflowId:s,scopeId:t,ts:Date.now(),durationMs:performance.now()-c})};a({type:"scope_start",workflowId:s,scopeId:t,scopeType:"parallel",name:n,ts:Date.now()});try{let g=await new Promise(b=>{if(o.length===0){b([]);return}let O=!1,L=o.length,S=new Array(o.length);for(let U=0;U<o.length;U++){let A=o[U],v=U;Promise.resolve(u[A]()).catch(P=>N({type:"PROMISE_REJECTED",cause:P},{cause:{type:"PROMISE_REJECTION",reason:P}})).then(P=>{if(!O){if(!P.ok){O=!0,b([{key:A,result:P}]);return}S[v]={key:A,result:P},L--,L===0&&b(S)}})}});w();let x={};for(let{key:b,result:O}of g){if(!O.ok)throw i?.(O.error,b,m),D(O.error,{origin:"result",resultCause:O.cause});x[b]=O.value}return x}catch(g){throw w(),g}})()};var nt=$,ot=H,st=te;let p=(u,d,o)=>(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 n=o??{},t=Ye(n),c=u,l=n.key??u,w=n.key??u,{description:g,retry:x,timeout:b}=n,O=C(l),L=y,S=L?performance.now():0,A=Le(d)?()=>d:d,P={attempts:Math.max(1,x?.attempts??1),backoff:x?.backoff??J.backoff,initialDelay:x?.initialDelay??J.initialDelay,maxDelay:x?.maxDelay??J.maxDelay,jitter:x?.jitter??J.jitter,retryOn:x?.retryOn??J.retryOn,onRetry:x?.onRetry??J.onRetry};y&&a({type:"step_start",workflowId:s,stepId:O,stepKey:l,name:c,description:g,ts:Date.now(),...t&&{metadata:t}});let Y;for(let I=1;I<=P.attempts;I++){let Ne=L?performance.now():0;try{let h;if(b?h=await tt(A,b,{name:c,key:l,attempt:I},_):h=await A(),h.ok){let Q=performance.now()-S;return a({type:"step_success",workflowId:s,stepId:O,stepKey:l,name:c,description:g,ts:Date.now(),durationMs:Q,...t&&{metadata:t}}),w&&a({type:"step_complete",workflowId:s,stepKey:w,name:c,description:g,ts:Date.now(),durationMs:Q,result:h,...t&&{metadata:t}}),h.value}if(Y=h,I<P.attempts&&P.retryOn(h.error,I)){let Q=pe(I,P);a({type:"step_retry",workflowId:s,stepId:O,stepKey:l,name:c,ts:Date.now(),attempt:I+1,maxAttempts:P.attempts,delayMs:Q,error:h.error,...t&&{metadata:t},diagnostics:K(h.error,n.errorMeta,"result",I,performance.now()-S)}),P.onRetry(h.error,I,Q),await me(Q);continue}P.attempts>1&&a({type:"step_retries_exhausted",workflowId:s,stepId:O,stepKey:l,name:c,ts:Date.now(),durationMs:performance.now()-S,attempts:I,lastError:h.error,...t&&{metadata:t},diagnostics:K(h.error,n.errorMeta,"result",I,performance.now()-S)});break}catch(h){let Q=performance.now()-Ne;if(et(h)){let q=h.ms;a({type:"step_timeout",workflowId:s,stepId:O,stepKey:l,name:c,ts:Date.now(),timeoutMs:q,attempt:I,...t&&{metadata:t},diagnostics:K(h,n.errorMeta,"timeout",I)}),a({type:"step_success",workflowId:s,stepId:O,stepKey:l,name:c,description:g,ts:Date.now(),durationMs:performance.now()-S,...t&&{metadata:t}}),w&&a({type:"step_complete",workflowId:s,stepKey:w,name:c,description:g,ts:Date.now(),durationMs:performance.now()-S,result:B(void 0),...t&&{metadata:t}});return}if(j(h))throw a({type:"step_aborted",workflowId:s,stepId:O,stepKey:l,name:c,description:g,ts:Date.now(),durationMs:Q,...t&&{metadata:t}}),h;if(be(h)){let q=Xe(h),Fe=b?.ms??q?.timeoutMs??0;if(a({type:"step_timeout",workflowId:s,stepId:O,stepKey:l,name:c,ts:Date.now(),timeoutMs:Fe,attempt:I,...t&&{metadata:t},diagnostics:K(h,n.errorMeta,"timeout",I)}),I<P.attempts&&P.retryOn(h,I)){let ce=pe(I,P);a({type:"step_retry",workflowId:s,stepId:O,stepKey:l,name:c,ts:Date.now(),attempt:I+1,maxAttempts:P.attempts,delayMs:ce,error:h,...t&&{metadata:t},diagnostics:K(h,n.errorMeta,"timeout",I,performance.now()-S)}),P.onRetry(h,I,ce),await me(ce);continue}P.attempts>1&&a({type:"step_retries_exhausted",workflowId:s,stepId:O,stepKey:l,name:c,ts:Date.now(),durationMs:performance.now()-S,attempts:I,lastError:h,...t&&{metadata:t},diagnostics:K(h,n.errorMeta,"timeout",I,performance.now()-S)});let ue=performance.now()-S;throw a({type:"step_error",workflowId:s,stepId:O,stepKey:l,name:c,description:g,ts:Date.now(),durationMs:ue,error:h,...t&&{metadata:t},diagnostics:K(h,n.errorMeta,"timeout",I,ue)}),w&&a({type:"step_complete",workflowId:s,stepKey:w,name:c,description:g,ts:Date.now(),durationMs:ue,result:N(h,{cause:h}),meta:{origin:"throw",thrown:h},...t&&{metadata:t}}),i?.(h,c,m),D(h,{origin:"throw",thrown:h})}if(I<P.attempts&&P.retryOn(h,I)){let q=pe(I,P);a({type:"step_retry",workflowId:s,stepId:O,stepKey:l,name:c,ts:Date.now(),attempt:I+1,maxAttempts:P.attempts,delayMs:q,error:h,...t&&{metadata:t},diagnostics:K(h,n.errorMeta,"throw",I,performance.now()-S)}),P.onRetry(h,I,q),await me(q);continue}P.attempts>1&&!be(h)&&a({type:"step_retries_exhausted",workflowId:s,stepId:O,stepKey:l,name:c,ts:Date.now(),durationMs:performance.now()-S,attempts:I,lastError:h,...t&&{metadata:t},diagnostics:K(h,n.errorMeta,"throw",I,performance.now()-S)});let ie=performance.now()-S,Z;try{Z=M(h)}catch(q){throw X(q)}throw a({type:"step_error",workflowId:s,stepId:O,stepKey:l,name:c,description:g,ts:Date.now(),durationMs:ie,error:Z,...t&&{metadata:t},diagnostics:K(h,n.errorMeta,"throw",I,ie)}),w&&a({type:"step_complete",workflowId:s,stepKey:w,name:c,description:g,ts:Date.now(),durationMs:ie,result:N(Z,{cause:h}),meta:{origin:"throw",thrown:h},...t&&{metadata:t}}),i?.(Z,c,m),D(Z,{origin:"throw",thrown:h})}}let z=Y,se=performance.now()-S,ae=W(z.error,{origin:"result",resultCause:z.cause});throw a({type:"step_error",workflowId:s,stepId:O,stepKey:l,name:c,description:g,ts:Date.now(),durationMs:se,error:ae,...t&&{metadata:t},diagnostics:K(z.error,n.errorMeta,"result",P.attempts,se)}),w&&a({type:"step_complete",workflowId:s,stepKey:w,name:c,description:g,ts:Date.now(),durationMs:se,result:z,meta:{origin:"result",resultCause:z.cause},...t&&{metadata:t}}),i?.(ae,c,m),D(ae,{origin:"result",resultCause:z.cause})})();p.try=(u,d,o)=>{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 n=o.key??u,t=u,c=u,l="error"in o?()=>o.error:o.onError,w=y;return(async()=>{let g=w?performance.now():0;y&&a({type:"step_start",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now()});try{let x=await d(),b=performance.now()-g;return a({type:"step_success",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:b}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:b,result:B(x)}),x}catch(x){let b=l(x),O=performance.now()-g,L=W(b,{origin:"throw",thrown:x});throw a({type:"step_error",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:O,error:L}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:O,result:N(b,{cause:x}),meta:{origin:"throw",thrown:x}}),i?.(L,t,m),D(L,{origin:"throw",thrown:x})}})()},p.fromResult=(u,d,o)=>{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 n=o.key??u,t=u,c=u,l="error"in o?()=>o.error:o.onError,w=y;return(async()=>{let g=w?performance.now():0;y&&a({type:"step_start",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now()});let x=await d();if(x.ok){let b=performance.now()-g;return a({type:"step_success",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:b}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:b,result:B(x.value)}),x.value}else{let b=l(x.error),O=performance.now()-g,L=W(b,{origin:"result",resultCause:x.error});throw a({type:"step_error",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:O,error:L}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:O,result:N(b,{cause:x.error}),meta:{origin:"result",resultCause:x.error}}),i?.(L,t,m),D(L,{origin:"result",resultCause:x.error})}})()},p.fromNullable=(u,d,o,n)=>{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 p(u,async()=>{let t=await d();return t!=null?B(t):N(o())},n)},p.retry=(u,d,o)=>{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 p(u,d,{key:o.key??u,retry:{attempts:o.attempts,backoff:o.backoff,initialDelay:o.initialDelay,maxDelay:o.maxDelay,jitter:o.jitter,retryOn:o.retryOn,onRetry:o.onRetry},timeout:o.timeout})},p.withTimeout=(u,d,o)=>{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 p(u,d,{key:o.key??u,timeout:o})},p.sleep=(u,d,o)=>{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 n=typeof d=="string"?qe(d):d;if(!n)throw new Error(`step.sleep: invalid duration '${d}'`);let t=n.millis,c=o?.signal;return p(u,async()=>{if(_?.aborted||c?.aborted){let l=new Error("Sleep aborted");throw l.name="AbortError",l}return new Promise((l,w)=>{let g={timeoutId:void 0},x=()=>{g.timeoutId&&clearTimeout(g.timeoutId);let b=new Error("Sleep aborted");b.name="AbortError",w(b)};_?.addEventListener("abort",x,{once:!0}),c?.addEventListener("abort",x,{once:!0}),g.timeoutId=setTimeout(()=>{_?.removeEventListener("abort",x),c?.removeEventListener("abort",x),l(B(void 0))},t)})},{key:o?.key??u,description:o?.description})},p.parallel=((...u)=>{if(typeof u[0]!="string")throw new TypeError("step.parallel(name, ...): first argument must be a string (step name). Example: step.parallel('Fetch data', { user: () => fetchUser(), posts: () => fetchPosts() })");let d=u[0],o=u[1];if(typeof o=="function")return H(d,o);if(o&&typeof o=="object"&&!Array.isArray(o)){let t=$(o);return te(t,{name:d})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),p.race=(u,d)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),t=!1,c={scopeId:o,type:"race",winnerId:void 0};k.push(c);let l=()=>{if(t)return;t=!0;let w=k.findIndex(g=>g.scopeId===o);w!==-1&&k.splice(w,1),a({type:"scope_end",workflowId:s,scopeId:o,ts:Date.now(),durationMs:performance.now()-n,winnerId:c.winnerId})};a({type:"scope_start",workflowId:s,scopeId:o,scopeType:"race",name:u,ts:Date.now()});try{let w=await d();if(l(),!w.ok)throw i?.(w.error,u,m),D(w.error,{origin:"result",resultCause:w.cause});return w.value}catch(w){throw l(),w}})()},p.allSettled=(u,d)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),t=!1;k.push({scopeId:o,type:"allSettled"});let c=()=>{if(t)return;t=!0;let l=k.findIndex(w=>w.scopeId===o);l!==-1&&k.splice(l,1),a({type:"scope_end",workflowId:s,scopeId:o,ts:Date.now(),durationMs:performance.now()-n})};a({type:"scope_start",workflowId:s,scopeId:o,scopeType:"allSettled",name:u,ts:Date.now()});try{let l=await d();if(c(),!l.ok)throw i?.(l.error,u,m),D(l.error,{origin:"result",resultCause:l.cause});return l.value}catch(l){throw c(),l}})()},p.if=(u,d,o)=>o(),p.label=p.if,p.branch=async(u,d)=>{let{condition:o,then:n,else:t}=d;if(o())return await n();if(t)return await t()},p.arm=(u,d)=>({fn:u,errors:d}),p.forEach=async(u,d,o)=>{let n=[],t=o.maxIterations,c=0,l="run"in o,w=Symbol.asyncIterator in d?d:(async function*(){yield*d})();for await(let g of w){if(t!==void 0&&c>=t)break;let x;l?x=await o.run(g,c):x=await o.item.handler(g,c,p),n.push(x),c++}return n},p.item=u=>({__forEachItemHandler:!0,handler:u}),p.dep=(u,d)=>d,p.run=(u,d,o)=>p(u,()=>d,o),p.workflow=(u,d,o)=>p(u,d,o),p.andThen=(u,d,o,n)=>p(u,()=>o(d),n),p.match=async(u,d,o,n)=>p(u,async()=>{let t=await d;return t.ok?B(await o.ok(t.value)):B(await o.err(t.error,t.cause))},n),p.all=p.parallel,p.map=async(u,d,o,n)=>{let t=n?.concurrency??d.length;return p(u,()=>t>=d.length?Pe(d.map((c,l)=>o(c,l))):(async()=>{let c=[];for(let l=0;l<d.length;l+=t){let w=d.slice(l,l+t),g=await Pe(w.map((x,b)=>o(x,l+b)));if(!g.ok)return g;c.push(...g.value)}return B(c)})(),{key:n?.key})},p.withFallback=(u,d,o)=>{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 n=o.key??u,t=u,c=C(n),l=y;return(async()=>{let w=l?performance.now():0;y&&a({type:"step_start",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now()});let g;try{g=await d()}catch(S){if(j(S))throw a({type:"step_aborted",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-w}),S;let U;try{U=M(S)}catch(v){throw X(v)}if(o.on!==void 0&&o.on!==U){let v=performance.now()-w;throw a({type:"step_error",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:v,error:U}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:v,result:N(U,{cause:S}),meta:{origin:"throw",thrown:S}}),i?.(U,t,m),D(U,{origin:"throw",thrown:S})}let A;try{A=await o.fallback()}catch(v){if(j(v))throw a({type:"step_aborted",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-w}),v;let P;try{P=M(v)}catch(z){throw X(z)}let Y=performance.now()-w;throw a({type:"step_error",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:Y,error:P}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:Y,result:N(P,{cause:v}),meta:{origin:"throw",thrown:v}}),i?.(P,t,m),D(P,{origin:"throw",thrown:v})}if(A.ok){let v=performance.now()-w;return a({type:"step_success",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:v}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:v,result:A,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(U)}}),A.value}else{let v=performance.now()-w,P=W(A.error,{origin:"result",resultCause:A.cause});throw a({type:"step_error",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:v,error:P}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:v,result:A,meta:{origin:"result",resultCause:A.cause}}),i?.(P,t,m),D(P,{origin:"result",resultCause:A.cause})}}if(g.ok){let S=performance.now()-w;return a({type:"step_success",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:S}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:S,result:g}),g.value}let x=g.error;if(o.on!==void 0&&o.on!==x){let S=performance.now()-w,U=W(x,{origin:"result",resultCause:g.cause});throw a({type:"step_error",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:S,error:U}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:S,result:g,meta:{origin:"result",resultCause:g.cause}}),i?.(U,t,m),D(U,{origin:"result",resultCause:g.cause})}let b;try{b=await o.fallback()}catch(S){if(j(S))throw a({type:"step_aborted",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-w}),S;let U;try{U=M(S)}catch(v){throw X(v)}let A=performance.now()-w;throw a({type:"step_error",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:A,error:U}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:A,result:N(U,{cause:S}),meta:{origin:"throw",thrown:S}}),i?.(U,t,m),D(U,{origin:"throw",thrown:S})}if(b.ok){let S=performance.now()-w;return a({type:"step_success",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:S}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:S,result:b,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(x)}}),b.value}let O=performance.now()-w,L=W(b.error,{origin:"result",resultCause:b.cause});throw a({type:"step_error",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:O,error:L}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:O,result:b,meta:{origin:"result",resultCause:b.cause}}),i?.(L,t,m),D(L,{origin:"result",resultCause:b.cause})})()},p.withResource=(u,d)=>{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 o=u,n=u,t=C(o),c=y;return(async()=>{let l=c?performance.now():0;y&&a({type:"step_start",workflowId:s,stepId:t,stepKey:o,name:n,ts:Date.now()});let w;try{w=await d.acquire()}catch(A){if(j(A))throw a({type:"step_aborted",workflowId:s,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:performance.now()-l}),A;let v;try{v=M(A)}catch(Y){throw X(Y)}let P=performance.now()-l;throw a({type:"step_error",workflowId:s,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:P,error:v}),o&&a({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:P,result:N(v,{cause:A}),meta:{origin:"throw",thrown:A}}),i?.(v,n,m),D(v,{origin:"throw",thrown:A})}if(!w.ok){let A=performance.now()-l,v=W(w.error,{origin:"result",resultCause:w.cause});throw a({type:"step_error",workflowId:s,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:A,error:v}),o&&a({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:A,result:w,meta:{origin:"result",resultCause:w.cause}}),i?.(v,n,m),D(v,{origin:"result",resultCause:w.cause})}let g=w.value,x,b,O=!1;try{x=await d.use(g)}catch(A){if(j(A)){try{await d.release(g)}catch(v){console.warn(`[awaitly] step.withResource("${u}"): release threw after earlyExit:`,v)}throw A}b=A,O=!0}try{await d.release(g)}catch(A){console.warn(`[awaitly] step.withResource("${u}"): release threw:`,A)}if(O){let A;try{A=M(b)}catch(P){throw X(P)}let v=performance.now()-l;throw a({type:"step_error",workflowId:s,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:v,error:A}),o&&a({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:v,result:N(A,{cause:b}),meta:{origin:"throw",thrown:b}}),i?.(A,n,m),D(A,{origin:"throw",thrown:b})}let L=x;if(L.ok){let A=performance.now()-l;return a({type:"step_success",workflowId:s,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:A}),o&&a({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:A,result:L}),L.value}let S=performance.now()-l,U=W(L.error,{origin:"result",resultCause:L.cause});throw a({type:"step_error",workflowId:s,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:S,error:U}),o&&a({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:S,result:L,meta:{origin:"result",resultCause:L.cause}}),i?.(U,n,m),D(U,{origin:"result",resultCause:L.cause})})()};let V=await r({step:p});if(process.env.NODE_ENV!=="production"&&V!==null&&typeof V=="object"&&"ok"in V&&typeof V.ok=="boolean"){let u=V;(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
2
 
3
3
  Incorrect: return ok({ data });
4
4
  Correct: return { data };
5
5
 
6
- See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return K(q)}catch(p){if(We(p))throw p.thrown;if(F(p)){let X=p.meta.origin==="throw"?p.meta.thrown:p.meta.origin==="result"?p.meta.resultCause:void 0;return N(p.error,{cause:X})}let W=D(p);return i?.(W,"unexpected",E),N(W,{cause:p})}}ye.strict=(n,u)=>ye(n,u);async function we(n){return n.length===0?K([]):new Promise(u=>{let i=!1,y=n.length,x=new Array(n.length);for(let f=0;f<n.length;f++){let k=f;Promise.resolve(n[k]).catch(E=>N({type:"PROMISE_REJECTED",cause:E},{cause:{type:"PROMISE_REJECTION",reason:E}})).then(E=>{if(!i){if(!E.ok){i=!0,u(E);return}x[k]=E.value,y--,y===0&&u(K(x))}})}})}function ke(n){return typeof n=="object"&&n!==null&&n.type==="RATE_LIMIT_EXCEEDED"}function le(n){return typeof n=="object"&&n!==null&&n.type==="QUEUE_FULL"}function pe(n,u){let{maxPerSecond:i,strategy:y="wait"}=u,x=u.burstCapacity??i*2,f=x,k=Date.now(),E=i/1e3,M=[];function o(){let w=Date.now(),s=(w-k)*E;f=Math.min(x,f+s),k=w}function D(){if(o(),f>=1)return f-=1,0;let w=1-f;return Math.ceil(w/E)}async function R(){return new Promise(w=>{let C=()=>{let s=D();s===0?w():(M.push(C),setTimeout(()=>{let I=M.indexOf(C);I!==-1&&(M.splice(I,1),C())},s))};C()})}return{async execute(w){let C=D();if(C>0){if(y==="reject")throw{type:"RATE_LIMIT_EXCEEDED",limiterName:n,retryAfterMs:C};await R()}return w()},async executeResult(w){let C=D();if(C>0){if(y==="reject")return N({type:"RATE_LIMIT_EXCEEDED",limiterName:n,retryAfterMs:C});await R()}return w()},getStats(){return o(),{availableTokens:Math.floor(f),maxTokens:x,tokensPerSecond:i,waitingCount:M.length}},reset(){f=x,k=Date.now(),M.length=0}}}function me(n,u){let{maxConcurrent:i,strategy:y="queue",maxQueueSize:x=1/0}=u,f=0,k=[];async function E(){if(f<i){f++;return}if(y==="reject")throw{type:"QUEUE_FULL",limiterName:n,queueSize:k.length,maxQueueSize:x};if(k.length>=x)throw{type:"QUEUE_FULL",limiterName:n,queueSize:k.length,maxQueueSize:x};return new Promise((o,D)=>{k.push({resolve:o,reject:D})})}function M(){f--,k.length>0&&f<i&&(f++,k.shift()?.resolve())}return{async execute(o){await E();try{return await o()}finally{M()}},async executeAll(o){let D=new Array(o.length),R=[];for(let w=0;w<o.length;w++){let C=w,s=this.execute(o[C]).then(I=>{D[C]=I});R.push(s)}return await Promise.all(R),D},async executeResult(o){try{await E()}catch(D){if(le(D))return N(D);throw D}try{return await o()}finally{M()}},getStats(){return{activeCount:f,maxConcurrent:i,queueSize:k.length,maxQueueSize:x}},reset(){for(f=0;k.length>0;)k.shift()?.reject(new Error("Limiter reset"))}}}function Re(n,u){let i=u.rate?pe(`${n}-rate`,u.rate):void 0,y=u.concurrency?me(`${n}-concurrency`,u.concurrency):void 0;return{rate:i,concurrency:y,async execute(x){let f=x;if(i){let k=f;f=()=>i.execute(k)}return y?y.execute(f):f()}}}function ge(n,u){let{limit:i,windowMs:y=1e3,strategy:x="wait"}=u,f=Date.now(),k=0,E=[];function M(){let R=Date.now(),w=R-f;return w>=y?(f=R,k=0,0):y-w}function o(R){let w=M();return k+R<=i?(k+=R,0):w}async function D(R){return new Promise(w=>{let C=()=>{let s=o(R);s===0?w():(E.push({resolve:C,cost:R}),setTimeout(()=>{let I=E.findIndex(F=>F.resolve===C);I!==-1&&(E.splice(I,1),C())},s))};C()})}return{async execute(R,w=1){if(w>i)throw{type:"RATE_LIMIT_EXCEEDED",limiterName:n,retryAfterMs:y};let C=o(w);if(C>0){if(x==="reject")throw{type:"RATE_LIMIT_EXCEEDED",limiterName:n,retryAfterMs:C};await D(w)}return R()},async executeResult(R,w=1){if(w>i)return N({type:"RATE_LIMIT_EXCEEDED",limiterName:n,retryAfterMs:y});let C=o(w);if(C>0){if(x==="reject")return N({type:"RATE_LIMIT_EXCEEDED",limiterName:n,retryAfterMs:C});await D(w)}return R()},getStats(){let R=M();return{requestCount:k,limit:i,windowMs:y,remainingMs:R,waitingCount:E.length}},reset(){f=Date.now(),k=0,E.length=0}}}function xe(n,u){let{tokensPerSecond:i,strategy:y="wait"}=u,x=u.maxTokens??i*2,f=x,k=Date.now(),E=i/1e3,M=[];function o(){let w=Date.now(),s=(w-k)*E;f=Math.min(x,f+s),k=w}function D(w){if(o(),f>=w)return f-=w,0;let C=w-f;return Math.ceil(C/E)}async function R(w){return new Promise(C=>{let s=()=>{let I=D(w);I===0?C():(M.push({check:s,cost:w}),setTimeout(()=>{let F=M.findIndex(B=>B.check===s);F!==-1&&(M.splice(F,1),s())},I))};s()})}return{async execute(w,C=1){if(C>x)throw{type:"RATE_LIMIT_EXCEEDED",limiterName:n,retryAfterMs:Math.ceil(C/E)};let s=D(C);if(s>0){if(y==="reject")throw{type:"RATE_LIMIT_EXCEEDED",limiterName:n,retryAfterMs:s};await R(C)}return w()},async executeResult(w,C=1){if(C>x)return N({type:"RATE_LIMIT_EXCEEDED",limiterName:n,retryAfterMs:Math.ceil(C/E)});let s=D(C);if(s>0){if(y==="reject")return N({type:"RATE_LIMIT_EXCEEDED",limiterName:n,retryAfterMs:s});await R(C)}return w()},getStats(){return o(),{availableTokens:f,maxTokens:x,tokensPerSecond:i,waitingCount:M.length}},reset(){f=x,k=Date.now(),M.length=0}}}var Ce={api:{maxPerSecond:10,burstCapacity:20,strategy:"wait"},database:{maxConcurrent:10,strategy:"queue",maxQueueSize:100},external:{maxPerSecond:5,burstCapacity:10,strategy:"wait"}};0&&(module.exports={createCombinedLimiter,createConcurrencyLimiter,createCostBasedRateLimiter,createFixedWindowLimiter,createRateLimiter,isQueueFullError,isRateLimitExceededError,rateLimiterPresets});
6
+ See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return B(V)}catch(p){if(Ze(p))throw p.thrown;if(j(p)){let H=p.meta.origin==="throw"?p.meta.thrown:p.meta.origin==="result"?p.meta.resultCause:void 0;return N(p.error,{cause:H})}let $=M(p);return i?.($,"unexpected",m),N($,{cause:p})}}Ae.strict=(r,e)=>Ae(r,e);async function Pe(r){return r.length===0?B([]):new Promise(e=>{let i=!1,y=r.length,R=new Array(r.length);for(let E=0;E<r.length;E++){let T=E;Promise.resolve(r[T]).catch(m=>N({type:"PROMISE_REJECTED",cause:m},{cause:{type:"PROMISE_REJECTION",reason:m}})).then(m=>{if(!i){if(!m.ok){i=!0,e(m);return}R[T]=m.value,y--,y===0&&e(B(R))}})}})}function ve(r){return typeof r=="object"&&r!==null&&r.type==="RATE_LIMIT_EXCEEDED"}function Ee(r){return typeof r=="object"&&r!==null&&r.type==="QUEUE_FULL"}function de(r,e){let{maxPerSecond:i,strategy:y="wait"}=e,R=e.burstCapacity??i*2,E=R,T=Date.now(),m=i/1e3,_=[];function s(){let f=Date.now(),a=(f-T)*m;E=Math.min(R,E+a),T=f}function M(){if(s(),E>=1)return E-=1,0;let f=1-E;return Math.ceil(f/m)}async function k(){return new Promise(f=>{let C=()=>{let a=M();a===0?f():(_.push(C),setTimeout(()=>{let D=_.indexOf(C);D!==-1&&(_.splice(D,1),C())},a))};C()})}return{async execute(f){let C=M();if(C>0){if(y==="reject")throw{type:"RATE_LIMIT_EXCEEDED",limiterName:r,retryAfterMs:C};await k()}return f()},async executeResult(f){let C=M();if(C>0){if(y==="reject")return N({type:"RATE_LIMIT_EXCEEDED",limiterName:r,retryAfterMs:C});await k()}return f()},getStats(){return s(),{availableTokens:Math.floor(E),maxTokens:R,tokensPerSecond:i,waitingCount:_.length}},reset(){E=R,T=Date.now(),_.length=0}}}function ye(r,e){let{maxConcurrent:i,strategy:y="queue",maxQueueSize:R=1/0}=e,E=0,T=[];async function m(){if(E<i){E++;return}if(y==="reject")throw{type:"QUEUE_FULL",limiterName:r,queueSize:T.length,maxQueueSize:R};if(T.length>=R)throw{type:"QUEUE_FULL",limiterName:r,queueSize:T.length,maxQueueSize:R};return new Promise((s,M)=>{T.push({resolve:s,reject:M})})}function _(){E--,T.length>0&&E<i&&(E++,T.shift()?.resolve())}return{async execute(s){await m();try{return await s()}finally{_()}},async executeAll(s){let M=new Array(s.length),k=[];for(let f=0;f<s.length;f++){let C=f,a=this.execute(s[C]).then(D=>{M[C]=D});k.push(a)}return await Promise.all(k),M},async executeResult(s){try{await m()}catch(M){if(Ee(M))return N(M);throw M}try{return await s()}finally{_()}},getStats(){return{activeCount:E,maxConcurrent:i,queueSize:T.length,maxQueueSize:R}},reset(){for(E=0;T.length>0;)T.shift()?.reject(new Error("Limiter reset"))}}}function Oe(r,e){let i=e.rate?de(`${r}-rate`,e.rate):void 0,y=e.concurrency?ye(`${r}-concurrency`,e.concurrency):void 0;return{rate:i,concurrency:y,async execute(R){let E=R;if(i){let T=E;E=()=>i.execute(T)}return y?y.execute(E):E()}}}function Ie(r,e){let{limit:i,windowMs:y=1e3,strategy:R="wait"}=e,E=Date.now(),T=0,m=[];function _(){let k=Date.now(),f=k-E;return f>=y?(E=k,T=0,0):y-f}function s(k){let f=_();return T+k<=i?(T+=k,0):f}async function M(k){return new Promise(f=>{let C=()=>{let a=s(k);a===0?f():(m.push({resolve:C,cost:k}),setTimeout(()=>{let D=m.findIndex(j=>j.resolve===C);D!==-1&&(m.splice(D,1),C())},a))};C()})}return{async execute(k,f=1){if(f>i)throw{type:"RATE_LIMIT_EXCEEDED",limiterName:r,retryAfterMs:y};let C=s(f);if(C>0){if(R==="reject")throw{type:"RATE_LIMIT_EXCEEDED",limiterName:r,retryAfterMs:C};await M(f)}return k()},async executeResult(k,f=1){if(f>i)return N({type:"RATE_LIMIT_EXCEEDED",limiterName:r,retryAfterMs:y});let C=s(f);if(C>0){if(R==="reject")return N({type:"RATE_LIMIT_EXCEEDED",limiterName:r,retryAfterMs:C});await M(f)}return k()},getStats(){let k=_();return{requestCount:T,limit:i,windowMs:y,remainingMs:k,waitingCount:m.length}},reset(){E=Date.now(),T=0,m.length=0}}}function De(r,e){let{tokensPerSecond:i,strategy:y="wait"}=e,R=e.maxTokens??i*2,E=R,T=Date.now(),m=i/1e3,_=[];function s(){let f=Date.now(),a=(f-T)*m;E=Math.min(R,E+a),T=f}function M(f){if(s(),E>=f)return E-=f,0;let C=f-E;return Math.ceil(C/m)}async function k(f){return new Promise(C=>{let a=()=>{let D=M(f);D===0?C():(_.push({check:a,cost:f}),setTimeout(()=>{let j=_.findIndex(W=>W.check===a);j!==-1&&(_.splice(j,1),a())},D))};a()})}return{async execute(f,C=1){if(C>R)throw{type:"RATE_LIMIT_EXCEEDED",limiterName:r,retryAfterMs:Math.ceil(C/m)};let a=M(C);if(a>0){if(y==="reject")throw{type:"RATE_LIMIT_EXCEEDED",limiterName:r,retryAfterMs:a};await k(C)}return f()},async executeResult(f,C=1){if(C>R)return N({type:"RATE_LIMIT_EXCEEDED",limiterName:r,retryAfterMs:Math.ceil(C/m)});let a=M(C);if(a>0){if(y==="reject")return N({type:"RATE_LIMIT_EXCEEDED",limiterName:r,retryAfterMs:a});await k(C)}return f()},getStats(){return s(),{availableTokens:E,maxTokens:R,tokensPerSecond:i,waitingCount:_.length}},reset(){E=R,T=Date.now(),_.length=0}}}var Ue={api:{maxPerSecond:10,burstCapacity:20,strategy:"wait"},database:{maxConcurrent:10,strategy:"queue",maxQueueSize:100},external:{maxPerSecond:5,burstCapacity:10,strategy:"wait"}};0&&(module.exports={createCombinedLimiter,createConcurrencyLimiter,createCostBasedRateLimiter,createFixedWindowLimiter,createRateLimiter,isQueueFullError,isRateLimitExceededError,rateLimiterPresets});
7
7
  //# sourceMappingURL=ratelimit.cjs.map