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/hitl.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var we=Object.defineProperty;var We=Object.getOwnPropertyDescriptor;var Ke=Object.getOwnPropertyNames;var Fe=Object.prototype.hasOwnProperty;var Be=(r,e)=>{for(var t in e)we(r,t,{get:e[t],enumerable:!0})},Le=(r,e,t,d)=>{if(e&&typeof e=="object"||typeof e=="function")for(let k of Ke(e))!Fe.call(r,k)&&k!==t&&we(r,k,{get:()=>e[k],enumerable:!(d=We(e,k))||d.enumerable});return r};var Ve=r=>Le(we({},"__esModule",{value:!0}),r);var nt={};Be(nt,{clearStep:()=>ge,createApprovalChecker:()=>Ue,createApprovalStateCollector:()=>ae,createApprovalStep:()=>Ae,createApprovalWebhookHandler:()=>De,createHITLOrchestrator:()=>Me,createMemoryApprovalStore:()=>_e,createMemoryWorkflowStateStore:()=>Ie,gatedStep:()=>Se,getPendingApprovals:()=>Re,hasPendingApproval:()=>Te,injectApproval:()=>se,isApprovalRejected:()=>ke,isPendingApproval:()=>G,pendingApproval:()=>xe});module.exports=Ve(nt);function He(r){let e=r.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!e)return;let t=parseFloat(e[1]),d=e[2].toLowerCase();return{_tag:"Duration",millis:t*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[d]??1)}}var qe="UNEXPECTED_ERROR";function $e(r){return qe}function q(r){return{ok:!0,value:r}}function L(r,e){let t=e?.cause;return{ok:!1,error:r,...t!==void 0?{cause:t}:{}}}function Xe(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 t=e._tag.trim();if(t)return t}if(typeof e.tag=="string"){let t=e.tag.trim();if(t)return t}if(typeof e.code=="string"){let t=e.code.trim();if(t)return t}else if(typeof e.code=="number")return String(e.code);if(r instanceof Error&&r.name){let t=r.name.trim();if(t)return t}}return"unknown"}function Ye(r,e){if(!(!e||!r))return e[r]}function Je(r){let{intent:e,domain:t,owner:d,tags:k,stateChanges:v,emits:P,calls:E}=r;if(!e&&!t&&!d&&!k?.length&&!v?.length&&!P?.length&&!E?.length)return;let N={};return e&&(N.intent=e),t&&(N.domain=t),d&&(N.owner=d),k?.length&&(N.tags=k),v?.length&&(N.stateChanges=v),P?.length&&(N.emits=P),E?.length&&(N.calls=E),N}function J(r,e,t,d,k){let v=Xe(r),P=Ye(v,e),E={tag:v,origin:t};return P!==void 0&&(E.classification=P),d!==void 0&&(E.attempt=d),k!==void 0&&(E.cumulativeDurationMs=k),E}var oe=Symbol.for("step_timeout_marker");function ve(r){return typeof r!="object"||r===null?!1:r.type==="STEP_TIMEOUT"?!0:oe in r}function Ge(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(oe in r)return r[oe]}}var Pe=Symbol("early-exit");function ze(r,e){return{[Pe]:!0,error:r,meta:e}}function Qe(r){return typeof r=="object"&&r!==null&&r[Pe]===!0}var Oe=Symbol("mapper-exception");function re(r){return{[Oe]:!0,thrown:r}}function Ze(r){return typeof r=="object"&&r!==null&&r[Oe]===!0}function fe(r,e){let{backoff:t,initialDelay:d,maxDelay:k,jitter:v}=e,P;switch(t){case"fixed":P=d;break;case"linear":P=d*r;break;case"exponential":P=d*Math.pow(2,r-1);break}if(P=Math.min(P,k),v){let E=P*.25*Math.random();P=P+E}return Math.floor(P)}function ye(r){return new Promise(e=>setTimeout(e,r))}var Ce=Symbol("timeout"),ue=Symbol("timeout-option");function et(r){return typeof r=="object"&&r!==null&&r[ue]===!0}async function tt(r,e,t,d){let k=new AbortController,v=e.onTimeout??"error",P=()=>typeof v=="function"?v({name:t.name,key:t.key,ms:e.ms}):e.error??{type:"STEP_TIMEOUT",stepName:t.name,stepKey:t.key,timeoutMs:e.ms,attempt:t.attempt},E;d?.aborted&&k.abort(d.reason);let N;d&&!d.aborted&&(N=()=>k.abort(d.reason),d.addEventListener("abort",N,{once:!0}));let i=new Promise((_,X)=>{E=setTimeout(()=>{if(v!=="disconnect"&&k.abort(),v==="option"){X({[ue]:!0,ms:e.ms});return}X({[Ce]:!0,error:P()})},e.ms)}),$;e.signal?$=Promise.resolve(r(k.signal)):$=Promise.resolve(r());try{return await Promise.race([$,i])}catch(_){if(typeof _=="object"&&_!==null&&_[ue]===!0)throw{[ue]:!0,ms:e.ms};if(typeof _=="object"&&_!==null&&_[Ce]===!0){v==="disconnect"&&$.catch(()=>{});let X=_.error;if(typeof X=="object"&&X!==null&&X.type!=="STEP_TIMEOUT"){let Q={timeoutMs:e.ms,stepName:t.name,stepKey:t.key,attempt:t.attempt};oe in X?X[oe]=Q:Object.defineProperty(X,oe,{value:Q,enumerable:!1,writable:!0,configurable:!1})}throw X}throw _}finally{clearTimeout(E),N&&d&&d.removeEventListener("abort",N)}}var ne={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function he(r,e){let{onError:t,onEvent:d,catchUnexpected:k,workflowId:v,workflowName:P,context:E,_workflowSignal:N}=e&&typeof e=="object"?e:{},i=v??crypto.randomUUID(),$=k??$e,_=[],X=0,Q=l=>l??`step_${++X}`,u=l=>{let B=l.context!==void 0||E===void 0?l:{...l,context:E},W=P!==void 0&&B.workflowName===void 0?{...B,workflowName:P}:B;if(W.type==="step_success"){let M=W.stepId;for(let F=_.length-1;F>=0;F--){let H=_[F];if(H.type==="race"&&!H.winnerId){H.winnerId=M;break}}}d?.(W,E)},f=ze,U=l=>Qe(l),O=(l,B)=>l,j=l=>typeof l=="function"?!1:!!(l&&typeof l=="object"&&"ok"in l||l&&typeof l=="object"&&"then"in l&&typeof l.then=="function");try{let B=function(a){let m={};for(let[o,s]of Object.entries(a))if(typeof s=="function")m[o]=s;else if(s&&typeof s=="object"&&"fn"in s)m[o]=s.fn;else throw new TypeError(`step.parallel: operation "${o}" must be a function or { fn, errors? } object`);return m},W=function(a,m){let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),n=!1;_.push({scopeId:o,type:"parallel"});let p=()=>{if(n)return;n=!0;let c=_.findIndex(w=>w.scopeId===o);c!==-1&&_.splice(c,1),u({type:"scope_end",workflowId:i,scopeId:o,ts:Date.now(),durationMs:performance.now()-s})};u({type:"scope_start",workflowId:i,scopeId:o,scopeType:"parallel",name:a,ts:Date.now()});try{let c=await m();if(p(),!c.ok)throw t?.(c.error,a,E),f(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw p(),c}})()},M=function(a,m){let o=Object.keys(a),s=m.name??`Parallel(${o.join(", ")})`,n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let p=performance.now(),c=!1;_.push({scopeId:n,type:"parallel"});let w=()=>{if(c)return;c=!0;let y=_.findIndex(g=>g.scopeId===n);y!==-1&&_.splice(y,1),u({type:"scope_end",workflowId:i,scopeId:n,ts:Date.now(),durationMs:performance.now()-p})};u({type:"scope_start",workflowId:i,scopeId:n,scopeType:"parallel",name:s,ts:Date.now()});try{let y=await new Promise(R=>{if(o.length===0){R([]);return}let h=!1,D=o.length,x=new Array(o.length);for(let I=0;I<o.length;I++){let A=o[I],C=I;Promise.resolve(a[A]()).catch(S=>L({type:"PROMISE_REJECTED",cause:S},{cause:{type:"PROMISE_REJECTION",reason:S}})).then(S=>{if(!h){if(!S.ok){h=!0,R([{key:A,result:S}]);return}x[C]={key:A,result:S},D--,D===0&&R(x)}})}});w();let g={};for(let{key:R,result:h}of y){if(!h.ok)throw t?.(h.error,R,E),f(h.error,{origin:"result",resultCause:h.cause});g[R]=h.value}return g}catch(y){throw w(),y}})()};var K=B,V=W,Y=M;let l=(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 s=o??{},n=Je(s),p=a,c=s.key??a,w=s.key??a,{description:y,retry:g,timeout:R}=s,h=Q(c),D=d,x=D?performance.now():0,A=j(m)?()=>m:m,S={attempts:Math.max(1,g?.attempts??1),backoff:g?.backoff??ne.backoff,initialDelay:g?.initialDelay??ne.initialDelay,maxDelay:g?.maxDelay??ne.maxDelay,jitter:g?.jitter??ne.jitter,retryOn:g?.retryOn??ne.retryOn,onRetry:g?.onRetry??ne.onRetry};d&&u({type:"step_start",workflowId:i,stepId:h,stepKey:c,name:p,description:y,ts:Date.now(),...n&&{metadata:n}});let te;for(let b=1;b<=S.attempts;b++){let je=D?performance.now():0;try{let T;if(R?T=await tt(A,R,{name:p,key:c,attempt:b},N):T=await A(),T.ok){let ee=performance.now()-x;return u({type:"step_success",workflowId:i,stepId:h,stepKey:c,name:p,description:y,ts:Date.now(),durationMs:ee,...n&&{metadata:n}}),w&&u({type:"step_complete",workflowId:i,stepKey:w,name:p,description:y,ts:Date.now(),durationMs:ee,result:T,...n&&{metadata:n}}),T.value}if(te=T,b<S.attempts&&S.retryOn(T.error,b)){let ee=fe(b,S);u({type:"step_retry",workflowId:i,stepId:h,stepKey:c,name:p,ts:Date.now(),attempt:b+1,maxAttempts:S.attempts,delayMs:ee,error:T.error,...n&&{metadata:n},diagnostics:J(T.error,s.errorMeta,"result",b,performance.now()-x)}),S.onRetry(T.error,b,ee),await ye(ee);continue}S.attempts>1&&u({type:"step_retries_exhausted",workflowId:i,stepId:h,stepKey:c,name:p,ts:Date.now(),durationMs:performance.now()-x,attempts:b,lastError:T.error,...n&&{metadata:n},diagnostics:J(T.error,s.errorMeta,"result",b,performance.now()-x)});break}catch(T){let ee=performance.now()-je;if(et(T)){let z=T.ms;u({type:"step_timeout",workflowId:i,stepId:h,stepKey:c,name:p,ts:Date.now(),timeoutMs:z,attempt:b,...n&&{metadata:n},diagnostics:J(T,s.errorMeta,"timeout",b)}),u({type:"step_success",workflowId:i,stepId:h,stepKey:c,name:p,description:y,ts:Date.now(),durationMs:performance.now()-x,...n&&{metadata:n}}),w&&u({type:"step_complete",workflowId:i,stepKey:w,name:p,description:y,ts:Date.now(),durationMs:performance.now()-x,result:q(void 0),...n&&{metadata:n}});return}if(U(T))throw u({type:"step_aborted",workflowId:i,stepId:h,stepKey:c,name:p,description:y,ts:Date.now(),durationMs:ee,...n&&{metadata:n}}),T;if(ve(T)){let z=Ge(T),Ne=R?.ms??z?.timeoutMs??0;if(u({type:"step_timeout",workflowId:i,stepId:h,stepKey:c,name:p,ts:Date.now(),timeoutMs:Ne,attempt:b,...n&&{metadata:n},diagnostics:J(T,s.errorMeta,"timeout",b)}),b<S.attempts&&S.retryOn(T,b)){let me=fe(b,S);u({type:"step_retry",workflowId:i,stepId:h,stepKey:c,name:p,ts:Date.now(),attempt:b+1,maxAttempts:S.attempts,delayMs:me,error:T,...n&&{metadata:n},diagnostics:J(T,s.errorMeta,"timeout",b,performance.now()-x)}),S.onRetry(T,b,me),await ye(me);continue}S.attempts>1&&u({type:"step_retries_exhausted",workflowId:i,stepId:h,stepKey:c,name:p,ts:Date.now(),durationMs:performance.now()-x,attempts:b,lastError:T,...n&&{metadata:n},diagnostics:J(T,s.errorMeta,"timeout",b,performance.now()-x)});let de=performance.now()-x;throw u({type:"step_error",workflowId:i,stepId:h,stepKey:c,name:p,description:y,ts:Date.now(),durationMs:de,error:T,...n&&{metadata:n},diagnostics:J(T,s.errorMeta,"timeout",b,de)}),w&&u({type:"step_complete",workflowId:i,stepKey:w,name:p,description:y,ts:Date.now(),durationMs:de,result:L(T,{cause:T}),meta:{origin:"throw",thrown:T},...n&&{metadata:n}}),t?.(T,p,E),f(T,{origin:"throw",thrown:T})}if(b<S.attempts&&S.retryOn(T,b)){let z=fe(b,S);u({type:"step_retry",workflowId:i,stepId:h,stepKey:c,name:p,ts:Date.now(),attempt:b+1,maxAttempts:S.attempts,delayMs:z,error:T,...n&&{metadata:n},diagnostics:J(T,s.errorMeta,"throw",b,performance.now()-x)}),S.onRetry(T,b,z),await ye(z);continue}S.attempts>1&&!ve(T)&&u({type:"step_retries_exhausted",workflowId:i,stepId:h,stepKey:c,name:p,ts:Date.now(),durationMs:performance.now()-x,attempts:b,lastError:T,...n&&{metadata:n},diagnostics:J(T,s.errorMeta,"throw",b,performance.now()-x)});let ce=performance.now()-x,ie;try{ie=$(T)}catch(z){throw re(z)}throw u({type:"step_error",workflowId:i,stepId:h,stepKey:c,name:p,description:y,ts:Date.now(),durationMs:ce,error:ie,...n&&{metadata:n},diagnostics:J(T,s.errorMeta,"throw",b,ce)}),w&&u({type:"step_complete",workflowId:i,stepKey:w,name:p,description:y,ts:Date.now(),durationMs:ce,result:L(ie,{cause:T}),meta:{origin:"throw",thrown:T},...n&&{metadata:n}}),t?.(ie,p,E),f(ie,{origin:"throw",thrown:T})}}let Z=te,pe=performance.now()-x,le=O(Z.error,{origin:"result",resultCause:Z.cause});throw u({type:"step_error",workflowId:i,stepId:h,stepKey:c,name:p,description:y,ts:Date.now(),durationMs:pe,error:le,...n&&{metadata:n},diagnostics:J(Z.error,s.errorMeta,"result",S.attempts,pe)}),w&&u({type:"step_complete",workflowId:i,stepKey:w,name:p,description:y,ts:Date.now(),durationMs:pe,result:Z,meta:{origin:"result",resultCause:Z.cause},...n&&{metadata:n}}),t?.(le,p,E),f(le,{origin:"result",resultCause:Z.cause})})();l.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 s=o.key??a,n=a,p=a,c="error"in o?()=>o.error:o.onError,w=d;return(async()=>{let y=w?performance.now():0;d&&u({type:"step_start",workflowId:i,stepId:p,stepKey:s,name:n,ts:Date.now()});try{let g=await m(),R=performance.now()-y;return u({type:"step_success",workflowId:i,stepId:p,stepKey:s,name:n,ts:Date.now(),durationMs:R}),s&&u({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:R,result:q(g)}),g}catch(g){let R=c(g),h=performance.now()-y,D=O(R,{origin:"throw",thrown:g});throw u({type:"step_error",workflowId:i,stepId:p,stepKey:s,name:n,ts:Date.now(),durationMs:h,error:D}),s&&u({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:h,result:L(R,{cause:g}),meta:{origin:"throw",thrown:g}}),t?.(D,n,E),f(D,{origin:"throw",thrown:g})}})()},l.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 s=o.key??a,n=a,p=a,c="error"in o?()=>o.error:o.onError,w=d;return(async()=>{let y=w?performance.now():0;d&&u({type:"step_start",workflowId:i,stepId:p,stepKey:s,name:n,ts:Date.now()});let g=await m();if(g.ok){let R=performance.now()-y;return u({type:"step_success",workflowId:i,stepId:p,stepKey:s,name:n,ts:Date.now(),durationMs:R}),s&&u({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:R,result:q(g.value)}),g.value}else{let R=c(g.error),h=performance.now()-y,D=O(R,{origin:"result",resultCause:g.error});throw u({type:"step_error",workflowId:i,stepId:p,stepKey:s,name:n,ts:Date.now(),durationMs:h,error:D}),s&&u({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:h,result:L(R,{cause:g.error}),meta:{origin:"result",resultCause:g.error}}),t?.(D,n,E),f(D,{origin:"result",resultCause:g.error})}})()},l.fromNullable=(a,m,o,s)=>{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 l(a,async()=>{let n=await m();return n!=null?q(n):L(o())},s)},l.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 l(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})},l.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 l(a,m,{key:o.key??a,timeout:o})},l.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 s=typeof m=="string"?He(m):m;if(!s)throw new Error(`step.sleep: invalid duration '${m}'`);let n=s.millis,p=o?.signal;return l(a,async()=>{if(N?.aborted||p?.aborted){let c=new Error("Sleep aborted");throw c.name="AbortError",c}return new Promise((c,w)=>{let y={timeoutId:void 0},g=()=>{y.timeoutId&&clearTimeout(y.timeoutId);let R=new Error("Sleep aborted");R.name="AbortError",w(R)};N?.addEventListener("abort",g,{once:!0}),p?.addEventListener("abort",g,{once:!0}),y.timeoutId=setTimeout(()=>{N?.removeEventListener("abort",g),p?.removeEventListener("abort",g),c(q(void 0))},n)})},{key:o?.key??a,description:o?.description})},l.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 W(m,o);if(o&&typeof o=="object"&&!Array.isArray(o)){let n=B(o);return M(n,{name:m})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),l.race=(a,m)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),n=!1,p={scopeId:o,type:"race",winnerId:void 0};_.push(p);let c=()=>{if(n)return;n=!0;let w=_.findIndex(y=>y.scopeId===o);w!==-1&&_.splice(w,1),u({type:"scope_end",workflowId:i,scopeId:o,ts:Date.now(),durationMs:performance.now()-s,winnerId:p.winnerId})};u({type:"scope_start",workflowId:i,scopeId:o,scopeType:"race",name:a,ts:Date.now()});try{let w=await m();if(c(),!w.ok)throw t?.(w.error,a,E),f(w.error,{origin:"result",resultCause:w.cause});return w.value}catch(w){throw c(),w}})()},l.allSettled=(a,m)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),n=!1;_.push({scopeId:o,type:"allSettled"});let p=()=>{if(n)return;n=!0;let c=_.findIndex(w=>w.scopeId===o);c!==-1&&_.splice(c,1),u({type:"scope_end",workflowId:i,scopeId:o,ts:Date.now(),durationMs:performance.now()-s})};u({type:"scope_start",workflowId:i,scopeId:o,scopeType:"allSettled",name:a,ts:Date.now()});try{let c=await m();if(p(),!c.ok)throw t?.(c.error,a,E),f(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw p(),c}})()},l.if=(a,m,o)=>o(),l.label=l.if,l.branch=async(a,m)=>{let{condition:o,then:s,else:n}=m;if(o())return await s();if(n)return await n()},l.arm=(a,m)=>({fn:a,errors:m}),l.forEach=async(a,m,o)=>{let s=[],n=o.maxIterations,p=0,c="run"in o,w=Symbol.asyncIterator in m?m:(async function*(){yield*m})();for await(let y of w){if(n!==void 0&&p>=n)break;let g;c?g=await o.run(y,p):g=await o.item.handler(y,p,l),s.push(g),p++}return s},l.item=a=>({__forEachItemHandler:!0,handler:a}),l.dep=(a,m)=>m,l.run=(a,m,o)=>l(a,()=>m,o),l.workflow=(a,m,o)=>l(a,m,o),l.andThen=(a,m,o,s)=>l(a,()=>o(m),s),l.match=async(a,m,o,s)=>l(a,async()=>{let n=await m;return n.ok?q(await o.ok(n.value)):q(await o.err(n.error,n.cause))},s),l.all=l.parallel,l.map=async(a,m,o,s)=>{let n=s?.concurrency??m.length;return l(a,()=>n>=m.length?be(m.map((p,c)=>o(p,c))):(async()=>{let p=[];for(let c=0;c<m.length;c+=n){let w=m.slice(c,c+n),y=await be(w.map((g,R)=>o(g,c+R)));if(!y.ok)return y;p.push(...y.value)}return q(p)})(),{key:s?.key})},l.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 s=o.key??a,n=a,p=Q(s),c=d;return(async()=>{let w=c?performance.now():0;d&&u({type:"step_start",workflowId:i,stepId:p,stepKey:s,name:n,ts:Date.now()});let y;try{y=await m()}catch(x){if(U(x))throw u({type:"step_aborted",workflowId:i,stepId:p,stepKey:s,name:n,ts:Date.now(),durationMs:performance.now()-w}),x;let I;try{I=$(x)}catch(C){throw re(C)}if(o.on!==void 0&&o.on!==I){let C=performance.now()-w;throw u({type:"step_error",workflowId:i,stepId:p,stepKey:s,name:n,ts:Date.now(),durationMs:C,error:I}),s&&u({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:C,result:L(I,{cause:x}),meta:{origin:"throw",thrown:x}}),t?.(I,n,E),f(I,{origin:"throw",thrown:x})}let A;try{A=await o.fallback()}catch(C){if(U(C))throw u({type:"step_aborted",workflowId:i,stepId:p,stepKey:s,name:n,ts:Date.now(),durationMs:performance.now()-w}),C;let S;try{S=$(C)}catch(Z){throw re(Z)}let te=performance.now()-w;throw u({type:"step_error",workflowId:i,stepId:p,stepKey:s,name:n,ts:Date.now(),durationMs:te,error:S}),s&&u({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:te,result:L(S,{cause:C}),meta:{origin:"throw",thrown:C}}),t?.(S,n,E),f(S,{origin:"throw",thrown:C})}if(A.ok){let C=performance.now()-w;return u({type:"step_success",workflowId:i,stepId:p,stepKey:s,name:n,ts:Date.now(),durationMs:C}),s&&u({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:C,result:A,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(I)}}),A.value}else{let C=performance.now()-w,S=O(A.error,{origin:"result",resultCause:A.cause});throw u({type:"step_error",workflowId:i,stepId:p,stepKey:s,name:n,ts:Date.now(),durationMs:C,error:S}),s&&u({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:C,result:A,meta:{origin:"result",resultCause:A.cause}}),t?.(S,n,E),f(S,{origin:"result",resultCause:A.cause})}}if(y.ok){let x=performance.now()-w;return u({type:"step_success",workflowId:i,stepId:p,stepKey:s,name:n,ts:Date.now(),durationMs:x}),s&&u({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:x,result:y}),y.value}let g=y.error;if(o.on!==void 0&&o.on!==g){let x=performance.now()-w,I=O(g,{origin:"result",resultCause:y.cause});throw u({type:"step_error",workflowId:i,stepId:p,stepKey:s,name:n,ts:Date.now(),durationMs:x,error:I}),s&&u({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:x,result:y,meta:{origin:"result",resultCause:y.cause}}),t?.(I,n,E),f(I,{origin:"result",resultCause:y.cause})}let R;try{R=await o.fallback()}catch(x){if(U(x))throw u({type:"step_aborted",workflowId:i,stepId:p,stepKey:s,name:n,ts:Date.now(),durationMs:performance.now()-w}),x;let I;try{I=$(x)}catch(C){throw re(C)}let A=performance.now()-w;throw u({type:"step_error",workflowId:i,stepId:p,stepKey:s,name:n,ts:Date.now(),durationMs:A,error:I}),s&&u({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:A,result:L(I,{cause:x}),meta:{origin:"throw",thrown:x}}),t?.(I,n,E),f(I,{origin:"throw",thrown:x})}if(R.ok){let x=performance.now()-w;return u({type:"step_success",workflowId:i,stepId:p,stepKey:s,name:n,ts:Date.now(),durationMs:x}),s&&u({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:x,result:R,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(g)}}),R.value}let h=performance.now()-w,D=O(R.error,{origin:"result",resultCause:R.cause});throw u({type:"step_error",workflowId:i,stepId:p,stepKey:s,name:n,ts:Date.now(),durationMs:h,error:D}),s&&u({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:h,result:R,meta:{origin:"result",resultCause:R.cause}}),t?.(D,n,E),f(D,{origin:"result",resultCause:R.cause})})()},l.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,s=a,n=Q(o),p=d;return(async()=>{let c=p?performance.now():0;d&&u({type:"step_start",workflowId:i,stepId:n,stepKey:o,name:s,ts:Date.now()});let w;try{w=await m.acquire()}catch(A){if(U(A))throw u({type:"step_aborted",workflowId:i,stepId:n,stepKey:o,name:s,ts:Date.now(),durationMs:performance.now()-c}),A;let C;try{C=$(A)}catch(te){throw re(te)}let S=performance.now()-c;throw u({type:"step_error",workflowId:i,stepId:n,stepKey:o,name:s,ts:Date.now(),durationMs:S,error:C}),o&&u({type:"step_complete",workflowId:i,stepKey:o,name:s,ts:Date.now(),durationMs:S,result:L(C,{cause:A}),meta:{origin:"throw",thrown:A}}),t?.(C,s,E),f(C,{origin:"throw",thrown:A})}if(!w.ok){let A=performance.now()-c,C=O(w.error,{origin:"result",resultCause:w.cause});throw u({type:"step_error",workflowId:i,stepId:n,stepKey:o,name:s,ts:Date.now(),durationMs:A,error:C}),o&&u({type:"step_complete",workflowId:i,stepKey:o,name:s,ts:Date.now(),durationMs:A,result:w,meta:{origin:"result",resultCause:w.cause}}),t?.(C,s,E),f(C,{origin:"result",resultCause:w.cause})}let y=w.value,g,R,h=!1;try{g=await m.use(y)}catch(A){if(U(A)){try{await m.release(y)}catch(C){console.warn(`[awaitly] step.withResource("${a}"): release threw after earlyExit:`,C)}throw A}R=A,h=!0}try{await m.release(y)}catch(A){console.warn(`[awaitly] step.withResource("${a}"): release threw:`,A)}if(h){let A;try{A=$(R)}catch(S){throw re(S)}let C=performance.now()-c;throw u({type:"step_error",workflowId:i,stepId:n,stepKey:o,name:s,ts:Date.now(),durationMs:C,error:A}),o&&u({type:"step_complete",workflowId:i,stepKey:o,name:s,ts:Date.now(),durationMs:C,result:L(A,{cause:R}),meta:{origin:"throw",thrown:R}}),t?.(A,s,E),f(A,{origin:"throw",thrown:R})}let D=g;if(D.ok){let A=performance.now()-c;return u({type:"step_success",workflowId:i,stepId:n,stepKey:o,name:s,ts:Date.now(),durationMs:A}),o&&u({type:"step_complete",workflowId:i,stepKey:o,name:s,ts:Date.now(),durationMs:A,result:D}),D.value}let x=performance.now()-c,I=O(D.error,{origin:"result",resultCause:D.cause});throw u({type:"step_error",workflowId:i,stepId:n,stepKey:o,name:s,ts:Date.now(),durationMs:x,error:I}),o&&u({type:"step_complete",workflowId:i,stepKey:o,name:s,ts:Date.now(),durationMs:x,result:D,meta:{origin:"result",resultCause:D.cause}}),t?.(I,s,E),f(I,{origin:"result",resultCause:D.cause})})()};let H=await r({step:l});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
|
+
"use strict";var ye=Object.defineProperty;var Ge=Object.getOwnPropertyDescriptor;var Xe=Object.getOwnPropertyNames;var Qe=Object.prototype.hasOwnProperty;var Ze=(t,e)=>{for(var r in e)ye(t,r,{get:e[r],enumerable:!0})},et=(t,e,r,u)=>{if(e&&typeof e=="object"||typeof e=="function")for(let g of Xe(e))!Qe.call(t,g)&&g!==r&&ye(t,g,{get:()=>e[g],enumerable:!(u=Ge(e,g))||u.enumerable});return t};var tt=t=>et(ye({},"__esModule",{value:!0}),t);var wt={};Ze(wt,{clearStep:()=>xe,createApprovalChecker:()=>Ye,createApprovalStateCollector:()=>ie,createApprovalStep:()=>Ce,createApprovalWebhookHandler:()=>qe,createHITLOrchestrator:()=>$e,createMemoryApprovalStore:()=>He,createMemoryWorkflowStateStore:()=>Ve,gatedStep:()=>he,getPendingApprovals:()=>ve,hasPendingApproval:()=>Ae,injectApproval:()=>ae,isApprovalRejected:()=>Re,isPendingApproval:()=>X,pendingApproval:()=>Se});module.exports=tt(wt);var pe=class extends Error{_tag};function z(t,e){return class extends pe{_tag=t;constructor(r,u){let g=e?.message?e.message(r??{}):t;if(super(g),this.name=t,Object.setPrototypeOf(this,new.target.prototype),r&&typeof r=="object"){let{_tag:k,name:b,message:E,stack:O,...i}=r,H=Object.prototype.hasOwnProperty.call(i,"cause"),_=H?i.cause:void 0;H&&delete i.cause;let $=u?.cause!==void 0;if(H&&$)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,i),H&&(this.cause=_),$&&(this.cause=u?.cause)}else u?.cause!==void 0&&(this.cause=u.cause)}}}Object.defineProperty(z,Symbol.hasInstance,{value:t=>t instanceof pe});(g=>{function t(k){return k instanceof Error}g.isError=t;function e(k){return k instanceof pe}g.isTaggedError=e;function r(k,b){let E=k._tag,O=b[E];return O(k)}g.match=r;function u(k,b,E){let O=k._tag,i=b[O];return i?i(k):E(k)}g.matchPartial=u})(z||={});var be=class extends z("TimeoutError",{message:e=>e.operation?`TimeoutError: ${e.operation} timed out after ${e.ms}ms`:`TimeoutError: Operation timed out after ${e.ms}ms`}){},Pe=class extends z("RetryExhaustedError",{message:e=>e.operation?`RetryExhaustedError: ${e.operation} failed after ${e.attempts} attempts`:`RetryExhaustedError: Operation failed after ${e.attempts} attempts`}){},Oe=class extends z("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`:""}`}){},_e=class extends z("CircuitBreakerOpenError",{message:e=>`CircuitBreakerOpenError: Circuit ${e.circuitName} is ${e.state??"OPEN"}${e.retryAfterMs?`, retry after ${Math.ceil(e.retryAfterMs/1e3)}s`:""}`}){},Ie=class extends z("ValidationError",{message:e=>`ValidationError: Invalid ${e.field} - ${e.reason}`}){},Me=class extends z("NotFoundError",{message:e=>e.id?`NotFoundError: ${e.resource} with id ${e.id} not found`:`NotFoundError: ${e.resource} not found`}){},De=class extends z("UnauthorizedError",{message:e=>e.reason?`UnauthorizedError: ${e.reason}`:e.action&&e.resource?`UnauthorizedError: Not authorized to ${e.action} ${e.resource}`:"UnauthorizedError: Access denied"}){},Ue=class extends z("NetworkError",{message:e=>e.url?`NetworkError: ${e.reason} (${e.url})`:`NetworkError: ${e.reason}`}){},je=class extends z("CompensationError",{message:e=>`CompensationError: Failed to compensate step ${e.step}`}){},le=class extends z("UnexpectedError",{message:e=>`UnexpectedError: ${e.cause instanceof Error?e.cause.message:String(e.cause??"unknown")}`}){};function rt(t){let e=t.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!e)return;let r=parseFloat(e[1]),u=e[2].toLowerCase();return{_tag:"Duration",millis:r*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[u]??1)}}function nt(t){return new le({cause:t})}function Y(t){return{ok:!0,value:t}}function L(t,e){let r=e?.cause;return{ok:!1,error:t,...r!==void 0?{cause:r}:{}}}function ot(t){if(t==null)return"unknown";if(typeof t=="string")return t.trim()||"unknown";if(typeof t=="object"){let e=t;if(typeof e._tag=="string"){let r=e._tag.trim();if(r)return r}if(typeof e.tag=="string"){let r=e.tag.trim();if(r)return r}if(typeof e.code=="string"){let r=e.code.trim();if(r)return r}else if(typeof e.code=="number")return String(e.code);if(t instanceof Error&&t.name){let r=t.name.trim();if(r)return r}}return"unknown"}function st(t,e){if(!(!e||!t))return e[t]}function at(t){let{intent:e,domain:r,owner:u,tags:g,stateChanges:k,emits:b,calls:E}=t;if(!e&&!r&&!u&&!g?.length&&!k?.length&&!b?.length&&!E?.length)return;let O={};return e&&(O.intent=e),r&&(O.domain=r),u&&(O.owner=u),g?.length&&(O.tags=g),k?.length&&(O.stateChanges=k),b?.length&&(O.emits=b),E?.length&&(O.calls=E),O}function G(t,e,r,u,g){let k=ot(t),b=st(k,e),E={tag:k,origin:r};return b!==void 0&&(E.classification=b),u!==void 0&&(E.attempt=u),g!==void 0&&(E.cumulativeDurationMs=g),E}var se=Symbol.for("step_timeout_marker");function Ne(t){return typeof t!="object"||t===null?!1:t.type==="STEP_TIMEOUT"?!0:se in t}function it(t){if(!(typeof t!="object"||t===null)){if(t.type==="STEP_TIMEOUT"){let e=t;return{timeoutMs:e.timeoutMs,stepName:e.stepName,stepKey:e.stepKey,attempt:e.attempt}}if(se in t)return t[se]}}var Be=Symbol("early-exit");function ut(t,e){return{[Be]:!0,error:t,meta:e}}function pt(t){return typeof t=="object"&&t!==null&&t[Be]===!0}var Le=Symbol("mapper-exception");function ne(t){return{[Le]:!0,thrown:t}}function lt(t){return typeof t=="object"&&t!==null&&t[Le]===!0}function ge(t,e){let{backoff:r,initialDelay:u,maxDelay:g,jitter:k}=e,b;switch(r){case"fixed":b=u;break;case"linear":b=u*t;break;case"exponential":b=u*Math.pow(2,t-1);break}if(b=Math.min(b,g),k){let E=b*.25*Math.random();b=b+E}return Math.floor(b)}function ke(t){return new Promise(e=>setTimeout(e,t))}var We=Symbol("timeout"),ce=Symbol("timeout-option");function ct(t){return typeof t=="object"&&t!==null&&t[ce]===!0}async function dt(t,e,r,u){let g=new AbortController,k=e.onTimeout??"error",b=()=>typeof k=="function"?k({name:r.name,key:r.key,ms:e.ms}):e.error??{type:"STEP_TIMEOUT",stepName:r.name,stepKey:r.key,timeoutMs:e.ms,attempt:r.attempt},E;u?.aborted&&g.abort(u.reason);let O;u&&!u.aborted&&(O=()=>g.abort(u.reason),u.addEventListener("abort",O,{once:!0}));let i=new Promise((_,$)=>{E=setTimeout(()=>{if(k!=="disconnect"&&g.abort(),k==="option"){$({[ce]:!0,ms:e.ms});return}$({[We]:!0,error:b()})},e.ms)}),H;e.signal?H=Promise.resolve(t(g.signal)):H=Promise.resolve(t());try{return await Promise.race([H,i])}catch(_){if(typeof _=="object"&&_!==null&&_[ce]===!0)throw{[ce]:!0,ms:e.ms};if(typeof _=="object"&&_!==null&&_[We]===!0){k==="disconnect"&&H.catch(()=>{});let $=_.error;if(typeof $=="object"&&$!==null&&$.type!=="STEP_TIMEOUT"){let Z={timeoutMs:e.ms,stepName:r.name,stepKey:r.key,attempt:r.attempt};se in $?$[se]=Z:Object.defineProperty($,se,{value:Z,enumerable:!1,writable:!0,configurable:!1})}throw $}throw _}finally{clearTimeout(E),O&&u&&u.removeEventListener("abort",O)}}var oe={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function Ke(t,e){let{onError:r,onEvent:u,catchUnexpected:g,workflowId:k,workflowName:b,context:E,_workflowSignal:O}=e&&typeof e=="object"?e:{},i=k??crypto.randomUUID(),H=g??nt,_=[],$=0,Z=c=>c??`step_${++$}`,p=c=>{let B=c.context!==void 0||E===void 0?c:{...c,context:E},W=b!==void 0&&B.workflowName===void 0?{...B,workflowName:b}:B;if(W.type==="step_success"){let D=W.stepId;for(let F=_.length-1;F>=0;F--){let q=_[F];if(q.type==="race"&&!q.winnerId){q.winnerId=D;break}}}u?.(W,E)},f=ut,j=c=>pt(c),I=(c,B)=>c,N=c=>typeof c=="function"?!1:!!(c&&typeof c=="object"&&"ok"in c||c&&typeof c=="object"&&"then"in c&&typeof c.then=="function");try{let B=function(a){let m={};for(let[o,s]of Object.entries(a))if(typeof s=="function")m[o]=s;else if(s&&typeof s=="object"&&"fn"in s)m[o]=s.fn;else throw new TypeError(`step.parallel: operation "${o}" must be a function or { fn, errors? } object`);return m},W=function(a,m){let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),n=!1;_.push({scopeId:o,type:"parallel"});let l=()=>{if(n)return;n=!0;let d=_.findIndex(w=>w.scopeId===o);d!==-1&&_.splice(d,1),p({type:"scope_end",workflowId:i,scopeId:o,ts:Date.now(),durationMs:performance.now()-s})};p({type:"scope_start",workflowId:i,scopeId:o,scopeType:"parallel",name:a,ts:Date.now()});try{let d=await m();if(l(),!d.ok)throw r?.(d.error,a,E),f(d.error,{origin:"result",resultCause:d.cause});return d.value}catch(d){throw l(),d}})()},D=function(a,m){let o=Object.keys(a),s=m.name??`Parallel(${o.join(", ")})`,n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let l=performance.now(),d=!1;_.push({scopeId:n,type:"parallel"});let w=()=>{if(d)return;d=!0;let y=_.findIndex(T=>T.scopeId===n);y!==-1&&_.splice(y,1),p({type:"scope_end",workflowId:i,scopeId:n,ts:Date.now(),durationMs:performance.now()-l})};p({type:"scope_start",workflowId:i,scopeId:n,scopeType:"parallel",name:s,ts:Date.now()});try{let y=await new Promise(x=>{if(o.length===0){x([]);return}let h=!1,U=o.length,A=new Array(o.length);for(let M=0;M<o.length;M++){let v=o[M],C=M;Promise.resolve(a[v]()).catch(S=>L({type:"PROMISE_REJECTED",cause:S},{cause:{type:"PROMISE_REJECTION",reason:S}})).then(S=>{if(!h){if(!S.ok){h=!0,x([{key:v,result:S}]);return}A[C]={key:v,result:S},U--,U===0&&x(A)}})}});w();let T={};for(let{key:x,result:h}of y){if(!h.ok)throw r?.(h.error,x,E),f(h.error,{origin:"result",resultCause:h.cause});T[x]=h.value}return T}catch(y){throw w(),y}})()};var K=B,V=W,J=D;let c=(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 s=o??{},n=at(s),l=a,d=s.key??a,w=s.key??a,{description:y,retry:T,timeout:x}=s,h=Z(d),U=u,A=U?performance.now():0,v=N(m)?()=>m:m,S={attempts:Math.max(1,T?.attempts??1),backoff:T?.backoff??oe.backoff,initialDelay:T?.initialDelay??oe.initialDelay,maxDelay:T?.maxDelay??oe.maxDelay,jitter:T?.jitter??oe.jitter,retryOn:T?.retryOn??oe.retryOn,onRetry:T?.onRetry??oe.onRetry};u&&p({type:"step_start",workflowId:i,stepId:h,stepKey:d,name:l,description:y,ts:Date.now(),...n&&{metadata:n}});let re;for(let P=1;P<=S.attempts;P++){let ze=U?performance.now():0;try{let R;if(x?R=await dt(v,x,{name:l,key:d,attempt:P},O):R=await v(),R.ok){let te=performance.now()-A;return p({type:"step_success",workflowId:i,stepId:h,stepKey:d,name:l,description:y,ts:Date.now(),durationMs:te,...n&&{metadata:n}}),w&&p({type:"step_complete",workflowId:i,stepKey:w,name:l,description:y,ts:Date.now(),durationMs:te,result:R,...n&&{metadata:n}}),R.value}if(re=R,P<S.attempts&&S.retryOn(R.error,P)){let te=ge(P,S);p({type:"step_retry",workflowId:i,stepId:h,stepKey:d,name:l,ts:Date.now(),attempt:P+1,maxAttempts:S.attempts,delayMs:te,error:R.error,...n&&{metadata:n},diagnostics:G(R.error,s.errorMeta,"result",P,performance.now()-A)}),S.onRetry(R.error,P,te),await ke(te);continue}S.attempts>1&&p({type:"step_retries_exhausted",workflowId:i,stepId:h,stepKey:d,name:l,ts:Date.now(),durationMs:performance.now()-A,attempts:P,lastError:R.error,...n&&{metadata:n},diagnostics:G(R.error,s.errorMeta,"result",P,performance.now()-A)});break}catch(R){let te=performance.now()-ze;if(ct(R)){let Q=R.ms;p({type:"step_timeout",workflowId:i,stepId:h,stepKey:d,name:l,ts:Date.now(),timeoutMs:Q,attempt:P,...n&&{metadata:n},diagnostics:G(R,s.errorMeta,"timeout",P)}),p({type:"step_success",workflowId:i,stepId:h,stepKey:d,name:l,description:y,ts:Date.now(),durationMs:performance.now()-A,...n&&{metadata:n}}),w&&p({type:"step_complete",workflowId:i,stepKey:w,name:l,description:y,ts:Date.now(),durationMs:performance.now()-A,result:Y(void 0),...n&&{metadata:n}});return}if(j(R))throw p({type:"step_aborted",workflowId:i,stepId:h,stepKey:d,name:l,description:y,ts:Date.now(),durationMs:te,...n&&{metadata:n}}),R;if(Ne(R)){let Q=it(R),Je=x?.ms??Q?.timeoutMs??0;if(p({type:"step_timeout",workflowId:i,stepId:h,stepKey:d,name:l,ts:Date.now(),timeoutMs:Je,attempt:P,...n&&{metadata:n},diagnostics:G(R,s.errorMeta,"timeout",P)}),P<S.attempts&&S.retryOn(R,P)){let fe=ge(P,S);p({type:"step_retry",workflowId:i,stepId:h,stepKey:d,name:l,ts:Date.now(),attempt:P+1,maxAttempts:S.attempts,delayMs:fe,error:R,...n&&{metadata:n},diagnostics:G(R,s.errorMeta,"timeout",P,performance.now()-A)}),S.onRetry(R,P,fe),await ke(fe);continue}S.attempts>1&&p({type:"step_retries_exhausted",workflowId:i,stepId:h,stepKey:d,name:l,ts:Date.now(),durationMs:performance.now()-A,attempts:P,lastError:R,...n&&{metadata:n},diagnostics:G(R,s.errorMeta,"timeout",P,performance.now()-A)});let Ee=performance.now()-A;throw p({type:"step_error",workflowId:i,stepId:h,stepKey:d,name:l,description:y,ts:Date.now(),durationMs:Ee,error:R,...n&&{metadata:n},diagnostics:G(R,s.errorMeta,"timeout",P,Ee)}),w&&p({type:"step_complete",workflowId:i,stepKey:w,name:l,description:y,ts:Date.now(),durationMs:Ee,result:L(R,{cause:R}),meta:{origin:"throw",thrown:R},...n&&{metadata:n}}),r?.(R,l,E),f(R,{origin:"throw",thrown:R})}if(P<S.attempts&&S.retryOn(R,P)){let Q=ge(P,S);p({type:"step_retry",workflowId:i,stepId:h,stepKey:d,name:l,ts:Date.now(),attempt:P+1,maxAttempts:S.attempts,delayMs:Q,error:R,...n&&{metadata:n},diagnostics:G(R,s.errorMeta,"throw",P,performance.now()-A)}),S.onRetry(R,P,Q),await ke(Q);continue}S.attempts>1&&!Ne(R)&&p({type:"step_retries_exhausted",workflowId:i,stepId:h,stepKey:d,name:l,ts:Date.now(),durationMs:performance.now()-A,attempts:P,lastError:R,...n&&{metadata:n},diagnostics:G(R,s.errorMeta,"throw",P,performance.now()-A)});let we=performance.now()-A,ue;try{ue=H(R)}catch(Q){throw ne(Q)}throw p({type:"step_error",workflowId:i,stepId:h,stepKey:d,name:l,description:y,ts:Date.now(),durationMs:we,error:ue,...n&&{metadata:n},diagnostics:G(R,s.errorMeta,"throw",P,we)}),w&&p({type:"step_complete",workflowId:i,stepKey:w,name:l,description:y,ts:Date.now(),durationMs:we,result:L(ue,{cause:R}),meta:{origin:"throw",thrown:R},...n&&{metadata:n}}),r?.(ue,l,E),f(ue,{origin:"throw",thrown:R})}}let ee=re,de=performance.now()-A,me=I(ee.error,{origin:"result",resultCause:ee.cause});throw p({type:"step_error",workflowId:i,stepId:h,stepKey:d,name:l,description:y,ts:Date.now(),durationMs:de,error:me,...n&&{metadata:n},diagnostics:G(ee.error,s.errorMeta,"result",S.attempts,de)}),w&&p({type:"step_complete",workflowId:i,stepKey:w,name:l,description:y,ts:Date.now(),durationMs:de,result:ee,meta:{origin:"result",resultCause:ee.cause},...n&&{metadata:n}}),r?.(me,l,E),f(me,{origin:"result",resultCause:ee.cause})})();c.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 s=o.key??a,n=a,l=a,d="error"in o?()=>o.error:o.onError,w=u;return(async()=>{let y=w?performance.now():0;u&&p({type:"step_start",workflowId:i,stepId:l,stepKey:s,name:n,ts:Date.now()});try{let T=await m(),x=performance.now()-y;return p({type:"step_success",workflowId:i,stepId:l,stepKey:s,name:n,ts:Date.now(),durationMs:x}),s&&p({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:x,result:Y(T)}),T}catch(T){let x=d(T),h=performance.now()-y,U=I(x,{origin:"throw",thrown:T});throw p({type:"step_error",workflowId:i,stepId:l,stepKey:s,name:n,ts:Date.now(),durationMs:h,error:U}),s&&p({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:h,result:L(x,{cause:T}),meta:{origin:"throw",thrown:T}}),r?.(U,n,E),f(U,{origin:"throw",thrown:T})}})()},c.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 s=o.key??a,n=a,l=a,d="error"in o?()=>o.error:o.onError,w=u;return(async()=>{let y=w?performance.now():0;u&&p({type:"step_start",workflowId:i,stepId:l,stepKey:s,name:n,ts:Date.now()});let T=await m();if(T.ok){let x=performance.now()-y;return p({type:"step_success",workflowId:i,stepId:l,stepKey:s,name:n,ts:Date.now(),durationMs:x}),s&&p({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:x,result:Y(T.value)}),T.value}else{let x=d(T.error),h=performance.now()-y,U=I(x,{origin:"result",resultCause:T.error});throw p({type:"step_error",workflowId:i,stepId:l,stepKey:s,name:n,ts:Date.now(),durationMs:h,error:U}),s&&p({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:h,result:L(x,{cause:T.error}),meta:{origin:"result",resultCause:T.error}}),r?.(U,n,E),f(U,{origin:"result",resultCause:T.error})}})()},c.fromNullable=(a,m,o,s)=>{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 c(a,async()=>{let n=await m();return n!=null?Y(n):L(o())},s)},c.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 c(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})},c.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 c(a,m,{key:o.key??a,timeout:o})},c.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 s=typeof m=="string"?rt(m):m;if(!s)throw new Error(`step.sleep: invalid duration '${m}'`);let n=s.millis,l=o?.signal;return c(a,async()=>{if(O?.aborted||l?.aborted){let d=new Error("Sleep aborted");throw d.name="AbortError",d}return new Promise((d,w)=>{let y={timeoutId:void 0},T=()=>{y.timeoutId&&clearTimeout(y.timeoutId);let x=new Error("Sleep aborted");x.name="AbortError",w(x)};O?.addEventListener("abort",T,{once:!0}),l?.addEventListener("abort",T,{once:!0}),y.timeoutId=setTimeout(()=>{O?.removeEventListener("abort",T),l?.removeEventListener("abort",T),d(Y(void 0))},n)})},{key:o?.key??a,description:o?.description})},c.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 W(m,o);if(o&&typeof o=="object"&&!Array.isArray(o)){let n=B(o);return D(n,{name:m})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),c.race=(a,m)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),n=!1,l={scopeId:o,type:"race",winnerId:void 0};_.push(l);let d=()=>{if(n)return;n=!0;let w=_.findIndex(y=>y.scopeId===o);w!==-1&&_.splice(w,1),p({type:"scope_end",workflowId:i,scopeId:o,ts:Date.now(),durationMs:performance.now()-s,winnerId:l.winnerId})};p({type:"scope_start",workflowId:i,scopeId:o,scopeType:"race",name:a,ts:Date.now()});try{let w=await m();if(d(),!w.ok)throw r?.(w.error,a,E),f(w.error,{origin:"result",resultCause:w.cause});return w.value}catch(w){throw d(),w}})()},c.allSettled=(a,m)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),n=!1;_.push({scopeId:o,type:"allSettled"});let l=()=>{if(n)return;n=!0;let d=_.findIndex(w=>w.scopeId===o);d!==-1&&_.splice(d,1),p({type:"scope_end",workflowId:i,scopeId:o,ts:Date.now(),durationMs:performance.now()-s})};p({type:"scope_start",workflowId:i,scopeId:o,scopeType:"allSettled",name:a,ts:Date.now()});try{let d=await m();if(l(),!d.ok)throw r?.(d.error,a,E),f(d.error,{origin:"result",resultCause:d.cause});return d.value}catch(d){throw l(),d}})()},c.if=(a,m,o)=>o(),c.label=c.if,c.branch=async(a,m)=>{let{condition:o,then:s,else:n}=m;if(o())return await s();if(n)return await n()},c.arm=(a,m)=>({fn:a,errors:m}),c.forEach=async(a,m,o)=>{let s=[],n=o.maxIterations,l=0,d="run"in o,w=Symbol.asyncIterator in m?m:(async function*(){yield*m})();for await(let y of w){if(n!==void 0&&l>=n)break;let T;d?T=await o.run(y,l):T=await o.item.handler(y,l,c),s.push(T),l++}return s},c.item=a=>({__forEachItemHandler:!0,handler:a}),c.dep=(a,m)=>m,c.run=(a,m,o)=>c(a,()=>m,o),c.workflow=(a,m,o)=>c(a,m,o),c.andThen=(a,m,o,s)=>c(a,()=>o(m),s),c.match=async(a,m,o,s)=>c(a,async()=>{let n=await m;return n.ok?Y(await o.ok(n.value)):Y(await o.err(n.error,n.cause))},s),c.all=c.parallel,c.map=async(a,m,o,s)=>{let n=s?.concurrency??m.length;return c(a,()=>n>=m.length?Fe(m.map((l,d)=>o(l,d))):(async()=>{let l=[];for(let d=0;d<m.length;d+=n){let w=m.slice(d,d+n),y=await Fe(w.map((T,x)=>o(T,d+x)));if(!y.ok)return y;l.push(...y.value)}return Y(l)})(),{key:s?.key})},c.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 s=o.key??a,n=a,l=Z(s),d=u;return(async()=>{let w=d?performance.now():0;u&&p({type:"step_start",workflowId:i,stepId:l,stepKey:s,name:n,ts:Date.now()});let y;try{y=await m()}catch(A){if(j(A))throw p({type:"step_aborted",workflowId:i,stepId:l,stepKey:s,name:n,ts:Date.now(),durationMs:performance.now()-w}),A;let M;try{M=H(A)}catch(C){throw ne(C)}if(o.on!==void 0&&o.on!==M){let C=performance.now()-w;throw p({type:"step_error",workflowId:i,stepId:l,stepKey:s,name:n,ts:Date.now(),durationMs:C,error:M}),s&&p({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:C,result:L(M,{cause:A}),meta:{origin:"throw",thrown:A}}),r?.(M,n,E),f(M,{origin:"throw",thrown:A})}let v;try{v=await o.fallback()}catch(C){if(j(C))throw p({type:"step_aborted",workflowId:i,stepId:l,stepKey:s,name:n,ts:Date.now(),durationMs:performance.now()-w}),C;let S;try{S=H(C)}catch(ee){throw ne(ee)}let re=performance.now()-w;throw p({type:"step_error",workflowId:i,stepId:l,stepKey:s,name:n,ts:Date.now(),durationMs:re,error:S}),s&&p({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:re,result:L(S,{cause:C}),meta:{origin:"throw",thrown:C}}),r?.(S,n,E),f(S,{origin:"throw",thrown:C})}if(v.ok){let C=performance.now()-w;return p({type:"step_success",workflowId:i,stepId:l,stepKey:s,name:n,ts:Date.now(),durationMs:C}),s&&p({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:C,result:v,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(M)}}),v.value}else{let C=performance.now()-w,S=I(v.error,{origin:"result",resultCause:v.cause});throw p({type:"step_error",workflowId:i,stepId:l,stepKey:s,name:n,ts:Date.now(),durationMs:C,error:S}),s&&p({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:C,result:v,meta:{origin:"result",resultCause:v.cause}}),r?.(S,n,E),f(S,{origin:"result",resultCause:v.cause})}}if(y.ok){let A=performance.now()-w;return p({type:"step_success",workflowId:i,stepId:l,stepKey:s,name:n,ts:Date.now(),durationMs:A}),s&&p({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:A,result:y}),y.value}let T=y.error;if(o.on!==void 0&&o.on!==T){let A=performance.now()-w,M=I(T,{origin:"result",resultCause:y.cause});throw p({type:"step_error",workflowId:i,stepId:l,stepKey:s,name:n,ts:Date.now(),durationMs:A,error:M}),s&&p({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:A,result:y,meta:{origin:"result",resultCause:y.cause}}),r?.(M,n,E),f(M,{origin:"result",resultCause:y.cause})}let x;try{x=await o.fallback()}catch(A){if(j(A))throw p({type:"step_aborted",workflowId:i,stepId:l,stepKey:s,name:n,ts:Date.now(),durationMs:performance.now()-w}),A;let M;try{M=H(A)}catch(C){throw ne(C)}let v=performance.now()-w;throw p({type:"step_error",workflowId:i,stepId:l,stepKey:s,name:n,ts:Date.now(),durationMs:v,error:M}),s&&p({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:v,result:L(M,{cause:A}),meta:{origin:"throw",thrown:A}}),r?.(M,n,E),f(M,{origin:"throw",thrown:A})}if(x.ok){let A=performance.now()-w;return p({type:"step_success",workflowId:i,stepId:l,stepKey:s,name:n,ts:Date.now(),durationMs:A}),s&&p({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:A,result:x,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(T)}}),x.value}let h=performance.now()-w,U=I(x.error,{origin:"result",resultCause:x.cause});throw p({type:"step_error",workflowId:i,stepId:l,stepKey:s,name:n,ts:Date.now(),durationMs:h,error:U}),s&&p({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:h,result:x,meta:{origin:"result",resultCause:x.cause}}),r?.(U,n,E),f(U,{origin:"result",resultCause:x.cause})})()},c.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,s=a,n=Z(o),l=u;return(async()=>{let d=l?performance.now():0;u&&p({type:"step_start",workflowId:i,stepId:n,stepKey:o,name:s,ts:Date.now()});let w;try{w=await m.acquire()}catch(v){if(j(v))throw p({type:"step_aborted",workflowId:i,stepId:n,stepKey:o,name:s,ts:Date.now(),durationMs:performance.now()-d}),v;let C;try{C=H(v)}catch(re){throw ne(re)}let S=performance.now()-d;throw p({type:"step_error",workflowId:i,stepId:n,stepKey:o,name:s,ts:Date.now(),durationMs:S,error:C}),o&&p({type:"step_complete",workflowId:i,stepKey:o,name:s,ts:Date.now(),durationMs:S,result:L(C,{cause:v}),meta:{origin:"throw",thrown:v}}),r?.(C,s,E),f(C,{origin:"throw",thrown:v})}if(!w.ok){let v=performance.now()-d,C=I(w.error,{origin:"result",resultCause:w.cause});throw p({type:"step_error",workflowId:i,stepId:n,stepKey:o,name:s,ts:Date.now(),durationMs:v,error:C}),o&&p({type:"step_complete",workflowId:i,stepKey:o,name:s,ts:Date.now(),durationMs:v,result:w,meta:{origin:"result",resultCause:w.cause}}),r?.(C,s,E),f(C,{origin:"result",resultCause:w.cause})}let y=w.value,T,x,h=!1;try{T=await m.use(y)}catch(v){if(j(v)){try{await m.release(y)}catch(C){console.warn(`[awaitly] step.withResource("${a}"): release threw after earlyExit:`,C)}throw v}x=v,h=!0}try{await m.release(y)}catch(v){console.warn(`[awaitly] step.withResource("${a}"): release threw:`,v)}if(h){let v;try{v=H(x)}catch(S){throw ne(S)}let C=performance.now()-d;throw p({type:"step_error",workflowId:i,stepId:n,stepKey:o,name:s,ts:Date.now(),durationMs:C,error:v}),o&&p({type:"step_complete",workflowId:i,stepKey:o,name:s,ts:Date.now(),durationMs:C,result:L(v,{cause:x}),meta:{origin:"throw",thrown:x}}),r?.(v,s,E),f(v,{origin:"throw",thrown:x})}let U=T;if(U.ok){let v=performance.now()-d;return p({type:"step_success",workflowId:i,stepId:n,stepKey:o,name:s,ts:Date.now(),durationMs:v}),o&&p({type:"step_complete",workflowId:i,stepKey:o,name:s,ts:Date.now(),durationMs:v,result:U}),U.value}let A=performance.now()-d,M=I(U.error,{origin:"result",resultCause:U.cause});throw p({type:"step_error",workflowId:i,stepId:n,stepKey:o,name:s,ts:Date.now(),durationMs:A,error:M}),o&&p({type:"step_complete",workflowId:i,stepKey:o,name:s,ts:Date.now(),durationMs:A,result:U,meta:{origin:"result",resultCause:U.cause}}),r?.(M,s,E),f(M,{origin:"result",resultCause:U.cause})})()};let q=await t({step:c});if(process.env.NODE_ENV!=="production"&&q!==null&&typeof q=="object"&&"ok"in q&&typeof q.ok=="boolean"){let a=q;(a.ok===!0&&"value"in a||a.ok===!1&&"error"in a)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
|
|
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 q
|
|
6
|
+
See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return Y(q)}catch(c){if(lt(c))throw c.thrown;if(j(c)){let W=c.meta.origin==="throw"?c.meta.thrown:c.meta.origin==="result"?c.meta.resultCause:void 0;return L(c.error,{cause:W})}let B=H(c);return r?.(B,"unexpected",E),L(B,{cause:c})}}Ke.strict=(t,e)=>Ke(t,e);async function Fe(t){return t.length===0?Y([]):new Promise(e=>{let r=!1,u=t.length,g=new Array(t.length);for(let k=0;k<t.length;k++){let b=k;Promise.resolve(t[b]).catch(E=>L({type:"PROMISE_REJECTED",cause:E},{cause:{type:"PROMISE_REJECTION",reason:E}})).then(E=>{if(!r){if(!E.ok){r=!0,e(E);return}g[b]=E.value,u--,u===0&&e(Y(g))}})}})}function Te(t){return t.type==="step_complete"}function X(t){return typeof t=="object"&&t!==null&&t.type==="PENDING_APPROVAL"}function Re(t){return typeof t=="object"&&t!==null&&t.type==="APPROVAL_REJECTED"}function ae(t,e){let r=new Map(t.steps);return r.set(e.stepKey,{result:Y(e.value)}),{steps:r}}function xe(t,e){let r=new Map(t.steps);return r.delete(e),{steps:r}}function Ae(t,e){let r=t.steps.get(e);return!r||r.result.ok?!1:X(r.result.error)}function ve(t){let e=[];for(let[r,u]of t.steps)!u.result.ok&&X(u.result.error)&&e.push(r);return e}function ie(){let t=new Map;return{handleEvent:e=>{Te(e)&&t.set(e.stepKey,{result:e.result,meta:e.meta})},getResumeState:()=>({steps:new Map(t)}),clear:()=>t.clear(),hasPendingApprovals:()=>{for(let e of t.values())if(!e.result.ok&&X(e.result.error))return!0;return!1},getPendingApprovals:()=>{let e=[];for(let[r,u]of t)!u.result.ok&&X(u.result.error)&&e.push({stepKey:r,error:u.result.error});return e},injectApproval:(e,r)=>(t.set(e,{result:Y(r)}),{steps:new Map(t)})}}function Se(t,e){return L({type:"PENDING_APPROVAL",stepKey:t,reason:e?.reason,metadata:e?.metadata})}function Ce(t){return async()=>{let e=await t.checkApproval();switch(e.status){case"pending":return L({type:"PENDING_APPROVAL",stepKey:t.key,reason:t.pendingReason,metadata:t.metadata});case"rejected":return L({type:"APPROVAL_REJECTED",stepKey:t.key,reason:e.reason});case"approved":return Y(e.value)}}}function he(t,e){return async r=>{if(!(typeof e.requiresApproval=="function"?await e.requiresApproval(r):e.requiresApproval))return t(r);if(e.checkApproval){let k=await e.checkApproval();switch(k.status){case"approved":return t(r);case"rejected":return L({type:"APPROVAL_REJECTED",stepKey:e.key,reason:k.reason});case"pending":break}}let g=typeof e.description=="function"?e.description(r):e.description;return L({type:"PENDING_APPROVAL",stepKey:e.key,reason:g,metadata:{...e.metadata,pendingArgs:r,gatedOperation:!0}})}}function He(){let t=new Map;return{async getApproval(e){let r=t.get(e);return r?r.expiresAt&&Date.now()>r.expiresAt?{status:"expired",expiredAt:r.expiresAt}:r:{status:"pending"}},async createApproval(e,r){t.set(e,{status:"pending",metadata:r?.metadata,expiresAt:r?.expiresAt})},async grantApproval(e,r,u){t.set(e,{status:"approved",value:r,approvedBy:u?.approvedBy,approvedAt:Date.now()})},async rejectApproval(e,r,u){t.set(e,{status:"rejected",reason:r,rejectedBy:u?.rejectedBy,rejectedAt:Date.now()})},async editApproval(e,r,u,g){t.set(e,{status:"edited",originalValue:r,editedValue:u,editedBy:g?.editedBy,editedAt:Date.now()})},async cancelApproval(e){t.delete(e)},async listPending(e){let r=[];for(let[u,g]of t)g.status==="pending"&&(!e?.prefix||u.startsWith(e.prefix))&&r.push(u);return r}}}function Ve(){let t=new Map;return{async save(e){t.set(e.runId,{...e,updatedAt:Date.now()})},async load(e){return t.get(e)},async delete(e){t.delete(e)},async list(e){let r=[];for(let[u,g]of t)if(!(e?.workflowName&&g.workflowName!==e.workflowName)){if(e?.hasPendingApprovals!==void 0){let k=g.pendingApprovals.length>0;if(e.hasPendingApprovals!==k)continue}r.push(u)}return r},async findByPendingApproval(e){let r=[];for(let[u,g]of t)g.pendingApprovals.includes(e)&&r.push(u);return r}}}function $e(t){let{approvalStore:e,workflowStateStore:r,defaultExpirationMs:u=10080*60*1e3,logger:g=()=>{},notificationChannel:k}=t;async function b(f,j,I,N,K){let V=K?.runId??crypto.randomUUID(),J=ie(),c=j({onEvent:J.handleEvent}),B=N,W=await c.run(async F=>I({...F,args:B})),D=J.getPendingApprovals().map(F=>F.stepKey);if(D.length>0){let F={runId:V,workflowName:f,resumeState:J.getResumeState(),pendingApprovals:D,input:N,metadata:K?.metadata,startedAt:Date.now(),updatedAt:Date.now()};await r.save(F);let q,a;!W.ok&&X(W.error)&&(q=W.error.reason,a=W.error.metadata);let m=Date.now()+u;for(let o of D)await e.createApproval(o,{metadata:{...a,runId:V,workflowName:f},expiresAt:m});if(k)for(let o of D)try{let s=J.getPendingApprovals().find(n=>n.stepKey===o);await k.onApprovalNeeded({approvalKey:o,runId:V,workflowName:f,reason:q,metadata:{...K?.metadata,...a},expiresAt:m,summary:q??`Approval needed for ${o}`,pendingArgs:s?.error.metadata})}catch(s){g(`Failed to notify for approval ${o}: ${s}`)}return g(`Workflow ${V} paused, waiting for: ${D.join(", ")}`),{status:"paused",runId:V,pendingApprovals:D,reason:q}}return g(`Workflow ${V} completed`),{status:"completed",result:W}}async function E(f,j,I){let N=await r.load(f);if(!N)throw new Error(`Workflow run not found: ${f}`);for(let D of N.pendingApprovals){let F=await e.getApproval(D);if(F.status==="pending")return{status:"paused",runId:f,pendingApprovals:N.pendingApprovals};if(F.status,F.status==="expired")throw new Error(`Approval ${D} has expired`)}let K=N.resumeState;for(let D of N.pendingApprovals){let F=await e.getApproval(D);F.status==="approved"?K=ae(K,{stepKey:D,value:F.value}):F.status==="edited"&&(K=ae(K,{stepKey:D,value:F.editedValue}))}let V=ie(),J=j({resumeState:K,onEvent:V.handleEvent}),c=N.input,B=await J.run(async D=>I({...D,args:c})),W=V.getPendingApprovals().map(D=>D.stepKey);if(W.length>0){let D={...N,resumeState:V.getResumeState(),pendingApprovals:W,updatedAt:Date.now()};await r.save(D);for(let q of W)await e.createApproval(q,{metadata:{runId:f,workflowName:N.workflowName},expiresAt:Date.now()+u});g(`Workflow ${f} paused again, waiting for: ${W.join(", ")}`);let F;return!B.ok&&X(B.error)&&(F=B.error.reason),{status:"paused",runId:f,pendingApprovals:W,reason:F}}return await r.delete(f),g(`Workflow ${f} resumed and completed`),{status:"resumed",runId:f,result:B}}async function O(f,j,I){await e.grantApproval(f,j,{approvedBy:I?.approvedBy});let N=Date.now(),K=[];if(I?.autoResume!==!1){let V=await r.findByPendingApproval(f);for(let J of V)K.push(J)}return k?.onApprovalResolved&&await k.onApprovalResolved({approvalKey:f,action:"approved",actorId:I?.approvedBy,resolvedAt:N,value:j}),g(`Approval ${f} granted by ${I?.approvedBy??"unknown"}`),{grantedAt:N,resumedWorkflows:K}}async function i(f,j,I){await e.rejectApproval(f,j,{rejectedBy:I?.rejectedBy}),k?.onApprovalResolved&&await k.onApprovalResolved({approvalKey:f,action:"rejected",actorId:I?.rejectedBy,resolvedAt:Date.now(),reason:j}),g(`Approval ${f} rejected: ${j}`)}async function H(f,j,I,N){await e.editApproval(f,j,I,{editedBy:N?.editedBy});let K=Date.now();return k?.onApprovalResolved&&await k.onApprovalResolved({approvalKey:f,action:"edited",actorId:N?.editedBy,resolvedAt:K,value:I,originalValue:j}),g(`Approval ${f} edited by ${N?.editedBy??"unknown"}`),{editedAt:K}}async function _(f,j){let{intervalMs:I=1e3,maxPolls:N,timeoutMs:K,onPollStart:V,onPollComplete:J}=j??{},c=Date.now(),B=0;for(;;){V?.();let W=await e.getApproval(f);if(J?.(W),W.status!=="pending")return W;if(B++,N!==void 0&&B>=N)return{status:"pending"};if(K!==void 0&&Date.now()-c>=K)return{status:"pending"};await new Promise(D=>setTimeout(D,I))}}async function $(f){return r.load(f)}async function Z(f){return r.list({workflowName:f,hasPendingApprovals:!0})}async function p(f){let j=await r.list(),I=0,N=Date.now()-f;for(let K of j){let V=await r.load(K);V&&V.updatedAt<N&&V.pendingApprovals.length===0&&(await r.delete(K),I++)}return g(`Cleaned up ${I} old workflow states`),I}return{execute:b,resume:E,grantApproval:O,rejectApproval:i,editApproval:H,pollApproval:_,getWorkflowStatus:$,listPendingWorkflows:Z,cleanup:p}}function qe(t){return async e=>{let{key:r,action:u,value:g,originalValue:k,editedValue:b,reason:E,actorId:O}=e;try{switch(u){case"approve":return await t.grantApproval(r,g,{approvedBy:O}),{success:!0,message:`Approval ${r} granted`,data:{key:r,action:u,timestamp:Date.now()}};case"reject":return E?(await t.rejectApproval(r,E,{rejectedBy:O}),{success:!0,message:`Approval ${r} rejected`,data:{key:r,action:u,timestamp:Date.now()}}):{success:!1,message:"Reason is required for rejection"};case"edit":return k===void 0||b===void 0?{success:!1,message:"Both originalValue and editedValue are required for edit"}:(await t.editApproval(r,k,b,{editedBy:O}),{success:!0,message:`Approval ${r} edited`,data:{key:r,action:u,timestamp:Date.now()}});case"cancel":return await t.cancelApproval(r),{success:!0,message:`Approval ${r} cancelled`,data:{key:r,action:u,timestamp:Date.now()}};default:return{success:!1,message:`Unknown action: ${u}`}}}catch(i){return{success:!1,message:i instanceof Error?i.message:String(i)}}}}function Ye(t){return e=>async()=>{let r=await t.getApproval(e);switch(r.status){case"pending":return{status:"pending"};case"approved":return{status:"approved",value:r.value};case"edited":return{status:"approved",value:r.editedValue};case"rejected":return{status:"rejected",reason:r.reason};case"expired":return{status:"rejected",reason:"Approval request expired"};default:return{status:"pending"}}}}0&&(module.exports={clearStep,createApprovalChecker,createApprovalStateCollector,createApprovalStep,createApprovalWebhookHandler,createHITLOrchestrator,createMemoryApprovalStore,createMemoryWorkflowStateStore,gatedStep,getPendingApprovals,hasPendingApproval,injectApproval,isApprovalRejected,isPendingApproval,pendingApproval});
|
|
7
7
|
//# sourceMappingURL=hitl.cjs.map
|