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
package/dist/fetch.d.cts CHANGED
@@ -1,4 +1,6 @@
1
- import { ak as RetryOptions, R as Result, c as AsyncResult } from './run-entry-C1uFytM6.cjs';
1
+ import { af as RetryOptions, R as Result, c as AsyncResult } from './run-entry-yQu63Yj9.cjs';
2
+ import './errors-entry-CMH73Eym.cjs';
3
+ import './tagged-error.cjs';
2
4
 
3
5
  type FetchNetworkError = {
4
6
  readonly _tag: "FetchNetworkError";
package/dist/fetch.d.ts CHANGED
@@ -1,4 +1,6 @@
1
- import { ak as RetryOptions, R as Result, c as AsyncResult } from './run-entry-C1uFytM6.js';
1
+ import { af as RetryOptions, R as Result, c as AsyncResult } from './run-entry-rw7zll_G.js';
2
+ import './errors-entry-DOt5UUl4.js';
3
+ import './tagged-error.js';
2
4
 
3
5
  type FetchNetworkError = {
4
6
  readonly _tag: "FetchNetworkError";
package/dist/fetch.js CHANGED
@@ -1,7 +1,7 @@
1
- function be(o){let t=o.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!t)return;let s=parseFloat(t[1]),l=t[2].toLowerCase();return{_tag:"Duration",millis:s*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[l]??1)}}var Se="UNEXPECTED_ERROR";function Ae(o){return Se}function I(o){return{ok:!0,value:o}}function _(o,t){let s=t?.cause;return{ok:!1,error:o,...s!==void 0?{cause:s}:{}}}function Pe(o){if(o==null)return"unknown";if(typeof o=="string")return o.trim()||"unknown";if(typeof o=="object"){let t=o;if(typeof t._tag=="string"){let s=t._tag.trim();if(s)return s}if(typeof t.tag=="string"){let s=t.tag.trim();if(s)return s}if(typeof t.code=="string"){let s=t.code.trim();if(s)return s}else if(typeof t.code=="number")return String(t.code);if(o instanceof Error&&o.name){let s=o.name.trim();if(s)return s}}return"unknown"}function _e(o,t){if(!(!t||!o))return t[o]}function Oe(o){let{intent:t,domain:s,owner:l,tags:b,stateChanges:f,emits:g,calls:y}=o;if(!t&&!s&&!l&&!b?.length&&!f?.length&&!g?.length&&!y?.length)return;let O={};return t&&(O.intent=t),s&&(O.domain=s),l&&(O.owner=l),b?.length&&(O.tags=b),f?.length&&(O.stateChanges=f),g?.length&&(O.emits=g),y?.length&&(O.calls=y),O}function B(o,t,s,l,b){let f=Pe(o),g=_e(f,t),y={tag:f,origin:s};return g!==void 0&&(y.classification=g),l!==void 0&&(y.attempt=l),b!==void 0&&(y.cumulativeDurationMs=b),y}var Q=Symbol.for("step_timeout_marker");function de(o){return typeof o!="object"||o===null?!1:o.type==="STEP_TIMEOUT"?!0:Q in o}function Fe(o){if(!(typeof o!="object"||o===null)){if(o.type==="STEP_TIMEOUT"){let t=o;return{timeoutMs:t.timeoutMs,stepName:t.stepName,stepKey:t.stepKey,attempt:t.attempt}}if(Q in o)return o[Q]}}var ke=Symbol("early-exit");function Me(o,t){return{[ke]:!0,error:o,meta:t}}function ve(o){return typeof o=="object"&&o!==null&&o[ke]===!0}var Re=Symbol("mapper-exception");function $(o){return{[Re]:!0,thrown:o}}function De(o){return typeof o=="object"&&o!==null&&o[Re]===!0}function ee(o,t){let{backoff:s,initialDelay:l,maxDelay:b,jitter:f}=t,g;switch(s){case"fixed":g=l;break;case"linear":g=l*o;break;case"exponential":g=l*Math.pow(2,o-1);break}if(g=Math.min(g,b),f){let y=g*.25*Math.random();g=g+y}return Math.floor(g)}function te(o){return new Promise(t=>setTimeout(t,o))}var G={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:(o,t)=>!0,onRetry:(o,t,s)=>{}};async function se(o,t){let s=Math.max(1,t.attempts),l={backoff:t.backoff??G.backoff,initialDelay:t.initialDelay??G.initialDelay,maxDelay:t.maxDelay??G.maxDelay,jitter:t.jitter??G.jitter,retryOn:t.retryOn??G.retryOn,onRetry:t.onRetry??G.onRetry},b;for(let f=1;f<=s;f++)try{let g=await o();if(g.ok)return g;if(b=g,f<s&&l.retryOn(g.error,f)){let y=ee(f,l);l.onRetry(g.error,f,y),await te(y);continue}return g}catch(g){if(f<s&&l.retryOn(g,f)){let y=ee(f,l);l.onRetry(g,f,y),await te(y);continue}throw g}return b}var we=Symbol("timeout"),oe=Symbol("timeout-option");function Ie(o){return typeof o=="object"&&o!==null&&o[oe]===!0}async function Ue(o,t,s,l){let b=new AbortController,f=t.onTimeout??"error",g=()=>typeof f=="function"?f({name:s.name,key:s.key,ms:t.ms}):t.error??{type:"STEP_TIMEOUT",stepName:s.name,stepKey:s.key,timeoutMs:t.ms,attempt:s.attempt},y;l?.aborted&&b.abort(l.reason);let O;l&&!l.aborted&&(O=()=>b.abort(l.reason),l.addEventListener("abort",O,{once:!0}));let u=new Promise((v,N)=>{y=setTimeout(()=>{if(f!=="disconnect"&&b.abort(),f==="option"){N({[oe]:!0,ms:t.ms});return}N({[we]:!0,error:g()})},t.ms)}),U;t.signal?U=Promise.resolve(o(b.signal)):U=Promise.resolve(o());try{return await Promise.race([U,u])}catch(v){if(typeof v=="object"&&v!==null&&v[oe]===!0)throw{[oe]:!0,ms:t.ms};if(typeof v=="object"&&v!==null&&v[we]===!0){f==="disconnect"&&U.catch(()=>{});let N=v.error;if(typeof N=="object"&&N!==null&&N.type!=="STEP_TIMEOUT"){let Y={timeoutMs:t.ms,stepName:s.name,stepKey:s.key,attempt:s.attempt};Q in N?N[Q]=Y:Object.defineProperty(N,Q,{value:Y,enumerable:!1,writable:!0,configurable:!1})}throw N}throw v}finally{clearTimeout(y),O&&l&&l.removeEventListener("abort",O)}}var z={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function fe(o,t){let{onError:s,onEvent:l,catchUnexpected:b,workflowId:f,workflowName:g,context:y,_workflowSignal:O}=t&&typeof t=="object"?t:{},u=f??crypto.randomUUID(),U=b??Ae,v=[],N=0,Y=E=>E??`step_${++N}`,p=E=>{let K=E.context!==void 0||y===void 0?E:{...E,context:y},q=g!==void 0&&K.workflowName===void 0?{...K,workflowName:g}:K;if(q.type==="step_success"){let re=q.stepId;for(let ne=v.length-1;ne>=0;ne--){let H=v[ne];if(H.type==="race"&&!H.winnerId){H.winnerId=re;break}}}l?.(q,y)},D=Me,J=E=>ve(E),L=(E,K)=>E,he=E=>typeof E=="function"?!1:!!(E&&typeof E=="object"&&"ok"in E||E&&typeof E=="object"&&"then"in E&&typeof E.then=="function");try{let K=function(a){let m={};for(let[n,r]of Object.entries(a))if(typeof r=="function")m[n]=r;else if(r&&typeof r=="object"&&"fn"in r)m[n]=r.fn;else throw new TypeError(`step.parallel: operation "${n}" must be a function or { fn, errors? } object`);return m},q=function(a,m){let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let r=performance.now(),e=!1;v.push({scopeId:n,type:"parallel"});let i=()=>{if(e)return;e=!0;let c=v.findIndex(d=>d.scopeId===n);c!==-1&&v.splice(c,1),p({type:"scope_end",workflowId:u,scopeId:n,ts:Date.now(),durationMs:performance.now()-r})};p({type:"scope_start",workflowId:u,scopeId:n,scopeType:"parallel",name:a,ts:Date.now()});try{let c=await m();if(i(),!c.ok)throw s?.(c.error,a,y),D(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw i(),c}})()},re=function(a,m){let n=Object.keys(a),r=m.name??`Parallel(${n.join(", ")})`,e=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let i=performance.now(),c=!1;v.push({scopeId:e,type:"parallel"});let d=()=>{if(c)return;c=!0;let w=v.findIndex(T=>T.scopeId===e);w!==-1&&v.splice(w,1),p({type:"scope_end",workflowId:u,scopeId:e,ts:Date.now(),durationMs:performance.now()-i})};p({type:"scope_start",workflowId:u,scopeId:e,scopeType:"parallel",name:r,ts:Date.now()});try{let w=await new Promise(R=>{if(n.length===0){R([]);return}let A=!1,M=n.length,h=new Array(n.length);for(let F=0;F<n.length;F++){let x=n[F],S=F;Promise.resolve(a[x]()).catch(C=>_({type:"PROMISE_REJECTED",cause:C},{cause:{type:"PROMISE_REJECTION",reason:C}})).then(C=>{if(!A){if(!C.ok){A=!0,R([{key:x,result:C}]);return}h[S]={key:x,result:C},M--,M===0&&R(h)}})}});d();let T={};for(let{key:R,result:A}of w){if(!A.ok)throw s?.(A.error,R,y),D(A.error,{origin:"result",resultCause:A.cause});T[R]=A.value}return T}catch(w){throw d(),w}})()};var We=K,Je=q,Xe=re;let E=(a,m,n)=>(async()=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let r=n??{},e=Oe(r),i=a,c=r.key??a,d=r.key??a,{description:w,retry:T,timeout:R}=r,A=Y(c),M=l,h=M?performance.now():0,x=he(m)?()=>m:m,C={attempts:Math.max(1,T?.attempts??1),backoff:T?.backoff??z.backoff,initialDelay:T?.initialDelay??z.initialDelay,maxDelay:T?.maxDelay??z.maxDelay,jitter:T?.jitter??z.jitter,retryOn:T?.retryOn??z.retryOn,onRetry:T?.onRetry??z.onRetry};l&&p({type:"step_start",workflowId:u,stepId:A,stepKey:c,name:i,description:w,ts:Date.now(),...e&&{metadata:e}});let X;for(let P=1;P<=C.attempts;P++){let xe=M?performance.now():0;try{let k;if(R?k=await Ue(x,R,{name:i,key:c,attempt:P},O):k=await x(),k.ok){let W=performance.now()-h;return p({type:"step_success",workflowId:u,stepId:A,stepKey:c,name:i,description:w,ts:Date.now(),durationMs:W,...e&&{metadata:e}}),d&&p({type:"step_complete",workflowId:u,stepKey:d,name:i,description:w,ts:Date.now(),durationMs:W,result:k,...e&&{metadata:e}}),k.value}if(X=k,P<C.attempts&&C.retryOn(k.error,P)){let W=ee(P,C);p({type:"step_retry",workflowId:u,stepId:A,stepKey:c,name:i,ts:Date.now(),attempt:P+1,maxAttempts:C.attempts,delayMs:W,error:k.error,...e&&{metadata:e},diagnostics:B(k.error,r.errorMeta,"result",P,performance.now()-h)}),C.onRetry(k.error,P,W),await te(W);continue}C.attempts>1&&p({type:"step_retries_exhausted",workflowId:u,stepId:A,stepKey:c,name:i,ts:Date.now(),durationMs:performance.now()-h,attempts:P,lastError:k.error,...e&&{metadata:e},diagnostics:B(k.error,r.errorMeta,"result",P,performance.now()-h)});break}catch(k){let W=performance.now()-xe;if(Ie(k)){let j=k.ms;p({type:"step_timeout",workflowId:u,stepId:A,stepKey:c,name:i,ts:Date.now(),timeoutMs:j,attempt:P,...e&&{metadata:e},diagnostics:B(k,r.errorMeta,"timeout",P)}),p({type:"step_success",workflowId:u,stepId:A,stepKey:c,name:i,description:w,ts:Date.now(),durationMs:performance.now()-h,...e&&{metadata:e}}),d&&p({type:"step_complete",workflowId:u,stepKey:d,name:i,description:w,ts:Date.now(),durationMs:performance.now()-h,result:I(void 0),...e&&{metadata:e}});return}if(J(k))throw p({type:"step_aborted",workflowId:u,stepId:A,stepKey:c,name:i,description:w,ts:Date.now(),durationMs:W,...e&&{metadata:e}}),k;if(de(k)){let j=Fe(k),Ce=R?.ms??j?.timeoutMs??0;if(p({type:"step_timeout",workflowId:u,stepId:A,stepKey:c,name:i,ts:Date.now(),timeoutMs:Ce,attempt:P,...e&&{metadata:e},diagnostics:B(k,r.errorMeta,"timeout",P)}),P<C.attempts&&C.retryOn(k,P)){let pe=ee(P,C);p({type:"step_retry",workflowId:u,stepId:A,stepKey:c,name:i,ts:Date.now(),attempt:P+1,maxAttempts:C.attempts,delayMs:pe,error:k,...e&&{metadata:e},diagnostics:B(k,r.errorMeta,"timeout",P,performance.now()-h)}),C.onRetry(k,P,pe),await te(pe);continue}C.attempts>1&&p({type:"step_retries_exhausted",workflowId:u,stepId:A,stepKey:c,name:i,ts:Date.now(),durationMs:performance.now()-h,attempts:P,lastError:k,...e&&{metadata:e},diagnostics:B(k,r.errorMeta,"timeout",P,performance.now()-h)});let ce=performance.now()-h;throw p({type:"step_error",workflowId:u,stepId:A,stepKey:c,name:i,description:w,ts:Date.now(),durationMs:ce,error:k,...e&&{metadata:e},diagnostics:B(k,r.errorMeta,"timeout",P,ce)}),d&&p({type:"step_complete",workflowId:u,stepKey:d,name:i,description:w,ts:Date.now(),durationMs:ce,result:_(k,{cause:k}),meta:{origin:"throw",thrown:k},...e&&{metadata:e}}),s?.(k,i,y),D(k,{origin:"throw",thrown:k})}if(P<C.attempts&&C.retryOn(k,P)){let j=ee(P,C);p({type:"step_retry",workflowId:u,stepId:A,stepKey:c,name:i,ts:Date.now(),attempt:P+1,maxAttempts:C.attempts,delayMs:j,error:k,...e&&{metadata:e},diagnostics:B(k,r.errorMeta,"throw",P,performance.now()-h)}),C.onRetry(k,P,j),await te(j);continue}C.attempts>1&&!de(k)&&p({type:"step_retries_exhausted",workflowId:u,stepId:A,stepKey:c,name:i,ts:Date.now(),durationMs:performance.now()-h,attempts:P,lastError:k,...e&&{metadata:e},diagnostics:B(k,r.errorMeta,"throw",P,performance.now()-h)});let ie=performance.now()-h,Z;try{Z=U(k)}catch(j){throw $(j)}throw p({type:"step_error",workflowId:u,stepId:A,stepKey:c,name:i,description:w,ts:Date.now(),durationMs:ie,error:Z,...e&&{metadata:e},diagnostics:B(k,r.errorMeta,"throw",P,ie)}),d&&p({type:"step_complete",workflowId:u,stepKey:d,name:i,description:w,ts:Date.now(),durationMs:ie,result:_(Z,{cause:k}),meta:{origin:"throw",thrown:k},...e&&{metadata:e}}),s?.(Z,i,y),D(Z,{origin:"throw",thrown:k})}}let V=X,ae=performance.now()-h,ue=L(V.error,{origin:"result",resultCause:V.cause});throw p({type:"step_error",workflowId:u,stepId:A,stepKey:c,name:i,description:w,ts:Date.now(),durationMs:ae,error:ue,...e&&{metadata:e},diagnostics:B(V.error,r.errorMeta,"result",C.attempts,ae)}),d&&p({type:"step_complete",workflowId:u,stepKey:d,name:i,description:w,ts:Date.now(),durationMs:ae,result:V,meta:{origin:"result",resultCause:V.cause},...e&&{metadata:e}}),s?.(ue,i,y),D(ue,{origin:"result",resultCause:V.cause})})();E.try=(a,m,n)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.try() requires an explicit string ID as the first argument. Example: step.try("parse", () => JSON.parse(str), { error: "PARSE_ERROR" })');let r=n.key??a,e=a,i=a,c="error"in n?()=>n.error:n.onError,d=l;return(async()=>{let w=d?performance.now():0;l&&p({type:"step_start",workflowId:u,stepId:i,stepKey:r,name:e,ts:Date.now()});try{let T=await m(),R=performance.now()-w;return p({type:"step_success",workflowId:u,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:R}),r&&p({type:"step_complete",workflowId:u,stepKey:r,name:e,ts:Date.now(),durationMs:R,result:I(T)}),T}catch(T){let R=c(T),A=performance.now()-w,M=L(R,{origin:"throw",thrown:T});throw p({type:"step_error",workflowId:u,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:A,error:M}),r&&p({type:"step_complete",workflowId:u,stepKey:r,name:e,ts:Date.now(),durationMs:A,result:_(R,{cause:T}),meta:{origin:"throw",thrown:T}}),s?.(M,e,y),D(M,{origin:"throw",thrown:T})}})()},E.fromResult=(a,m,n)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.fromResult() requires an explicit string ID as the first argument. Example: step.fromResult("callProvider", () => callProvider(input), { onError: (e) => ({ type: "FAILED" }) })');let r=n.key??a,e=a,i=a,c="error"in n?()=>n.error:n.onError,d=l;return(async()=>{let w=d?performance.now():0;l&&p({type:"step_start",workflowId:u,stepId:i,stepKey:r,name:e,ts:Date.now()});let T=await m();if(T.ok){let R=performance.now()-w;return p({type:"step_success",workflowId:u,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:R}),r&&p({type:"step_complete",workflowId:u,stepKey:r,name:e,ts:Date.now(),durationMs:R,result:I(T.value)}),T.value}else{let R=c(T.error),A=performance.now()-w,M=L(R,{origin:"result",resultCause:T.error});throw p({type:"step_error",workflowId:u,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:A,error:M}),r&&p({type:"step_complete",workflowId:u,stepKey:r,name:e,ts:Date.now(),durationMs:A,result:_(R,{cause:T.error}),meta:{origin:"result",resultCause:T.error}}),s?.(M,e,y),D(M,{origin:"result",resultCause:T.error})}})()},E.fromNullable=(a,m,n,r)=>{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 E(a,async()=>{let e=await m();return e!=null?I(e):_(n())},r)},E.retry=(a,m,n)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.retry() requires an explicit string ID as the first argument. Example: step.retry("fetchData", () => fetchData(), { attempts: 3 })');return E(a,m,{key:n.key??a,retry:{attempts:n.attempts,backoff:n.backoff,initialDelay:n.initialDelay,maxDelay:n.maxDelay,jitter:n.jitter,retryOn:n.retryOn,onRetry:n.onRetry},timeout:n.timeout})},E.withTimeout=(a,m,n)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.withTimeout() requires an explicit string ID as the first argument. Example: step.withTimeout("slowOp", () => slowOp(), { ms: 5000 })');return E(a,m,{key:n.key??a,timeout:n})},E.sleep=(a,m,n)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let r=typeof m=="string"?be(m):m;if(!r)throw new Error(`step.sleep: invalid duration '${m}'`);let e=r.millis,i=n?.signal;return E(a,async()=>{if(O?.aborted||i?.aborted){let c=new Error("Sleep aborted");throw c.name="AbortError",c}return new Promise((c,d)=>{let w={timeoutId:void 0},T=()=>{w.timeoutId&&clearTimeout(w.timeoutId);let R=new Error("Sleep aborted");R.name="AbortError",d(R)};O?.addEventListener("abort",T,{once:!0}),i?.addEventListener("abort",T,{once:!0}),w.timeoutId=setTimeout(()=>{O?.removeEventListener("abort",T),i?.removeEventListener("abort",T),c(I(void 0))},e)})},{key:n?.key??a,description:n?.description})},E.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],n=a[1];if(typeof n=="function")return q(m,n);if(n&&typeof n=="object"&&!Array.isArray(n)){let e=K(n);return re(e,{name:m})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),E.race=(a,m)=>{let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let r=performance.now(),e=!1,i={scopeId:n,type:"race",winnerId:void 0};v.push(i);let c=()=>{if(e)return;e=!0;let d=v.findIndex(w=>w.scopeId===n);d!==-1&&v.splice(d,1),p({type:"scope_end",workflowId:u,scopeId:n,ts:Date.now(),durationMs:performance.now()-r,winnerId:i.winnerId})};p({type:"scope_start",workflowId:u,scopeId:n,scopeType:"race",name:a,ts:Date.now()});try{let d=await m();if(c(),!d.ok)throw s?.(d.error,a,y),D(d.error,{origin:"result",resultCause:d.cause});return d.value}catch(d){throw c(),d}})()},E.allSettled=(a,m)=>{let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let r=performance.now(),e=!1;v.push({scopeId:n,type:"allSettled"});let i=()=>{if(e)return;e=!0;let c=v.findIndex(d=>d.scopeId===n);c!==-1&&v.splice(c,1),p({type:"scope_end",workflowId:u,scopeId:n,ts:Date.now(),durationMs:performance.now()-r})};p({type:"scope_start",workflowId:u,scopeId:n,scopeType:"allSettled",name:a,ts:Date.now()});try{let c=await m();if(i(),!c.ok)throw s?.(c.error,a,y),D(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw i(),c}})()},E.if=(a,m,n)=>n(),E.label=E.if,E.branch=async(a,m)=>{let{condition:n,then:r,else:e}=m;if(n())return await r();if(e)return await e()},E.arm=(a,m)=>({fn:a,errors:m}),E.forEach=async(a,m,n)=>{let r=[],e=n.maxIterations,i=0,c="run"in n,d=Symbol.asyncIterator in m?m:(async function*(){yield*m})();for await(let w of d){if(e!==void 0&&i>=e)break;let T;c?T=await n.run(w,i):T=await n.item.handler(w,i,E),r.push(T),i++}return r},E.item=a=>({__forEachItemHandler:!0,handler:a}),E.dep=(a,m)=>m,E.run=(a,m,n)=>E(a,()=>m,n),E.workflow=(a,m,n)=>E(a,m,n),E.andThen=(a,m,n,r)=>E(a,()=>n(m),r),E.match=async(a,m,n,r)=>E(a,async()=>{let e=await m;return e.ok?I(await n.ok(e.value)):I(await n.err(e.error,e.cause))},r),E.all=E.parallel,E.map=async(a,m,n,r)=>{let e=r?.concurrency??m.length;return E(a,()=>e>=m.length?Te(m.map((i,c)=>n(i,c))):(async()=>{let i=[];for(let c=0;c<m.length;c+=e){let d=m.slice(c,c+e),w=await Te(d.map((T,R)=>n(T,c+R)));if(!w.ok)return w;i.push(...w.value)}return I(i)})(),{key:r?.key})},E.withFallback=(a,m,n)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.withFallback() requires an explicit string ID as the first argument. Example: step.withFallback("getUser", () => fetchUser(id), { fallback: () => fetchFromCache(id) })');let r=n.key??a,e=a,i=Y(r),c=l;return(async()=>{let d=c?performance.now():0;l&&p({type:"step_start",workflowId:u,stepId:i,stepKey:r,name:e,ts:Date.now()});let w;try{w=await m()}catch(h){if(J(h))throw p({type:"step_aborted",workflowId:u,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:performance.now()-d}),h;let F;try{F=U(h)}catch(S){throw $(S)}if(n.on!==void 0&&n.on!==F){let S=performance.now()-d;throw p({type:"step_error",workflowId:u,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:S,error:F}),r&&p({type:"step_complete",workflowId:u,stepKey:r,name:e,ts:Date.now(),durationMs:S,result:_(F,{cause:h}),meta:{origin:"throw",thrown:h}}),s?.(F,e,y),D(F,{origin:"throw",thrown:h})}let x;try{x=await n.fallback()}catch(S){if(J(S))throw p({type:"step_aborted",workflowId:u,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:performance.now()-d}),S;let C;try{C=U(S)}catch(V){throw $(V)}let X=performance.now()-d;throw p({type:"step_error",workflowId:u,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:X,error:C}),r&&p({type:"step_complete",workflowId:u,stepKey:r,name:e,ts:Date.now(),durationMs:X,result:_(C,{cause:S}),meta:{origin:"throw",thrown:S}}),s?.(C,e,y),D(C,{origin:"throw",thrown:S})}if(x.ok){let S=performance.now()-d;return p({type:"step_success",workflowId:u,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:S}),r&&p({type:"step_complete",workflowId:u,stepKey:r,name:e,ts:Date.now(),durationMs:S,result:x,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(F)}}),x.value}else{let S=performance.now()-d,C=L(x.error,{origin:"result",resultCause:x.cause});throw p({type:"step_error",workflowId:u,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:S,error:C}),r&&p({type:"step_complete",workflowId:u,stepKey:r,name:e,ts:Date.now(),durationMs:S,result:x,meta:{origin:"result",resultCause:x.cause}}),s?.(C,e,y),D(C,{origin:"result",resultCause:x.cause})}}if(w.ok){let h=performance.now()-d;return p({type:"step_success",workflowId:u,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:h}),r&&p({type:"step_complete",workflowId:u,stepKey:r,name:e,ts:Date.now(),durationMs:h,result:w}),w.value}let T=w.error;if(n.on!==void 0&&n.on!==T){let h=performance.now()-d,F=L(T,{origin:"result",resultCause:w.cause});throw p({type:"step_error",workflowId:u,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:h,error:F}),r&&p({type:"step_complete",workflowId:u,stepKey:r,name:e,ts:Date.now(),durationMs:h,result:w,meta:{origin:"result",resultCause:w.cause}}),s?.(F,e,y),D(F,{origin:"result",resultCause:w.cause})}let R;try{R=await n.fallback()}catch(h){if(J(h))throw p({type:"step_aborted",workflowId:u,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:performance.now()-d}),h;let F;try{F=U(h)}catch(S){throw $(S)}let x=performance.now()-d;throw p({type:"step_error",workflowId:u,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:x,error:F}),r&&p({type:"step_complete",workflowId:u,stepKey:r,name:e,ts:Date.now(),durationMs:x,result:_(F,{cause:h}),meta:{origin:"throw",thrown:h}}),s?.(F,e,y),D(F,{origin:"throw",thrown:h})}if(R.ok){let h=performance.now()-d;return p({type:"step_success",workflowId:u,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:h}),r&&p({type:"step_complete",workflowId:u,stepKey:r,name:e,ts:Date.now(),durationMs:h,result:R,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(T)}}),R.value}let A=performance.now()-d,M=L(R.error,{origin:"result",resultCause:R.cause});throw p({type:"step_error",workflowId:u,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:A,error:M}),r&&p({type:"step_complete",workflowId:u,stepKey:r,name:e,ts:Date.now(),durationMs:A,result:R,meta:{origin:"result",resultCause:R.cause}}),s?.(M,e,y),D(M,{origin:"result",resultCause:R.cause})})()},E.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 n=a,r=a,e=Y(n),i=l;return(async()=>{let c=i?performance.now():0;l&&p({type:"step_start",workflowId:u,stepId:e,stepKey:n,name:r,ts:Date.now()});let d;try{d=await m.acquire()}catch(x){if(J(x))throw p({type:"step_aborted",workflowId:u,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:performance.now()-c}),x;let S;try{S=U(x)}catch(X){throw $(X)}let C=performance.now()-c;throw p({type:"step_error",workflowId:u,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:C,error:S}),n&&p({type:"step_complete",workflowId:u,stepKey:n,name:r,ts:Date.now(),durationMs:C,result:_(S,{cause:x}),meta:{origin:"throw",thrown:x}}),s?.(S,r,y),D(S,{origin:"throw",thrown:x})}if(!d.ok){let x=performance.now()-c,S=L(d.error,{origin:"result",resultCause:d.cause});throw p({type:"step_error",workflowId:u,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:x,error:S}),n&&p({type:"step_complete",workflowId:u,stepKey:n,name:r,ts:Date.now(),durationMs:x,result:d,meta:{origin:"result",resultCause:d.cause}}),s?.(S,r,y),D(S,{origin:"result",resultCause:d.cause})}let w=d.value,T,R,A=!1;try{T=await m.use(w)}catch(x){if(J(x)){try{await m.release(w)}catch(S){console.warn(`[awaitly] step.withResource("${a}"): release threw after earlyExit:`,S)}throw x}R=x,A=!0}try{await m.release(w)}catch(x){console.warn(`[awaitly] step.withResource("${a}"): release threw:`,x)}if(A){let x;try{x=U(R)}catch(C){throw $(C)}let S=performance.now()-c;throw p({type:"step_error",workflowId:u,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:S,error:x}),n&&p({type:"step_complete",workflowId:u,stepKey:n,name:r,ts:Date.now(),durationMs:S,result:_(x,{cause:R}),meta:{origin:"throw",thrown:R}}),s?.(x,r,y),D(x,{origin:"throw",thrown:R})}let M=T;if(M.ok){let x=performance.now()-c;return p({type:"step_success",workflowId:u,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:x}),n&&p({type:"step_complete",workflowId:u,stepKey:n,name:r,ts:Date.now(),durationMs:x,result:M}),M.value}let h=performance.now()-c,F=L(M.error,{origin:"result",resultCause:M.cause});throw p({type:"step_error",workflowId:u,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:h,error:F}),n&&p({type:"step_complete",workflowId:u,stepKey:n,name:r,ts:Date.now(),durationMs:h,result:M,meta:{origin:"result",resultCause:M.cause}}),s?.(F,r,y),D(F,{origin:"result",resultCause:M.cause})})()};let H=await o({step:E});if(process.env.NODE_ENV!=="production"&&H!==null&&typeof H=="object"&&"ok"in H&&typeof H.ok=="boolean"){let a=H;(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
+ var te=class extends Error{_tag};function N(r,e){return class extends te{_tag=r;constructor(s,c){let b=e?.message?e.message(s??{}):r;if(super(b),this.name=r,Object.setPrototypeOf(this,new.target.prototype),s&&typeof s=="object"){let{_tag:y,name:T,message:E,stack:_,...i}=s,U=Object.prototype.hasOwnProperty.call(i,"cause"),F=U?i.cause:void 0;U&&delete i.cause;let B=c?.cause!==void 0;if(U&&B)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,i),U&&(this.cause=F),B&&(this.cause=c?.cause)}else c?.cause!==void 0&&(this.cause=c.cause)}}}Object.defineProperty(N,Symbol.hasInstance,{value:r=>r instanceof te});(b=>{function r(y){return y instanceof Error}b.isError=r;function e(y){return y instanceof te}b.isTaggedError=e;function s(y,T){let E=y._tag,_=T[E];return _(y)}b.match=s;function c(y,T,E){let _=y._tag,i=T[_];return i?i(y):E(y)}b.matchPartial=c})(N||={});var Te=class extends N("TimeoutError",{message:e=>e.operation?`TimeoutError: ${e.operation} timed out after ${e.ms}ms`:`TimeoutError: Operation timed out after ${e.ms}ms`}){},ke=class extends N("RetryExhaustedError",{message:e=>e.operation?`RetryExhaustedError: ${e.operation} failed after ${e.attempts} attempts`:`RetryExhaustedError: Operation failed after ${e.attempts} attempts`}){},ge=class extends N("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`:""}`}){},Re=class extends N("CircuitBreakerOpenError",{message:e=>`CircuitBreakerOpenError: Circuit ${e.circuitName} is ${e.state??"OPEN"}${e.retryAfterMs?`, retry after ${Math.ceil(e.retryAfterMs/1e3)}s`:""}`}){},he=class extends N("ValidationError",{message:e=>`ValidationError: Invalid ${e.field} - ${e.reason}`}){},xe=class extends N("NotFoundError",{message:e=>e.id?`NotFoundError: ${e.resource} with id ${e.id} not found`:`NotFoundError: ${e.resource} not found`}){},Ce=class extends N("UnauthorizedError",{message:e=>e.reason?`UnauthorizedError: ${e.reason}`:e.action&&e.resource?`UnauthorizedError: Not authorized to ${e.action} ${e.resource}`:"UnauthorizedError: Access denied"}){},be=class extends N("NetworkError",{message:e=>e.url?`NetworkError: ${e.reason} (${e.url})`:`NetworkError: ${e.reason}`}){},Se=class extends N("CompensationError",{message:e=>`CompensationError: Failed to compensate step ${e.step}`}){},ae=class extends N("UnexpectedError",{message:e=>`UnexpectedError: ${e.cause instanceof Error?e.cause.message:String(e.cause??"unknown")}`}){};function Be(r){let e=r.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!e)return;let s=parseFloat(e[1]),c=e[2].toLowerCase();return{_tag:"Duration",millis:s*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[c]??1)}}function Ne(r){return new ae({cause:r})}function D(r){return{ok:!0,value:r}}function O(r,e){let s=e?.cause;return{ok:!1,error:r,...s!==void 0?{cause:s}:{}}}function He(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 s=e._tag.trim();if(s)return s}if(typeof e.tag=="string"){let s=e.tag.trim();if(s)return s}if(typeof e.code=="string"){let s=e.code.trim();if(s)return s}else if(typeof e.code=="number")return String(e.code);if(r instanceof Error&&r.name){let s=r.name.trim();if(s)return s}}return"unknown"}function Ke(r,e){if(!(!e||!r))return e[r]}function je(r){let{intent:e,domain:s,owner:c,tags:b,stateChanges:y,emits:T,calls:E}=r;if(!e&&!s&&!c&&!b?.length&&!y?.length&&!T?.length&&!E?.length)return;let _={};return e&&(_.intent=e),s&&(_.domain=s),c&&(_.owner=c),b?.length&&(_.tags=b),y?.length&&(_.stateChanges=y),T?.length&&(_.emits=T),E?.length&&(_.calls=E),_}function H(r,e,s,c,b){let y=He(r),T=Ke(y,e),E={tag:y,origin:s};return T!==void 0&&(E.classification=T),c!==void 0&&(E.attempt=c),b!==void 0&&(E.cumulativeDurationMs=b),E}var Z=Symbol.for("step_timeout_marker");function Ae(r){return typeof r!="object"||r===null?!1:r.type==="STEP_TIMEOUT"?!0:Z in r}function Le(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(Z in r)return r[Z]}}var Fe=Symbol("early-exit");function qe(r,e){return{[Fe]:!0,error:r,meta:e}}function $e(r){return typeof r=="object"&&r!==null&&r[Fe]===!0}var Me=Symbol("mapper-exception");function G(r){return{[Me]:!0,thrown:r}}function Ve(r){return typeof r=="object"&&r!==null&&r[Me]===!0}function re(r,e){let{backoff:s,initialDelay:c,maxDelay:b,jitter:y}=e,T;switch(s){case"fixed":T=c;break;case"linear":T=c*r;break;case"exponential":T=c*Math.pow(2,r-1);break}if(T=Math.min(T,b),y){let E=T*.25*Math.random();T=T+E}return Math.floor(T)}function ne(r){return new Promise(e=>setTimeout(e,r))}var X={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:(r,e)=>!0,onRetry:(r,e,s)=>{}};async function ue(r,e){let s=Math.max(1,e.attempts),c={backoff:e.backoff??X.backoff,initialDelay:e.initialDelay??X.initialDelay,maxDelay:e.maxDelay??X.maxDelay,jitter:e.jitter??X.jitter,retryOn:e.retryOn??X.retryOn,onRetry:e.onRetry??X.onRetry},b;for(let y=1;y<=s;y++)try{let T=await r();if(T.ok)return T;if(b=T,y<s&&c.retryOn(T.error,y)){let E=re(y,c);c.onRetry(T.error,y,E),await ne(E);continue}return T}catch(T){if(y<s&&c.retryOn(T,y)){let E=re(y,c);c.onRetry(T,y,E),await ne(E);continue}throw T}return b}var Pe=Symbol("timeout"),ie=Symbol("timeout-option");function We(r){return typeof r=="object"&&r!==null&&r[ie]===!0}async function Je(r,e,s,c){let b=new AbortController,y=e.onTimeout??"error",T=()=>typeof y=="function"?y({name:s.name,key:s.key,ms:e.ms}):e.error??{type:"STEP_TIMEOUT",stepName:s.name,stepKey:s.key,timeoutMs:e.ms,attempt:s.attempt},E;c?.aborted&&b.abort(c.reason);let _;c&&!c.aborted&&(_=()=>b.abort(c.reason),c.addEventListener("abort",_,{once:!0}));let i=new Promise((F,B)=>{E=setTimeout(()=>{if(y!=="disconnect"&&b.abort(),y==="option"){B({[ie]:!0,ms:e.ms});return}B({[Pe]:!0,error:T()})},e.ms)}),U;e.signal?U=Promise.resolve(r(b.signal)):U=Promise.resolve(r());try{return await Promise.race([U,i])}catch(F){if(typeof F=="object"&&F!==null&&F[ie]===!0)throw{[ie]:!0,ms:e.ms};if(typeof F=="object"&&F!==null&&F[Pe]===!0){y==="disconnect"&&U.catch(()=>{});let B=F.error;if(typeof B=="object"&&B!==null&&B.type!=="STEP_TIMEOUT"){let z={timeoutMs:e.ms,stepName:s.name,stepKey:s.key,attempt:s.attempt};Z in B?B[Z]=z:Object.defineProperty(B,Z,{value:z,enumerable:!1,writable:!0,configurable:!1})}throw B}throw F}finally{clearTimeout(E),_&&c&&c.removeEventListener("abort",_)}}var Q={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function _e(r,e){let{onError:s,onEvent:c,catchUnexpected:b,workflowId:y,workflowName:T,context:E,_workflowSignal:_}=e&&typeof e=="object"?e:{},i=y??crypto.randomUUID(),U=b??Ne,F=[],B=0,z=d=>d??`step_${++B}`,l=d=>{let K=d.context!==void 0||E===void 0?d:{...d,context:E},$=T!==void 0&&K.workflowName===void 0?{...K,workflowName:T}:K;if($.type==="step_success"){let oe=$.stepId;for(let se=F.length-1;se>=0;se--){let j=F[se];if(j.type==="race"&&!j.winnerId){j.winnerId=oe;break}}}c?.($,E)},I=qe,J=d=>$e(d),q=(d,K)=>d,Ie=d=>typeof d=="function"?!1:!!(d&&typeof d=="object"&&"ok"in d||d&&typeof d=="object"&&"then"in d&&typeof d.then=="function");try{let K=function(a){let m={};for(let[o,n]of Object.entries(a))if(typeof n=="function")m[o]=n;else if(n&&typeof n=="object"&&"fn"in n)m[o]=n.fn;else throw new TypeError(`step.parallel: operation "${o}" must be a function or { fn, errors? } object`);return m},$=function(a,m){let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),t=!1;F.push({scopeId:o,type:"parallel"});let u=()=>{if(t)return;t=!0;let p=F.findIndex(w=>w.scopeId===o);p!==-1&&F.splice(p,1),l({type:"scope_end",workflowId:i,scopeId:o,ts:Date.now(),durationMs:performance.now()-n})};l({type:"scope_start",workflowId:i,scopeId:o,scopeType:"parallel",name:a,ts:Date.now()});try{let p=await m();if(u(),!p.ok)throw s?.(p.error,a,E),I(p.error,{origin:"result",resultCause:p.cause});return p.value}catch(p){throw u(),p}})()},oe=function(a,m){let o=Object.keys(a),n=m.name??`Parallel(${o.join(", ")})`,t=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let u=performance.now(),p=!1;F.push({scopeId:t,type:"parallel"});let w=()=>{if(p)return;p=!0;let f=F.findIndex(k=>k.scopeId===t);f!==-1&&F.splice(f,1),l({type:"scope_end",workflowId:i,scopeId:t,ts:Date.now(),durationMs:performance.now()-u})};l({type:"scope_start",workflowId:i,scopeId:t,scopeType:"parallel",name:n,ts:Date.now()});try{let f=await new Promise(R=>{if(o.length===0){R([]);return}let A=!1,v=o.length,h=new Array(o.length);for(let M=0;M<o.length;M++){let x=o[M],S=M;Promise.resolve(a[x]()).catch(C=>O({type:"PROMISE_REJECTED",cause:C},{cause:{type:"PROMISE_REJECTION",reason:C}})).then(C=>{if(!A){if(!C.ok){A=!0,R([{key:x,result:C}]);return}h[S]={key:x,result:C},v--,v===0&&R(h)}})}});w();let k={};for(let{key:R,result:A}of f){if(!A.ok)throw s?.(A.error,R,E),I(A.error,{origin:"result",resultCause:A.cause});k[R]=A.value}return k}catch(f){throw w(),f}})()};var rt=K,nt=$,ot=oe;let d=(a,m,o)=>(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 n=o??{},t=je(n),u=a,p=n.key??a,w=n.key??a,{description:f,retry:k,timeout:R}=n,A=z(p),v=c,h=v?performance.now():0,x=Ie(m)?()=>m:m,C={attempts:Math.max(1,k?.attempts??1),backoff:k?.backoff??Q.backoff,initialDelay:k?.initialDelay??Q.initialDelay,maxDelay:k?.maxDelay??Q.maxDelay,jitter:k?.jitter??Q.jitter,retryOn:k?.retryOn??Q.retryOn,onRetry:k?.onRetry??Q.onRetry};c&&l({type:"step_start",workflowId:i,stepId:A,stepKey:p,name:u,description:f,ts:Date.now(),...t&&{metadata:t}});let Y;for(let P=1;P<=C.attempts;P++){let De=v?performance.now():0;try{let g;if(R?g=await Je(x,R,{name:u,key:p,attempt:P},_):g=await x(),g.ok){let W=performance.now()-h;return l({type:"step_success",workflowId:i,stepId:A,stepKey:p,name:u,description:f,ts:Date.now(),durationMs:W,...t&&{metadata:t}}),w&&l({type:"step_complete",workflowId:i,stepKey:w,name:u,description:f,ts:Date.now(),durationMs:W,result:g,...t&&{metadata:t}}),g.value}if(Y=g,P<C.attempts&&C.retryOn(g.error,P)){let W=re(P,C);l({type:"step_retry",workflowId:i,stepId:A,stepKey:p,name:u,ts:Date.now(),attempt:P+1,maxAttempts:C.attempts,delayMs:W,error:g.error,...t&&{metadata:t},diagnostics:H(g.error,n.errorMeta,"result",P,performance.now()-h)}),C.onRetry(g.error,P,W),await ne(W);continue}C.attempts>1&&l({type:"step_retries_exhausted",workflowId:i,stepId:A,stepKey:p,name:u,ts:Date.now(),durationMs:performance.now()-h,attempts:P,lastError:g.error,...t&&{metadata:t},diagnostics:H(g.error,n.errorMeta,"result",P,performance.now()-h)});break}catch(g){let W=performance.now()-De;if(We(g)){let L=g.ms;l({type:"step_timeout",workflowId:i,stepId:A,stepKey:p,name:u,ts:Date.now(),timeoutMs:L,attempt:P,...t&&{metadata:t},diagnostics:H(g,n.errorMeta,"timeout",P)}),l({type:"step_success",workflowId:i,stepId:A,stepKey:p,name:u,description:f,ts:Date.now(),durationMs:performance.now()-h,...t&&{metadata:t}}),w&&l({type:"step_complete",workflowId:i,stepKey:w,name:u,description:f,ts:Date.now(),durationMs:performance.now()-h,result:D(void 0),...t&&{metadata:t}});return}if(J(g))throw l({type:"step_aborted",workflowId:i,stepId:A,stepKey:p,name:u,description:f,ts:Date.now(),durationMs:W,...t&&{metadata:t}}),g;if(Ae(g)){let L=Le(g),Ue=R?.ms??L?.timeoutMs??0;if(l({type:"step_timeout",workflowId:i,stepId:A,stepKey:p,name:u,ts:Date.now(),timeoutMs:Ue,attempt:P,...t&&{metadata:t},diagnostics:H(g,n.errorMeta,"timeout",P)}),P<C.attempts&&C.retryOn(g,P)){let de=re(P,C);l({type:"step_retry",workflowId:i,stepId:A,stepKey:p,name:u,ts:Date.now(),attempt:P+1,maxAttempts:C.attempts,delayMs:de,error:g,...t&&{metadata:t},diagnostics:H(g,n.errorMeta,"timeout",P,performance.now()-h)}),C.onRetry(g,P,de),await ne(de);continue}C.attempts>1&&l({type:"step_retries_exhausted",workflowId:i,stepId:A,stepKey:p,name:u,ts:Date.now(),durationMs:performance.now()-h,attempts:P,lastError:g,...t&&{metadata:t},diagnostics:H(g,n.errorMeta,"timeout",P,performance.now()-h)});let Ee=performance.now()-h;throw l({type:"step_error",workflowId:i,stepId:A,stepKey:p,name:u,description:f,ts:Date.now(),durationMs:Ee,error:g,...t&&{metadata:t},diagnostics:H(g,n.errorMeta,"timeout",P,Ee)}),w&&l({type:"step_complete",workflowId:i,stepKey:w,name:u,description:f,ts:Date.now(),durationMs:Ee,result:O(g,{cause:g}),meta:{origin:"throw",thrown:g},...t&&{metadata:t}}),s?.(g,u,E),I(g,{origin:"throw",thrown:g})}if(P<C.attempts&&C.retryOn(g,P)){let L=re(P,C);l({type:"step_retry",workflowId:i,stepId:A,stepKey:p,name:u,ts:Date.now(),attempt:P+1,maxAttempts:C.attempts,delayMs:L,error:g,...t&&{metadata:t},diagnostics:H(g,n.errorMeta,"throw",P,performance.now()-h)}),C.onRetry(g,P,L),await ne(L);continue}C.attempts>1&&!Ae(g)&&l({type:"step_retries_exhausted",workflowId:i,stepId:A,stepKey:p,name:u,ts:Date.now(),durationMs:performance.now()-h,attempts:P,lastError:g,...t&&{metadata:t},diagnostics:H(g,n.errorMeta,"throw",P,performance.now()-h)});let le=performance.now()-h,ee;try{ee=U(g)}catch(L){throw G(L)}throw l({type:"step_error",workflowId:i,stepId:A,stepKey:p,name:u,description:f,ts:Date.now(),durationMs:le,error:ee,...t&&{metadata:t},diagnostics:H(g,n.errorMeta,"throw",P,le)}),w&&l({type:"step_complete",workflowId:i,stepKey:w,name:u,description:f,ts:Date.now(),durationMs:le,result:O(ee,{cause:g}),meta:{origin:"throw",thrown:g},...t&&{metadata:t}}),s?.(ee,u,E),I(ee,{origin:"throw",thrown:g})}}let V=Y,ce=performance.now()-h,pe=q(V.error,{origin:"result",resultCause:V.cause});throw l({type:"step_error",workflowId:i,stepId:A,stepKey:p,name:u,description:f,ts:Date.now(),durationMs:ce,error:pe,...t&&{metadata:t},diagnostics:H(V.error,n.errorMeta,"result",C.attempts,ce)}),w&&l({type:"step_complete",workflowId:i,stepKey:w,name:u,description:f,ts:Date.now(),durationMs:ce,result:V,meta:{origin:"result",resultCause:V.cause},...t&&{metadata:t}}),s?.(pe,u,E),I(pe,{origin:"result",resultCause:V.cause})})();d.try=(a,m,o)=>{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 n=o.key??a,t=a,u=a,p="error"in o?()=>o.error:o.onError,w=c;return(async()=>{let f=w?performance.now():0;c&&l({type:"step_start",workflowId:i,stepId:u,stepKey:n,name:t,ts:Date.now()});try{let k=await m(),R=performance.now()-f;return l({type:"step_success",workflowId:i,stepId:u,stepKey:n,name:t,ts:Date.now(),durationMs:R}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:t,ts:Date.now(),durationMs:R,result:D(k)}),k}catch(k){let R=p(k),A=performance.now()-f,v=q(R,{origin:"throw",thrown:k});throw l({type:"step_error",workflowId:i,stepId:u,stepKey:n,name:t,ts:Date.now(),durationMs:A,error:v}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:t,ts:Date.now(),durationMs:A,result:O(R,{cause:k}),meta:{origin:"throw",thrown:k}}),s?.(v,t,E),I(v,{origin:"throw",thrown:k})}})()},d.fromResult=(a,m,o)=>{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 n=o.key??a,t=a,u=a,p="error"in o?()=>o.error:o.onError,w=c;return(async()=>{let f=w?performance.now():0;c&&l({type:"step_start",workflowId:i,stepId:u,stepKey:n,name:t,ts:Date.now()});let k=await m();if(k.ok){let R=performance.now()-f;return l({type:"step_success",workflowId:i,stepId:u,stepKey:n,name:t,ts:Date.now(),durationMs:R}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:t,ts:Date.now(),durationMs:R,result:D(k.value)}),k.value}else{let R=p(k.error),A=performance.now()-f,v=q(R,{origin:"result",resultCause:k.error});throw l({type:"step_error",workflowId:i,stepId:u,stepKey:n,name:t,ts:Date.now(),durationMs:A,error:v}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:t,ts:Date.now(),durationMs:A,result:O(R,{cause:k.error}),meta:{origin:"result",resultCause:k.error}}),s?.(v,t,E),I(v,{origin:"result",resultCause:k.error})}})()},d.fromNullable=(a,m,o,n)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.fromNullable() requires an explicit string ID as the first argument. Example: step.fromNullable("getUser", () => db.find(id), () => ({ type: "NOT_FOUND" }))');return d(a,async()=>{let t=await m();return t!=null?D(t):O(o())},n)},d.retry=(a,m,o)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.retry() requires an explicit string ID as the first argument. Example: step.retry("fetchData", () => fetchData(), { attempts: 3 })');return d(a,m,{key:o.key??a,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})},d.withTimeout=(a,m,o)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.withTimeout() requires an explicit string ID as the first argument. Example: step.withTimeout("slowOp", () => slowOp(), { ms: 5000 })');return d(a,m,{key:o.key??a,timeout:o})},d.sleep=(a,m,o)=>{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 n=typeof m=="string"?Be(m):m;if(!n)throw new Error(`step.sleep: invalid duration '${m}'`);let t=n.millis,u=o?.signal;return d(a,async()=>{if(_?.aborted||u?.aborted){let p=new Error("Sleep aborted");throw p.name="AbortError",p}return new Promise((p,w)=>{let f={timeoutId:void 0},k=()=>{f.timeoutId&&clearTimeout(f.timeoutId);let R=new Error("Sleep aborted");R.name="AbortError",w(R)};_?.addEventListener("abort",k,{once:!0}),u?.addEventListener("abort",k,{once:!0}),f.timeoutId=setTimeout(()=>{_?.removeEventListener("abort",k),u?.removeEventListener("abort",k),p(D(void 0))},t)})},{key:o?.key??a,description:o?.description})},d.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],o=a[1];if(typeof o=="function")return $(m,o);if(o&&typeof o=="object"&&!Array.isArray(o)){let t=K(o);return oe(t,{name:m})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),d.race=(a,m)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),t=!1,u={scopeId:o,type:"race",winnerId:void 0};F.push(u);let p=()=>{if(t)return;t=!0;let w=F.findIndex(f=>f.scopeId===o);w!==-1&&F.splice(w,1),l({type:"scope_end",workflowId:i,scopeId:o,ts:Date.now(),durationMs:performance.now()-n,winnerId:u.winnerId})};l({type:"scope_start",workflowId:i,scopeId:o,scopeType:"race",name:a,ts:Date.now()});try{let w=await m();if(p(),!w.ok)throw s?.(w.error,a,E),I(w.error,{origin:"result",resultCause:w.cause});return w.value}catch(w){throw p(),w}})()},d.allSettled=(a,m)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),t=!1;F.push({scopeId:o,type:"allSettled"});let u=()=>{if(t)return;t=!0;let p=F.findIndex(w=>w.scopeId===o);p!==-1&&F.splice(p,1),l({type:"scope_end",workflowId:i,scopeId:o,ts:Date.now(),durationMs:performance.now()-n})};l({type:"scope_start",workflowId:i,scopeId:o,scopeType:"allSettled",name:a,ts:Date.now()});try{let p=await m();if(u(),!p.ok)throw s?.(p.error,a,E),I(p.error,{origin:"result",resultCause:p.cause});return p.value}catch(p){throw u(),p}})()},d.if=(a,m,o)=>o(),d.label=d.if,d.branch=async(a,m)=>{let{condition:o,then:n,else:t}=m;if(o())return await n();if(t)return await t()},d.arm=(a,m)=>({fn:a,errors:m}),d.forEach=async(a,m,o)=>{let n=[],t=o.maxIterations,u=0,p="run"in o,w=Symbol.asyncIterator in m?m:(async function*(){yield*m})();for await(let f of w){if(t!==void 0&&u>=t)break;let k;p?k=await o.run(f,u):k=await o.item.handler(f,u,d),n.push(k),u++}return n},d.item=a=>({__forEachItemHandler:!0,handler:a}),d.dep=(a,m)=>m,d.run=(a,m,o)=>d(a,()=>m,o),d.workflow=(a,m,o)=>d(a,m,o),d.andThen=(a,m,o,n)=>d(a,()=>o(m),n),d.match=async(a,m,o,n)=>d(a,async()=>{let t=await m;return t.ok?D(await o.ok(t.value)):D(await o.err(t.error,t.cause))},n),d.all=d.parallel,d.map=async(a,m,o,n)=>{let t=n?.concurrency??m.length;return d(a,()=>t>=m.length?Oe(m.map((u,p)=>o(u,p))):(async()=>{let u=[];for(let p=0;p<m.length;p+=t){let w=m.slice(p,p+t),f=await Oe(w.map((k,R)=>o(k,p+R)));if(!f.ok)return f;u.push(...f.value)}return D(u)})(),{key:n?.key})},d.withFallback=(a,m,o)=>{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 n=o.key??a,t=a,u=z(n),p=c;return(async()=>{let w=p?performance.now():0;c&&l({type:"step_start",workflowId:i,stepId:u,stepKey:n,name:t,ts:Date.now()});let f;try{f=await m()}catch(h){if(J(h))throw l({type:"step_aborted",workflowId:i,stepId:u,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-w}),h;let M;try{M=U(h)}catch(S){throw G(S)}if(o.on!==void 0&&o.on!==M){let S=performance.now()-w;throw l({type:"step_error",workflowId:i,stepId:u,stepKey:n,name:t,ts:Date.now(),durationMs:S,error:M}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:t,ts:Date.now(),durationMs:S,result:O(M,{cause:h}),meta:{origin:"throw",thrown:h}}),s?.(M,t,E),I(M,{origin:"throw",thrown:h})}let x;try{x=await o.fallback()}catch(S){if(J(S))throw l({type:"step_aborted",workflowId:i,stepId:u,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-w}),S;let C;try{C=U(S)}catch(V){throw G(V)}let Y=performance.now()-w;throw l({type:"step_error",workflowId:i,stepId:u,stepKey:n,name:t,ts:Date.now(),durationMs:Y,error:C}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:t,ts:Date.now(),durationMs:Y,result:O(C,{cause:S}),meta:{origin:"throw",thrown:S}}),s?.(C,t,E),I(C,{origin:"throw",thrown:S})}if(x.ok){let S=performance.now()-w;return l({type:"step_success",workflowId:i,stepId:u,stepKey:n,name:t,ts:Date.now(),durationMs:S}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:t,ts:Date.now(),durationMs:S,result:x,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(M)}}),x.value}else{let S=performance.now()-w,C=q(x.error,{origin:"result",resultCause:x.cause});throw l({type:"step_error",workflowId:i,stepId:u,stepKey:n,name:t,ts:Date.now(),durationMs:S,error:C}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:t,ts:Date.now(),durationMs:S,result:x,meta:{origin:"result",resultCause:x.cause}}),s?.(C,t,E),I(C,{origin:"result",resultCause:x.cause})}}if(f.ok){let h=performance.now()-w;return l({type:"step_success",workflowId:i,stepId:u,stepKey:n,name:t,ts:Date.now(),durationMs:h}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:t,ts:Date.now(),durationMs:h,result:f}),f.value}let k=f.error;if(o.on!==void 0&&o.on!==k){let h=performance.now()-w,M=q(k,{origin:"result",resultCause:f.cause});throw l({type:"step_error",workflowId:i,stepId:u,stepKey:n,name:t,ts:Date.now(),durationMs:h,error:M}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:t,ts:Date.now(),durationMs:h,result:f,meta:{origin:"result",resultCause:f.cause}}),s?.(M,t,E),I(M,{origin:"result",resultCause:f.cause})}let R;try{R=await o.fallback()}catch(h){if(J(h))throw l({type:"step_aborted",workflowId:i,stepId:u,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-w}),h;let M;try{M=U(h)}catch(S){throw G(S)}let x=performance.now()-w;throw l({type:"step_error",workflowId:i,stepId:u,stepKey:n,name:t,ts:Date.now(),durationMs:x,error:M}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:t,ts:Date.now(),durationMs:x,result:O(M,{cause:h}),meta:{origin:"throw",thrown:h}}),s?.(M,t,E),I(M,{origin:"throw",thrown:h})}if(R.ok){let h=performance.now()-w;return l({type:"step_success",workflowId:i,stepId:u,stepKey:n,name:t,ts:Date.now(),durationMs:h}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:t,ts:Date.now(),durationMs:h,result:R,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(k)}}),R.value}let A=performance.now()-w,v=q(R.error,{origin:"result",resultCause:R.cause});throw l({type:"step_error",workflowId:i,stepId:u,stepKey:n,name:t,ts:Date.now(),durationMs:A,error:v}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:t,ts:Date.now(),durationMs:A,result:R,meta:{origin:"result",resultCause:R.cause}}),s?.(v,t,E),I(v,{origin:"result",resultCause:R.cause})})()},d.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 o=a,n=a,t=z(o),u=c;return(async()=>{let p=u?performance.now():0;c&&l({type:"step_start",workflowId:i,stepId:t,stepKey:o,name:n,ts:Date.now()});let w;try{w=await m.acquire()}catch(x){if(J(x))throw l({type:"step_aborted",workflowId:i,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:performance.now()-p}),x;let S;try{S=U(x)}catch(Y){throw G(Y)}let C=performance.now()-p;throw l({type:"step_error",workflowId:i,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:C,error:S}),o&&l({type:"step_complete",workflowId:i,stepKey:o,name:n,ts:Date.now(),durationMs:C,result:O(S,{cause:x}),meta:{origin:"throw",thrown:x}}),s?.(S,n,E),I(S,{origin:"throw",thrown:x})}if(!w.ok){let x=performance.now()-p,S=q(w.error,{origin:"result",resultCause:w.cause});throw l({type:"step_error",workflowId:i,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:x,error:S}),o&&l({type:"step_complete",workflowId:i,stepKey:o,name:n,ts:Date.now(),durationMs:x,result:w,meta:{origin:"result",resultCause:w.cause}}),s?.(S,n,E),I(S,{origin:"result",resultCause:w.cause})}let f=w.value,k,R,A=!1;try{k=await m.use(f)}catch(x){if(J(x)){try{await m.release(f)}catch(S){console.warn(`[awaitly] step.withResource("${a}"): release threw after earlyExit:`,S)}throw x}R=x,A=!0}try{await m.release(f)}catch(x){console.warn(`[awaitly] step.withResource("${a}"): release threw:`,x)}if(A){let x;try{x=U(R)}catch(C){throw G(C)}let S=performance.now()-p;throw l({type:"step_error",workflowId:i,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:S,error:x}),o&&l({type:"step_complete",workflowId:i,stepKey:o,name:n,ts:Date.now(),durationMs:S,result:O(x,{cause:R}),meta:{origin:"throw",thrown:R}}),s?.(x,n,E),I(x,{origin:"throw",thrown:R})}let v=k;if(v.ok){let x=performance.now()-p;return l({type:"step_success",workflowId:i,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:x}),o&&l({type:"step_complete",workflowId:i,stepKey:o,name:n,ts:Date.now(),durationMs:x,result:v}),v.value}let h=performance.now()-p,M=q(v.error,{origin:"result",resultCause:v.cause});throw l({type:"step_error",workflowId:i,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:h,error:M}),o&&l({type:"step_complete",workflowId:i,stepKey:o,name:n,ts:Date.now(),durationMs:h,result:v,meta:{origin:"result",resultCause:v.cause}}),s?.(M,n,E),I(M,{origin:"result",resultCause:v.cause})})()};let j=await r({step:d});if(process.env.NODE_ENV!=="production"&&j!==null&&typeof j=="object"&&"ok"in j&&typeof j.ok=="boolean"){let a=j;(a.ok===!0&&"value"in a||a.ok===!1&&"error"in a)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
2
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 I(H)}catch(E){if(De(E))throw E.thrown;if(J(E)){let q=E.meta.origin==="throw"?E.meta.thrown:E.meta.origin==="result"?E.meta.resultCause:void 0;return _(E.error,{cause:q})}let K=U(E);return s?.(K,"unexpected",y),_(K,{cause:E})}}fe.strict=(o,t)=>fe(o,t);async function Te(o){return o.length===0?I([]):new Promise(t=>{let s=!1,l=o.length,b=new Array(o.length);for(let f=0;f<o.length;f++){let g=f;Promise.resolve(o[g]).catch(y=>_({type:"PROMISE_REJECTED",cause:y},{cause:{type:"PROMISE_REJECTION",reason:y}})).then(y=>{if(!s){if(!y.ok){s=!0,t(y);return}b[g]=y.value,l--,l===0&&t(I(b))}})}})}function Ne(o,t){let s=new AbortController,l,b=!1,f;return o!==void 0&&(l=setTimeout(()=>{b=!0,s.abort({_tag:"Timeout",ms:o})},o)),t&&(t.aborted?s.abort(t.reason):(f=()=>s.abort(t.reason),t.addEventListener("abort",f,{once:!0}))),{signal:s.signal,cleanup(){l!==void 0&&clearTimeout(l),f&&t&&t.removeEventListener("abort",f)},timedOut:()=>b}}async function Be(o,t){if(t)return t(o);let s=await o.text();try{return JSON.parse(s)}catch{return s||void 0}}function Ke(o){let t=o.headers.get("content-type");return t!==null&&/\bjson\b/i.test(t)}async function le(o,t,s){let l=o instanceof Request?o.signal:null,b="signal"in t&&t.signal===null?null:t.signal??l,{signal:f,cleanup:g,timedOut:y}=Ne(s,b);try{let O=await fetch(o,{...t,signal:f});return I(O)}catch(O){return y()?_({_tag:"FetchTimeoutError",ms:s}):f.aborted?_({_tag:"FetchAbortError",reason:f.reason??b?.reason??O}):_({_tag:"FetchNetworkError",cause:O})}finally{g()}}async function ge(o,t){let s;try{s=await Be(o,t)}catch{s=void 0}return{_tag:"FetchHttpError",status:o.status,statusText:o.statusText,...s!==void 0?{body:s}:{}}}function Ee(o){return typeof o=="number"?{attempts:o}:o}async function me(o,t,s,l,b,f){let g=async()=>{let y=await le(o,t,s);if(!y.ok)return y;let O=y.value;if(!O.ok)return _(await ge(O,l));try{return I(await f(O))}catch(u){return _({_tag:"FetchNetworkError",cause:u})}};return b!==void 0?se(g,Ee(b)):g()}async function ye(o,t){let s=await o;return s.ok?s:s.error._tag==="FetchHttpError"?_(t(s.error)):_(s.error)}function He(o,t){let s=async()=>{let l=await le(o,t??{},t?.timeoutMs);if(!l.ok)return l;let b=l.value;if(!b.ok){let f=await ge(b,t?.errorBody);return _(f)}if(b.status===204)return I(null);try{if(t?.strictContentType&&!Ke(b)){let y=await b.text();return _({_tag:"FetchParseError",cause:new Error("Expected JSON Content-Type"),text:y})}let f=await b.text();if(f==="")return I(null);let g;try{g=JSON.parse(f)}catch(y){return _({_tag:"FetchParseError",cause:y,text:f})}if(t?.decode){let y=t.decode(g);return y.ok?I(y.value):_({_tag:"FetchDecodeError",issues:y.error.issues})}return I(g)}catch(f){return _({_tag:"FetchParseError",cause:f,text:""})}};return(async()=>{let l=t?.retry!==void 0?await se(s,Ee(t.retry)):await s();return l.ok?l:l.error._tag==="FetchHttpError"&&t?.mapError?_(t.mapError(l.error)):l})()}function je(o,t){let s=me(o,t??{},t?.timeoutMs,t?.errorBody,t?.retry,l=>l.text());return t?.mapError?ye(s,t.mapError):s}function Le(o,t){let s=me(o,t??{},t?.timeoutMs,t?.errorBody,t?.retry,l=>l.blob());return t?.mapError?ye(s,t.mapError):s}function qe(o,t){let s=me(o,t??{},t?.timeoutMs,t?.errorBody,t?.retry,l=>l.arrayBuffer());return t?.mapError?ye(s,t.mapError):s}function Ve(o,t){let s=()=>le(o,t??{},t?.timeoutMs);return t?.retry!==void 0?se(s,Ee(t.retry)):s()}export{qe as fetchArrayBuffer,Le as fetchBlob,He as fetchJson,Ve as fetchResponse,je as fetchText};
6
+ See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return D(j)}catch(d){if(Ve(d))throw d.thrown;if(J(d)){let $=d.meta.origin==="throw"?d.meta.thrown:d.meta.origin==="result"?d.meta.resultCause:void 0;return O(d.error,{cause:$})}let K=U(d);return s?.(K,"unexpected",E),O(K,{cause:d})}}_e.strict=(r,e)=>_e(r,e);async function Oe(r){return r.length===0?D([]):new Promise(e=>{let s=!1,c=r.length,b=new Array(r.length);for(let y=0;y<r.length;y++){let T=y;Promise.resolve(r[T]).catch(E=>O({type:"PROMISE_REJECTED",cause:E},{cause:{type:"PROMISE_REJECTION",reason:E}})).then(E=>{if(!s){if(!E.ok){s=!0,e(E);return}b[T]=E.value,c--,c===0&&e(D(b))}})}})}function Ye(r,e){let s=new AbortController,c,b=!1,y;return r!==void 0&&(c=setTimeout(()=>{b=!0,s.abort({_tag:"Timeout",ms:r})},r)),e&&(e.aborted?s.abort(e.reason):(y=()=>s.abort(e.reason),e.addEventListener("abort",y,{once:!0}))),{signal:s.signal,cleanup(){c!==void 0&&clearTimeout(c),y&&e&&e.removeEventListener("abort",y)},timedOut:()=>b}}async function ze(r,e){if(e)return e(r);let s=await r.text();try{return JSON.parse(s)}catch{return s||void 0}}function Ge(r){let e=r.headers.get("content-type");return e!==null&&/\bjson\b/i.test(e)}async function me(r,e,s){let c=r instanceof Request?r.signal:null,b="signal"in e&&e.signal===null?null:e.signal??c,{signal:y,cleanup:T,timedOut:E}=Ye(s,b);try{let _=await fetch(r,{...e,signal:y});return D(_)}catch(_){return E()?O({_tag:"FetchTimeoutError",ms:s}):y.aborted?O({_tag:"FetchAbortError",reason:y.reason??b?.reason??_}):O({_tag:"FetchNetworkError",cause:_})}finally{T()}}async function ve(r,e){let s;try{s=await ze(r,e)}catch{s=void 0}return{_tag:"FetchHttpError",status:r.status,statusText:r.statusText,...s!==void 0?{body:s}:{}}}function ye(r){return typeof r=="number"?{attempts:r}:r}async function we(r,e,s,c,b,y){let T=async()=>{let E=await me(r,e,s);if(!E.ok)return E;let _=E.value;if(!_.ok)return O(await ve(_,c));try{return D(await y(_))}catch(i){return O({_tag:"FetchNetworkError",cause:i})}};return b!==void 0?ue(T,ye(b)):T()}async function fe(r,e){let s=await r;return s.ok?s:s.error._tag==="FetchHttpError"?O(e(s.error)):O(s.error)}function Xe(r,e){let s=async()=>{let c=await me(r,e??{},e?.timeoutMs);if(!c.ok)return c;let b=c.value;if(!b.ok){let y=await ve(b,e?.errorBody);return O(y)}if(b.status===204)return D(null);try{if(e?.strictContentType&&!Ge(b)){let E=await b.text();return O({_tag:"FetchParseError",cause:new Error("Expected JSON Content-Type"),text:E})}let y=await b.text();if(y==="")return D(null);let T;try{T=JSON.parse(y)}catch(E){return O({_tag:"FetchParseError",cause:E,text:y})}if(e?.decode){let E=e.decode(T);return E.ok?D(E.value):O({_tag:"FetchDecodeError",issues:E.error.issues})}return D(T)}catch(y){return O({_tag:"FetchParseError",cause:y,text:""})}};return(async()=>{let c=e?.retry!==void 0?await ue(s,ye(e.retry)):await s();return c.ok?c:c.error._tag==="FetchHttpError"&&e?.mapError?O(e.mapError(c.error)):c})()}function Qe(r,e){let s=we(r,e??{},e?.timeoutMs,e?.errorBody,e?.retry,c=>c.text());return e?.mapError?fe(s,e.mapError):s}function Ze(r,e){let s=we(r,e??{},e?.timeoutMs,e?.errorBody,e?.retry,c=>c.blob());return e?.mapError?fe(s,e.mapError):s}function et(r,e){let s=we(r,e??{},e?.timeoutMs,e?.errorBody,e?.retry,c=>c.arrayBuffer());return e?.mapError?fe(s,e.mapError):s}function tt(r,e){let s=()=>me(r,e??{},e?.timeoutMs);return e?.retry!==void 0?ue(s,ye(e.retry)):s()}export{et as fetchArrayBuffer,Ze as fetchBlob,Xe as fetchJson,tt as fetchResponse,Qe as fetchText};
7
7
  //# sourceMappingURL=fetch.js.map