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.
- package/dist/adapters.cjs +2 -2
- package/dist/adapters.cjs.map +1 -1
- package/dist/adapters.d.cts +3 -1
- package/dist/adapters.d.ts +3 -1
- package/dist/adapters.js +2 -2
- package/dist/adapters.js.map +1 -1
- package/dist/batch.cjs +2 -2
- package/dist/batch.cjs.map +1 -1
- package/dist/batch.d.cts +3 -1
- package/dist/batch.d.ts +3 -1
- package/dist/batch.js +2 -2
- package/dist/batch.js.map +1 -1
- package/dist/circuit-breaker.cjs +2 -2
- package/dist/circuit-breaker.cjs.map +1 -1
- package/dist/circuit-breaker.d.cts +3 -1
- package/dist/circuit-breaker.d.ts +3 -1
- package/dist/circuit-breaker.js +2 -2
- package/dist/circuit-breaker.js.map +1 -1
- package/dist/conditional.d.cts +3 -1
- package/dist/conditional.d.ts +3 -1
- package/dist/core.cjs +2 -2
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +2 -1
- package/dist/core.d.ts +2 -1
- package/dist/core.js +2 -2
- package/dist/core.js.map +1 -1
- package/dist/diagnostics.cjs +3 -3
- package/dist/diagnostics.cjs.map +1 -1
- package/dist/diagnostics.d.cts +3 -1
- package/dist/diagnostics.d.ts +3 -1
- package/dist/diagnostics.js +3 -3
- package/dist/diagnostics.js.map +1 -1
- package/dist/durable.cjs +3 -3
- package/dist/durable.cjs.map +1 -1
- package/dist/durable.d.cts +8 -361
- package/dist/durable.d.ts +8 -361
- package/dist/durable.js +3 -3
- package/dist/durable.js.map +1 -1
- package/dist/engine.cjs +11 -0
- package/dist/engine.cjs.map +1 -0
- package/dist/engine.d.cts +114 -0
- package/dist/engine.d.ts +114 -0
- package/dist/engine.js +11 -0
- package/dist/engine.js.map +1 -0
- package/dist/errors-entry-CMH73Eym.d.cts +339 -0
- package/dist/errors-entry-DOt5UUl4.d.ts +339 -0
- package/dist/errors.cjs +1 -1
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.cts +2 -318
- package/dist/errors.d.ts +2 -318
- package/dist/errors.js +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/fetch.cjs +2 -2
- package/dist/fetch.cjs.map +1 -1
- package/dist/fetch.d.cts +3 -1
- package/dist/fetch.d.ts +3 -1
- package/dist/fetch.js +2 -2
- package/dist/fetch.js.map +1 -1
- package/dist/functional.cjs +1 -1
- package/dist/functional.cjs.map +1 -1
- package/dist/functional.d.cts +2 -0
- package/dist/functional.d.ts +2 -0
- package/dist/functional.js +1 -1
- package/dist/functional.js.map +1 -1
- package/dist/{guards-PU64_GKv.d.cts → guards-B79mP5Q8.d.cts} +3 -3
- package/dist/{guards-B5lgMJq0.d.ts → guards-BUq6NJCM.d.ts} +3 -3
- package/dist/{hitl-Dyiy0R1v.d.cts → hitl-BCqkMAHw.d.cts} +2 -2
- package/dist/{hitl-BjeSm1sJ.d.ts → hitl-BZtPx0aU.d.ts} +2 -2
- package/dist/hitl.cjs +2 -2
- package/dist/hitl.cjs.map +1 -1
- package/dist/hitl.d.cts +9 -6
- package/dist/hitl.d.ts +9 -6
- package/dist/hitl.js +2 -2
- package/dist/hitl.js.map +1 -1
- package/dist/index-BVUAOWGG.d.ts +417 -0
- package/dist/index-CQnpmUcC.d.cts +417 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -3
- package/dist/index.d.ts +4 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/otel.d.cts +3 -1
- package/dist/otel.d.ts +3 -1
- package/dist/{persistence-entry-B3ukwbb5.d.ts → persistence-entry-ClFhxd2Q.d.ts} +11 -5
- package/dist/{persistence-entry-CgVzswbg.d.cts → persistence-entry-jflY61az.d.cts} +11 -5
- package/dist/persistence.d.cts +6 -3
- package/dist/persistence.d.ts +6 -3
- package/dist/policies.d.cts +3 -1
- package/dist/policies.d.ts +3 -1
- package/dist/ratelimit.cjs +2 -2
- package/dist/ratelimit.cjs.map +1 -1
- package/dist/ratelimit.d.cts +3 -1
- package/dist/ratelimit.d.ts +3 -1
- package/dist/ratelimit.js +2 -2
- package/dist/ratelimit.js.map +1 -1
- package/dist/reliability.cjs +2 -2
- package/dist/reliability.cjs.map +1 -1
- package/dist/reliability.d.cts +3 -1
- package/dist/reliability.d.ts +3 -1
- package/dist/reliability.js +2 -2
- package/dist/reliability.js.map +1 -1
- package/dist/resolver.cjs +2 -2
- package/dist/resolver.cjs.map +1 -1
- package/dist/resolver.d.cts +5 -3
- package/dist/resolver.d.ts +5 -3
- package/dist/resolver.js +2 -2
- package/dist/resolver.js.map +1 -1
- package/dist/resource.cjs +2 -2
- package/dist/resource.cjs.map +1 -1
- package/dist/resource.d.cts +3 -1
- package/dist/resource.d.ts +3 -1
- package/dist/resource.js +2 -2
- package/dist/resource.js.map +1 -1
- package/dist/result/retry.cjs +1 -1
- package/dist/result/retry.cjs.map +1 -1
- package/dist/result/retry.d.cts +2 -0
- package/dist/result/retry.d.ts +2 -0
- package/dist/result/retry.js +1 -1
- package/dist/result/retry.js.map +1 -1
- package/dist/result.cjs +1 -1
- package/dist/result.cjs.map +1 -1
- package/dist/result.d.cts +8 -23
- package/dist/result.d.ts +8 -23
- package/dist/result.js +1 -1
- package/dist/result.js.map +1 -1
- package/dist/{run-entry-C1uFytM6.d.cts → run-entry-rw7zll_G.d.ts} +16 -45
- package/dist/{run-entry-C1uFytM6.d.ts → run-entry-yQu63Yj9.d.cts} +16 -45
- package/dist/run.cjs +2 -2
- package/dist/run.cjs.map +1 -1
- package/dist/run.d.cts +3 -1
- package/dist/run.d.ts +3 -1
- package/dist/run.js +2 -2
- package/dist/run.js.map +1 -1
- package/dist/saga.cjs +2 -2
- package/dist/saga.cjs.map +1 -1
- package/dist/saga.d.cts +3 -1
- package/dist/saga.d.ts +3 -1
- package/dist/saga.js +2 -2
- package/dist/saga.js.map +1 -1
- package/dist/singleflight.d.cts +3 -1
- package/dist/singleflight.d.ts +3 -1
- package/dist/streaming.cjs +4 -4
- package/dist/streaming.cjs.map +1 -1
- package/dist/streaming.d.cts +5 -3
- package/dist/streaming.d.ts +5 -3
- package/dist/streaming.js +4 -4
- package/dist/streaming.js.map +1 -1
- package/dist/testing.cjs +8 -4
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +87 -4
- package/dist/testing.d.ts +87 -4
- package/dist/testing.js +8 -4
- package/dist/testing.js.map +1 -1
- package/dist/{types-wa_wTOn3.d.ts → types-CuWK5AlK.d.ts} +1 -1
- package/dist/{types-DUWrNIJu.d.cts → types-uR3JpwvF.d.cts} +1 -1
- package/dist/webhook.cjs +2 -2
- package/dist/webhook.cjs.map +1 -1
- package/dist/webhook.d.cts +7 -4
- package/dist/webhook.d.ts +7 -4
- package/dist/webhook.js +2 -2
- package/dist/webhook.js.map +1 -1
- package/dist/workflow.cjs +3 -3
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.d.cts +47 -11
- package/dist/workflow.d.ts +47 -11
- package/dist/workflow.js +3 -3
- package/dist/workflow.js.map +1 -1
- package/package.json +15 -1
package/dist/circuit-breaker.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var ce=Object.defineProperty;var xe=Object.getOwnPropertyDescriptor;var he=Object.getOwnPropertyNames;var Se=Object.prototype.hasOwnProperty;var be=(o,u)=>{for(var l in u)ce(o,l,{get:u[l],enumerable:!0})},Ae=(o,u,l,w)=>{if(u&&typeof u=="object"||typeof u=="function")for(let b of he(u))!Se.call(o,b)&&b!==l&&ce(o,b,{get:()=>u[b],enumerable:!(w=xe(u,b))||w.enumerable});return o};var Pe=o=>Ae(ce({},"__esModule",{value:!0}),o);var Ve={};be(Ve,{CircuitOpenError:()=>Z,circuitBreakerPresets:()=>Re,createCircuitBreaker:()=>ke,isCircuitOpenError:()=>Te});module.exports=Pe(Ve);function Oe(o){let u=o.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!u)return;let l=parseFloat(u[1]),w=u[2].toLowerCase();return{_tag:"Duration",millis:l*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[w]??1)}}var _e="UNEXPECTED_ERROR";function Me(o){return _e}function V(o){return{ok:!0,value:o}}function F(o,u){let l=u?.cause;return{ok:!1,error:o,...l!==void 0?{cause:l}:{}}}function ve(o){if(o==null)return"unknown";if(typeof o=="string")return o.trim()||"unknown";if(typeof o=="object"){let u=o;if(typeof u._tag=="string"){let l=u._tag.trim();if(l)return l}if(typeof u.tag=="string"){let l=u.tag.trim();if(l)return l}if(typeof u.code=="string"){let l=u.code.trim();if(l)return l}else if(typeof u.code=="number")return String(u.code);if(o instanceof Error&&o.name){let l=o.name.trim();if(l)return l}}return"unknown"}function De(o,u){if(!(!u||!o))return u[o]}function Ie(o){let{intent:u,domain:l,owner:w,tags:b,stateChanges:P,emits:_,calls:f}=o;if(!u&&!l&&!w&&!b?.length&&!P?.length&&!_?.length&&!f?.length)return;let D={};return u&&(D.intent=u),l&&(D.domain=l),w&&(D.owner=w),b?.length&&(D.tags=b),P?.length&&(D.stateChanges=P),_?.length&&(D.emits=_),f?.length&&(D.calls=f),D}function L(o,u,l,w,b){let P=ve(o),_=De(P,u),f={tag:P,origin:l};return _!==void 0&&(f.classification=_),w!==void 0&&(f.attempt=w),b!==void 0&&(f.cumulativeDurationMs=b),f}var Q=Symbol.for("step_timeout_marker");function me(o){return typeof o!="object"||o===null?!1:o.type==="STEP_TIMEOUT"?!0:Q in o}function Ue(o){if(!(typeof o!="object"||o===null)){if(o.type==="STEP_TIMEOUT"){let u=o;return{timeoutMs:u.timeoutMs,stepName:u.stepName,stepKey:u.stepKey,attempt:u.attempt}}if(Q in o)return o[Q]}}var ye=Symbol("early-exit");function Ne(o,u){return{[ye]:!0,error:o,meta:u}}function Fe(o){return typeof o=="object"&&o!==null&&o[ye]===!0}var fe=Symbol("mapper-exception");function z(o){return{[fe]:!0,thrown:o}}function Ke(o){return typeof o=="object"&&o!==null&&o[fe]===!0}function le(o,u){let{backoff:l,initialDelay:w,maxDelay:b,jitter:P}=u,_;switch(l){case"fixed":_=w;break;case"linear":_=w*o;break;case"exponential":_=w*Math.pow(2,o-1);break}if(_=Math.min(_,b),P){let f=_*.25*Math.random();_=_+f}return Math.floor(_)}function pe(o){return new Promise(u=>setTimeout(u,o))}var Ee=Symbol("timeout"),ne=Symbol("timeout-option");function je(o){return typeof o=="object"&&o!==null&&o[ne]===!0}async function Be(o,u,l,w){let b=new AbortController,P=u.onTimeout??"error",_=()=>typeof P=="function"?P({name:l.name,key:l.key,ms:u.ms}):u.error??{type:"STEP_TIMEOUT",stepName:l.name,stepKey:l.key,timeoutMs:u.ms,attempt:l.attempt},f;w?.aborted&&b.abort(w.reason);let D;w&&!w.aborted&&(D=()=>b.abort(w.reason),w.addEventListener("abort",D,{once:!0}));let s=new Promise((O,N)=>{f=setTimeout(()=>{if(P!=="disconnect"&&b.abort(),P==="option"){N({[ne]:!0,ms:u.ms});return}N({[Ee]:!0,error:_()})},u.ms)}),I;u.signal?I=Promise.resolve(o(b.signal)):I=Promise.resolve(o());try{return await Promise.race([I,s])}catch(O){if(typeof O=="object"&&O!==null&&O[ne]===!0)throw{[ne]:!0,ms:u.ms};if(typeof O=="object"&&O!==null&&O[Ee]===!0){P==="disconnect"&&I.catch(()=>{});let N=O.error;if(typeof N=="object"&&N!==null&&N.type!=="STEP_TIMEOUT"){let B={timeoutMs:u.ms,stepName:l.name,stepKey:l.key,attempt:l.attempt};Q in N?N[Q]=B:Object.defineProperty(N,Q,{value:B,enumerable:!1,writable:!0,configurable:!1})}throw N}throw O}finally{clearTimeout(f),D&&w&&w.removeEventListener("abort",D)}}var G={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function we(o,u){let{onError:l,onEvent:w,catchUnexpected:b,workflowId:P,workflowName:_,context:f,_workflowSignal:D}=u&&typeof u=="object"?u:{},s=P??crypto.randomUUID(),I=b??Me,O=[],N=0,B=p=>p??`step_${++N}`,a=p=>{let W=p.context!==void 0||f===void 0?p:{...p,context:f},Y=_!==void 0&&W.workflowName===void 0?{...W,workflowName:_}:W;if(Y.type==="step_success"){let te=Y.stepId;for(let re=O.length-1;re>=0;re--){let q=O[re];if(q.type==="race"&&!q.winnerId){q.winnerId=te;break}}}w?.(Y,f)},x=Ne,U=p=>Fe(p),K=(p,W)=>p,j=p=>typeof p=="function"?!1:!!(p&&typeof p=="object"&&"ok"in p||p&&typeof p=="object"&&"then"in p&&typeof p.then=="function");try{let W=function(n){let m={};for(let[r,t]of Object.entries(n))if(typeof t=="function")m[r]=t;else if(t&&typeof t=="object"&&"fn"in t)m[r]=t.fn;else throw new TypeError(`step.parallel: operation "${r}" must be a function or { fn, errors? } object`);return m},Y=function(n,m){let r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1;O.push({scopeId:r,type:"parallel"});let i=()=>{if(e)return;e=!0;let c=O.findIndex(E=>E.scopeId===r);c!==-1&&O.splice(c,1),a({type:"scope_end",workflowId:s,scopeId:r,ts:Date.now(),durationMs:performance.now()-t})};a({type:"scope_start",workflowId:s,scopeId:r,scopeType:"parallel",name:n,ts:Date.now()});try{let c=await m();if(i(),!c.ok)throw l?.(c.error,n,f),x(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw i(),c}})()},te=function(n,m){let r=Object.keys(n),t=m.name??`Parallel(${r.join(", ")})`,e=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let i=performance.now(),c=!1;O.push({scopeId:e,type:"parallel"});let E=()=>{if(c)return;c=!0;let d=O.findIndex(y=>y.scopeId===e);d!==-1&&O.splice(d,1),a({type:"scope_end",workflowId:s,scopeId:e,ts:Date.now(),durationMs:performance.now()-i})};a({type:"scope_start",workflowId:s,scopeId:e,scopeType:"parallel",name:t,ts:Date.now()});try{let d=await new Promise(k=>{if(r.length===0){k([]);return}let S=!1,v=r.length,R=new Array(r.length);for(let M=0;M<r.length;M++){let g=r[M],h=M;Promise.resolve(n[g]()).catch(C=>F({type:"PROMISE_REJECTED",cause:C},{cause:{type:"PROMISE_REJECTION",reason:C}})).then(C=>{if(!S){if(!C.ok){S=!0,k([{key:g,result:C}]);return}R[h]={key:g,result:C},v--,v===0&&k(R)}})}});E();let y={};for(let{key:k,result:S}of d){if(!S.ok)throw l?.(S.error,k,f),x(S.error,{origin:"result",resultCause:S.cause});y[k]=S.value}return y}catch(d){throw E(),d}})()};var We=W,qe=Y,Xe=te;let p=(n,m,r)=>(async()=>{if(typeof n!="string"||n.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let t=r??{},e=Ie(t),i=n,c=t.key??n,E=t.key??n,{description:d,retry:y,timeout:k}=t,S=B(c),v=w,R=v?performance.now():0,g=j(m)?()=>m:m,C={attempts:Math.max(1,y?.attempts??1),backoff:y?.backoff??G.backoff,initialDelay:y?.initialDelay??G.initialDelay,maxDelay:y?.maxDelay??G.maxDelay,jitter:y?.jitter??G.jitter,retryOn:y?.retryOn??G.retryOn,onRetry:y?.onRetry??G.onRetry};w&&a({type:"step_start",workflowId:s,stepId:S,stepKey:c,name:i,description:d,ts:Date.now(),...e&&{metadata:e}});let J;for(let A=1;A<=C.attempts;A++){let ge=v?performance.now():0;try{let T;if(k?T=await Be(g,k,{name:i,key:c,attempt:A},D):T=await g(),T.ok){let H=performance.now()-R;return a({type:"step_success",workflowId:s,stepId:S,stepKey:c,name:i,description:d,ts:Date.now(),durationMs:H,...e&&{metadata:e}}),E&&a({type:"step_complete",workflowId:s,stepKey:E,name:i,description:d,ts:Date.now(),durationMs:H,result:T,...e&&{metadata:e}}),T.value}if(J=T,A<C.attempts&&C.retryOn(T.error,A)){let H=le(A,C);a({type:"step_retry",workflowId:s,stepId:S,stepKey:c,name:i,ts:Date.now(),attempt:A+1,maxAttempts:C.attempts,delayMs:H,error:T.error,...e&&{metadata:e},diagnostics:L(T.error,t.errorMeta,"result",A,performance.now()-R)}),C.onRetry(T.error,A,H),await pe(H);continue}C.attempts>1&&a({type:"step_retries_exhausted",workflowId:s,stepId:S,stepKey:c,name:i,ts:Date.now(),durationMs:performance.now()-R,attempts:A,lastError:T.error,...e&&{metadata:e},diagnostics:L(T.error,t.errorMeta,"result",A,performance.now()-R)});break}catch(T){let H=performance.now()-ge;if(je(T)){let X=T.ms;a({type:"step_timeout",workflowId:s,stepId:S,stepKey:c,name:i,ts:Date.now(),timeoutMs:X,attempt:A,...e&&{metadata:e},diagnostics:L(T,t.errorMeta,"timeout",A)}),a({type:"step_success",workflowId:s,stepId:S,stepKey:c,name:i,description:d,ts:Date.now(),durationMs:performance.now()-R,...e&&{metadata:e}}),E&&a({type:"step_complete",workflowId:s,stepKey:E,name:i,description:d,ts:Date.now(),durationMs:performance.now()-R,result:V(void 0),...e&&{metadata:e}});return}if(U(T))throw a({type:"step_aborted",workflowId:s,stepId:S,stepKey:c,name:i,description:d,ts:Date.now(),durationMs:H,...e&&{metadata:e}}),T;if(me(T)){let X=Ue(T),Ce=k?.ms??X?.timeoutMs??0;if(a({type:"step_timeout",workflowId:s,stepId:S,stepKey:c,name:i,ts:Date.now(),timeoutMs:Ce,attempt:A,...e&&{metadata:e},diagnostics:L(T,t.errorMeta,"timeout",A)}),A<C.attempts&&C.retryOn(T,A)){let ue=le(A,C);a({type:"step_retry",workflowId:s,stepId:S,stepKey:c,name:i,ts:Date.now(),attempt:A+1,maxAttempts:C.attempts,delayMs:ue,error:T,...e&&{metadata:e},diagnostics:L(T,t.errorMeta,"timeout",A,performance.now()-R)}),C.onRetry(T,A,ue),await pe(ue);continue}C.attempts>1&&a({type:"step_retries_exhausted",workflowId:s,stepId:S,stepKey:c,name:i,ts:Date.now(),durationMs:performance.now()-R,attempts:A,lastError:T,...e&&{metadata:e},diagnostics:L(T,t.errorMeta,"timeout",A,performance.now()-R)});let ie=performance.now()-R;throw a({type:"step_error",workflowId:s,stepId:S,stepKey:c,name:i,description:d,ts:Date.now(),durationMs:ie,error:T,...e&&{metadata:e},diagnostics:L(T,t.errorMeta,"timeout",A,ie)}),E&&a({type:"step_complete",workflowId:s,stepKey:E,name:i,description:d,ts:Date.now(),durationMs:ie,result:F(T,{cause:T}),meta:{origin:"throw",thrown:T},...e&&{metadata:e}}),l?.(T,i,f),x(T,{origin:"throw",thrown:T})}if(A<C.attempts&&C.retryOn(T,A)){let X=le(A,C);a({type:"step_retry",workflowId:s,stepId:S,stepKey:c,name:i,ts:Date.now(),attempt:A+1,maxAttempts:C.attempts,delayMs:X,error:T,...e&&{metadata:e},diagnostics:L(T,t.errorMeta,"throw",A,performance.now()-R)}),C.onRetry(T,A,X),await pe(X);continue}C.attempts>1&&!me(T)&&a({type:"step_retries_exhausted",workflowId:s,stepId:S,stepKey:c,name:i,ts:Date.now(),durationMs:performance.now()-R,attempts:A,lastError:T,...e&&{metadata:e},diagnostics:L(T,t.errorMeta,"throw",A,performance.now()-R)});let ae=performance.now()-R,ee;try{ee=I(T)}catch(X){throw z(X)}throw a({type:"step_error",workflowId:s,stepId:S,stepKey:c,name:i,description:d,ts:Date.now(),durationMs:ae,error:ee,...e&&{metadata:e},diagnostics:L(T,t.errorMeta,"throw",A,ae)}),E&&a({type:"step_complete",workflowId:s,stepKey:E,name:i,description:d,ts:Date.now(),durationMs:ae,result:F(ee,{cause:T}),meta:{origin:"throw",thrown:T},...e&&{metadata:e}}),l?.(ee,i,f),x(ee,{origin:"throw",thrown:T})}}let $=J,oe=performance.now()-R,se=K($.error,{origin:"result",resultCause:$.cause});throw a({type:"step_error",workflowId:s,stepId:S,stepKey:c,name:i,description:d,ts:Date.now(),durationMs:oe,error:se,...e&&{metadata:e},diagnostics:L($.error,t.errorMeta,"result",C.attempts,oe)}),E&&a({type:"step_complete",workflowId:s,stepKey:E,name:i,description:d,ts:Date.now(),durationMs:oe,result:$,meta:{origin:"result",resultCause:$.cause},...e&&{metadata:e}}),l?.(se,i,f),x(se,{origin:"result",resultCause:$.cause})})();p.try=(n,m,r)=>{if(typeof n!="string"||n.length===0)throw new Error('[awaitly] step.try() requires an explicit string ID as the first argument. Example: step.try("parse", () => JSON.parse(str), { error: "PARSE_ERROR" })');let t=r.key??n,e=n,i=n,c="error"in r?()=>r.error:r.onError,E=w;return(async()=>{let d=E?performance.now():0;w&&a({type:"step_start",workflowId:s,stepId:i,stepKey:t,name:e,ts:Date.now()});try{let y=await m(),k=performance.now()-d;return a({type:"step_success",workflowId:s,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:k}),t&&a({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:k,result:V(y)}),y}catch(y){let k=c(y),S=performance.now()-d,v=K(k,{origin:"throw",thrown:y});throw a({type:"step_error",workflowId:s,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:S,error:v}),t&&a({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:S,result:F(k,{cause:y}),meta:{origin:"throw",thrown:y}}),l?.(v,e,f),x(v,{origin:"throw",thrown:y})}})()},p.fromResult=(n,m,r)=>{if(typeof n!="string"||n.length===0)throw new Error('[awaitly] step.fromResult() requires an explicit string ID as the first argument. Example: step.fromResult("callProvider", () => callProvider(input), { onError: (e) => ({ type: "FAILED" }) })');let t=r.key??n,e=n,i=n,c="error"in r?()=>r.error:r.onError,E=w;return(async()=>{let d=E?performance.now():0;w&&a({type:"step_start",workflowId:s,stepId:i,stepKey:t,name:e,ts:Date.now()});let y=await m();if(y.ok){let k=performance.now()-d;return a({type:"step_success",workflowId:s,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:k}),t&&a({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:k,result:V(y.value)}),y.value}else{let k=c(y.error),S=performance.now()-d,v=K(k,{origin:"result",resultCause:y.error});throw a({type:"step_error",workflowId:s,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:S,error:v}),t&&a({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:S,result:F(k,{cause:y.error}),meta:{origin:"result",resultCause:y.error}}),l?.(v,e,f),x(v,{origin:"result",resultCause:y.error})}})()},p.fromNullable=(n,m,r,t)=>{if(typeof n!="string"||n.length===0)throw new Error('[awaitly] step.fromNullable() requires an explicit string ID as the first argument. Example: step.fromNullable("getUser", () => db.find(id), () => ({ type: "NOT_FOUND" }))');return p(n,async()=>{let e=await m();return e!=null?V(e):F(r())},t)},p.retry=(n,m,r)=>{if(typeof n!="string"||n.length===0)throw new Error('[awaitly] step.retry() requires an explicit string ID as the first argument. Example: step.retry("fetchData", () => fetchData(), { attempts: 3 })');return p(n,m,{key:r.key??n,retry:{attempts:r.attempts,backoff:r.backoff,initialDelay:r.initialDelay,maxDelay:r.maxDelay,jitter:r.jitter,retryOn:r.retryOn,onRetry:r.onRetry},timeout:r.timeout})},p.withTimeout=(n,m,r)=>{if(typeof n!="string"||n.length===0)throw new Error('[awaitly] step.withTimeout() requires an explicit string ID as the first argument. Example: step.withTimeout("slowOp", () => slowOp(), { ms: 5000 })');return p(n,m,{key:r.key??n,timeout:r})},p.sleep=(n,m,r)=>{if(typeof n!="string"||n.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let t=typeof m=="string"?Oe(m):m;if(!t)throw new Error(`step.sleep: invalid duration '${m}'`);let e=t.millis,i=r?.signal;return p(n,async()=>{if(D?.aborted||i?.aborted){let c=new Error("Sleep aborted");throw c.name="AbortError",c}return new Promise((c,E)=>{let d={timeoutId:void 0},y=()=>{d.timeoutId&&clearTimeout(d.timeoutId);let k=new Error("Sleep aborted");k.name="AbortError",E(k)};D?.addEventListener("abort",y,{once:!0}),i?.addEventListener("abort",y,{once:!0}),d.timeoutId=setTimeout(()=>{D?.removeEventListener("abort",y),i?.removeEventListener("abort",y),c(V(void 0))},e)})},{key:r?.key??n,description:r?.description})},p.parallel=((...n)=>{if(typeof n[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=n[0],r=n[1];if(typeof r=="function")return Y(m,r);if(r&&typeof r=="object"&&!Array.isArray(r)){let e=W(r);return te(e,{name:m})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),p.race=(n,m)=>{let r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1,i={scopeId:r,type:"race",winnerId:void 0};O.push(i);let c=()=>{if(e)return;e=!0;let E=O.findIndex(d=>d.scopeId===r);E!==-1&&O.splice(E,1),a({type:"scope_end",workflowId:s,scopeId:r,ts:Date.now(),durationMs:performance.now()-t,winnerId:i.winnerId})};a({type:"scope_start",workflowId:s,scopeId:r,scopeType:"race",name:n,ts:Date.now()});try{let E=await m();if(c(),!E.ok)throw l?.(E.error,n,f),x(E.error,{origin:"result",resultCause:E.cause});return E.value}catch(E){throw c(),E}})()},p.allSettled=(n,m)=>{let r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1;O.push({scopeId:r,type:"allSettled"});let i=()=>{if(e)return;e=!0;let c=O.findIndex(E=>E.scopeId===r);c!==-1&&O.splice(c,1),a({type:"scope_end",workflowId:s,scopeId:r,ts:Date.now(),durationMs:performance.now()-t})};a({type:"scope_start",workflowId:s,scopeId:r,scopeType:"allSettled",name:n,ts:Date.now()});try{let c=await m();if(i(),!c.ok)throw l?.(c.error,n,f),x(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw i(),c}})()},p.if=(n,m,r)=>r(),p.label=p.if,p.branch=async(n,m)=>{let{condition:r,then:t,else:e}=m;if(r())return await t();if(e)return await e()},p.arm=(n,m)=>({fn:n,errors:m}),p.forEach=async(n,m,r)=>{let t=[],e=r.maxIterations,i=0,c="run"in r,E=Symbol.asyncIterator in m?m:(async function*(){yield*m})();for await(let d of E){if(e!==void 0&&i>=e)break;let y;c?y=await r.run(d,i):y=await r.item.handler(d,i,p),t.push(y),i++}return t},p.item=n=>({__forEachItemHandler:!0,handler:n}),p.dep=(n,m)=>m,p.run=(n,m,r)=>p(n,()=>m,r),p.workflow=(n,m,r)=>p(n,m,r),p.andThen=(n,m,r,t)=>p(n,()=>r(m),t),p.match=async(n,m,r,t)=>p(n,async()=>{let e=await m;return e.ok?V(await r.ok(e.value)):V(await r.err(e.error,e.cause))},t),p.all=p.parallel,p.map=async(n,m,r,t)=>{let e=t?.concurrency??m.length;return p(n,()=>e>=m.length?de(m.map((i,c)=>r(i,c))):(async()=>{let i=[];for(let c=0;c<m.length;c+=e){let E=m.slice(c,c+e),d=await de(E.map((y,k)=>r(y,c+k)));if(!d.ok)return d;i.push(...d.value)}return V(i)})(),{key:t?.key})},p.withFallback=(n,m,r)=>{if(typeof n!="string"||n.length===0)throw new Error('[awaitly] step.withFallback() requires an explicit string ID as the first argument. Example: step.withFallback("getUser", () => fetchUser(id), { fallback: () => fetchFromCache(id) })');let t=r.key??n,e=n,i=B(t),c=w;return(async()=>{let E=c?performance.now():0;w&&a({type:"step_start",workflowId:s,stepId:i,stepKey:t,name:e,ts:Date.now()});let d;try{d=await m()}catch(R){if(U(R))throw a({type:"step_aborted",workflowId:s,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-E}),R;let M;try{M=I(R)}catch(h){throw z(h)}if(r.on!==void 0&&r.on!==M){let h=performance.now()-E;throw a({type:"step_error",workflowId:s,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:h,error:M}),t&&a({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:h,result:F(M,{cause:R}),meta:{origin:"throw",thrown:R}}),l?.(M,e,f),x(M,{origin:"throw",thrown:R})}let g;try{g=await r.fallback()}catch(h){if(U(h))throw a({type:"step_aborted",workflowId:s,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-E}),h;let C;try{C=I(h)}catch($){throw z($)}let J=performance.now()-E;throw a({type:"step_error",workflowId:s,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:J,error:C}),t&&a({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:J,result:F(C,{cause:h}),meta:{origin:"throw",thrown:h}}),l?.(C,e,f),x(C,{origin:"throw",thrown:h})}if(g.ok){let h=performance.now()-E;return a({type:"step_success",workflowId:s,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:h}),t&&a({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:h,result:g,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(M)}}),g.value}else{let h=performance.now()-E,C=K(g.error,{origin:"result",resultCause:g.cause});throw a({type:"step_error",workflowId:s,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:h,error:C}),t&&a({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:h,result:g,meta:{origin:"result",resultCause:g.cause}}),l?.(C,e,f),x(C,{origin:"result",resultCause:g.cause})}}if(d.ok){let R=performance.now()-E;return a({type:"step_success",workflowId:s,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:R}),t&&a({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:R,result:d}),d.value}let y=d.error;if(r.on!==void 0&&r.on!==y){let R=performance.now()-E,M=K(y,{origin:"result",resultCause:d.cause});throw a({type:"step_error",workflowId:s,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:R,error:M}),t&&a({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:R,result:d,meta:{origin:"result",resultCause:d.cause}}),l?.(M,e,f),x(M,{origin:"result",resultCause:d.cause})}let k;try{k=await r.fallback()}catch(R){if(U(R))throw a({type:"step_aborted",workflowId:s,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-E}),R;let M;try{M=I(R)}catch(h){throw z(h)}let g=performance.now()-E;throw a({type:"step_error",workflowId:s,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:g,error:M}),t&&a({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:g,result:F(M,{cause:R}),meta:{origin:"throw",thrown:R}}),l?.(M,e,f),x(M,{origin:"throw",thrown:R})}if(k.ok){let R=performance.now()-E;return a({type:"step_success",workflowId:s,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:R}),t&&a({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:R,result:k,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(y)}}),k.value}let S=performance.now()-E,v=K(k.error,{origin:"result",resultCause:k.cause});throw a({type:"step_error",workflowId:s,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:S,error:v}),t&&a({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:S,result:k,meta:{origin:"result",resultCause:k.cause}}),l?.(v,e,f),x(v,{origin:"result",resultCause:k.cause})})()},p.withResource=(n,m)=>{if(typeof n!="string"||n.length===0)throw new Error('[awaitly] step.withResource() requires an explicit string ID as the first argument. Example: step.withResource("useDb", { acquire: () => connect(), use: (db) => query(db), release: (db) => db.close() })');let r=n,t=n,e=B(r),i=w;return(async()=>{let c=i?performance.now():0;w&&a({type:"step_start",workflowId:s,stepId:e,stepKey:r,name:t,ts:Date.now()});let E;try{E=await m.acquire()}catch(g){if(U(g))throw a({type:"step_aborted",workflowId:s,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:performance.now()-c}),g;let h;try{h=I(g)}catch(J){throw z(J)}let C=performance.now()-c;throw a({type:"step_error",workflowId:s,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:C,error:h}),r&&a({type:"step_complete",workflowId:s,stepKey:r,name:t,ts:Date.now(),durationMs:C,result:F(h,{cause:g}),meta:{origin:"throw",thrown:g}}),l?.(h,t,f),x(h,{origin:"throw",thrown:g})}if(!E.ok){let g=performance.now()-c,h=K(E.error,{origin:"result",resultCause:E.cause});throw a({type:"step_error",workflowId:s,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:g,error:h}),r&&a({type:"step_complete",workflowId:s,stepKey:r,name:t,ts:Date.now(),durationMs:g,result:E,meta:{origin:"result",resultCause:E.cause}}),l?.(h,t,f),x(h,{origin:"result",resultCause:E.cause})}let d=E.value,y,k,S=!1;try{y=await m.use(d)}catch(g){if(U(g)){try{await m.release(d)}catch(h){console.warn(`[awaitly] step.withResource("${n}"): release threw after earlyExit:`,h)}throw g}k=g,S=!0}try{await m.release(d)}catch(g){console.warn(`[awaitly] step.withResource("${n}"): release threw:`,g)}if(S){let g;try{g=I(k)}catch(C){throw z(C)}let h=performance.now()-c;throw a({type:"step_error",workflowId:s,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:h,error:g}),r&&a({type:"step_complete",workflowId:s,stepKey:r,name:t,ts:Date.now(),durationMs:h,result:F(g,{cause:k}),meta:{origin:"throw",thrown:k}}),l?.(g,t,f),x(g,{origin:"throw",thrown:k})}let v=y;if(v.ok){let g=performance.now()-c;return a({type:"step_success",workflowId:s,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:g}),r&&a({type:"step_complete",workflowId:s,stepKey:r,name:t,ts:Date.now(),durationMs:g,result:v}),v.value}let R=performance.now()-c,M=K(v.error,{origin:"result",resultCause:v.cause});throw a({type:"step_error",workflowId:s,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:R,error:M}),r&&a({type:"step_complete",workflowId:s,stepKey:r,name:t,ts:Date.now(),durationMs:R,result:v,meta:{origin:"result",resultCause:v.cause}}),l?.(M,t,f),x(M,{origin:"result",resultCause:v.cause})})()};let q=await o({step:p});if(process.env.NODE_ENV!=="production"&&q!==null&&typeof q=="object"&&"ok"in q&&typeof q.ok=="boolean"){let n=q;(n.ok===!0&&"value"in n||n.ok===!1&&"error"in n)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
|
|
1
|
+
"use strict";var me=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var Ne=Object.getOwnPropertyNames;var Fe=Object.prototype.hasOwnProperty;var Ke=(o,t)=>{for(var i in t)me(o,i,{get:t[i],enumerable:!0})},je=(o,t,i,d)=>{if(t&&typeof t=="object"||typeof t=="function")for(let S of Ne(t))!Fe.call(o,S)&&S!==i&&me(o,S,{get:()=>t[S],enumerable:!(d=Ue(t,S))||d.enumerable});return o};var Be=o=>je(me({},"__esModule",{value:!0}),o);var Ze={};Ke(Ze,{CircuitOpenError:()=>ee,circuitBreakerPresets:()=>ve,createCircuitBreaker:()=>Me,isCircuitOpenError:()=>Oe});module.exports=Be(Ze);var re=class extends Error{_tag};function j(o,t){return class extends re{_tag=o;constructor(i,d){let S=t?.message?t.message(i??{}):o;if(super(S),this.name=o,Object.setPrototypeOf(this,new.target.prototype),i&&typeof i=="object"){let{_tag:C,name:_,message:w,stack:M,...a}=i,D=Object.prototype.hasOwnProperty.call(a,"cause"),O=D?a.cause:void 0;D&&delete a.cause;let U=d?.cause!==void 0;if(D&&U)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,a),D&&(this.cause=O),U&&(this.cause=d?.cause)}else d?.cause!==void 0&&(this.cause=d.cause)}}}Object.defineProperty(j,Symbol.hasInstance,{value:o=>o instanceof re});(S=>{function o(C){return C instanceof Error}S.isError=o;function t(C){return C instanceof re}S.isTaggedError=t;function i(C,_){let w=C._tag,M=_[w];return M(C)}S.match=i;function d(C,_,w){let M=C._tag,a=_[M];return a?a(C):w(C)}S.matchPartial=d})(j||={});var we=class extends j("TimeoutError",{message:t=>t.operation?`TimeoutError: ${t.operation} timed out after ${t.ms}ms`:`TimeoutError: Operation timed out after ${t.ms}ms`}){},ye=class extends j("RetryExhaustedError",{message:t=>t.operation?`RetryExhaustedError: ${t.operation} failed after ${t.attempts} attempts`:`RetryExhaustedError: Operation failed after ${t.attempts} attempts`}){},fe=class extends j("RateLimitError",{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`:""}`}){},Te=class extends j("CircuitBreakerOpenError",{message:t=>`CircuitBreakerOpenError: Circuit ${t.circuitName} is ${t.state??"OPEN"}${t.retryAfterMs?`, retry after ${Math.ceil(t.retryAfterMs/1e3)}s`:""}`}){},ke=class extends j("ValidationError",{message:t=>`ValidationError: Invalid ${t.field} - ${t.reason}`}){},ge=class extends j("NotFoundError",{message:t=>t.id?`NotFoundError: ${t.resource} with id ${t.id} not found`:`NotFoundError: ${t.resource} not found`}){},Re=class extends j("UnauthorizedError",{message:t=>t.reason?`UnauthorizedError: ${t.reason}`:t.action&&t.resource?`UnauthorizedError: Not authorized to ${t.action} ${t.resource}`:"UnauthorizedError: Access denied"}){},xe=class extends j("NetworkError",{message:t=>t.url?`NetworkError: ${t.reason} (${t.url})`:`NetworkError: ${t.reason}`}){},Ce=class extends j("CompensationError",{message:t=>`CompensationError: Failed to compensate step ${t.step}`}){},se=class extends j("UnexpectedError",{message:t=>`UnexpectedError: ${t.cause instanceof Error?t.cause.message:String(t.cause??"unknown")}`}){};function Le(o){let t=o.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!t)return;let i=parseFloat(t[1]),d=t[2].toLowerCase();return{_tag:"Duration",millis:i*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[d]??1)}}function $e(o){return new se({cause:o})}function V(o){return{ok:!0,value:o}}function F(o,t){let i=t?.cause;return{ok:!1,error:o,...i!==void 0?{cause:i}:{}}}function Ve(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 i=t._tag.trim();if(i)return i}if(typeof t.tag=="string"){let i=t.tag.trim();if(i)return i}if(typeof t.code=="string"){let i=t.code.trim();if(i)return i}else if(typeof t.code=="number")return String(t.code);if(o instanceof Error&&o.name){let i=o.name.trim();if(i)return i}}return"unknown"}function He(o,t){if(!(!t||!o))return t[o]}function We(o){let{intent:t,domain:i,owner:d,tags:S,stateChanges:C,emits:_,calls:w}=o;if(!t&&!i&&!d&&!S?.length&&!C?.length&&!_?.length&&!w?.length)return;let M={};return t&&(M.intent=t),i&&(M.domain=i),d&&(M.owner=d),S?.length&&(M.tags=S),C?.length&&(M.stateChanges=C),_?.length&&(M.emits=_),w?.length&&(M.calls=w),M}function $(o,t,i,d,S){let C=Ve(o),_=He(C,t),w={tag:C,origin:i};return _!==void 0&&(w.classification=_),d!==void 0&&(w.attempt=d),S!==void 0&&(w.cumulativeDurationMs=S),w}var Z=Symbol.for("step_timeout_marker");function he(o){return typeof o!="object"||o===null?!1:o.type==="STEP_TIMEOUT"?!0:Z in o}function qe(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(Z in o)return o[Z]}}var Pe=Symbol("early-exit");function Ye(o,t){return{[Pe]:!0,error:o,meta:t}}function ze(o){return typeof o=="object"&&o!==null&&o[Pe]===!0}var _e=Symbol("mapper-exception");function X(o){return{[_e]:!0,thrown:o}}function Je(o){return typeof o=="object"&&o!==null&&o[_e]===!0}function Ee(o,t){let{backoff:i,initialDelay:d,maxDelay:S,jitter:C}=t,_;switch(i){case"fixed":_=d;break;case"linear":_=d*o;break;case"exponential":_=d*Math.pow(2,o-1);break}if(_=Math.min(_,S),C){let w=_*.25*Math.random();_=_+w}return Math.floor(_)}function de(o){return new Promise(t=>setTimeout(t,o))}var be=Symbol("timeout"),ae=Symbol("timeout-option");function Ge(o){return typeof o=="object"&&o!==null&&o[ae]===!0}async function Xe(o,t,i,d){let S=new AbortController,C=t.onTimeout??"error",_=()=>typeof C=="function"?C({name:i.name,key:i.key,ms:t.ms}):t.error??{type:"STEP_TIMEOUT",stepName:i.name,stepKey:i.key,timeoutMs:t.ms,attempt:i.attempt},w;d?.aborted&&S.abort(d.reason);let M;d&&!d.aborted&&(M=()=>S.abort(d.reason),d.addEventListener("abort",M,{once:!0}));let a=new Promise((O,U)=>{w=setTimeout(()=>{if(C!=="disconnect"&&S.abort(),C==="option"){U({[ae]:!0,ms:t.ms});return}U({[be]:!0,error:_()})},t.ms)}),D;t.signal?D=Promise.resolve(o(S.signal)):D=Promise.resolve(o());try{return await Promise.race([D,a])}catch(O){if(typeof O=="object"&&O!==null&&O[ae]===!0)throw{[ae]:!0,ms:t.ms};if(typeof O=="object"&&O!==null&&O[be]===!0){C==="disconnect"&&D.catch(()=>{});let U=O.error;if(typeof U=="object"&&U!==null&&U.type!=="STEP_TIMEOUT"){let L={timeoutMs:t.ms,stepName:i.name,stepKey:i.key,attempt:i.attempt};Z in U?U[Z]=L:Object.defineProperty(U,Z,{value:L,enumerable:!1,writable:!0,configurable:!1})}throw U}throw O}finally{clearTimeout(w),M&&d&&d.removeEventListener("abort",M)}}var Q={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function Se(o,t){let{onError:i,onEvent:d,catchUnexpected:S,workflowId:C,workflowName:_,context:w,_workflowSignal:M}=t&&typeof t=="object"?t:{},a=C??crypto.randomUUID(),D=S??$e,O=[],U=0,L=p=>p??`step_${++U}`,u=p=>{let H=p.context!==void 0||w===void 0?p:{...p,context:w},Y=_!==void 0&&H.workflowName===void 0?{...H,workflowName:_}:H;if(Y.type==="step_success"){let ne=Y.stepId;for(let oe=O.length-1;oe>=0;oe--){let W=O[oe];if(W.type==="race"&&!W.winnerId){W.winnerId=ne;break}}}d?.(Y,w)},h=Ye,N=p=>ze(p),K=(p,H)=>p,B=p=>typeof p=="function"?!1:!!(p&&typeof p=="object"&&"ok"in p||p&&typeof p=="object"&&"then"in p&&typeof p.then=="function");try{let H=function(s){let m={};for(let[n,r]of Object.entries(s))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},Y=function(s,m){let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let r=performance.now(),e=!1;O.push({scopeId:n,type:"parallel"});let c=()=>{if(e)return;e=!0;let l=O.findIndex(E=>E.scopeId===n);l!==-1&&O.splice(l,1),u({type:"scope_end",workflowId:a,scopeId:n,ts:Date.now(),durationMs:performance.now()-r})};u({type:"scope_start",workflowId:a,scopeId:n,scopeType:"parallel",name:s,ts:Date.now()});try{let l=await m();if(c(),!l.ok)throw i?.(l.error,s,w),h(l.error,{origin:"result",resultCause:l.cause});return l.value}catch(l){throw c(),l}})()},ne=function(s,m){let n=Object.keys(s),r=m.name??`Parallel(${n.join(", ")})`,e=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let c=performance.now(),l=!1;O.push({scopeId:e,type:"parallel"});let E=()=>{if(l)return;l=!0;let y=O.findIndex(f=>f.scopeId===e);y!==-1&&O.splice(y,1),u({type:"scope_end",workflowId:a,scopeId:e,ts:Date.now(),durationMs:performance.now()-c})};u({type:"scope_start",workflowId:a,scopeId:e,scopeType:"parallel",name:r,ts:Date.now()});try{let y=await new Promise(k=>{if(n.length===0){k([]);return}let A=!1,I=n.length,g=new Array(n.length);for(let v=0;v<n.length;v++){let R=n[v],b=v;Promise.resolve(s[R]()).catch(x=>F({type:"PROMISE_REJECTED",cause:x},{cause:{type:"PROMISE_REJECTION",reason:x}})).then(x=>{if(!A){if(!x.ok){A=!0,k([{key:R,result:x}]);return}g[b]={key:R,result:x},I--,I===0&&k(g)}})}});E();let f={};for(let{key:k,result:A}of y){if(!A.ok)throw i?.(A.error,k,w),h(A.error,{origin:"result",resultCause:A.cause});f[k]=A.value}return f}catch(y){throw E(),y}})()};var et=H,tt=Y,rt=ne;let p=(s,m,n)=>(async()=>{if(typeof s!="string"||s.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=We(r),c=s,l=r.key??s,E=r.key??s,{description:y,retry:f,timeout:k}=r,A=L(l),I=d,g=I?performance.now():0,R=B(m)?()=>m:m,x={attempts:Math.max(1,f?.attempts??1),backoff:f?.backoff??Q.backoff,initialDelay:f?.initialDelay??Q.initialDelay,maxDelay:f?.maxDelay??Q.maxDelay,jitter:f?.jitter??Q.jitter,retryOn:f?.retryOn??Q.retryOn,onRetry:f?.onRetry??Q.onRetry};d&&u({type:"step_start",workflowId:a,stepId:A,stepKey:l,name:c,description:y,ts:Date.now(),...e&&{metadata:e}});let G;for(let P=1;P<=x.attempts;P++){let Ie=I?performance.now():0;try{let T;if(k?T=await Xe(R,k,{name:c,key:l,attempt:P},M):T=await R(),T.ok){let J=performance.now()-g;return u({type:"step_success",workflowId:a,stepId:A,stepKey:l,name:c,description:y,ts:Date.now(),durationMs:J,...e&&{metadata:e}}),E&&u({type:"step_complete",workflowId:a,stepKey:E,name:c,description:y,ts:Date.now(),durationMs:J,result:T,...e&&{metadata:e}}),T.value}if(G=T,P<x.attempts&&x.retryOn(T.error,P)){let J=Ee(P,x);u({type:"step_retry",workflowId:a,stepId:A,stepKey:l,name:c,ts:Date.now(),attempt:P+1,maxAttempts:x.attempts,delayMs:J,error:T.error,...e&&{metadata:e},diagnostics:$(T.error,r.errorMeta,"result",P,performance.now()-g)}),x.onRetry(T.error,P,J),await de(J);continue}x.attempts>1&&u({type:"step_retries_exhausted",workflowId:a,stepId:A,stepKey:l,name:c,ts:Date.now(),durationMs:performance.now()-g,attempts:P,lastError:T.error,...e&&{metadata:e},diagnostics:$(T.error,r.errorMeta,"result",P,performance.now()-g)});break}catch(T){let J=performance.now()-Ie;if(Ge(T)){let q=T.ms;u({type:"step_timeout",workflowId:a,stepId:A,stepKey:l,name:c,ts:Date.now(),timeoutMs:q,attempt:P,...e&&{metadata:e},diagnostics:$(T,r.errorMeta,"timeout",P)}),u({type:"step_success",workflowId:a,stepId:A,stepKey:l,name:c,description:y,ts:Date.now(),durationMs:performance.now()-g,...e&&{metadata:e}}),E&&u({type:"step_complete",workflowId:a,stepKey:E,name:c,description:y,ts:Date.now(),durationMs:performance.now()-g,result:V(void 0),...e&&{metadata:e}});return}if(N(T))throw u({type:"step_aborted",workflowId:a,stepId:A,stepKey:l,name:c,description:y,ts:Date.now(),durationMs:J,...e&&{metadata:e}}),T;if(he(T)){let q=qe(T),De=k?.ms??q?.timeoutMs??0;if(u({type:"step_timeout",workflowId:a,stepId:A,stepKey:l,name:c,ts:Date.now(),timeoutMs:De,attempt:P,...e&&{metadata:e},diagnostics:$(T,r.errorMeta,"timeout",P)}),P<x.attempts&&x.retryOn(T,P)){let pe=Ee(P,x);u({type:"step_retry",workflowId:a,stepId:A,stepKey:l,name:c,ts:Date.now(),attempt:P+1,maxAttempts:x.attempts,delayMs:pe,error:T,...e&&{metadata:e},diagnostics:$(T,r.errorMeta,"timeout",P,performance.now()-g)}),x.onRetry(T,P,pe),await de(pe);continue}x.attempts>1&&u({type:"step_retries_exhausted",workflowId:a,stepId:A,stepKey:l,name:c,ts:Date.now(),durationMs:performance.now()-g,attempts:P,lastError:T,...e&&{metadata:e},diagnostics:$(T,r.errorMeta,"timeout",P,performance.now()-g)});let le=performance.now()-g;throw u({type:"step_error",workflowId:a,stepId:A,stepKey:l,name:c,description:y,ts:Date.now(),durationMs:le,error:T,...e&&{metadata:e},diagnostics:$(T,r.errorMeta,"timeout",P,le)}),E&&u({type:"step_complete",workflowId:a,stepKey:E,name:c,description:y,ts:Date.now(),durationMs:le,result:F(T,{cause:T}),meta:{origin:"throw",thrown:T},...e&&{metadata:e}}),i?.(T,c,w),h(T,{origin:"throw",thrown:T})}if(P<x.attempts&&x.retryOn(T,P)){let q=Ee(P,x);u({type:"step_retry",workflowId:a,stepId:A,stepKey:l,name:c,ts:Date.now(),attempt:P+1,maxAttempts:x.attempts,delayMs:q,error:T,...e&&{metadata:e},diagnostics:$(T,r.errorMeta,"throw",P,performance.now()-g)}),x.onRetry(T,P,q),await de(q);continue}x.attempts>1&&!he(T)&&u({type:"step_retries_exhausted",workflowId:a,stepId:A,stepKey:l,name:c,ts:Date.now(),durationMs:performance.now()-g,attempts:P,lastError:T,...e&&{metadata:e},diagnostics:$(T,r.errorMeta,"throw",P,performance.now()-g)});let ce=performance.now()-g,te;try{te=D(T)}catch(q){throw X(q)}throw u({type:"step_error",workflowId:a,stepId:A,stepKey:l,name:c,description:y,ts:Date.now(),durationMs:ce,error:te,...e&&{metadata:e},diagnostics:$(T,r.errorMeta,"throw",P,ce)}),E&&u({type:"step_complete",workflowId:a,stepKey:E,name:c,description:y,ts:Date.now(),durationMs:ce,result:F(te,{cause:T}),meta:{origin:"throw",thrown:T},...e&&{metadata:e}}),i?.(te,c,w),h(te,{origin:"throw",thrown:T})}}let z=G,ie=performance.now()-g,ue=K(z.error,{origin:"result",resultCause:z.cause});throw u({type:"step_error",workflowId:a,stepId:A,stepKey:l,name:c,description:y,ts:Date.now(),durationMs:ie,error:ue,...e&&{metadata:e},diagnostics:$(z.error,r.errorMeta,"result",x.attempts,ie)}),E&&u({type:"step_complete",workflowId:a,stepKey:E,name:c,description:y,ts:Date.now(),durationMs:ie,result:z,meta:{origin:"result",resultCause:z.cause},...e&&{metadata:e}}),i?.(ue,c,w),h(ue,{origin:"result",resultCause:z.cause})})();p.try=(s,m,n)=>{if(typeof s!="string"||s.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??s,e=s,c=s,l="error"in n?()=>n.error:n.onError,E=d;return(async()=>{let y=E?performance.now():0;d&&u({type:"step_start",workflowId:a,stepId:c,stepKey:r,name:e,ts:Date.now()});try{let f=await m(),k=performance.now()-y;return u({type:"step_success",workflowId:a,stepId:c,stepKey:r,name:e,ts:Date.now(),durationMs:k}),r&&u({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:k,result:V(f)}),f}catch(f){let k=l(f),A=performance.now()-y,I=K(k,{origin:"throw",thrown:f});throw u({type:"step_error",workflowId:a,stepId:c,stepKey:r,name:e,ts:Date.now(),durationMs:A,error:I}),r&&u({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:A,result:F(k,{cause:f}),meta:{origin:"throw",thrown:f}}),i?.(I,e,w),h(I,{origin:"throw",thrown:f})}})()},p.fromResult=(s,m,n)=>{if(typeof s!="string"||s.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??s,e=s,c=s,l="error"in n?()=>n.error:n.onError,E=d;return(async()=>{let y=E?performance.now():0;d&&u({type:"step_start",workflowId:a,stepId:c,stepKey:r,name:e,ts:Date.now()});let f=await m();if(f.ok){let k=performance.now()-y;return u({type:"step_success",workflowId:a,stepId:c,stepKey:r,name:e,ts:Date.now(),durationMs:k}),r&&u({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:k,result:V(f.value)}),f.value}else{let k=l(f.error),A=performance.now()-y,I=K(k,{origin:"result",resultCause:f.error});throw u({type:"step_error",workflowId:a,stepId:c,stepKey:r,name:e,ts:Date.now(),durationMs:A,error:I}),r&&u({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:A,result:F(k,{cause:f.error}),meta:{origin:"result",resultCause:f.error}}),i?.(I,e,w),h(I,{origin:"result",resultCause:f.error})}})()},p.fromNullable=(s,m,n,r)=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step.fromNullable() requires an explicit string ID as the first argument. Example: step.fromNullable("getUser", () => db.find(id), () => ({ type: "NOT_FOUND" }))');return p(s,async()=>{let e=await m();return e!=null?V(e):F(n())},r)},p.retry=(s,m,n)=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step.retry() requires an explicit string ID as the first argument. Example: step.retry("fetchData", () => fetchData(), { attempts: 3 })');return p(s,m,{key:n.key??s,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})},p.withTimeout=(s,m,n)=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step.withTimeout() requires an explicit string ID as the first argument. Example: step.withTimeout("slowOp", () => slowOp(), { ms: 5000 })');return p(s,m,{key:n.key??s,timeout:n})},p.sleep=(s,m,n)=>{if(typeof s!="string"||s.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"?Le(m):m;if(!r)throw new Error(`step.sleep: invalid duration '${m}'`);let e=r.millis,c=n?.signal;return p(s,async()=>{if(M?.aborted||c?.aborted){let l=new Error("Sleep aborted");throw l.name="AbortError",l}return new Promise((l,E)=>{let y={timeoutId:void 0},f=()=>{y.timeoutId&&clearTimeout(y.timeoutId);let k=new Error("Sleep aborted");k.name="AbortError",E(k)};M?.addEventListener("abort",f,{once:!0}),c?.addEventListener("abort",f,{once:!0}),y.timeoutId=setTimeout(()=>{M?.removeEventListener("abort",f),c?.removeEventListener("abort",f),l(V(void 0))},e)})},{key:n?.key??s,description:n?.description})},p.parallel=((...s)=>{if(typeof s[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=s[0],n=s[1];if(typeof n=="function")return Y(m,n);if(n&&typeof n=="object"&&!Array.isArray(n)){let e=H(n);return ne(e,{name:m})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),p.race=(s,m)=>{let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let r=performance.now(),e=!1,c={scopeId:n,type:"race",winnerId:void 0};O.push(c);let l=()=>{if(e)return;e=!0;let E=O.findIndex(y=>y.scopeId===n);E!==-1&&O.splice(E,1),u({type:"scope_end",workflowId:a,scopeId:n,ts:Date.now(),durationMs:performance.now()-r,winnerId:c.winnerId})};u({type:"scope_start",workflowId:a,scopeId:n,scopeType:"race",name:s,ts:Date.now()});try{let E=await m();if(l(),!E.ok)throw i?.(E.error,s,w),h(E.error,{origin:"result",resultCause:E.cause});return E.value}catch(E){throw l(),E}})()},p.allSettled=(s,m)=>{let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let r=performance.now(),e=!1;O.push({scopeId:n,type:"allSettled"});let c=()=>{if(e)return;e=!0;let l=O.findIndex(E=>E.scopeId===n);l!==-1&&O.splice(l,1),u({type:"scope_end",workflowId:a,scopeId:n,ts:Date.now(),durationMs:performance.now()-r})};u({type:"scope_start",workflowId:a,scopeId:n,scopeType:"allSettled",name:s,ts:Date.now()});try{let l=await m();if(c(),!l.ok)throw i?.(l.error,s,w),h(l.error,{origin:"result",resultCause:l.cause});return l.value}catch(l){throw c(),l}})()},p.if=(s,m,n)=>n(),p.label=p.if,p.branch=async(s,m)=>{let{condition:n,then:r,else:e}=m;if(n())return await r();if(e)return await e()},p.arm=(s,m)=>({fn:s,errors:m}),p.forEach=async(s,m,n)=>{let r=[],e=n.maxIterations,c=0,l="run"in n,E=Symbol.asyncIterator in m?m:(async function*(){yield*m})();for await(let y of E){if(e!==void 0&&c>=e)break;let f;l?f=await n.run(y,c):f=await n.item.handler(y,c,p),r.push(f),c++}return r},p.item=s=>({__forEachItemHandler:!0,handler:s}),p.dep=(s,m)=>m,p.run=(s,m,n)=>p(s,()=>m,n),p.workflow=(s,m,n)=>p(s,m,n),p.andThen=(s,m,n,r)=>p(s,()=>n(m),r),p.match=async(s,m,n,r)=>p(s,async()=>{let e=await m;return e.ok?V(await n.ok(e.value)):V(await n.err(e.error,e.cause))},r),p.all=p.parallel,p.map=async(s,m,n,r)=>{let e=r?.concurrency??m.length;return p(s,()=>e>=m.length?Ae(m.map((c,l)=>n(c,l))):(async()=>{let c=[];for(let l=0;l<m.length;l+=e){let E=m.slice(l,l+e),y=await Ae(E.map((f,k)=>n(f,l+k)));if(!y.ok)return y;c.push(...y.value)}return V(c)})(),{key:r?.key})},p.withFallback=(s,m,n)=>{if(typeof s!="string"||s.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??s,e=s,c=L(r),l=d;return(async()=>{let E=l?performance.now():0;d&&u({type:"step_start",workflowId:a,stepId:c,stepKey:r,name:e,ts:Date.now()});let y;try{y=await m()}catch(g){if(N(g))throw u({type:"step_aborted",workflowId:a,stepId:c,stepKey:r,name:e,ts:Date.now(),durationMs:performance.now()-E}),g;let v;try{v=D(g)}catch(b){throw X(b)}if(n.on!==void 0&&n.on!==v){let b=performance.now()-E;throw u({type:"step_error",workflowId:a,stepId:c,stepKey:r,name:e,ts:Date.now(),durationMs:b,error:v}),r&&u({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:b,result:F(v,{cause:g}),meta:{origin:"throw",thrown:g}}),i?.(v,e,w),h(v,{origin:"throw",thrown:g})}let R;try{R=await n.fallback()}catch(b){if(N(b))throw u({type:"step_aborted",workflowId:a,stepId:c,stepKey:r,name:e,ts:Date.now(),durationMs:performance.now()-E}),b;let x;try{x=D(b)}catch(z){throw X(z)}let G=performance.now()-E;throw u({type:"step_error",workflowId:a,stepId:c,stepKey:r,name:e,ts:Date.now(),durationMs:G,error:x}),r&&u({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:G,result:F(x,{cause:b}),meta:{origin:"throw",thrown:b}}),i?.(x,e,w),h(x,{origin:"throw",thrown:b})}if(R.ok){let b=performance.now()-E;return u({type:"step_success",workflowId:a,stepId:c,stepKey:r,name:e,ts:Date.now(),durationMs:b}),r&&u({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:b,result:R,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(v)}}),R.value}else{let b=performance.now()-E,x=K(R.error,{origin:"result",resultCause:R.cause});throw u({type:"step_error",workflowId:a,stepId:c,stepKey:r,name:e,ts:Date.now(),durationMs:b,error:x}),r&&u({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:b,result:R,meta:{origin:"result",resultCause:R.cause}}),i?.(x,e,w),h(x,{origin:"result",resultCause:R.cause})}}if(y.ok){let g=performance.now()-E;return u({type:"step_success",workflowId:a,stepId:c,stepKey:r,name:e,ts:Date.now(),durationMs:g}),r&&u({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:g,result:y}),y.value}let f=y.error;if(n.on!==void 0&&n.on!==f){let g=performance.now()-E,v=K(f,{origin:"result",resultCause:y.cause});throw u({type:"step_error",workflowId:a,stepId:c,stepKey:r,name:e,ts:Date.now(),durationMs:g,error:v}),r&&u({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:g,result:y,meta:{origin:"result",resultCause:y.cause}}),i?.(v,e,w),h(v,{origin:"result",resultCause:y.cause})}let k;try{k=await n.fallback()}catch(g){if(N(g))throw u({type:"step_aborted",workflowId:a,stepId:c,stepKey:r,name:e,ts:Date.now(),durationMs:performance.now()-E}),g;let v;try{v=D(g)}catch(b){throw X(b)}let R=performance.now()-E;throw u({type:"step_error",workflowId:a,stepId:c,stepKey:r,name:e,ts:Date.now(),durationMs:R,error:v}),r&&u({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:R,result:F(v,{cause:g}),meta:{origin:"throw",thrown:g}}),i?.(v,e,w),h(v,{origin:"throw",thrown:g})}if(k.ok){let g=performance.now()-E;return u({type:"step_success",workflowId:a,stepId:c,stepKey:r,name:e,ts:Date.now(),durationMs:g}),r&&u({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:g,result:k,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(f)}}),k.value}let A=performance.now()-E,I=K(k.error,{origin:"result",resultCause:k.cause});throw u({type:"step_error",workflowId:a,stepId:c,stepKey:r,name:e,ts:Date.now(),durationMs:A,error:I}),r&&u({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:A,result:k,meta:{origin:"result",resultCause:k.cause}}),i?.(I,e,w),h(I,{origin:"result",resultCause:k.cause})})()},p.withResource=(s,m)=>{if(typeof s!="string"||s.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=s,r=s,e=L(n),c=d;return(async()=>{let l=c?performance.now():0;d&&u({type:"step_start",workflowId:a,stepId:e,stepKey:n,name:r,ts:Date.now()});let E;try{E=await m.acquire()}catch(R){if(N(R))throw u({type:"step_aborted",workflowId:a,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:performance.now()-l}),R;let b;try{b=D(R)}catch(G){throw X(G)}let x=performance.now()-l;throw u({type:"step_error",workflowId:a,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:x,error:b}),n&&u({type:"step_complete",workflowId:a,stepKey:n,name:r,ts:Date.now(),durationMs:x,result:F(b,{cause:R}),meta:{origin:"throw",thrown:R}}),i?.(b,r,w),h(b,{origin:"throw",thrown:R})}if(!E.ok){let R=performance.now()-l,b=K(E.error,{origin:"result",resultCause:E.cause});throw u({type:"step_error",workflowId:a,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:R,error:b}),n&&u({type:"step_complete",workflowId:a,stepKey:n,name:r,ts:Date.now(),durationMs:R,result:E,meta:{origin:"result",resultCause:E.cause}}),i?.(b,r,w),h(b,{origin:"result",resultCause:E.cause})}let y=E.value,f,k,A=!1;try{f=await m.use(y)}catch(R){if(N(R)){try{await m.release(y)}catch(b){console.warn(`[awaitly] step.withResource("${s}"): release threw after earlyExit:`,b)}throw R}k=R,A=!0}try{await m.release(y)}catch(R){console.warn(`[awaitly] step.withResource("${s}"): release threw:`,R)}if(A){let R;try{R=D(k)}catch(x){throw X(x)}let b=performance.now()-l;throw u({type:"step_error",workflowId:a,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:b,error:R}),n&&u({type:"step_complete",workflowId:a,stepKey:n,name:r,ts:Date.now(),durationMs:b,result:F(R,{cause:k}),meta:{origin:"throw",thrown:k}}),i?.(R,r,w),h(R,{origin:"throw",thrown:k})}let I=f;if(I.ok){let R=performance.now()-l;return u({type:"step_success",workflowId:a,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:R}),n&&u({type:"step_complete",workflowId:a,stepKey:n,name:r,ts:Date.now(),durationMs:R,result:I}),I.value}let g=performance.now()-l,v=K(I.error,{origin:"result",resultCause:I.cause});throw u({type:"step_error",workflowId:a,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:g,error:v}),n&&u({type:"step_complete",workflowId:a,stepKey:n,name:r,ts:Date.now(),durationMs:g,result:I,meta:{origin:"result",resultCause:I.cause}}),i?.(v,r,w),h(v,{origin:"result",resultCause:I.cause})})()};let W=await o({step:p});if(process.env.NODE_ENV!=="production"&&W!==null&&typeof W=="object"&&"ok"in W&&typeof W.ok=="boolean"){let s=W;(s.ok===!0&&"value"in s||s.ok===!1&&"error"in s)&&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 V(
|
|
6
|
+
See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return V(W)}catch(p){if(Je(p))throw p.thrown;if(N(p)){let Y=p.meta.origin==="throw"?p.meta.thrown:p.meta.origin==="result"?p.meta.resultCause:void 0;return F(p.error,{cause:Y})}let H=D(p);return i?.(H,"unexpected",w),F(H,{cause:p})}}Se.strict=(o,t)=>Se(o,t);async function Ae(o){return o.length===0?V([]):new Promise(t=>{let i=!1,d=o.length,S=new Array(o.length);for(let C=0;C<o.length;C++){let _=C;Promise.resolve(o[_]).catch(w=>F({type:"PROMISE_REJECTED",cause:w},{cause:{type:"PROMISE_REJECTION",reason:w}})).then(w=>{if(!i){if(!w.ok){i=!0,t(w);return}S[_]=w.value,d--,d===0&&t(V(S))}})}})}var ee=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 Oe(o){return typeof o=="object"&&o!==null&&o.type==="CIRCUIT_OPEN"}var Qe={failureThreshold:5,resetTimeout:3e4,windowSize:6e4,halfOpenMax:3};function Me(o,t){let i={...Qe,...t},d="CLOSED",S=[],C=null,_=null,w=0,M=0;function a(){let h=Date.now();S=S.filter(N=>h-N.timestamp<i.windowSize)}function D(h){if(d!==h){let N=d;d=h,h==="HALF_OPEN"&&(M=0),i.onStateChange?.(N,h,o)}}function O(){return d!=="OPEN"||C===null?!1:Date.now()-C>=i.resetTimeout?(D("HALF_OPEN"),!0):!1}function U(){_=Date.now(),w++,d==="HALF_OPEN"&&(M++,M>=i.halfOpenMax&&(D("CLOSED"),S=[]))}function L(h){let N=Date.now();C=N,a(),S.push({timestamp:N,error:h}),(d==="HALF_OPEN"||d==="CLOSED"&&S.length>=i.failureThreshold)&&D("OPEN")}function u(){if(d==="CLOSED")return 0;if(d==="OPEN"){if(O())return 0;let h=Date.now(),N=C?h-C:0;return Math.max(0,i.resetTimeout-N)}return 0}return{async execute(h,N){let K=u();if(K>0)throw new ee({circuitName:o,state:d,retryAfterMs:K});try{let B=await h();return U(),B}catch(B){throw L(B),B}},async executeResult(h,N){let K=u();if(K>0)return F(new ee({circuitName:o,state:d,retryAfterMs:K}));try{let B=await h();return B.ok?U():L(B.error),B}catch(B){throw L(B),B}},getState(){return d==="OPEN"&&O(),d},getStats(){return a(),{state:this.getState(),failureCount:S.length,successCount:w,lastFailureTime:C,lastSuccessTime:_,halfOpenSuccesses:M}},reset(){D("CLOSED"),S=[],M=0},forceOpen(){C=Date.now(),D("OPEN")},recordSuccess(){U()},recordFailure(h){L(h??new Error("Manual failure"))}}}var ve={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}};0&&(module.exports={CircuitOpenError,circuitBreakerPresets,createCircuitBreaker,isCircuitOpenError});
|
|
7
7
|
//# sourceMappingURL=circuit-breaker.cjs.map
|