awaitly 1.34.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/dist/{duration.d.ts → di-BDlT7InM.d.cts} +15 -1
  2. package/dist/{duration.d.cts → di-BbFFfO8y.d.ts} +15 -1
  3. package/dist/errors-DtXvrCiO.d.cts +708 -0
  4. package/dist/errors-DtXvrCiO.d.ts +708 -0
  5. package/dist/index.cjs +4594 -1
  6. package/dist/index.cjs.map +1 -1
  7. package/dist/index.d.cts +1970 -141
  8. package/dist/index.d.ts +1970 -141
  9. package/dist/index.js +4398 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/result.cjs +641 -1
  12. package/dist/result.cjs.map +1 -1
  13. package/dist/result.d.cts +35 -5
  14. package/dist/result.d.ts +35 -5
  15. package/dist/result.js +561 -1
  16. package/dist/result.js.map +1 -1
  17. package/dist/testing.cjs +4202 -8
  18. package/dist/testing.cjs.map +1 -1
  19. package/dist/testing.d.cts +2 -6
  20. package/dist/testing.d.ts +2 -6
  21. package/dist/testing.js +4154 -8
  22. package/dist/testing.js.map +1 -1
  23. package/dist/{run-entry-D2MmJFj9.d.cts → types-B8NfNRGX.d.ts} +1152 -1499
  24. package/dist/{run-entry-Dduz-is2.d.ts → types-BZ2f4MRR.d.cts} +1152 -1499
  25. package/dist/workflow.cjs +7096 -6
  26. package/dist/workflow.cjs.map +1 -1
  27. package/dist/workflow.d.cts +3346 -22
  28. package/dist/workflow.d.ts +3346 -22
  29. package/dist/workflow.js +6929 -6
  30. package/dist/workflow.js.map +1 -1
  31. package/package.json +13 -178
  32. package/dist/adapters.cjs +0 -7
  33. package/dist/adapters.cjs.map +0 -1
  34. package/dist/adapters.d.cts +0 -179
  35. package/dist/adapters.d.ts +0 -179
  36. package/dist/adapters.js +0 -7
  37. package/dist/adapters.js.map +0 -1
  38. package/dist/batch.cjs +0 -7
  39. package/dist/batch.cjs.map +0 -1
  40. package/dist/batch.d.cts +0 -200
  41. package/dist/batch.d.ts +0 -200
  42. package/dist/batch.js +0 -7
  43. package/dist/batch.js.map +0 -1
  44. package/dist/bind-deps.cjs +0 -2
  45. package/dist/bind-deps.cjs.map +0 -1
  46. package/dist/bind-deps.d.cts +0 -28
  47. package/dist/bind-deps.d.ts +0 -28
  48. package/dist/bind-deps.js +0 -2
  49. package/dist/bind-deps.js.map +0 -1
  50. package/dist/cache.cjs +0 -2
  51. package/dist/cache.cjs.map +0 -1
  52. package/dist/cache.d.cts +0 -269
  53. package/dist/cache.d.ts +0 -269
  54. package/dist/cache.js +0 -2
  55. package/dist/cache.js.map +0 -1
  56. package/dist/circuit-breaker.cjs +0 -7
  57. package/dist/circuit-breaker.cjs.map +0 -1
  58. package/dist/circuit-breaker.d.cts +0 -211
  59. package/dist/circuit-breaker.d.ts +0 -211
  60. package/dist/circuit-breaker.js +0 -7
  61. package/dist/circuit-breaker.js.map +0 -1
  62. package/dist/conditional.cjs +0 -2
  63. package/dist/conditional.cjs.map +0 -1
  64. package/dist/conditional.d.cts +0 -252
  65. package/dist/conditional.d.ts +0 -252
  66. package/dist/conditional.js +0 -2
  67. package/dist/conditional.js.map +0 -1
  68. package/dist/core.cjs +0 -7
  69. package/dist/core.cjs.map +0 -1
  70. package/dist/core.d.cts +0 -5
  71. package/dist/core.d.ts +0 -5
  72. package/dist/core.js +0 -7
  73. package/dist/core.js.map +0 -1
  74. package/dist/di-COl5oFnR.d.cts +0 -15
  75. package/dist/di-CyDj_JyZ.d.ts +0 -15
  76. package/dist/diagnostics.cjs +0 -8
  77. package/dist/diagnostics.cjs.map +0 -1
  78. package/dist/diagnostics.d.cts +0 -68
  79. package/dist/diagnostics.d.ts +0 -68
  80. package/dist/diagnostics.js +0 -8
  81. package/dist/diagnostics.js.map +0 -1
  82. package/dist/durable.cjs +0 -11
  83. package/dist/durable.cjs.map +0 -1
  84. package/dist/durable.d.cts +0 -9
  85. package/dist/durable.d.ts +0 -9
  86. package/dist/durable.js +0 -11
  87. package/dist/durable.js.map +0 -1
  88. package/dist/duration.cjs +0 -2
  89. package/dist/duration.cjs.map +0 -1
  90. package/dist/duration.js +0 -2
  91. package/dist/duration.js.map +0 -1
  92. package/dist/engine.cjs +0 -11
  93. package/dist/engine.cjs.map +0 -1
  94. package/dist/engine.d.cts +0 -115
  95. package/dist/engine.d.ts +0 -115
  96. package/dist/engine.js +0 -11
  97. package/dist/engine.js.map +0 -1
  98. package/dist/errors.cjs +0 -2
  99. package/dist/errors.cjs.map +0 -1
  100. package/dist/errors.d.cts +0 -361
  101. package/dist/errors.d.ts +0 -361
  102. package/dist/errors.js +0 -2
  103. package/dist/errors.js.map +0 -1
  104. package/dist/fetch.cjs +0 -7
  105. package/dist/fetch.cjs.map +0 -1
  106. package/dist/fetch.d.cts +0 -86
  107. package/dist/fetch.d.ts +0 -86
  108. package/dist/fetch.js +0 -7
  109. package/dist/fetch.js.map +0 -1
  110. package/dist/flow.cjs +0 -7
  111. package/dist/flow.cjs.map +0 -1
  112. package/dist/flow.d.cts +0 -163
  113. package/dist/flow.d.ts +0 -163
  114. package/dist/flow.js +0 -7
  115. package/dist/flow.js.map +0 -1
  116. package/dist/functional.cjs +0 -2
  117. package/dist/functional.cjs.map +0 -1
  118. package/dist/functional.d.cts +0 -444
  119. package/dist/functional.d.ts +0 -444
  120. package/dist/functional.js +0 -2
  121. package/dist/functional.js.map +0 -1
  122. package/dist/guards-BodHXLzX.d.cts +0 -72
  123. package/dist/guards-CeWoQ8fn.d.ts +0 -72
  124. package/dist/hitl-BPE_1UiM.d.cts +0 -468
  125. package/dist/hitl-byp570uC.d.ts +0 -468
  126. package/dist/hitl.cjs +0 -7
  127. package/dist/hitl.cjs.map +0 -1
  128. package/dist/hitl.d.cts +0 -442
  129. package/dist/hitl.d.ts +0 -442
  130. package/dist/hitl.js +0 -7
  131. package/dist/hitl.js.map +0 -1
  132. package/dist/index-BYT3amEz.d.ts +0 -417
  133. package/dist/index-C_ak66jy.d.cts +0 -417
  134. package/dist/match-entry-DjI2bLpD.d.cts +0 -209
  135. package/dist/match-entry-DjI2bLpD.d.ts +0 -209
  136. package/dist/match.cjs +0 -2
  137. package/dist/match.cjs.map +0 -1
  138. package/dist/match.d.cts +0 -1
  139. package/dist/match.d.ts +0 -1
  140. package/dist/match.js +0 -2
  141. package/dist/match.js.map +0 -1
  142. package/dist/otel.cjs +0 -2
  143. package/dist/otel.cjs.map +0 -1
  144. package/dist/otel.d.cts +0 -188
  145. package/dist/otel.d.ts +0 -188
  146. package/dist/otel.js +0 -2
  147. package/dist/otel.js.map +0 -1
  148. package/dist/persistence-entry-DOMx3woy.d.ts +0 -822
  149. package/dist/persistence-entry-ymCA4iDu.d.cts +0 -822
  150. package/dist/persistence.cjs +0 -2
  151. package/dist/persistence.cjs.map +0 -1
  152. package/dist/persistence.d.cts +0 -7
  153. package/dist/persistence.d.ts +0 -7
  154. package/dist/persistence.js +0 -2
  155. package/dist/persistence.js.map +0 -1
  156. package/dist/policies.cjs +0 -2
  157. package/dist/policies.cjs.map +0 -1
  158. package/dist/policies.d.cts +0 -379
  159. package/dist/policies.d.ts +0 -379
  160. package/dist/policies.js +0 -2
  161. package/dist/policies.js.map +0 -1
  162. package/dist/ratelimit.cjs +0 -7
  163. package/dist/ratelimit.cjs.map +0 -1
  164. package/dist/ratelimit.d.cts +0 -458
  165. package/dist/ratelimit.d.ts +0 -458
  166. package/dist/ratelimit.js +0 -7
  167. package/dist/ratelimit.js.map +0 -1
  168. package/dist/reliability.cjs +0 -11
  169. package/dist/reliability.cjs.map +0 -1
  170. package/dist/reliability.d.cts +0 -11
  171. package/dist/reliability.d.ts +0 -11
  172. package/dist/reliability.js +0 -11
  173. package/dist/reliability.js.map +0 -1
  174. package/dist/resolver.cjs +0 -7
  175. package/dist/resolver.cjs.map +0 -1
  176. package/dist/resolver.d.cts +0 -68
  177. package/dist/resolver.d.ts +0 -68
  178. package/dist/resolver.js +0 -7
  179. package/dist/resolver.js.map +0 -1
  180. package/dist/resource.cjs +0 -7
  181. package/dist/resource.cjs.map +0 -1
  182. package/dist/resource.d.cts +0 -174
  183. package/dist/resource.d.ts +0 -174
  184. package/dist/resource.js +0 -7
  185. package/dist/resource.js.map +0 -1
  186. package/dist/result/retry.cjs +0 -2
  187. package/dist/result/retry.cjs.map +0 -1
  188. package/dist/result/retry.d.cts +0 -70
  189. package/dist/result/retry.d.ts +0 -70
  190. package/dist/result/retry.js +0 -2
  191. package/dist/result/retry.js.map +0 -1
  192. package/dist/retry.cjs +0 -2
  193. package/dist/retry.cjs.map +0 -1
  194. package/dist/retry.d.cts +0 -388
  195. package/dist/retry.d.ts +0 -388
  196. package/dist/retry.js +0 -2
  197. package/dist/retry.js.map +0 -1
  198. package/dist/run.cjs +0 -7
  199. package/dist/run.cjs.map +0 -1
  200. package/dist/run.d.cts +0 -4
  201. package/dist/run.d.ts +0 -4
  202. package/dist/run.js +0 -7
  203. package/dist/run.js.map +0 -1
  204. package/dist/saga.cjs +0 -11
  205. package/dist/saga.cjs.map +0 -1
  206. package/dist/saga.d.cts +0 -164
  207. package/dist/saga.d.ts +0 -164
  208. package/dist/saga.js +0 -11
  209. package/dist/saga.js.map +0 -1
  210. package/dist/singleflight.cjs +0 -2
  211. package/dist/singleflight.cjs.map +0 -1
  212. package/dist/singleflight.d.cts +0 -145
  213. package/dist/singleflight.d.ts +0 -145
  214. package/dist/singleflight.js +0 -2
  215. package/dist/singleflight.js.map +0 -1
  216. package/dist/slugs.cjs +0 -2
  217. package/dist/slugs.cjs.map +0 -1
  218. package/dist/slugs.d.cts +0 -67
  219. package/dist/slugs.d.ts +0 -67
  220. package/dist/slugs.js +0 -2
  221. package/dist/slugs.js.map +0 -1
  222. package/dist/streaming.cjs +0 -9
  223. package/dist/streaming.cjs.map +0 -1
  224. package/dist/streaming.d.cts +0 -596
  225. package/dist/streaming.d.ts +0 -596
  226. package/dist/streaming.js +0 -9
  227. package/dist/streaming.js.map +0 -1
  228. package/dist/tagged-error.cjs +0 -2
  229. package/dist/tagged-error.cjs.map +0 -1
  230. package/dist/tagged-error.d.cts +0 -275
  231. package/dist/tagged-error.d.ts +0 -275
  232. package/dist/tagged-error.js +0 -2
  233. package/dist/tagged-error.js.map +0 -1
  234. package/dist/types-DQmzO9f4.d.ts +0 -323
  235. package/dist/types-qBUOYi-4.d.cts +0 -323
  236. package/dist/webhook.cjs +0 -7
  237. package/dist/webhook.cjs.map +0 -1
  238. package/dist/webhook.d.cts +0 -499
  239. package/dist/webhook.d.ts +0 -499
  240. package/dist/webhook.js +0 -7
  241. package/dist/webhook.js.map +0 -1
@@ -1,11 +0,0 @@
1
- "use strict";var Ye=Object.defineProperty;var Xt=Object.getOwnPropertyDescriptor;var Gt=Object.getOwnPropertyNames;var Zt=Object.prototype.hasOwnProperty;var er=(e,t)=>{for(var r in t)Ye(e,r,{get:t[r],enumerable:!0})},tr=(e,t,r,p)=>{if(t&&typeof t=="object"||typeof t=="function")for(let m of Gt(t))!Zt.call(e,m)&&m!==r&&Ye(e,m,{get:()=>t[m],enumerable:!(p=Xt(t,m))||p.enumerable});return e};var rr=e=>tr(Ye({},"__esModule",{value:!0}),e);var xr={};er(xr,{CircuitOpenError:()=>We,circuitBreakerPresets:()=>At,conditionalPolicy:()=>zt,createCircuitBreaker:()=>bt,createCombinedLimiter:()=>Pt,createConcurrencyLimiter:()=>tt,createCostBasedRateLimiter:()=>Dt,createFixedWindowLimiter:()=>_t,createPolicyApplier:()=>Vt,createPolicyBundle:()=>$t,createPolicyRegistry:()=>Yt,createRateLimiter:()=>et,createSagaWorkflow:()=>Kt,envPolicy:()=>Jt,isCircuitOpenError:()=>Ct,isQueueFullError:()=>Ze,isRateLimitExceededError:()=>vt,isSagaCompensationError:()=>jt,mergePolicies:()=>de,rateLimiterPresets:()=>Ot,retryPolicies:()=>De,retryPolicy:()=>ye,runSaga:()=>Bt,servicePolicies:()=>Ht,stepOptions:()=>Qt,timeoutPolicies:()=>_e,timeoutPolicy:()=>Ee,withPolicies:()=>qt,withPolicy:()=>it});module.exports=rr(xr);var nr={"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 ct(e){return`https://jagreehal.github.io/awaitly/rules/#${e}`}var Sr=Object.keys(nr);var Ke=class extends Error{_tag};function me(e,t){return class extends Ke{_tag=e;constructor(r,p){let m=t?.message?t.message(r??{}):e;if(super(m),this.name=e,t?.slug!==void 0){if(!t.hint)throw new TypeError(`TaggedError: 'hint' is required when 'slug' is set (slug: "${t.slug}")`);Object.defineProperty(this,"code",{value:t.slug,enumerable:!0,writable:!1,configurable:!1}),Object.defineProperty(this,"hint",{value:t.hint,enumerable:!0,writable:!1,configurable:!1}),Object.defineProperty(this,"docsUrl",{value:ct(t.slug),enumerable:!0,writable:!1,configurable:!1})}if(Object.setPrototypeOf(this,new.target.prototype),r&&typeof r=="object"){let c;if(t?.slug!==void 0){let{_tag:n,name:O,message:f,stack:i,code:T,hint:a,docsUrl:_,...q}=r;c=q}else{let{_tag:n,name:O,message:f,stack:i,...T}=r;c=T}let x=Object.prototype.hasOwnProperty.call(c,"cause"),w=x?c.cause:void 0;x&&delete c.cause;let P=p?.cause!==void 0;if(x&&P)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,c),x&&(this.cause=w),P&&(this.cause=p?.cause)}else p?.cause!==void 0&&(this.cause=p.cause)}}}Object.defineProperty(me,Symbol.hasInstance,{value:e=>e instanceof Ke});(m=>{function e(c){return c instanceof Error}m.isError=e;function t(c){return c instanceof Ke}m.isTaggedError=t;function r(c,x){let w=c._tag,P=x[w];return P(c)}m.match=r;function p(c,x,w){let P=c._tag,n=x[P];return n?n(c):w(c)}m.matchPartial=p})(me||={});var lt=class extends me("TimeoutError",{slug:"runtime-step-timeout",hint:"Increase the step's timeout option, or check why the upstream operation is slow.",message:t=>t.operation?`TimeoutError: ${t.operation} timed out after ${t.ms}ms`:`TimeoutError: Operation timed out after ${t.ms}ms`}){},pt=class extends me("RetryExhaustedError",{slug:"runtime-retry-exhausted",hint:"All retry attempts failed. Inspect lastError and decide whether to surface it or compensate.",message:t=>t.operation?`RetryExhaustedError: ${t.operation} failed after ${t.attempts} attempts`:`RetryExhaustedError: Operation failed after ${t.attempts} attempts`}){},mt=class extends me("RateLimitError",{slug:"runtime-rate-limit",hint:"Wait retryAfterMs before retrying, or apply step.cache to deduplicate calls.",message:t=>t.limiterName?`RateLimitError: Rate limit exceeded for ${t.limiterName}${t.retryAfterMs?`, retry after ${t.retryAfterMs}ms`:""}`:`RateLimitError: Rate limit exceeded${t.retryAfterMs?`, retry after ${t.retryAfterMs}ms`:""}`}){},dt=class extends me("CircuitBreakerOpenError",{slug:"runtime-circuit-open",hint:"The circuit is open. Wait for it to half-open or fall back to a degraded path.",message:t=>`CircuitBreakerOpenError: Circuit ${t.circuitName} is ${t.state??"OPEN"}${t.retryAfterMs?`, retry after ${Math.ceil(t.retryAfterMs/1e3)}s`:""}`}){},ft=class extends me("ValidationError",{message:t=>`ValidationError: Invalid ${t.field} - ${t.reason}`}){},Et=class extends me("NotFoundError",{message:t=>t.id?`NotFoundError: ${t.resource} with id ${t.id} not found`:`NotFoundError: ${t.resource} not found`}){},yt=class extends me("UnauthorizedError",{message:t=>t.reason?`UnauthorizedError: ${t.reason}`:t.action&&t.resource?`UnauthorizedError: Not authorized to ${t.action} ${t.resource}`:"UnauthorizedError: Access denied"}){},wt=class extends me("NetworkError",{message:t=>t.url?`NetworkError: ${t.reason} (${t.url})`:`NetworkError: ${t.reason}`}){},gt=class extends me("CompensationError",{slug:"runtime-saga-compensation",hint:"A saga compensation step failed. Inspect compensationError and ensure compensation is idempotent.",message:t=>`CompensationError: Failed to compensate step ${t.step}`}){},Pe=class extends me("UnexpectedError",{slug:"runtime-unexpected",hint:"An unexpected exception escaped a step. Inspect cause; consider returning a typed Result instead of throwing.",message:t=>`UnexpectedError: ${t.cause instanceof Error?t.cause.message:String(t.cause??"unknown")}`}){};function or(e){let t=e.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!t)return;let r=parseFloat(t[1]),p=t[2].toLowerCase();return{_tag:"Duration",millis:r*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[p]??1)}}function He(e){return new Pe({cause:e})}function G(e){return{ok:!0,value:e}}function W(e,t){let r=t?.cause;return{ok:!1,error:e,...r!==void 0?{cause:r}:{}}}var xt=e=>e instanceof Pe||typeof e=="object"&&e!==null&&"_tag"in e&&e._tag==="UnexpectedError";function sr(e){if(e==null)return"unknown";if(typeof e=="string")return e.trim()||"unknown";if(typeof e=="object"){let t=e;if(typeof t._tag=="string"){let r=t._tag.trim();if(r)return r}if(typeof t.tag=="string"){let r=t.tag.trim();if(r)return r}if(typeof t.code=="string"){let r=t.code.trim();if(r)return r}else if(typeof t.code=="number")return String(t.code);if(e instanceof Error&&e.name){let r=e.name.trim();if(r)return r}}return"unknown"}function ar(e,t){if(!(!t||!e))return t[e]}function Ge(e){let{intent:t,domain:r,owner:p,tags:m,stateChanges:c,emits:x,calls:w}=e;if(!t&&!r&&!p&&!m?.length&&!c?.length&&!x?.length&&!w?.length)return;let P={};return t&&(P.intent=t),r&&(P.domain=r),p&&(P.owner=p),m?.length&&(P.tags=m),c?.length&&(P.stateChanges=c),x?.length&&(P.emits=x),w?.length&&(P.calls=w),P}function we(e,t,r,p,m){let c=sr(e),x=ar(c,t),w={tag:c,origin:r};return x!==void 0&&(w.classification=x),p!==void 0&&(w.attempt=p),m!==void 0&&(w.cumulativeDurationMs=m),w}var Ne=Symbol.for("step_timeout_marker");function kt(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:Ne in e}function ir(e){if(!(typeof e!="object"||e===null)){if(e.type==="STEP_TIMEOUT"){let t=e;return{timeoutMs:t.timeoutMs,stepName:t.stepName,stepKey:t.stepKey,attempt:t.attempt}}if(Ne in e)return e[Ne]}}var ht=Symbol("early-exit");function Se(e,t){return{[ht]:!0,error:e,meta:t}}function Te(e){return typeof e=="object"&&e!==null&&e[ht]===!0}var St=Symbol("mapper-exception");function Ie(e){return{[St]:!0,thrown:e}}function ur(e){return typeof e=="object"&&e!==null&&e[St]===!0}function Qe(e,t){let{backoff:r,initialDelay:p,maxDelay:m,jitter:c}=t,x;switch(r){case"fixed":x=p;break;case"linear":x=p*e;break;case"exponential":x=p*Math.pow(2,e-1);break}if(x=Math.min(x,m),c){let w=x*.25*Math.random();x=x+w}return Math.floor(x)}function Xe(e){return new Promise(t=>setTimeout(t,e))}var Tt=Symbol("timeout"),Ve=Symbol("timeout-option");function cr(e){return typeof e=="object"&&e!==null&&e[Ve]===!0}async function lr(e,t,r,p){let m=new AbortController,c=t.onTimeout??"error",x=()=>typeof c=="function"?c({name:r.name,key:r.key,ms:t.ms}):t.error??{type:"STEP_TIMEOUT",stepName:r.name,stepKey:r.key,timeoutMs:t.ms,attempt:r.attempt},w;p?.aborted&&m.abort(p.reason);let P;p&&!p.aborted&&(P=()=>m.abort(p.reason),p.addEventListener("abort",P,{once:!0}));let n=new Promise((f,i)=>{w=setTimeout(()=>{if(c!=="disconnect"&&m.abort(),c==="option"){i({[Ve]:!0,ms:t.ms});return}i({[Tt]:!0,error:x()})},t.ms)}),O;t.signal?O=Promise.resolve(e(m.signal)):O=Promise.resolve(e());try{return await Promise.race([O,n])}catch(f){if(typeof f=="object"&&f!==null&&f[Ve]===!0)throw{[Ve]:!0,ms:t.ms};if(typeof f=="object"&&f!==null&&f[Tt]===!0){c==="disconnect"&&O.catch(()=>{});let i=f.error;if(typeof i=="object"&&i!==null&&i.type!=="STEP_TIMEOUT"){let T={timeoutMs:t.ms,stepName:r.name,stepKey:r.key,attempt:r.attempt};Ne in i?i[Ne]=T:Object.defineProperty(i,Ne,{value:T,enumerable:!1,writable:!0,configurable:!1})}throw i}throw f}finally{clearTimeout(w),P&&p&&p.removeEventListener("abort",P)}}var Ue={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,shouldRetry:()=>!0,onRetry:()=>{}};async function $e(e,t){let{onError:r,onEvent:p,catchUnexpected:m,workflowId:c,workflowName:x,context:w,_workflowSignal:P}=t&&typeof t=="object"?t:{},n=c??crypto.randomUUID(),O=m??He,f=[],i=0,T=S=>S??`step_${++i}`,a=S=>{let le=S.context!==void 0||w===void 0?S:{...S,context:w},pe=x!==void 0&&le.workflowName===void 0?{...le,workflowName:x}:le;if(pe.type==="step_success"){let ge=pe.stepId;for(let ve=f.length-1;ve>=0;ve--){let fe=f[ve];if(fe.type==="race"&&!fe.winnerId){fe.winnerId=ge;break}}}p?.(pe,w)},_=Se,q=S=>Te(S),F=(S,le)=>S,ie=S=>typeof S=="function"?!1:!!(S&&typeof S=="object"&&"ok"in S||S&&typeof S=="object"&&"then"in S&&typeof S.then=="function");try{let le=function(E){let A={};for(let[o,l]of Object.entries(E))if(typeof l=="function")A[o]=l;else if(l&&typeof l=="object"&&"fn"in l)A[o]=l.fn;else throw new TypeError(`step.all: operation "${o}" must be a function or { fn, errors? } object`);return A},pe=function(E,A){let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let l=performance.now(),s=!1;f.push({scopeId:o,type:"parallel"});let k=()=>{if(s)return;s=!0;let C=f.findIndex(D=>D.scopeId===o);C!==-1&&f.splice(C,1),a({type:"scope_end",workflowId:n,scopeId:o,ts:Date.now(),durationMs:performance.now()-l})};a({type:"scope_start",workflowId:n,scopeId:o,scopeType:"parallel",name:E,ts:Date.now()});try{let C=await A();if(k(),!C.ok)throw r?.(C.error,E,w),_(C.error,{origin:"result",resultCause:C.cause});return C.value}catch(C){throw k(),C}})()},ge=function(E,A){let o=Object.keys(E),l=A.name??`Parallel(${o.join(", ")})`,s=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let k=performance.now(),C=!1;f.push({scopeId:s,type:"parallel"});let D=()=>{if(C)return;C=!0;let d=f.findIndex(I=>I.scopeId===s);d!==-1&&f.splice(d,1),a({type:"scope_end",workflowId:n,scopeId:s,ts:Date.now(),durationMs:performance.now()-k})};a({type:"scope_start",workflowId:n,scopeId:s,scopeType:"parallel",name:l,ts:Date.now()});try{let d=await new Promise(B=>{if(o.length===0){B([]);return}let J=!1,Z=o.length,j=new Array(o.length);for(let Q=0;Q<o.length;Q++){let V=o[Q],z=Q;Promise.resolve(E[V]()).catch(N=>W({type:"PROMISE_REJECTED",cause:N},{cause:{type:"PROMISE_REJECTION",reason:N}})).then(N=>{if(!J){if(!N.ok){J=!0,B([{key:V,result:N}]);return}j[z]={key:V,result:N},Z--,Z===0&&B(j)}})}});D();let I={};for(let{key:B,result:J}of d){if(!J.ok)throw r?.(J.error,B,w),_(J.error,{origin:"result",resultCause:J.cause});I[B]=J.value}return I}catch(d){throw D(),d}})()};var Oe=le,Me=pe,Re=ge;let S=(E,A,o)=>(async()=>{if(typeof E!="string"||E.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let l=o??{},s=Ge(l),k=E,C=l.key??E,D=l.key??E,{description:d,retry:I,timeout:B}=l,J=T(C),Z=p,j=Z?performance.now():0,V=ie(A)?()=>A:A,N={attempts:Math.max(1,I?.attempts??1),backoff:I?.backoff??Ue.backoff,initialDelay:I?.initialDelay??Ue.initialDelay,maxDelay:I?.maxDelay??Ue.maxDelay,jitter:I?.jitter??Ue.jitter,shouldRetry:I?.shouldRetry??Ue.shouldRetry,onRetry:I?.onRetry??Ue.onRetry};p&&a({type:"step_start",workflowId:n,stepId:J,stepKey:C,name:k,description:d,ts:Date.now(),...s&&{metadata:s}});let xe;for(let u=1;u<=N.attempts;u++){let g=Z?performance.now():0;try{let y;if(B?y=await lr(V,B,{name:k,key:C,attempt:u},P):y=await V(),y.ok){let Y=performance.now()-j;return a({type:"step_success",workflowId:n,stepId:J,stepKey:C,name:k,description:d,ts:Date.now(),durationMs:Y,...s&&{metadata:s}}),D&&a({type:"step_complete",workflowId:n,stepKey:D,name:k,description:d,ts:Date.now(),durationMs:Y,result:y,...s&&{metadata:s}}),y.value}if(xe=y,u<N.attempts&&N.shouldRetry(y.error,u)){let Y=Qe(u,N);a({type:"step_retry",workflowId:n,stepId:J,stepKey:C,name:k,ts:Date.now(),attempt:u+1,maxAttempts:N.attempts,delayMs:Y,error:y.error,...s&&{metadata:s},diagnostics:we(y.error,l.errorMeta,"result",u,performance.now()-j)}),N.onRetry(y.error,u,Y),await Xe(Y);continue}N.attempts>1&&a({type:"step_retries_exhausted",workflowId:n,stepId:J,stepKey:C,name:k,ts:Date.now(),durationMs:performance.now()-j,attempts:u,lastError:y.error,...s&&{metadata:s},diagnostics:we(y.error,l.errorMeta,"result",u,performance.now()-j)});break}catch(y){let Y=performance.now()-g;if(cr(y)){let b=y.ms;a({type:"step_timeout",workflowId:n,stepId:J,stepKey:C,name:k,ts:Date.now(),timeoutMs:b,attempt:u,...s&&{metadata:s},diagnostics:we(y,l.errorMeta,"timeout",u)}),a({type:"step_success",workflowId:n,stepId:J,stepKey:C,name:k,description:d,ts:Date.now(),durationMs:performance.now()-j,...s&&{metadata:s}}),D&&a({type:"step_complete",workflowId:n,stepKey:D,name:k,description:d,ts:Date.now(),durationMs:performance.now()-j,result:G(void 0),...s&&{metadata:s}});return}if(q(y))throw a({type:"step_aborted",workflowId:n,stepId:J,stepKey:C,name:k,description:d,ts:Date.now(),durationMs:Y,...s&&{metadata:s}}),y;if(kt(y)){let b=ir(y),U=B?.ms??b?.timeoutMs??0;if(a({type:"step_timeout",workflowId:n,stepId:J,stepKey:C,name:k,ts:Date.now(),timeoutMs:U,attempt:u,...s&&{metadata:s},diagnostics:we(y,l.errorMeta,"timeout",u)}),u<N.attempts&&N.shouldRetry(y,u)){let K=Qe(u,N);a({type:"step_retry",workflowId:n,stepId:J,stepKey:C,name:k,ts:Date.now(),attempt:u+1,maxAttempts:N.attempts,delayMs:K,error:y,...s&&{metadata:s},diagnostics:we(y,l.errorMeta,"timeout",u,performance.now()-j)}),N.onRetry(y,u,K),await Xe(K);continue}N.attempts>1&&a({type:"step_retries_exhausted",workflowId:n,stepId:J,stepKey:C,name:k,ts:Date.now(),durationMs:performance.now()-j,attempts:u,lastError:y,...s&&{metadata:s},diagnostics:we(y,l.errorMeta,"timeout",u,performance.now()-j)});let M=performance.now()-j;throw a({type:"step_error",workflowId:n,stepId:J,stepKey:C,name:k,description:d,ts:Date.now(),durationMs:M,error:y,...s&&{metadata:s},diagnostics:we(y,l.errorMeta,"timeout",u,M)}),D&&a({type:"step_complete",workflowId:n,stepKey:D,name:k,description:d,ts:Date.now(),durationMs:M,result:W(y,{cause:y}),meta:{origin:"throw",thrown:y},...s&&{metadata:s}}),r?.(y,k,w),_(y,{origin:"throw",thrown:y})}if(u<N.attempts&&N.shouldRetry(y,u)){let b=Qe(u,N);a({type:"step_retry",workflowId:n,stepId:J,stepKey:C,name:k,ts:Date.now(),attempt:u+1,maxAttempts:N.attempts,delayMs:b,error:y,...s&&{metadata:s},diagnostics:we(y,l.errorMeta,"throw",u,performance.now()-j)}),N.onRetry(y,u,b),await Xe(b);continue}N.attempts>1&&!kt(y)&&a({type:"step_retries_exhausted",workflowId:n,stepId:J,stepKey:C,name:k,ts:Date.now(),durationMs:performance.now()-j,attempts:u,lastError:y,...s&&{metadata:s},diagnostics:we(y,l.errorMeta,"throw",u,performance.now()-j)});let R=performance.now()-j,v;try{v=O(y)}catch(b){throw Ie(b)}throw a({type:"step_error",workflowId:n,stepId:J,stepKey:C,name:k,description:d,ts:Date.now(),durationMs:R,error:v,...s&&{metadata:s},diagnostics:we(y,l.errorMeta,"throw",u,R)}),D&&a({type:"step_complete",workflowId:n,stepKey:D,name:k,description:d,ts:Date.now(),durationMs:R,result:W(v,{cause:y}),meta:{origin:"throw",thrown:y},...s&&{metadata:s}}),r?.(v,k,w),_(v,{origin:"throw",thrown:y})}}let ke=xe,oe=performance.now()-j,Ce=F(ke.error,{origin:"result",resultCause:ke.cause});throw a({type:"step_error",workflowId:n,stepId:J,stepKey:C,name:k,description:d,ts:Date.now(),durationMs:oe,error:Ce,...s&&{metadata:s},diagnostics:we(ke.error,l.errorMeta,"result",N.attempts,oe)}),D&&a({type:"step_complete",workflowId:n,stepKey:D,name:k,description:d,ts:Date.now(),durationMs:oe,result:ke,meta:{origin:"result",resultCause:ke.cause},...s&&{metadata:s}}),r?.(Ce,k,w),_(Ce,{origin:"result",resultCause:ke.cause})})();S.try=(E,A,o)=>{if(typeof E!="string"||E.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 l="error"in o?()=>o.error:o.onError;if(o.retry||o.timeout)return S.retry(E,async()=>{try{return G(await A())}catch(d){return W(l(d),{cause:d})}},{attempts:o.retry?.attempts??1,...o.retry??{},key:o.key,timeout:o.timeout});let s=o.key??E,k=E,C=E,D=p;return(async()=>{let d=D?performance.now():0;p&&a({type:"step_start",workflowId:n,stepId:C,stepKey:s,name:k,ts:Date.now()});try{let I=await A(),B=performance.now()-d;return a({type:"step_success",workflowId:n,stepId:C,stepKey:s,name:k,ts:Date.now(),durationMs:B}),s&&a({type:"step_complete",workflowId:n,stepKey:s,name:k,ts:Date.now(),durationMs:B,result:G(I)}),I}catch(I){let B=l(I),J=performance.now()-d,Z=F(B,{origin:"throw",thrown:I});throw a({type:"step_error",workflowId:n,stepId:C,stepKey:s,name:k,ts:Date.now(),durationMs:J,error:Z}),s&&a({type:"step_complete",workflowId:n,stepKey:s,name:k,ts:Date.now(),durationMs:J,result:W(B,{cause:I}),meta:{origin:"throw",thrown:I}}),r?.(Z,k,w),_(Z,{origin:"throw",thrown:I})}})()},S.fromResult=(E,A,o)=>{if(typeof E!="string"||E.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 l=o.key??E,s=E,k=E,C="error"in o?()=>o.error:o.onError,D=p;return(async()=>{let d=D?performance.now():0;p&&a({type:"step_start",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now()});let I=await A();if(I.ok){let B=performance.now()-d;return a({type:"step_success",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:B}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:B,result:G(I.value)}),I.value}else{let B=C(I.error),J=performance.now()-d,Z=F(B,{origin:"result",resultCause:I.error});throw a({type:"step_error",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:J,error:Z}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:J,result:W(B,{cause:I.error}),meta:{origin:"result",resultCause:I.error}}),r?.(Z,s,w),_(Z,{origin:"result",resultCause:I.error})}})()},S.fromNullable=(E,A,o,l)=>{if(typeof E!="string"||E.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 S(E,async()=>{let s=await A();return s!=null?G(s):W(o())},l)},S.retry=(E,A,o)=>{if(typeof E!="string"||E.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 S(E,A,{key:o.key??E,retry:{attempts:o.attempts,backoff:o.backoff,initialDelay:o.initialDelay,maxDelay:o.maxDelay,jitter:o.jitter,shouldRetry:o.shouldRetry,onRetry:o.onRetry},timeout:o.timeout})},S.withTimeout=(E,A,o)=>{if(typeof E!="string"||E.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 S(E,A,{key:o.key??E,timeout:o})},S.sleep=(E,A,o)=>{if(typeof E!="string"||E.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let l=typeof A=="string"?or(A):A;if(!l)throw new Error(`step.sleep: invalid duration '${A}'`);let s=l.millis,k=o?.signal;return S(E,async()=>{if(P?.aborted||k?.aborted){let C=new Error("Sleep aborted");throw C.name="AbortError",C}return new Promise((C,D)=>{let d={timeoutId:void 0},I=()=>{d.timeoutId&&clearTimeout(d.timeoutId);let B=new Error("Sleep aborted");B.name="AbortError",D(B)};P?.addEventListener("abort",I,{once:!0}),k?.addEventListener("abort",I,{once:!0}),d.timeoutId=setTimeout(()=>{P?.removeEventListener("abort",I),k?.removeEventListener("abort",I),C(G(void 0))},s)})},{key:o?.key??E,description:o?.description})},S.all=((...E)=>{if(typeof E[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 A=E[0],o=E[1];if(typeof o=="function")return pe(A,o);if(o&&typeof o=="object"&&!Array.isArray(o)){let s=le(o);return ge(s,{name:A})}throw new TypeError("step.all(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),S.race=(E,A)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let l=performance.now(),s=!1,k={scopeId:o,type:"race",winnerId:void 0};f.push(k);let C=()=>{if(s)return;s=!0;let D=f.findIndex(d=>d.scopeId===o);D!==-1&&f.splice(D,1),a({type:"scope_end",workflowId:n,scopeId:o,ts:Date.now(),durationMs:performance.now()-l,winnerId:k.winnerId})};a({type:"scope_start",workflowId:n,scopeId:o,scopeType:"race",name:E,ts:Date.now()});try{let D=await A();if(C(),!D.ok)throw r?.(D.error,E,w),_(D.error,{origin:"result",resultCause:D.cause});return D.value}catch(D){throw C(),D}})()},S.if=(E,A,o)=>o(),S.label=S.if,S.branch=async(E,A)=>{let{condition:o,then:l,else:s}=A;if(o())return await l();if(s)return await s()},S.arm=(E,A)=>({fn:E,errors:A}),S.forEach=async(E,A,o)=>{let l=[],s=o.maxIterations,k=0,C="run"in o,D=Symbol.asyncIterator in A?A:(async function*(){yield*A})();for await(let d of D){if(s!==void 0&&k>=s)break;let I;C?I=await o.run(d,k):I=await o.item.handler(d,k,S),l.push(I),k++}return l},S.item=E=>({__forEachItemHandler:!0,handler:E}),S.dep=(E,A)=>A,S.workflow=(E,A,o)=>S(E,A,o),S.map=async(E,A,o,l)=>{let s=l?.concurrency??A.length;return S(E,()=>s>=A.length?Rt(A.map((k,C)=>o(k,C))):(async()=>{let k=[];for(let C=0;C<A.length;C+=s){let D=A.slice(C,C+s),d=await Rt(D.map((I,B)=>o(I,C+B)));if(!d.ok)return d;k.push(...d.value)}return G(k)})(),{key:l?.key})},S.withFallback=(E,A,o)=>{if(typeof E!="string"||E.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 l=o.key??E,s=E,k=T(l),C=p;return(async()=>{let D=C?performance.now():0;p&&a({type:"step_start",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now()});let d;try{d=await A()}catch(j){if(q(j))throw a({type:"step_aborted",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:performance.now()-D}),j;let Q;try{Q=O(j)}catch(z){throw Ie(z)}if(o.on!==void 0&&o.on!==Q){let z=performance.now()-D;throw a({type:"step_error",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:z,error:Q}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:z,result:W(Q,{cause:j}),meta:{origin:"throw",thrown:j}}),r?.(Q,s,w),_(Q,{origin:"throw",thrown:j})}let V;try{V=await o.fallback()}catch(z){if(q(z))throw a({type:"step_aborted",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:performance.now()-D}),z;let N;try{N=O(z)}catch(ke){throw Ie(ke)}let xe=performance.now()-D;throw a({type:"step_error",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:xe,error:N}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:xe,result:W(N,{cause:z}),meta:{origin:"throw",thrown:z}}),r?.(N,s,w),_(N,{origin:"throw",thrown:z})}if(V.ok){let z=performance.now()-D;return a({type:"step_success",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:z}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:z,result:V,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(Q)}}),V.value}else{let z=performance.now()-D,N=F(V.error,{origin:"result",resultCause:V.cause});throw a({type:"step_error",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:z,error:N}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:z,result:V,meta:{origin:"result",resultCause:V.cause}}),r?.(N,s,w),_(N,{origin:"result",resultCause:V.cause})}}if(d.ok){let j=performance.now()-D;return a({type:"step_success",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:j}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:j,result:d}),d.value}let I=d.error;if(o.on!==void 0&&o.on!==I){let j=performance.now()-D,Q=F(I,{origin:"result",resultCause:d.cause});throw a({type:"step_error",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:j,error:Q}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:j,result:d,meta:{origin:"result",resultCause:d.cause}}),r?.(Q,s,w),_(Q,{origin:"result",resultCause:d.cause})}let B;try{B=await o.fallback()}catch(j){if(q(j))throw a({type:"step_aborted",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:performance.now()-D}),j;let Q;try{Q=O(j)}catch(z){throw Ie(z)}let V=performance.now()-D;throw a({type:"step_error",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:V,error:Q}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:V,result:W(Q,{cause:j}),meta:{origin:"throw",thrown:j}}),r?.(Q,s,w),_(Q,{origin:"throw",thrown:j})}if(B.ok){let j=performance.now()-D;return a({type:"step_success",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:j}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:j,result:B,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(I)}}),B.value}let J=performance.now()-D,Z=F(B.error,{origin:"result",resultCause:B.cause});throw a({type:"step_error",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:J,error:Z}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:J,result:B,meta:{origin:"result",resultCause:B.cause}}),r?.(Z,s,w),_(Z,{origin:"result",resultCause:B.cause})})()},S.withResource=(E,A)=>{if(typeof E!="string"||E.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=E,l=E,s=T(o),k=p;return(async()=>{let C=k?performance.now():0;p&&a({type:"step_start",workflowId:n,stepId:s,stepKey:o,name:l,ts:Date.now()});let D;try{D=await A.acquire()}catch(V){if(q(V))throw a({type:"step_aborted",workflowId:n,stepId:s,stepKey:o,name:l,ts:Date.now(),durationMs:performance.now()-C}),V;let z;try{z=O(V)}catch(xe){throw Ie(xe)}let N=performance.now()-C;throw a({type:"step_error",workflowId:n,stepId:s,stepKey:o,name:l,ts:Date.now(),durationMs:N,error:z}),o&&a({type:"step_complete",workflowId:n,stepKey:o,name:l,ts:Date.now(),durationMs:N,result:W(z,{cause:V}),meta:{origin:"throw",thrown:V}}),r?.(z,l,w),_(z,{origin:"throw",thrown:V})}if(!D.ok){let V=performance.now()-C,z=F(D.error,{origin:"result",resultCause:D.cause});throw a({type:"step_error",workflowId:n,stepId:s,stepKey:o,name:l,ts:Date.now(),durationMs:V,error:z}),o&&a({type:"step_complete",workflowId:n,stepKey:o,name:l,ts:Date.now(),durationMs:V,result:D,meta:{origin:"result",resultCause:D.cause}}),r?.(z,l,w),_(z,{origin:"result",resultCause:D.cause})}let d=D.value,I,B,J=!1;try{I=await A.use(d)}catch(V){if(q(V)){try{await A.release(d)}catch(z){console.warn(`[awaitly] step.withResource("${E}"): release threw after earlyExit:`,z)}throw V}B=V,J=!0}try{await A.release(d)}catch(V){console.warn(`[awaitly] step.withResource("${E}"): release threw:`,V)}if(J){let V;try{V=O(B)}catch(N){throw Ie(N)}let z=performance.now()-C;throw a({type:"step_error",workflowId:n,stepId:s,stepKey:o,name:l,ts:Date.now(),durationMs:z,error:V}),o&&a({type:"step_complete",workflowId:n,stepKey:o,name:l,ts:Date.now(),durationMs:z,result:W(V,{cause:B}),meta:{origin:"throw",thrown:B}}),r?.(V,l,w),_(V,{origin:"throw",thrown:B})}let Z=I;if(Z.ok){let V=performance.now()-C;return a({type:"step_success",workflowId:n,stepId:s,stepKey:o,name:l,ts:Date.now(),durationMs:V}),o&&a({type:"step_complete",workflowId:n,stepKey:o,name:l,ts:Date.now(),durationMs:V,result:Z}),Z.value}let j=performance.now()-C,Q=F(Z.error,{origin:"result",resultCause:Z.cause});throw a({type:"step_error",workflowId:n,stepId:s,stepKey:o,name:l,ts:Date.now(),durationMs:j,error:Q}),o&&a({type:"step_complete",workflowId:n,stepKey:o,name:l,ts:Date.now(),durationMs:j,result:Z,meta:{origin:"result",resultCause:Z.cause}}),r?.(Q,l,w),_(Q,{origin:"result",resultCause:Z.cause})})()};let fe=await e({step:S});if(process.env.NODE_ENV!=="production"&&fe!==null&&typeof fe=="object"&&"ok"in fe&&typeof fe.ok=="boolean"){let E=fe;(E.ok===!0&&"value"in E||E.ok===!1&&"error"in E)&&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 G(fe)}catch(S){if(ur(S))throw S.thrown;if(q(S)){let pe=S.meta.origin==="throw"?S.meta.thrown:S.meta.origin==="result"?S.meta.resultCause:void 0;return W(S.error,{cause:pe})}let le=O(S);return r?.(le,"unexpected",w),W(le,{cause:S})}}$e.strict=(e,t)=>$e(e,t);async function Rt(e){return e.length===0?G([]):new Promise(t=>{let r=!1,p=e.length,m=new Array(e.length);for(let c=0;c<e.length;c++){let x=c;Promise.resolve(e[x]).catch(w=>W({type:"PROMISE_REJECTED",cause:w},{cause:{type:"PROMISE_REJECTION",reason:w}})).then(w=>{if(!r){if(!w.ok){r=!0,t(w);return}m[x]=w.value,p--,p===0&&t(G(m))}})}})}var We=class extends Error{type="CIRCUIT_OPEN";circuitName;state;retryAfterMs;constructor(t){super(t.message??`Circuit breaker "${t.circuitName}" is ${t.state}. Retry after ${Math.ceil(t.retryAfterMs/1e3)}s`),this.name="CircuitOpenError",this.circuitName=t.circuitName,this.state=t.state,this.retryAfterMs=t.retryAfterMs}};function Ct(e){return typeof e=="object"&&e!==null&&e.type==="CIRCUIT_OPEN"}var pr={failureThreshold:5,resetTimeout:3e4,windowSize:6e4,halfOpenMax:3};function bt(e,t){let r={...pr,...t},p="CLOSED",m=[],c=null,x=null,w=0,P=0;function n(){let _=Date.now();m=m.filter(q=>_-q.timestamp<r.windowSize)}function O(_){if(p!==_){let q=p;p=_,_==="HALF_OPEN"&&(P=0),r.onStateChange?.(q,_,e)}}function f(){return p!=="OPEN"||c===null?!1:Date.now()-c>=r.resetTimeout?(O("HALF_OPEN"),!0):!1}function i(){x=Date.now(),w++,p==="HALF_OPEN"&&(P++,P>=r.halfOpenMax&&(O("CLOSED"),m=[]))}function T(_){let q=Date.now();c=q,n(),m.push({timestamp:q,error:_}),(p==="HALF_OPEN"||p==="CLOSED"&&m.length>=r.failureThreshold)&&O("OPEN")}function a(){if(p==="CLOSED")return 0;if(p==="OPEN"){if(f())return 0;let _=Date.now(),q=c?_-c:0;return Math.max(0,r.resetTimeout-q)}return 0}return{async execute(_,q){let F=a();if(F>0)throw new We({circuitName:e,state:p,retryAfterMs:F});try{let ie=await _();return i(),ie}catch(ie){throw T(ie),ie}},async executeResult(_,q){let F=a();if(F>0)return W(new We({circuitName:e,state:p,retryAfterMs:F}));try{let ie=await _();return ie.ok?i():T(ie.error),ie}catch(ie){throw T(ie),ie}},getState(){return p==="OPEN"&&f(),p},getStats(){return n(),{state:this.getState(),failureCount:m.length,successCount:w,lastFailureTime:c,lastSuccessTime:x,halfOpenSuccesses:P}},reset(){O("CLOSED"),m=[],P=0},forceOpen(){c=Date.now(),O("OPEN")},recordSuccess(){i()},recordFailure(_){T(_??new Error("Manual failure"))}}}var At={critical:{failureThreshold:3,resetTimeout:6e4,windowSize:3e4,halfOpenMax:1},standard:{failureThreshold:5,resetTimeout:3e4,windowSize:6e4,halfOpenMax:3},lenient:{failureThreshold:10,resetTimeout:15e3,windowSize:12e4,halfOpenMax:5}};function vt(e){return typeof e=="object"&&e!==null&&e.type==="RATE_LIMIT_EXCEEDED"}function Ze(e){return typeof e=="object"&&e!==null&&e.type==="QUEUE_FULL"}function et(e,t){let{maxPerSecond:r,strategy:p="wait"}=t,m=t.burstCapacity??r*2,c=m,x=Date.now(),w=r/1e3,P=[];function n(){let i=Date.now(),a=(i-x)*w;c=Math.min(m,c+a),x=i}function O(){if(n(),c>=1)return c-=1,0;let i=1-c;return Math.ceil(i/w)}async function f(){return new Promise(i=>{let T=()=>{let a=O();a===0?i():(P.push(T),setTimeout(()=>{let _=P.indexOf(T);_!==-1&&(P.splice(_,1),T())},a))};T()})}return{async execute(i){let T=O();if(T>0){if(p==="reject")throw{type:"RATE_LIMIT_EXCEEDED",limiterName:e,retryAfterMs:T};await f()}return i()},async executeResult(i){let T=O();if(T>0){if(p==="reject")return W({type:"RATE_LIMIT_EXCEEDED",limiterName:e,retryAfterMs:T});await f()}return i()},getStats(){return n(),{availableTokens:Math.floor(c),maxTokens:m,tokensPerSecond:r,waitingCount:P.length}},reset(){c=m,x=Date.now(),P.length=0}}}function tt(e,t){let{maxConcurrent:r,strategy:p="queue",maxQueueSize:m=1/0}=t,c=0,x=[];async function w(){if(c<r){c++;return}if(p==="reject")throw{type:"QUEUE_FULL",limiterName:e,queueSize:x.length,maxQueueSize:m};if(x.length>=m)throw{type:"QUEUE_FULL",limiterName:e,queueSize:x.length,maxQueueSize:m};return new Promise((n,O)=>{x.push({resolve:n,reject:O})})}function P(){c--,x.length>0&&c<r&&(c++,x.shift()?.resolve())}return{async execute(n){await w();try{return await n()}finally{P()}},async executeAll(n){let O=new Array(n.length),f=[];for(let i=0;i<n.length;i++){let T=i,a=this.execute(n[T]).then(_=>{O[T]=_});f.push(a)}return await Promise.all(f),O},async executeResult(n){try{await w()}catch(O){if(Ze(O))return W(O);throw O}try{return await n()}finally{P()}},getStats(){return{activeCount:c,maxConcurrent:r,queueSize:x.length,maxQueueSize:m}},reset(){for(c=0;x.length>0;)x.shift()?.reject(new Error("Limiter reset"))}}}function Pt(e,t){let r=t.rate?et(`${e}-rate`,t.rate):void 0,p=t.concurrency?tt(`${e}-concurrency`,t.concurrency):void 0;return{rate:r,concurrency:p,async execute(m){let c=m;if(r){let x=c;c=()=>r.execute(x)}return p?p.execute(c):c()}}}function _t(e,t){let{limit:r,windowMs:p=1e3,strategy:m="wait"}=t,c=Date.now(),x=0,w=[];function P(){let f=Date.now(),i=f-c;return i>=p?(c=f,x=0,0):p-i}function n(f){let i=P();return x+f<=r?(x+=f,0):i}async function O(f){return new Promise(i=>{let T=()=>{let a=n(f);a===0?i():(w.push({resolve:T,cost:f}),setTimeout(()=>{let _=w.findIndex(q=>q.resolve===T);_!==-1&&(w.splice(_,1),T())},a))};T()})}return{async execute(f,i=1){if(i>r)throw{type:"RATE_LIMIT_EXCEEDED",limiterName:e,retryAfterMs:p};let T=n(i);if(T>0){if(m==="reject")throw{type:"RATE_LIMIT_EXCEEDED",limiterName:e,retryAfterMs:T};await O(i)}return f()},async executeResult(f,i=1){if(i>r)return W({type:"RATE_LIMIT_EXCEEDED",limiterName:e,retryAfterMs:p});let T=n(i);if(T>0){if(m==="reject")return W({type:"RATE_LIMIT_EXCEEDED",limiterName:e,retryAfterMs:T});await O(i)}return f()},getStats(){let f=P();return{requestCount:x,limit:r,windowMs:p,remainingMs:f,waitingCount:w.length}},reset(){c=Date.now(),x=0,w.length=0}}}function Dt(e,t){let{tokensPerSecond:r,strategy:p="wait"}=t,m=t.maxTokens??r*2,c=m,x=Date.now(),w=r/1e3,P=[];function n(){let i=Date.now(),a=(i-x)*w;c=Math.min(m,c+a),x=i}function O(i){if(n(),c>=i)return c-=i,0;let T=i-c;return Math.ceil(T/w)}async function f(i){return new Promise(T=>{let a=()=>{let _=O(i);_===0?T():(P.push({check:a,cost:i}),setTimeout(()=>{let q=P.findIndex(F=>F.check===a);q!==-1&&(P.splice(q,1),a())},_))};a()})}return{async execute(i,T=1){if(T>m)throw{type:"RATE_LIMIT_EXCEEDED",limiterName:e,retryAfterMs:Math.ceil(T/w)};let a=O(T);if(a>0){if(p==="reject")throw{type:"RATE_LIMIT_EXCEEDED",limiterName:e,retryAfterMs:a};await f(T)}return i()},async executeResult(i,T=1){if(T>m)return W({type:"RATE_LIMIT_EXCEEDED",limiterName:e,retryAfterMs:Math.ceil(T/w)});let a=O(T);if(a>0){if(p==="reject")return W({type:"RATE_LIMIT_EXCEEDED",limiterName:e,retryAfterMs:a});await f(T)}return i()},getStats(){return n(),{availableTokens:c,maxTokens:m,tokensPerSecond:r,waitingCount:P.length}},reset(){c=m,x=Date.now(),P.length=0}}}var Ot={api:{maxPerSecond:10,burstCapacity:20,strategy:"wait"},database:{maxConcurrent:10,strategy:"queue",maxQueueSize:100},external:{maxPerSecond:5,burstCapacity:10,strategy:"wait"}};var mr="STREAM_WRITE_ERROR",dr="STREAM_READ_ERROR",fr="STREAM_CLOSE_ERROR";var Er="STREAM_ENDED";function qe(e,t,r){return{type:mr,reason:e,message:t,...r!==void 0?{cause:r}:{}}}function rt(e,t,r){return{type:dr,reason:e,message:t,...r!==void 0?{cause:r}:{}}}function nt(e,t,r){return{type:fr,reason:e,message:t,...r!==void 0?{cause:r}:{}}}function ze(e){return{type:Er,finalPosition:e}}function Mt(e={}){let t=e.highWaterMark??16,r=e.lowWaterMark??Math.floor(t/2),p=e.onStateChange,m="flowing",c=0,x=[];function w(n){if(m!==n&&(m=n,p?.(n),n==="flowing"&&x.length>0)){let O=x;x=[];for(let f of O)f()}}function P(){m==="flowing"&&c>=t?w("paused"):m==="paused"&&c<=r&&w("flowing")}return{get state(){return m},get bufferedCount(){return c},get highWaterMark(){return t},get lowWaterMark(){return r},increment(){c++,P()},decrement(){c>0&&(c--,P())},setCount(n){c=Math.max(0,n),P()},waitForDrain(){return m==="flowing"?Promise.resolve():new Promise(n=>{x.push(n)})},reset(){c=0,x=[],w("flowing")}}}function yr(e){return{_tag:"Duration",millis:e}}function wr(e){return{_tag:"Duration",millis:e*1e3}}function gr(e){return{_tag:"Duration",millis:e*60*1e3}}function kr(e){return{_tag:"Duration",millis:e*60*60*1e3}}function Tr(e){return{_tag:"Duration",millis:e*24*60*60*1e3}}function It(e){return e.millis}function Ut(e){let t=e.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!t)return;let r=parseFloat(t[1]);switch(t[2].toLowerCase()){case"ms":return yr(r);case"s":return wr(r);case"m":return gr(r);case"h":return kr(r);case"d":return Tr(r);default:return}}function Nt(e){return e.type==="step_complete"}function ot(e){return typeof e=="object"&&e!==null&&e.type==="WORKFLOW_CANCELLED"}function Wt(){let e=new Map;return{handleEvent:t=>{Nt(t)&&e.set(t.stepKey,{result:t.result,meta:t.meta})},getResumeState:()=>({steps:new Map(e)}),clear:()=>e.clear()}}function Rr(e){return typeof e=="object"&&e!==null&&e.__cachedMeta===!0}function Ae(e,t,r){return W(e,{cause:{__cachedMeta:!0,originalCause:r,meta:t}})}function Be(e){return Rr(e)?e.meta:{origin:"result",resultCause:e}}async function Lt(e,t){let r=e["~standard"].validate(t),p=r instanceof Promise?await r:r;return p.issues?W({type:"INPUT_VALIDATION_ERROR",issues:p.issues.map(m=>({message:m.message,path:m.path?.map(c=>typeof c=="object"?c.key:c)})),message:`Input validation failed: ${p.issues.map(m=>m.message).join(", ")}`}):G(p.value)}function st(e,t){let r=p=>((...m)=>{let c=m.at(-1),x=m.length>0&&typeof c=="object"&&c!==null&&!Array.isArray(c)&&typeof c!="function",w=x?c:void 0,P=x?m.slice(0,-1):m,n={...t,...w?.deps??{}},O=w?{...w,deps:n}:{deps:n};return e[p](...P,O)});return{run:r("run"),runWithState:r("runWithState"),withDeps(p){return st(e,{...t,...p})}}}var Je=class extends Error{constructor(r,p,m){super(r);this.stepId=p;this.originalError=m;this.name="SnapshotDecodeError"}};function at(e){if(e.type==="error"){let t=new Error(e.message);return t.name=e.name,e.stack&&(t.stack=e.stack),e.cause&&(t.cause=at(e.cause)),t}return e.value!==void 0?e.value:e.stringRepresentation}function Ft(e,t,r){if(typeof e!="string"||e.length===0)throw new TypeError("createWorkflow(workflowName, deps, options?): first argument must be a non-empty string. Example: createWorkflow('checkout', { chargeCard, sendEmail })");let p=t??{},m=r;async function c(n,O,f){let i=n??crypto.randomUUID(),T=f?.deps?{...p,...f.deps}:p,a=[],_=f?.createContext??m?.createContext,q=_?await _():void 0,F=f?.signal??m?.signal,ie=f?.onEvent??m?.onEvent,Oe=f?.onError??m?.onError,Me=f?.shouldRun??m?.shouldRun,Re=f?.onBeforeStart??m?.onBeforeStart,S=f?.onAfterStep??m?.onAfterStep,le=f?.resumeState??m?.resumeState,pe=m?.catchUnexpected??He,ge={},ve=(f?.devWarnings??m?.devWarnings)===!0&&process.env.NODE_ENV!=="production",fe=new Set,E=new Set,A={workflowId:i,onEvent:ie,context:q!==void 0?q:void 0,signal:F,input:{},ref:u=>ge[u],set:(u,g)=>{ve&&!fe.has(u)&&(fe.add(u),console.warn(`awaitly: ctx.set('${u}', ...) is deprecated for static analysis. Use step('id', fn, { out: '${u}' }) instead.`)),ge[u]=g},get:u=>(ve&&!E.has(u)&&(E.add(u),console.warn(`awaitly: ctx.get('${u}') is deprecated for static analysis. Use ctx.ref('${u}') instead for tracked dependencies.`)),ge[u])},o=u=>{let g=u.context!==void 0||q===void 0?u:{...u,context:q},y=g.workflowName===void 0?{...g,workflowName:e}:g;ie?.(y,q)},l=(u,g)=>{let y={type:"WORKFLOW_CANCELLED",reason:u,lastStepKey:g};return W(pe(y),{cause:y})};if(F?.aborted){let u=typeof F.reason=="string"?F.reason:F.reason instanceof Error?F.reason.message:void 0;return o({type:"workflow_cancelled",workflowId:i,ts:Date.now(),durationMs:0,reason:u}),l(u)}if(Me){let u=performance.now();try{let g=await Me(i,q),y=performance.now()-u;if(o({type:"hook_should_run",workflowId:i,ts:Date.now(),durationMs:y,result:g,skipped:!g}),!g){let Y=new Error("Workflow skipped by shouldRun hook");return W(pe(Y),{cause:Y})}}catch(g){let y=performance.now()-u;return o({type:"hook_should_run_error",workflowId:i,ts:Date.now(),durationMs:y,error:g}),W(pe(g),{cause:g})}}if(Re){let u=performance.now();try{let g=await Re(i,q),y=performance.now()-u;if(o({type:"hook_before_start",workflowId:i,ts:Date.now(),durationMs:y,result:g,skipped:!g}),!g){let Y=new Error("Workflow skipped by onBeforeStart hook");return W(pe(Y),{cause:Y})}}catch(g){let y=performance.now()-u;return o({type:"hook_before_start_error",workflowId:i,ts:Date.now(),durationMs:y,error:g}),W(pe(g),{cause:g})}}let s=m?.inputSchema,k=m?.input;if(s){let u=await Lt(s,k);if(!u.ok)return W(u.error);A.input=u.value}else k!==void 0&&(A.input=k);let C=Date.now(),D=performance.now();o({type:"workflow_start",workflowId:i,ts:C});let d=f?.cache??m?.cache,I=f?.streamStore??m?.streamStore;if(le&&!d&&(d=new Map),le&&d){let u=typeof le=="function"?await le():le;u.steps instanceof Map||(console.warn(`awaitly: resumeState.steps is not a Map (got ${typeof u.steps}). This usually happens when state is serialized with JSON.stringify() directly.
7
- Use stringifyState() and parseState() from 'awaitly/persistence' instead:
8
- import { stringifyState, parseState } from 'awaitly/persistence';
9
- const json = stringifyState(state); // Save this
10
- const restored = parseState(json); // Load this`),typeof u.steps=="object"&&u.steps!==null&&(u.steps=new Map(Object.entries(u.steps))));for(let[g,y]of u.steps){let{result:Y,meta:R}=y;if(Y.ok)d.set(g,Y);else{let v=R??{origin:"result",resultCause:Y.cause};d.set(g,Ae(Y.error,v,Y.cause))}}}let B=f?.snapshot??m?.snapshot,J=m?.serialization;if(B&&!le){d||(d=new Map);let u=B,g=J?.decode;for(let[y,Y]of Object.entries(u.steps))if(Object.prototype.hasOwnProperty.call(u.steps,y))try{if(Y.ok){let R=g?g(Y.value):Y.value;d.set(y,G(R))}else{let R=g?g(Y.error):Y.error,v=at(Y.cause),b=Y.meta?.origin==="throw"?{origin:"throw",thrown:v}:{origin:"result",resultCause:v};d.set(y,Ae(R,b,v))}}catch(R){throw new Je(`Failed to decode step "${y}": ${R instanceof Error?R.message:String(R)}`,y,R instanceof Error?R:void 0)}}let Z=!1,j,Q,V=()=>{Z=!0,j=typeof F?.reason=="string"?F.reason:F?.reason instanceof Error?F.reason.message:void 0};F&&!F.aborted&&F.addEventListener("abort",V,{once:!0});let z=()=>{if(Z||F?.aborted)throw{type:"WORKFLOW_CANCELLED",reason:j??(typeof F?.reason=="string"?F.reason:F?.reason instanceof Error?F.reason.message:void 0),lastStepKey:Q}},N=async(u,g,y)=>{if(!S)return;let Y=performance.now();try{await S(u,g,i,q);let R=performance.now()-Y;o({type:"hook_after_step",workflowId:i,stepKey:u,ts:Date.now(),durationMs:R})}catch(R){let v=performance.now()-Y;throw o({type:"hook_after_step_error",workflowId:i,stepKey:u,ts:Date.now(),durationMs:v,error:R}),R}},xe=u=>{let g=async(R,v,b)=>{if(typeof R!="string")throw new Error('[awaitly] step() requires a string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let U=R,M=b??{},K=U,h=Object.prototype.hasOwnProperty.call(M,"key")?M.key:U,{ttl:$,out:te}=M;z();let ee=Ge(M);if(h&&d&&d.has(h)){o({type:"step_cache_hit",workflowId:i,stepKey:h,name:K,ts:Date.now(),...ee&&{metadata:ee}});let L=d.get(h);if(L.ok)return Q=h,te&&(ge[te]=L.value),L.value;let H=Be(L.cause);throw Se(L.error,H)}h&&d&&o({type:"step_cache_miss",workflowId:i,stepKey:h,name:K,ts:Date.now(),...ee&&{metadata:ee}});try{let L=await u(U,v,M);return te&&(ge[te]=L),M.compensate&&a.push({stepName:K,value:L,compensate:M.compensate}),h&&(Q=h,d&&d.set(h,G(L),$?{ttl:$}:void 0),await N(h,G(L))),L}catch(L){if(h&&Te(L)){let H=L,se=H.meta.origin==="result"?H.meta.resultCause:H.meta.origin==="throw"?H.meta.thrown:void 0,X=Ae(H.error,H.meta,se);d&&d.set(h,X,$?{ttl:$}:void 0),await N(h,X,H.meta)}throw L}};g.try=async(R,v,b)=>{let{ttl:U}=b,M=b.key??R,K=R;if(d&&d.has(M)){o({type:"step_cache_hit",workflowId:i,stepKey:M,name:K,ts:Date.now()});let h=d.get(M);if(h.ok)return h.value;let $=Be(h.cause);throw Se(h.error,$)}d&&o({type:"step_cache_miss",workflowId:i,stepKey:M,name:K,ts:Date.now()});try{let h=await u.try(R,v,{...b,key:M});return b.compensate&&a.push({stepName:K,value:h,compensate:b.compensate}),d&&d.set(M,G(h),U?{ttl:U}:void 0),await N(M,G(h)),h}catch(h){if(Te(h)){let $=h,te=$.meta.origin==="result"?$.meta.resultCause:$.meta.origin==="throw"?$.meta.thrown:void 0,ee=Ae($.error,$.meta,te);d&&d.set(M,ee,U?{ttl:U}:void 0),await N(M,ee,$.meta)}throw h}},g.fromResult=async(R,v,b)=>{let{ttl:U}=b,M=b.key??R,K=R;if(d&&d.has(M)){o({type:"step_cache_hit",workflowId:i,stepKey:M,name:K,ts:Date.now()});let h=d.get(M);if(h.ok)return h.value;let $=Be(h.cause);throw Se(h.error,$)}d&&o({type:"step_cache_miss",workflowId:i,stepKey:M,name:K,ts:Date.now()});try{let h=await u.fromResult(R,v,{...b,key:M});return d&&d.set(M,G(h),U?{ttl:U}:void 0),await N(M,G(h)),h}catch(h){if(Te(h)){let $=h,te=$.meta.origin==="result"?$.meta.resultCause:$.meta.origin==="throw"?$.meta.thrown:void 0,ee=Ae($.error,$.meta,te);d&&d.set(M,ee,U?{ttl:U}:void 0),await N(M,ee,$.meta)}throw h}},g.race=u.race,g.withFallback=async(R,v,b)=>{let U=b.key??R,M=R;if(d&&d.has(U)){o({type:"step_cache_hit",workflowId:i,stepKey:U,name:M,ts:Date.now()});let K=d.get(U);if(K.ok)return K.value;let h=Be(K.cause);throw Se(K.error,h)}d&&o({type:"step_cache_miss",workflowId:i,stepKey:U,name:M,ts:Date.now()});try{let K=await u.withFallback(R,v,b);return d&&d.set(U,G(K)),await N(U,G(K)),K}catch(K){if(Te(K)){let h=K,$=h.meta.origin==="result"?h.meta.resultCause:h.meta.origin==="throw"?h.meta.thrown:void 0,te=Ae(h.error,h.meta,$);d&&d.set(U,te),await N(U,te,h.meta)}throw K}},g.withResource=async(R,v)=>{let b=R;try{let U=await u.withResource(R,v);return await N(b,G(U)),U}catch(U){if(Te(U)){let M=U,K=M.meta.origin==="result"?M.meta.resultCause:M.meta.origin==="throw"?M.meta.thrown:void 0,h=Ae(M.error,M.meta,K);await N(b,h,M.meta)}throw U}},g.retry=(R,v,b)=>{let U={key:b.key,retry:{attempts:b.attempts,backoff:b.backoff,initialDelay:b.initialDelay,maxDelay:b.maxDelay,jitter:b.jitter,shouldRetry:b.shouldRetry,onRetry:b.onRetry},timeout:b.timeout,ttl:b.ttl};return g(R,v,U)},g.withTimeout=(R,v,b)=>{let U={key:b.key,timeout:b,ttl:b.ttl};return g(R,v,U)},g.sleep=(R,v,b)=>{if(typeof R!="string"||R.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let U=typeof v=="string"?Ut(v):v;if(!U)throw new Error(`step.sleep: invalid duration '${v}'`);let M=It(U),K=b?.signal;return g(R,async()=>{if(F?.aborted||K?.aborted){let $=new Error("Sleep aborted");throw $.name="AbortError",$}return new Promise(($,te)=>{let ee={timeoutId:void 0},L=()=>{ee.timeoutId&&clearTimeout(ee.timeoutId);let H=new Error("Sleep aborted");H.name="AbortError",te(H)};F?.addEventListener("abort",L,{once:!0}),K?.addEventListener("abort",L,{once:!0}),ee.timeoutId=setTimeout(()=>{F?.removeEventListener("abort",L),K?.removeEventListener("abort",L),$(G(void 0))},M)})},{key:b?.key,ttl:b?.ttl,description:b?.description})};let y=new Map,Y=new Map;return g.getWritable=R=>{let v=R?.namespace??"default",b=R?.highWaterMark??16;if(!I)throw new Error("streamStore is required to use getWritable(). Pass a streamStore to createWorkflow options.");let U=`${i}:${v}`,M=y.get(U);if(M&&!M.closed&&!M.aborted)return M.writer;let K=Mt({highWaterMark:b,onStateChange:H=>{o({type:"stream_backpressure",workflowId:i,namespace:v,bufferedCount:K.bufferedCount,state:H,ts:Date.now()})}}),h=0,$=!0,te=!1,ee=!1;o({type:"stream_created",workflowId:i,namespace:v,ts:Date.now()});let L={async write(H){if(ee)return W(qe("closed","Stream is closed"));if(te)return W(qe("aborted","Stream was aborted"));K.state==="paused"&&await K.waitForDrain();let se={value:H,position:h,ts:Date.now()},X=await I.append(i,v,se);return X.ok?(o({type:"stream_write",workflowId:i,namespace:v,position:h,ts:Date.now()}),h++,K.increment(),G(void 0)):(o({type:"stream_error",workflowId:i,namespace:v,error:X.error,position:h,ts:Date.now()}),W(qe("store_error",X.error.message,X.error)))},async close(){if(ee)return W(nt("already_closed","Stream is already closed"));let H=await I.closeStream(i,v);return H.ok?(ee=!0,$=!1,o({type:"stream_close",workflowId:i,namespace:v,finalPosition:h,ts:Date.now()}),y.delete(U),G(void 0)):W(nt("store_error",H.error.message,H.error))},abort(H){te=!0,$=!1,ee=!0,o({type:"stream_error",workflowId:i,namespace:v,error:H,position:h,ts:Date.now()}),y.delete(U)},get writable(){return $},get position(){return h},get namespace(){return v}};return y.set(U,{writer:L,backpressure:K,aborted:te,closed:ee}),L},g.getReadable=R=>{let v=R?.namespace??"default",b=R?.startIndex??0,U=R?.pollInterval??10,M=R?.pollTimeout??3e4;if(!I)throw new Error("streamStore is required to use getReadable(). Pass a streamStore to createWorkflow options.");let K=`${i}:${v}:${b}`,h=Y.get(K);if(h&&!h.closed)return h.reader;let $=()=>{let he=`${i}:${v}`,ne=y.get(he);ne&&ne.backpressure.decrement()},te=b,ee=!0,L=!1,H=[],se=0,X={async read(){if(L)return W(rt("closed","Reader is closed"));if(se<H.length){let ce=H[se++];return te=ce.position+1,$(),o({type:"stream_read",workflowId:i,namespace:v,position:ce.position,ts:Date.now()}),G(ce.value)}let he=`${i}:${v}`,ne=Date.now(),ue=y.has(he),re=await I.getMetadata(i,v),ae=re.ok&&re.value!==void 0;for(;Date.now()-ne<M;){let ce=await I.read(i,v,te,100);if(!ce.ok)return W(rt("store_error",ce.error.message,ce.error));let Le=ce.value;if(Le.length>0){H=Le,se=1;let je=Le[0];return te=je.position+1,$(),o({type:"stream_read",workflowId:i,namespace:v,position:je.position,ts:Date.now()}),G(je.value)}let Fe=y.has(he),be=await I.getMetadata(i,v),ut=be.ok&&be.value!==void 0;if(Fe&&(ue=!0),ut&&(ae=!0),be.ok&&be.value?.closed)return ee=!1,W(ze(te));if(ue&&!Fe&&!ut)return ee=!1,W(ze(te));ae&&!Fe&&be.ok&&be.value?.closed,await new Promise(je=>setTimeout(je,U))}return ee=!1,W(ze(te))},close(){L=!0,ee=!1,H=[],Y.delete(K)},get readable(){return ee},get position(){return te},get namespace(){return v}};return Y.set(K,{reader:X,position:te,closed:L}),X},g.streamForEach=async(R,v,b)=>{let U=b?.checkpointInterval??1,M=b?.concurrency??1,K=[],h=0,$=-1,te=L=>typeof L=="object"&&L!==null&&"read"in L&&typeof L.read=="function",ee=async(L,H,se,X)=>{let ne=U>0&&H%U===0?`stream-foreach:${X}:pos-${se}`:void 0,ue=ne??`stream-item-${se}`,re=await g(ue,()=>v(L,H),{key:ne});return{index:H,position:se,result:re}};if(te(R))if(M<=1){let L=R.position,H=await R.read();for(;H.ok;){let se=H.value,{result:X}=await ee(se,h,L,R.namespace);K.push(X),$=L,h++,L=R.position,H=await R.read()}}else{let L=new Map,H=0,se=0,X=new Array(M).fill(null),he=async()=>{for(let ce=0;ce<X.length;ce++)if(X[ce]===null)return ce;let re=X.filter(ce=>ce!==null),ae=await Promise.race(re);return L.set(ae.index,{position:ae.position,result:ae.result}),X[ae.slotIndex]=null,ae.slotIndex},ne=R.position,ue=await R.read();for(;ue.ok;){let re=await he(),ae=H,ce=ne,Le=ue.value,Fe=re;X[re]=ee(Le,ae,ce,R.namespace).then(be=>({slotIndex:Fe,...be})),se++,H++,ne=R.position,ue=await R.read()}for(let re=0;re<X.length;re++)if(X[re]!==null){let ae=await X[re];L.set(ae.index,{position:ae.position,result:ae.result})}for(let re=0;re<se;re++){let ae=L.get(re);ae&&(K.push(ae.result),$=ae.position,h++)}}else if(M<=1){let L=0;for await(let H of R){let{result:se}=await ee(H,L,L,"async-iterable");K.push(se),$=L,h++,L++}}else{let L=new Map,H=0,se=0,X=new Array(M).fill(null),he=async()=>{for(let re=0;re<X.length;re++)if(X[re]===null)return re;let ne=X.filter(re=>re!==null),ue=await Promise.race(ne);return L.set(ue.index,ue.result),X[ue.slotIndex]=null,ue.slotIndex};for await(let ne of R){let ue=await he(),re=H,ae=ue;X[ue]=ee(ne,re,re,"async-iterable").then(ce=>({slotIndex:ae,...ce})),se++,H++}for(let ne=0;ne<X.length;ne++)if(X[ne]!==null){let ue=await X[ne];L.set(ue.index,ue.result)}for(let ne=0;ne<se;ne++)L.has(ne)&&(K.push(L.get(ne)),$=ne,h++)}return{results:K,processedCount:h,lastPosition:$}},g.if=u.if,g.label=u.label,g.branch=u.branch,g.arm=u.arm,g.forEach=u.forEach,g.item=u.item,g.dep=u.dep,g.workflow=(R,v,b)=>g(R,v,b),g.all=(R,v,b)=>{let U=b!==void 0&&Object.prototype.hasOwnProperty.call(b,"key")?b:{...b,key:void 0};return g(R,async()=>G(await u.all(R,v)),U)},g.map=(R,v,b,U)=>{let M=U!==void 0&&Object.prototype.hasOwnProperty.call(U,"key")?U:{...U,key:void 0};return g(R,async()=>G(await u.map(R,v,b,U)),M)},g},ke=({step:u})=>O({step:xe(u),deps:T,ctx:A}),oe;try{oe=await $e(ke,{onError:Oe,onEvent:ie,catchUnexpected:pe,workflowId:i,workflowName:e,context:q,_workflowSignal:F})}finally{F&&F.removeEventListener("abort",V)}if(!oe.ok&&a.length>0){let u=[];for(let g=a.length-1;g>=0;g--){let y=a[g];try{await y.compensate(y.value)}catch(Y){u.push({stepName:y.stepName,error:Y})}}if(u.length>0){let g={type:"SAGA_COMPENSATION_ERROR",originalError:oe.error,compensationErrors:u};oe=W(g,{cause:oe.cause})}}let Ce=performance.now()-D;if(!oe.ok){let u;if(ot(oe.cause)&&(u=oe.cause),!u&&Z&&xt(oe.error)){let g=oe.cause;g!=null&&typeof g=="object"&&"name"in g&&g.name==="AbortError"&&(u={type:"WORKFLOW_CANCELLED",reason:j??(typeof F?.reason=="string"?F.reason:F?.reason instanceof Error?F.reason.message:void 0),lastStepKey:Q})}if(u)return o({type:"workflow_cancelled",workflowId:i,ts:Date.now(),durationMs:Ce,reason:u.reason,lastStepKey:u.lastStepKey}),u&&!ot(oe.cause)?W(oe.error,{cause:u}):oe}if(oe.ok&&Z){let u=j??(typeof F?.reason=="string"?F.reason:F?.reason instanceof Error?F.reason.message:void 0);o({type:"workflow_cancelled",workflowId:i,ts:Date.now(),durationMs:Ce,reason:u,lastStepKey:Q});let g={type:"WORKFLOW_CANCELLED",reason:u,lastStepKey:Q};return W(pe(g),{cause:g})}return oe.ok?o({type:"workflow_success",workflowId:i,ts:Date.now(),durationMs:Ce}):o({type:"workflow_error",workflowId:i,ts:Date.now(),durationMs:Ce,error:oe.error}),oe}function x(n,O,f){let i,T,a;return typeof n=="string"?(i=n,T=O,a=f):(T=n,a=O),c(i,T,a)}async function w(n,O,f){let i,T,a;typeof n=="string"?(i=n,T=O,a=f):(T=n,a=O);let _=Wt(),q=a?.onEvent,ie={...a,onEvent:(Re,S)=>{_.handleEvent(Re);try{q?.(Re,S)}catch{}}},Oe,Me;try{Oe=await c(i,T,ie)}catch(Re){let S=m?.catchUnexpected??He;Oe=W(S(Re),{cause:Re})}finally{Me=_.getResumeState()}return{result:Oe,resumeState:Me}}let P={withDeps:n=>st(P,n),run:x,runWithState:w};return P}function jt(e){return typeof e=="object"&&e!==null&&e.type==="SAGA_COMPENSATION_ERROR"}function Kt(e,t,r){return Ft(e,t,r)}async function Bt(e,t){let r=crypto.randomUUID(),p=performance.now(),m=[],c=n=>t?.onEvent?.(n);c({type:"saga_start",sagaId:r,ts:Date.now()});let P=Object.assign(async(n,O,f)=>{if(typeof n!="string"||n.length===0)throw new TypeError("step(name, operation, options?): first argument must be a string.");let i=await O();if(i.ok)return f?.compensate&&m.push({name:n,value:i.value,compensate:f.compensate}),i.value;throw Se(i.error,{origin:"result",resultCause:i.cause})},{try:async(n,O,f)=>{if(typeof n!="string"||n.length===0)throw new TypeError("step.try(name, operation, options): first argument must be a string.");let i="error"in f?()=>f.error:f.onError;try{let T=await O();return f.compensate&&m.push({name:n,value:T,compensate:f.compensate}),T}catch(T){let a=i(T);throw Se(a,{origin:"throw",thrown:T})}}});try{let n=await e({step:P});return c({type:"saga_success",sagaId:r,ts:Date.now(),durationMs:performance.now()-p}),G(n)}catch(n){let O=performance.now()-p,f=Te(n)?n.error:n;c({type:"saga_error",sagaId:r,ts:Date.now(),durationMs:O,error:f}),c({type:"saga_compensation_start",sagaId:r,ts:Date.now(),stepCount:m.length});let i=performance.now(),T=[];for(let a=m.length-1;a>=0;a--){let _=m[a];try{await _.compensate(_.value),c({type:"saga_compensation_step",sagaId:r,stepName:_.name,ts:Date.now(),success:!0})}catch(q){T.push({stepName:_.name,error:q}),c({type:"saga_compensation_step",sagaId:r,stepName:_.name,ts:Date.now(),success:!1,error:q})}}if(c({type:"saga_compensation_end",sagaId:r,ts:Date.now(),durationMs:performance.now()-i,success:T.length===0,failedCount:T.length}),T.length>0){let a={type:"SAGA_COMPENSATION_ERROR",originalError:f,compensationErrors:T};if(t?.onError?.(a),t?.throwOnCompensationFailure)throw a;return W(a)}return t?.onError?.(f),Te(n)?W(f):W(new Pe({cause:n}))}}function de(...e){let t={};for(let r of e)r.key!==void 0&&(t.key=r.key),r.retry!==void 0&&(t.retry=t.retry?{...t.retry,...r.retry}:{...r.retry}),r.timeout!==void 0&&(t.timeout=t.timeout?{...t.timeout,...r.timeout}:{...r.timeout});return t}function Vt(...e){let t=de(...e);return r=>de(t,r??{})}function $t(e,...t){return{name:e,policy:de(...t)}}function ye(e){return{retry:e}}var De={none:ye({attempts:1}),transient:ye({attempts:3,backoff:"exponential",initialDelay:100,maxDelay:1e3,jitter:!0}),standard:ye({attempts:3,backoff:"exponential",initialDelay:200,maxDelay:5e3,jitter:!0}),aggressive:ye({attempts:5,backoff:"exponential",initialDelay:500,maxDelay:3e4,jitter:!0}),fixed:(e,t)=>ye({attempts:e,backoff:"fixed",initialDelay:t,jitter:!1}),linear:(e,t)=>ye({attempts:e,backoff:"linear",initialDelay:t,jitter:!0}),custom:e=>ye({backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,...e})};function Ee(e){return{timeout:e}}var _e={none:{},fast:Ee({ms:1e3}),api:Ee({ms:5e3}),extended:Ee({ms:3e4}),long:Ee({ms:12e4}),ms:e=>Ee({ms:e}),seconds:e=>Ee({ms:e*1e3}),withError:(e,t)=>Ee({ms:e,error:t}),withSignal:e=>Ee({ms:e,signal:!0})},Ht={httpApi:de(_e.api,De.standard),database:de(_e.extended,ye({attempts:2,backoff:"exponential",initialDelay:100,maxDelay:2e3,jitter:!0})),cache:de(_e.fast,De.none),messageQueue:de(_e.extended,De.aggressive),fileSystem:de(_e.long,De.standard),rateLimited:de(Ee({ms:1e4}),ye({attempts:5,backoff:"linear",initialDelay:1e3,maxDelay:1e4,jitter:!0}))};function it(e,t){return de(e,t??{})}function qt(e,t){let r=t??{};return de(...e,r)}function zt(e,t,r={}){return e?t:r}function Jt(e,t=process.env.NODE_ENV??"development",r={}){return e[t]??r}function Yt(){let e=new Map;return{register(t,r){e.set(t,r)},get(t){return e.get(t)},has(t){return e.has(t)},names(){return Array.from(e.keys())},apply(t,r){let p=e.get(t);if(!p)throw new Error(`Policy not found: ${t}`);return it(p,r)}}}function Qt(){let e=[],t={key(r){return e.push({key:r}),t},policy(r){return e.push(r),t},timeout(r){return e.push(Ee({ms:r})),t},retry(r){return e.push(ye(r)),t},retries(r){return e.push(De.custom({attempts:r})),t},build(){return de(...e)}};return t}0&&(module.exports={CircuitOpenError,circuitBreakerPresets,conditionalPolicy,createCircuitBreaker,createCombinedLimiter,createConcurrencyLimiter,createCostBasedRateLimiter,createFixedWindowLimiter,createPolicyApplier,createPolicyBundle,createPolicyRegistry,createRateLimiter,createSagaWorkflow,envPolicy,isCircuitOpenError,isQueueFullError,isRateLimitExceededError,isSagaCompensationError,mergePolicies,rateLimiterPresets,retryPolicies,retryPolicy,runSaga,servicePolicies,stepOptions,timeoutPolicies,timeoutPolicy,withPolicies,withPolicy});
11
- //# sourceMappingURL=reliability.cjs.map