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/webhook.d.cts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import './
|
|
1
|
+
import { R as Result, c as AsyncResult, ae as RunStep } from './run-entry-yQu63Yj9.cjs';
|
|
2
|
+
import { a as Workflow } from './persistence-entry-jflY61az.cjs';
|
|
3
|
+
import { U as UnexpectedError } from './errors-entry-CMH73Eym.cjs';
|
|
4
|
+
import './types-uR3JpwvF.cjs';
|
|
5
|
+
import '@standard-schema/spec';
|
|
6
|
+
import './tagged-error.cjs';
|
|
4
7
|
|
|
5
8
|
/**
|
|
6
9
|
* awaitly/webhook
|
|
@@ -143,7 +146,7 @@ declare function defaultValidationErrorMapper(error: ValidationError): WebhookRe
|
|
|
143
146
|
* Default unexpected error mapper.
|
|
144
147
|
* Returns 500 Internal Server Error.
|
|
145
148
|
*/
|
|
146
|
-
declare function defaultUnexpectedErrorMapper(
|
|
149
|
+
declare function defaultUnexpectedErrorMapper(error: unknown): WebhookResponse<ErrorResponseBody>;
|
|
147
150
|
/**
|
|
148
151
|
* Create a webhook handler for a workflow.
|
|
149
152
|
*
|
package/dist/webhook.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import './
|
|
1
|
+
import { R as Result, c as AsyncResult, ae as RunStep } from './run-entry-rw7zll_G.js';
|
|
2
|
+
import { a as Workflow } from './persistence-entry-ClFhxd2Q.js';
|
|
3
|
+
import { U as UnexpectedError } from './errors-entry-DOt5UUl4.js';
|
|
4
|
+
import './types-CuWK5AlK.js';
|
|
5
|
+
import '@standard-schema/spec';
|
|
6
|
+
import './tagged-error.js';
|
|
4
7
|
|
|
5
8
|
/**
|
|
6
9
|
* awaitly/webhook
|
|
@@ -143,7 +146,7 @@ declare function defaultValidationErrorMapper(error: ValidationError): WebhookRe
|
|
|
143
146
|
* Default unexpected error mapper.
|
|
144
147
|
* Returns 500 Internal Server Error.
|
|
145
148
|
*/
|
|
146
|
-
declare function defaultUnexpectedErrorMapper(
|
|
149
|
+
declare function defaultUnexpectedErrorMapper(error: unknown): WebhookResponse<ErrorResponseBody>;
|
|
147
150
|
/**
|
|
148
151
|
* Create a webhook handler for a workflow.
|
|
149
152
|
*
|
package/dist/webhook.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
function Se(r){let i=r.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!i)return;let a=parseFloat(i[1]),w=i[2].toLowerCase();return{_tag:"Duration",millis:a*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[w]??1)}}var we="UNEXPECTED_ERROR";function Ae(r){return we}function W(r){return{ok:!0,value:r}}function U(r,i){let a=i?.cause;return{ok:!1,error:r,...a!==void 0?{cause:a}:{}}}var re=r=>r.ok;var Te=r=>r===we||typeof r=="object"&&r!==null&&r.type==="UNEXPECTED_ERROR";function Pe(r){if(r==null)return"unknown";if(typeof r=="string")return r.trim()||"unknown";if(typeof r=="object"){let i=r;if(typeof i._tag=="string"){let a=i._tag.trim();if(a)return a}if(typeof i.tag=="string"){let a=i.tag.trim();if(a)return a}if(typeof i.code=="string"){let a=i.code.trim();if(a)return a}else if(typeof i.code=="number")return String(i.code);if(r instanceof Error&&r.name){let a=r.name.trim();if(a)return a}}return"unknown"}function Oe(r,i){if(!(!i||!r))return i[r]}function _e(r){let{intent:i,domain:a,owner:w,tags:O,stateChanges:h,emits:k,calls:m}=r;if(!i&&!a&&!w&&!O?.length&&!h?.length&&!k?.length&&!m?.length)return;let _={};return i&&(_.intent=i),a&&(_.domain=a),w&&(_.owner=w),O?.length&&(_.tags=O),h?.length&&(_.stateChanges=h),k?.length&&(_.emits=k),m?.length&&(_.calls=m),_}function B(r,i,a,w,O){let h=Pe(r),k=Oe(h,i),m={tag:h,origin:a};return k!==void 0&&(m.classification=k),w!==void 0&&(m.attempt=w),O!==void 0&&(m.cumulativeDurationMs=O),m}var z=Symbol.for("step_timeout_marker");function de(r){return typeof r!="object"||r===null?!1:r.type==="STEP_TIMEOUT"?!0:z in r}function ve(r){if(!(typeof r!="object"||r===null)){if(r.type==="STEP_TIMEOUT"){let i=r;return{timeoutMs:i.timeoutMs,stepName:i.stepName,stepKey:i.stepKey,attempt:i.attempt}}if(z in r)return r[z]}}var fe=Symbol("early-exit");function Me(r,i){return{[fe]:!0,error:r,meta:i}}function Ie(r){return typeof r=="object"&&r!==null&&r[fe]===!0}var ke=Symbol("mapper-exception");function J(r){return{[ke]:!0,thrown:r}}function De(r){return typeof r=="object"&&r!==null&&r[ke]===!0}function ue(r,i){let{backoff:a,initialDelay:w,maxDelay:O,jitter:h}=i,k;switch(a){case"fixed":k=w;break;case"linear":k=w*r;break;case"exponential":k=w*Math.pow(2,r-1);break}if(k=Math.min(k,O),h){let m=k*.25*Math.random();k=k+m}return Math.floor(k)}function pe(r){return new Promise(i=>setTimeout(i,r))}var Ee=Symbol("timeout"),te=Symbol("timeout-option");function Ue(r){return typeof r=="object"&&r!==null&&r[te]===!0}async function Ne(r,i,a,w){let O=new AbortController,h=i.onTimeout??"error",k=()=>typeof h=="function"?h({name:a.name,key:a.key,ms:i.ms}):i.error??{type:"STEP_TIMEOUT",stepName:a.name,stepKey:a.key,timeoutMs:i.ms,attempt:a.attempt},m;w?.aborted&&O.abort(w.reason);let _;w&&!w.aborted&&(_=()=>O.abort(w.reason),w.addEventListener("abort",_,{once:!0}));let s=new Promise((P,N)=>{m=setTimeout(()=>{if(h!=="disconnect"&&O.abort(),h==="option"){N({[te]:!0,ms:i.ms});return}N({[Ee]:!0,error:k()})},i.ms)}),D;i.signal?D=Promise.resolve(r(O.signal)):D=Promise.resolve(r());try{return await Promise.race([D,s])}catch(P){if(typeof P=="object"&&P!==null&&P[te]===!0)throw{[te]:!0,ms:i.ms};if(typeof P=="object"&&P!==null&&P[Ee]===!0){h==="disconnect"&&D.catch(()=>{});let N=P.error;if(typeof N=="object"&&N!==null&&N.type!=="STEP_TIMEOUT"){let q={timeoutMs:i.ms,stepName:a.name,stepKey:a.key,attempt:a.attempt};z in N?N[z]=q:Object.defineProperty(N,z,{value:q,enumerable:!1,writable:!0,configurable:!1})}throw N}throw P}finally{clearTimeout(m),_&&w&&w.removeEventListener("abort",_)}}var G={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function me(r,i){let{onError:a,onEvent:w,catchUnexpected:O,workflowId:h,workflowName:k,context:m,_workflowSignal:_}=i&&typeof i=="object"?i:{},s=h??crypto.randomUUID(),D=O??Ae,P=[],N=0,q=c=>c??`step_${++N}`,u=c=>{let K=c.context!==void 0||m===void 0?c:{...c,context:m},H=k!==void 0&&K.workflowName===void 0?{...K,workflowName:k}:K;if(H.type==="step_success"){let Z=H.stepId;for(let ee=P.length-1;ee>=0;ee--){let j=P[ee];if(j.type==="race"&&!j.winnerId){j.winnerId=Z;break}}}w?.(H,m)},I=Me,V=c=>Ie(c),L=(c,K)=>c,Ce=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 K=function(o){let d={};for(let[n,t]of Object.entries(o))if(typeof t=="function")d[n]=t;else if(t&&typeof t=="object"&&"fn"in t)d[n]=t.fn;else throw new TypeError(`step.parallel: operation "${n}" must be a function or { fn, errors? } object`);return d},H=function(o,d){let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1;P.push({scopeId:n,type:"parallel"});let p=()=>{if(e)return;e=!0;let l=P.findIndex(E=>E.scopeId===n);l!==-1&&P.splice(l,1),u({type:"scope_end",workflowId:s,scopeId:n,ts:Date.now(),durationMs:performance.now()-t})};u({type:"scope_start",workflowId:s,scopeId:n,scopeType:"parallel",name:o,ts:Date.now()});try{let l=await d();if(p(),!l.ok)throw a?.(l.error,o,m),I(l.error,{origin:"result",resultCause:l.cause});return l.value}catch(l){throw p(),l}})()},Z=function(o,d){let n=Object.keys(o),t=d.name??`Parallel(${n.join(", ")})`,e=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let p=performance.now(),l=!1;P.push({scopeId:e,type:"parallel"});let E=()=>{if(l)return;l=!0;let y=P.findIndex(T=>T.scopeId===e);y!==-1&&P.splice(y,1),u({type:"scope_end",workflowId:s,scopeId:e,ts:Date.now(),durationMs:performance.now()-p})};u({type:"scope_start",workflowId:s,scopeId:e,scopeType:"parallel",name:t,ts:Date.now()});try{let y=await new Promise(R=>{if(n.length===0){R([]);return}let S=!1,M=n.length,g=new Array(n.length);for(let v=0;v<n.length;v++){let x=n[v],b=v;Promise.resolve(o[x]()).catch(C=>U({type:"PROMISE_REJECTED",cause:C},{cause:{type:"PROMISE_REJECTION",reason:C}})).then(C=>{if(!S){if(!C.ok){S=!0,R([{key:x,result:C}]);return}g[b]={key:x,result:C},M--,M===0&&R(g)}})}});E();let T={};for(let{key:R,result:S}of y){if(!S.ok)throw a?.(S.error,R,m),I(S.error,{origin:"result",resultCause:S.cause});T[R]=S.value}return T}catch(y){throw E(),y}})()};var He=K,Xe=H,Ye=Z;let c=(o,d,n)=>(async()=>{if(typeof o!="string"||o.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let t=n??{},e=_e(t),p=o,l=t.key??o,E=t.key??o,{description:y,retry:T,timeout:R}=t,S=q(l),M=w,g=M?performance.now():0,x=Ce(d)?()=>d:d,C={attempts:Math.max(1,T?.attempts??1),backoff:T?.backoff??G.backoff,initialDelay:T?.initialDelay??G.initialDelay,maxDelay:T?.maxDelay??G.maxDelay,jitter:T?.jitter??G.jitter,retryOn:T?.retryOn??G.retryOn,onRetry:T?.onRetry??G.onRetry};w&&u({type:"step_start",workflowId:s,stepId:S,stepKey:l,name:p,description:y,ts:Date.now(),...e&&{metadata:e}});let $;for(let A=1;A<=C.attempts;A++){let be=M?performance.now():0;try{let f;if(R?f=await Ne(x,R,{name:p,key:l,attempt:A},_):f=await x(),f.ok){let Y=performance.now()-g;return u({type:"step_success",workflowId:s,stepId:S,stepKey:l,name:p,description:y,ts:Date.now(),durationMs:Y,...e&&{metadata:e}}),E&&u({type:"step_complete",workflowId:s,stepKey:E,name:p,description:y,ts:Date.now(),durationMs:Y,result:f,...e&&{metadata:e}}),f.value}if($=f,A<C.attempts&&C.retryOn(f.error,A)){let Y=ue(A,C);u({type:"step_retry",workflowId:s,stepId:S,stepKey:l,name:p,ts:Date.now(),attempt:A+1,maxAttempts:C.attempts,delayMs:Y,error:f.error,...e&&{metadata:e},diagnostics:B(f.error,t.errorMeta,"result",A,performance.now()-g)}),C.onRetry(f.error,A,Y),await pe(Y);continue}C.attempts>1&&u({type:"step_retries_exhausted",workflowId:s,stepId:S,stepKey:l,name:p,ts:Date.now(),durationMs:performance.now()-g,attempts:A,lastError:f.error,...e&&{metadata:e},diagnostics:B(f.error,t.errorMeta,"result",A,performance.now()-g)});break}catch(f){let Y=performance.now()-be;if(Ue(f)){let F=f.ms;u({type:"step_timeout",workflowId:s,stepId:S,stepKey:l,name:p,ts:Date.now(),timeoutMs:F,attempt:A,...e&&{metadata:e},diagnostics:B(f,t.errorMeta,"timeout",A)}),u({type:"step_success",workflowId:s,stepId:S,stepKey:l,name:p,description:y,ts:Date.now(),durationMs:performance.now()-g,...e&&{metadata:e}}),E&&u({type:"step_complete",workflowId:s,stepKey:E,name:p,description:y,ts:Date.now(),durationMs:performance.now()-g,result:W(void 0),...e&&{metadata:e}});return}if(V(f))throw u({type:"step_aborted",workflowId:s,stepId:S,stepKey:l,name:p,description:y,ts:Date.now(),durationMs:Y,...e&&{metadata:e}}),f;if(de(f)){let F=ve(f),he=R?.ms??F?.timeoutMs??0;if(u({type:"step_timeout",workflowId:s,stepId:S,stepKey:l,name:p,ts:Date.now(),timeoutMs:he,attempt:A,...e&&{metadata:e},diagnostics:B(f,t.errorMeta,"timeout",A)}),A<C.attempts&&C.retryOn(f,A)){let ie=ue(A,C);u({type:"step_retry",workflowId:s,stepId:S,stepKey:l,name:p,ts:Date.now(),attempt:A+1,maxAttempts:C.attempts,delayMs:ie,error:f,...e&&{metadata:e},diagnostics:B(f,t.errorMeta,"timeout",A,performance.now()-g)}),C.onRetry(f,A,ie),await pe(ie);continue}C.attempts>1&&u({type:"step_retries_exhausted",workflowId:s,stepId:S,stepKey:l,name:p,ts:Date.now(),durationMs:performance.now()-g,attempts:A,lastError:f,...e&&{metadata:e},diagnostics:B(f,t.errorMeta,"timeout",A,performance.now()-g)});let ae=performance.now()-g;throw u({type:"step_error",workflowId:s,stepId:S,stepKey:l,name:p,description:y,ts:Date.now(),durationMs:ae,error:f,...e&&{metadata:e},diagnostics:B(f,t.errorMeta,"timeout",A,ae)}),E&&u({type:"step_complete",workflowId:s,stepKey:E,name:p,description:y,ts:Date.now(),durationMs:ae,result:U(f,{cause:f}),meta:{origin:"throw",thrown:f},...e&&{metadata:e}}),a?.(f,p,m),I(f,{origin:"throw",thrown:f})}if(A<C.attempts&&C.retryOn(f,A)){let F=ue(A,C);u({type:"step_retry",workflowId:s,stepId:S,stepKey:l,name:p,ts:Date.now(),attempt:A+1,maxAttempts:C.attempts,delayMs:F,error:f,...e&&{metadata:e},diagnostics:B(f,t.errorMeta,"throw",A,performance.now()-g)}),C.onRetry(f,A,F),await pe(F);continue}C.attempts>1&&!de(f)&&u({type:"step_retries_exhausted",workflowId:s,stepId:S,stepKey:l,name:p,ts:Date.now(),durationMs:performance.now()-g,attempts:A,lastError:f,...e&&{metadata:e},diagnostics:B(f,t.errorMeta,"throw",A,performance.now()-g)});let se=performance.now()-g,Q;try{Q=D(f)}catch(F){throw J(F)}throw u({type:"step_error",workflowId:s,stepId:S,stepKey:l,name:p,description:y,ts:Date.now(),durationMs:se,error:Q,...e&&{metadata:e},diagnostics:B(f,t.errorMeta,"throw",A,se)}),E&&u({type:"step_complete",workflowId:s,stepKey:E,name:p,description:y,ts:Date.now(),durationMs:se,result:U(Q,{cause:f}),meta:{origin:"throw",thrown:f},...e&&{metadata:e}}),a?.(Q,p,m),I(Q,{origin:"throw",thrown:f})}}let X=$,ne=performance.now()-g,oe=L(X.error,{origin:"result",resultCause:X.cause});throw u({type:"step_error",workflowId:s,stepId:S,stepKey:l,name:p,description:y,ts:Date.now(),durationMs:ne,error:oe,...e&&{metadata:e},diagnostics:B(X.error,t.errorMeta,"result",C.attempts,ne)}),E&&u({type:"step_complete",workflowId:s,stepKey:E,name:p,description:y,ts:Date.now(),durationMs:ne,result:X,meta:{origin:"result",resultCause:X.cause},...e&&{metadata:e}}),a?.(oe,p,m),I(oe,{origin:"result",resultCause:X.cause})})();c.try=(o,d,n)=>{if(typeof o!="string"||o.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=n.key??o,e=o,p=o,l="error"in n?()=>n.error:n.onError,E=w;return(async()=>{let y=E?performance.now():0;w&&u({type:"step_start",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now()});try{let T=await d(),R=performance.now()-y;return u({type:"step_success",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:R}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:R,result:W(T)}),T}catch(T){let R=l(T),S=performance.now()-y,M=L(R,{origin:"throw",thrown:T});throw u({type:"step_error",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:S,error:M}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:S,result:U(R,{cause:T}),meta:{origin:"throw",thrown:T}}),a?.(M,e,m),I(M,{origin:"throw",thrown:T})}})()},c.fromResult=(o,d,n)=>{if(typeof o!="string"||o.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=n.key??o,e=o,p=o,l="error"in n?()=>n.error:n.onError,E=w;return(async()=>{let y=E?performance.now():0;w&&u({type:"step_start",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now()});let T=await d();if(T.ok){let R=performance.now()-y;return u({type:"step_success",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:R}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:R,result:W(T.value)}),T.value}else{let R=l(T.error),S=performance.now()-y,M=L(R,{origin:"result",resultCause:T.error});throw u({type:"step_error",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:S,error:M}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:S,result:U(R,{cause:T.error}),meta:{origin:"result",resultCause:T.error}}),a?.(M,e,m),I(M,{origin:"result",resultCause:T.error})}})()},c.fromNullable=(o,d,n,t)=>{if(typeof o!="string"||o.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(o,async()=>{let e=await d();return e!=null?W(e):U(n())},t)},c.retry=(o,d,n)=>{if(typeof o!="string"||o.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(o,d,{key:n.key??o,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})},c.withTimeout=(o,d,n)=>{if(typeof o!="string"||o.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(o,d,{key:n.key??o,timeout:n})},c.sleep=(o,d,n)=>{if(typeof o!="string"||o.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 d=="string"?Se(d):d;if(!t)throw new Error(`step.sleep: invalid duration '${d}'`);let e=t.millis,p=n?.signal;return c(o,async()=>{if(_?.aborted||p?.aborted){let l=new Error("Sleep aborted");throw l.name="AbortError",l}return new Promise((l,E)=>{let y={timeoutId:void 0},T=()=>{y.timeoutId&&clearTimeout(y.timeoutId);let R=new Error("Sleep aborted");R.name="AbortError",E(R)};_?.addEventListener("abort",T,{once:!0}),p?.addEventListener("abort",T,{once:!0}),y.timeoutId=setTimeout(()=>{_?.removeEventListener("abort",T),p?.removeEventListener("abort",T),l(W(void 0))},e)})},{key:n?.key??o,description:n?.description})},c.parallel=((...o)=>{if(typeof o[0]!="string")throw new TypeError("step.parallel(name, ...): first argument must be a string (step name). Example: step.parallel('Fetch data', { user: () => fetchUser(), posts: () => fetchPosts() })");let d=o[0],n=o[1];if(typeof n=="function")return H(d,n);if(n&&typeof n=="object"&&!Array.isArray(n)){let e=K(n);return Z(e,{name:d})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),c.race=(o,d)=>{let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1,p={scopeId:n,type:"race",winnerId:void 0};P.push(p);let l=()=>{if(e)return;e=!0;let E=P.findIndex(y=>y.scopeId===n);E!==-1&&P.splice(E,1),u({type:"scope_end",workflowId:s,scopeId:n,ts:Date.now(),durationMs:performance.now()-t,winnerId:p.winnerId})};u({type:"scope_start",workflowId:s,scopeId:n,scopeType:"race",name:o,ts:Date.now()});try{let E=await d();if(l(),!E.ok)throw a?.(E.error,o,m),I(E.error,{origin:"result",resultCause:E.cause});return E.value}catch(E){throw l(),E}})()},c.allSettled=(o,d)=>{let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1;P.push({scopeId:n,type:"allSettled"});let p=()=>{if(e)return;e=!0;let l=P.findIndex(E=>E.scopeId===n);l!==-1&&P.splice(l,1),u({type:"scope_end",workflowId:s,scopeId:n,ts:Date.now(),durationMs:performance.now()-t})};u({type:"scope_start",workflowId:s,scopeId:n,scopeType:"allSettled",name:o,ts:Date.now()});try{let l=await d();if(p(),!l.ok)throw a?.(l.error,o,m),I(l.error,{origin:"result",resultCause:l.cause});return l.value}catch(l){throw p(),l}})()},c.if=(o,d,n)=>n(),c.label=c.if,c.branch=async(o,d)=>{let{condition:n,then:t,else:e}=d;if(n())return await t();if(e)return await e()},c.arm=(o,d)=>({fn:o,errors:d}),c.forEach=async(o,d,n)=>{let t=[],e=n.maxIterations,p=0,l="run"in n,E=Symbol.asyncIterator in d?d:(async function*(){yield*d})();for await(let y of E){if(e!==void 0&&p>=e)break;let T;l?T=await n.run(y,p):T=await n.item.handler(y,p,c),t.push(T),p++}return t},c.item=o=>({__forEachItemHandler:!0,handler:o}),c.dep=(o,d)=>d,c.run=(o,d,n)=>c(o,()=>d,n),c.workflow=(o,d,n)=>c(o,d,n),c.andThen=(o,d,n,t)=>c(o,()=>n(d),t),c.match=async(o,d,n,t)=>c(o,async()=>{let e=await d;return e.ok?W(await n.ok(e.value)):W(await n.err(e.error,e.cause))},t),c.all=c.parallel,c.map=async(o,d,n,t)=>{let e=t?.concurrency??d.length;return c(o,()=>e>=d.length?ye(d.map((p,l)=>n(p,l))):(async()=>{let p=[];for(let l=0;l<d.length;l+=e){let E=d.slice(l,l+e),y=await ye(E.map((T,R)=>n(T,l+R)));if(!y.ok)return y;p.push(...y.value)}return W(p)})(),{key:t?.key})},c.withFallback=(o,d,n)=>{if(typeof o!="string"||o.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=n.key??o,e=o,p=q(t),l=w;return(async()=>{let E=l?performance.now():0;w&&u({type:"step_start",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now()});let y;try{y=await d()}catch(g){if(V(g))throw u({type:"step_aborted",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-E}),g;let v;try{v=D(g)}catch(b){throw J(b)}if(n.on!==void 0&&n.on!==v){let b=performance.now()-E;throw u({type:"step_error",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:b,error:v}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:b,result:U(v,{cause:g}),meta:{origin:"throw",thrown:g}}),a?.(v,e,m),I(v,{origin:"throw",thrown:g})}let x;try{x=await n.fallback()}catch(b){if(V(b))throw u({type:"step_aborted",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-E}),b;let C;try{C=D(b)}catch(X){throw J(X)}let $=performance.now()-E;throw u({type:"step_error",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:$,error:C}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:$,result:U(C,{cause:b}),meta:{origin:"throw",thrown:b}}),a?.(C,e,m),I(C,{origin:"throw",thrown:b})}if(x.ok){let b=performance.now()-E;return u({type:"step_success",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:b}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:b,result:x,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(v)}}),x.value}else{let b=performance.now()-E,C=L(x.error,{origin:"result",resultCause:x.cause});throw u({type:"step_error",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:b,error:C}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:b,result:x,meta:{origin:"result",resultCause:x.cause}}),a?.(C,e,m),I(C,{origin:"result",resultCause:x.cause})}}if(y.ok){let g=performance.now()-E;return u({type:"step_success",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:g}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:g,result:y}),y.value}let T=y.error;if(n.on!==void 0&&n.on!==T){let g=performance.now()-E,v=L(T,{origin:"result",resultCause:y.cause});throw u({type:"step_error",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:g,error:v}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:g,result:y,meta:{origin:"result",resultCause:y.cause}}),a?.(v,e,m),I(v,{origin:"result",resultCause:y.cause})}let R;try{R=await n.fallback()}catch(g){if(V(g))throw u({type:"step_aborted",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-E}),g;let v;try{v=D(g)}catch(b){throw J(b)}let x=performance.now()-E;throw u({type:"step_error",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:x,error:v}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:x,result:U(v,{cause:g}),meta:{origin:"throw",thrown:g}}),a?.(v,e,m),I(v,{origin:"throw",thrown:g})}if(R.ok){let g=performance.now()-E;return u({type:"step_success",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:g}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:g,result:R,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(T)}}),R.value}let S=performance.now()-E,M=L(R.error,{origin:"result",resultCause:R.cause});throw u({type:"step_error",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:S,error:M}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:S,result:R,meta:{origin:"result",resultCause:R.cause}}),a?.(M,e,m),I(M,{origin:"result",resultCause:R.cause})})()},c.withResource=(o,d)=>{if(typeof o!="string"||o.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=o,t=o,e=q(n),p=w;return(async()=>{let l=p?performance.now():0;w&&u({type:"step_start",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now()});let E;try{E=await d.acquire()}catch(x){if(V(x))throw u({type:"step_aborted",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-l}),x;let b;try{b=D(x)}catch($){throw J($)}let C=performance.now()-l;throw u({type:"step_error",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now(),durationMs:C,error:b}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:C,result:U(b,{cause:x}),meta:{origin:"throw",thrown:x}}),a?.(b,t,m),I(b,{origin:"throw",thrown:x})}if(!E.ok){let x=performance.now()-l,b=L(E.error,{origin:"result",resultCause:E.cause});throw u({type:"step_error",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now(),durationMs:x,error:b}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:x,result:E,meta:{origin:"result",resultCause:E.cause}}),a?.(b,t,m),I(b,{origin:"result",resultCause:E.cause})}let y=E.value,T,R,S=!1;try{T=await d.use(y)}catch(x){if(V(x)){try{await d.release(y)}catch(b){console.warn(`[awaitly] step.withResource("${o}"): release threw after earlyExit:`,b)}throw x}R=x,S=!0}try{await d.release(y)}catch(x){console.warn(`[awaitly] step.withResource("${o}"): release threw:`,x)}if(S){let x;try{x=D(R)}catch(C){throw J(C)}let b=performance.now()-l;throw u({type:"step_error",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now(),durationMs:b,error:x}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:b,result:U(x,{cause:R}),meta:{origin:"throw",thrown:R}}),a?.(x,t,m),I(x,{origin:"throw",thrown:R})}let M=T;if(M.ok){let x=performance.now()-l;return u({type:"step_success",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now(),durationMs:x}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:x,result:M}),M.value}let g=performance.now()-l,v=L(M.error,{origin:"result",resultCause:M.cause});throw u({type:"step_error",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now(),durationMs:g,error:v}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:g,result:M,meta:{origin:"result",resultCause:M.cause}}),a?.(v,t,m),I(v,{origin:"result",resultCause:M.cause})})()};let j=await r({step:c});if(process.env.NODE_ENV!=="production"&&j!==null&&typeof j=="object"&&"ok"in j&&typeof j.ok=="boolean"){let o=j;(o.ok===!0&&"value"in o||o.ok===!1&&"error"in o)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
|
|
1
|
+
var ee=class extends Error{_tag};function B(e,t){return class extends ee{_tag=e;constructor(i,y){let O=t?.message?t.message(i??{}):e;if(super(O),this.name=e,Object.setPrototypeOf(this,new.target.prototype),i&&typeof i=="object"){let{_tag:T,name:f,message:E,stack:A,...s}=i,v=Object.prototype.hasOwnProperty.call(s,"cause"),P=v?s.cause:void 0;v&&delete s.cause;let U=y?.cause!==void 0;if(v&&U)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,s),v&&(this.cause=P),U&&(this.cause=y?.cause)}else y?.cause!==void 0&&(this.cause=y.cause)}}}Object.defineProperty(B,Symbol.hasInstance,{value:e=>e instanceof ee});(O=>{function e(T){return T instanceof Error}O.isError=e;function t(T){return T instanceof ee}O.isTaggedError=t;function i(T,f){let E=T._tag,A=f[E];return A(T)}O.match=i;function y(T,f,E){let A=T._tag,s=f[A];return s?s(T):E(T)}O.matchPartial=y})(B||={});var ye=class extends B("TimeoutError",{message:t=>t.operation?`TimeoutError: ${t.operation} timed out after ${t.ms}ms`:`TimeoutError: Operation timed out after ${t.ms}ms`}){},we=class extends B("RetryExhaustedError",{message:t=>t.operation?`RetryExhaustedError: ${t.operation} failed after ${t.attempts} attempts`:`RetryExhaustedError: Operation failed after ${t.attempts} attempts`}){},fe=class extends B("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 B("CircuitBreakerOpenError",{message:t=>`CircuitBreakerOpenError: Circuit ${t.circuitName} is ${t.state??"OPEN"}${t.retryAfterMs?`, retry after ${Math.ceil(t.retryAfterMs/1e3)}s`:""}`}){},ke=class extends B("ValidationError",{message:t=>`ValidationError: Invalid ${t.field} - ${t.reason}`}){},ge=class extends B("NotFoundError",{message:t=>t.id?`NotFoundError: ${t.resource} with id ${t.id} not found`:`NotFoundError: ${t.resource} not found`}){},Re=class extends B("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 B("NetworkError",{message:t=>t.url?`NetworkError: ${t.reason} (${t.url})`:`NetworkError: ${t.reason}`}){},he=class extends B("CompensationError",{message:t=>`CompensationError: Failed to compensate step ${t.step}`}){},te=class extends B("UnexpectedError",{message:t=>`UnexpectedError: ${t.cause instanceof Error?t.cause.message:String(t.cause??"unknown")}`}){};function Be(e){let t=e.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!t)return;let i=parseFloat(t[1]),y=t[2].toLowerCase();return{_tag:"Duration",millis:i*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[y]??1)}}function We(e){return new te({cause:e})}function W(e){return{ok:!0,value:e}}function N(e,t){let i=t?.cause;return{ok:!1,error:e,...i!==void 0?{cause:i}:{}}}var se=e=>e.ok;var Pe=e=>e instanceof te||typeof e=="object"&&e!==null&&"_tag"in e&&e._tag==="UnexpectedError";function Ke(e){if(e==null)return"unknown";if(typeof e=="string")return e.trim()||"unknown";if(typeof e=="object"){let t=e;if(typeof t._tag=="string"){let 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(e instanceof Error&&e.name){let i=e.name.trim();if(i)return i}}return"unknown"}function je(e,t){if(!(!t||!e))return t[e]}function Fe(e){let{intent:t,domain:i,owner:y,tags:O,stateChanges:T,emits:f,calls:E}=e;if(!t&&!i&&!y&&!O?.length&&!T?.length&&!f?.length&&!E?.length)return;let A={};return t&&(A.intent=t),i&&(A.domain=i),y&&(A.owner=y),O?.length&&(A.tags=O),T?.length&&(A.stateChanges=T),f?.length&&(A.emits=f),E?.length&&(A.calls=E),A}function K(e,t,i,y,O){let T=Ke(e),f=je(T,t),E={tag:T,origin:i};return f!==void 0&&(E.classification=f),y!==void 0&&(E.attempt=y),O!==void 0&&(E.cumulativeDurationMs=O),E}var Q=Symbol.for("step_timeout_marker");function be(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:Q in e}function Ve(e){if(!(typeof e!="object"||e===null)){if(e.type==="STEP_TIMEOUT"){let t=e;return{timeoutMs:t.timeoutMs,stepName:t.stepName,stepKey:t.stepKey,attempt:t.attempt}}if(Q in e)return e[Q]}}var Oe=Symbol("early-exit");function Le(e,t){return{[Oe]:!0,error:e,meta:t}}function He(e){return typeof e=="object"&&e!==null&&e[Oe]===!0}var _e=Symbol("mapper-exception");function G(e){return{[_e]:!0,thrown:e}}function qe(e){return typeof e=="object"&&e!==null&&e[_e]===!0}function le(e,t){let{backoff:i,initialDelay:y,maxDelay:O,jitter:T}=t,f;switch(i){case"fixed":f=y;break;case"linear":f=y*e;break;case"exponential":f=y*Math.pow(2,e-1);break}if(f=Math.min(f,O),T){let E=f*.25*Math.random();f=f+E}return Math.floor(f)}function de(e){return new Promise(t=>setTimeout(t,e))}var Ce=Symbol("timeout"),oe=Symbol("timeout-option");function $e(e){return typeof e=="object"&&e!==null&&e[oe]===!0}async function Ye(e,t,i,y){let O=new AbortController,T=t.onTimeout??"error",f=()=>typeof T=="function"?T({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},E;y?.aborted&&O.abort(y.reason);let A;y&&!y.aborted&&(A=()=>O.abort(y.reason),y.addEventListener("abort",A,{once:!0}));let s=new Promise((P,U)=>{E=setTimeout(()=>{if(T!=="disconnect"&&O.abort(),T==="option"){U({[oe]:!0,ms:t.ms});return}U({[Ce]:!0,error:f()})},t.ms)}),v;t.signal?v=Promise.resolve(e(O.signal)):v=Promise.resolve(e());try{return await Promise.race([v,s])}catch(P){if(typeof P=="object"&&P!==null&&P[oe]===!0)throw{[oe]:!0,ms:t.ms};if(typeof P=="object"&&P!==null&&P[Ce]===!0){T==="disconnect"&&v.catch(()=>{});let U=P.error;if(typeof U=="object"&&U!==null&&U.type!=="STEP_TIMEOUT"){let H={timeoutMs:t.ms,stepName:i.name,stepKey:i.key,attempt:i.attempt};Q in U?U[Q]=H:Object.defineProperty(U,Q,{value:H,enumerable:!1,writable:!0,configurable:!1})}throw U}throw P}finally{clearTimeout(E),A&&y&&y.removeEventListener("abort",A)}}var X={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function Se(e,t){let{onError:i,onEvent:y,catchUnexpected:O,workflowId:T,workflowName:f,context:E,_workflowSignal:A}=t&&typeof t=="object"?t:{},s=T??crypto.randomUUID(),v=O??We,P=[],U=0,H=l=>l??`step_${++U}`,u=l=>{let j=l.context!==void 0||E===void 0?l:{...l,context:E},$=f!==void 0&&j.workflowName===void 0?{...j,workflowName:f}:j;if($.type==="step_success"){let re=$.stepId;for(let ne=P.length-1;ne>=0;ne--){let F=P[ne];if(F.type==="race"&&!F.winnerId){F.winnerId=re;break}}}y?.($,E)},D=Le,V=l=>He(l),q=(l,j)=>l,De=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 j=function(a){let d={};for(let[o,n]of Object.entries(a))if(typeof n=="function")d[o]=n;else if(n&&typeof n=="object"&&"fn"in n)d[o]=n.fn;else throw new TypeError(`step.parallel: operation "${o}" must be a function or { fn, errors? } object`);return d},$=function(a,d){let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),r=!1;P.push({scopeId:o,type:"parallel"});let p=()=>{if(r)return;r=!0;let c=P.findIndex(m=>m.scopeId===o);c!==-1&&P.splice(c,1),u({type:"scope_end",workflowId:s,scopeId:o,ts:Date.now(),durationMs:performance.now()-n})};u({type:"scope_start",workflowId:s,scopeId:o,scopeType:"parallel",name:a,ts:Date.now()});try{let c=await d();if(p(),!c.ok)throw i?.(c.error,a,E),D(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw p(),c}})()},re=function(a,d){let o=Object.keys(a),n=d.name??`Parallel(${o.join(", ")})`,r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let p=performance.now(),c=!1;P.push({scopeId:r,type:"parallel"});let m=()=>{if(c)return;c=!0;let w=P.findIndex(k=>k.scopeId===r);w!==-1&&P.splice(w,1),u({type:"scope_end",workflowId:s,scopeId:r,ts:Date.now(),durationMs:performance.now()-p})};u({type:"scope_start",workflowId:s,scopeId:r,scopeType:"parallel",name:n,ts:Date.now()});try{let w=await new Promise(R=>{if(o.length===0){R([]);return}let S=!1,I=o.length,x=new Array(o.length);for(let M=0;M<o.length;M++){let h=o[M],C=M;Promise.resolve(a[h]()).catch(b=>N({type:"PROMISE_REJECTED",cause:b},{cause:{type:"PROMISE_REJECTION",reason:b}})).then(b=>{if(!S){if(!b.ok){S=!0,R([{key:h,result:b}]);return}x[C]={key:h,result:b},I--,I===0&&R(x)}})}});m();let k={};for(let{key:R,result:S}of w){if(!S.ok)throw i?.(S.error,R,E),D(S.error,{origin:"result",resultCause:S.cause});k[R]=S.value}return k}catch(w){throw m(),w}})()};var rt=j,nt=$,ot=re;let l=(a,d,o)=>(async()=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let n=o??{},r=Fe(n),p=a,c=n.key??a,m=n.key??a,{description:w,retry:k,timeout:R}=n,S=H(c),I=y,x=I?performance.now():0,h=De(d)?()=>d:d,b={attempts:Math.max(1,k?.attempts??1),backoff:k?.backoff??X.backoff,initialDelay:k?.initialDelay??X.initialDelay,maxDelay:k?.maxDelay??X.maxDelay,jitter:k?.jitter??X.jitter,retryOn:k?.retryOn??X.retryOn,onRetry:k?.onRetry??X.onRetry};y&&u({type:"step_start",workflowId:s,stepId:S,stepKey:c,name:p,description:w,ts:Date.now(),...r&&{metadata:r}});let z;for(let _=1;_<=b.attempts;_++){let Ue=I?performance.now():0;try{let g;if(R?g=await Ye(h,R,{name:p,key:c,attempt:_},A):g=await h(),g.ok){let J=performance.now()-x;return u({type:"step_success",workflowId:s,stepId:S,stepKey:c,name:p,description:w,ts:Date.now(),durationMs:J,...r&&{metadata:r}}),m&&u({type:"step_complete",workflowId:s,stepKey:m,name:p,description:w,ts:Date.now(),durationMs:J,result:g,...r&&{metadata:r}}),g.value}if(z=g,_<b.attempts&&b.retryOn(g.error,_)){let J=le(_,b);u({type:"step_retry",workflowId:s,stepId:S,stepKey:c,name:p,ts:Date.now(),attempt:_+1,maxAttempts:b.attempts,delayMs:J,error:g.error,...r&&{metadata:r},diagnostics:K(g.error,n.errorMeta,"result",_,performance.now()-x)}),b.onRetry(g.error,_,J),await de(J);continue}b.attempts>1&&u({type:"step_retries_exhausted",workflowId:s,stepId:S,stepKey:c,name:p,ts:Date.now(),durationMs:performance.now()-x,attempts:_,lastError:g.error,...r&&{metadata:r},diagnostics:K(g.error,n.errorMeta,"result",_,performance.now()-x)});break}catch(g){let J=performance.now()-Ue;if($e(g)){let L=g.ms;u({type:"step_timeout",workflowId:s,stepId:S,stepKey:c,name:p,ts:Date.now(),timeoutMs:L,attempt:_,...r&&{metadata:r},diagnostics:K(g,n.errorMeta,"timeout",_)}),u({type:"step_success",workflowId:s,stepId:S,stepKey:c,name:p,description:w,ts:Date.now(),durationMs:performance.now()-x,...r&&{metadata:r}}),m&&u({type:"step_complete",workflowId:s,stepKey:m,name:p,description:w,ts:Date.now(),durationMs:performance.now()-x,result:W(void 0),...r&&{metadata:r}});return}if(V(g))throw u({type:"step_aborted",workflowId:s,stepId:S,stepKey:c,name:p,description:w,ts:Date.now(),durationMs:J,...r&&{metadata:r}}),g;if(be(g)){let L=Ve(g),Ne=R?.ms??L?.timeoutMs??0;if(u({type:"step_timeout",workflowId:s,stepId:S,stepKey:c,name:p,ts:Date.now(),timeoutMs:Ne,attempt:_,...r&&{metadata:r},diagnostics:K(g,n.errorMeta,"timeout",_)}),_<b.attempts&&b.retryOn(g,_)){let ce=le(_,b);u({type:"step_retry",workflowId:s,stepId:S,stepKey:c,name:p,ts:Date.now(),attempt:_+1,maxAttempts:b.attempts,delayMs:ce,error:g,...r&&{metadata:r},diagnostics:K(g,n.errorMeta,"timeout",_,performance.now()-x)}),b.onRetry(g,_,ce),await de(ce);continue}b.attempts>1&&u({type:"step_retries_exhausted",workflowId:s,stepId:S,stepKey:c,name:p,ts:Date.now(),durationMs:performance.now()-x,attempts:_,lastError:g,...r&&{metadata:r},diagnostics:K(g,n.errorMeta,"timeout",_,performance.now()-x)});let pe=performance.now()-x;throw u({type:"step_error",workflowId:s,stepId:S,stepKey:c,name:p,description:w,ts:Date.now(),durationMs:pe,error:g,...r&&{metadata:r},diagnostics:K(g,n.errorMeta,"timeout",_,pe)}),m&&u({type:"step_complete",workflowId:s,stepKey:m,name:p,description:w,ts:Date.now(),durationMs:pe,result:N(g,{cause:g}),meta:{origin:"throw",thrown:g},...r&&{metadata:r}}),i?.(g,p,E),D(g,{origin:"throw",thrown:g})}if(_<b.attempts&&b.retryOn(g,_)){let L=le(_,b);u({type:"step_retry",workflowId:s,stepId:S,stepKey:c,name:p,ts:Date.now(),attempt:_+1,maxAttempts:b.attempts,delayMs:L,error:g,...r&&{metadata:r},diagnostics:K(g,n.errorMeta,"throw",_,performance.now()-x)}),b.onRetry(g,_,L),await de(L);continue}b.attempts>1&&!be(g)&&u({type:"step_retries_exhausted",workflowId:s,stepId:S,stepKey:c,name:p,ts:Date.now(),durationMs:performance.now()-x,attempts:_,lastError:g,...r&&{metadata:r},diagnostics:K(g,n.errorMeta,"throw",_,performance.now()-x)});let ue=performance.now()-x,Z;try{Z=v(g)}catch(L){throw G(L)}throw u({type:"step_error",workflowId:s,stepId:S,stepKey:c,name:p,description:w,ts:Date.now(),durationMs:ue,error:Z,...r&&{metadata:r},diagnostics:K(g,n.errorMeta,"throw",_,ue)}),m&&u({type:"step_complete",workflowId:s,stepKey:m,name:p,description:w,ts:Date.now(),durationMs:ue,result:N(Z,{cause:g}),meta:{origin:"throw",thrown:g},...r&&{metadata:r}}),i?.(Z,p,E),D(Z,{origin:"throw",thrown:g})}}let Y=z,ae=performance.now()-x,ie=q(Y.error,{origin:"result",resultCause:Y.cause});throw u({type:"step_error",workflowId:s,stepId:S,stepKey:c,name:p,description:w,ts:Date.now(),durationMs:ae,error:ie,...r&&{metadata:r},diagnostics:K(Y.error,n.errorMeta,"result",b.attempts,ae)}),m&&u({type:"step_complete",workflowId:s,stepKey:m,name:p,description:w,ts:Date.now(),durationMs:ae,result:Y,meta:{origin:"result",resultCause:Y.cause},...r&&{metadata:r}}),i?.(ie,p,E),D(ie,{origin:"result",resultCause:Y.cause})})();l.try=(a,d,o)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.try() requires an explicit string ID as the first argument. Example: step.try("parse", () => JSON.parse(str), { error: "PARSE_ERROR" })');let n=o.key??a,r=a,p=a,c="error"in o?()=>o.error:o.onError,m=y;return(async()=>{let w=m?performance.now():0;y&&u({type:"step_start",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now()});try{let k=await d(),R=performance.now()-w;return u({type:"step_success",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now(),durationMs:R}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:r,ts:Date.now(),durationMs:R,result:W(k)}),k}catch(k){let R=c(k),S=performance.now()-w,I=q(R,{origin:"throw",thrown:k});throw u({type:"step_error",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now(),durationMs:S,error:I}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:r,ts:Date.now(),durationMs:S,result:N(R,{cause:k}),meta:{origin:"throw",thrown:k}}),i?.(I,r,E),D(I,{origin:"throw",thrown:k})}})()},l.fromResult=(a,d,o)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.fromResult() requires an explicit string ID as the first argument. Example: step.fromResult("callProvider", () => callProvider(input), { onError: (e) => ({ type: "FAILED" }) })');let n=o.key??a,r=a,p=a,c="error"in o?()=>o.error:o.onError,m=y;return(async()=>{let w=m?performance.now():0;y&&u({type:"step_start",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now()});let k=await d();if(k.ok){let R=performance.now()-w;return u({type:"step_success",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now(),durationMs:R}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:r,ts:Date.now(),durationMs:R,result:W(k.value)}),k.value}else{let R=c(k.error),S=performance.now()-w,I=q(R,{origin:"result",resultCause:k.error});throw u({type:"step_error",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now(),durationMs:S,error:I}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:r,ts:Date.now(),durationMs:S,result:N(R,{cause:k.error}),meta:{origin:"result",resultCause:k.error}}),i?.(I,r,E),D(I,{origin:"result",resultCause:k.error})}})()},l.fromNullable=(a,d,o,n)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.fromNullable() requires an explicit string ID as the first argument. Example: step.fromNullable("getUser", () => db.find(id), () => ({ type: "NOT_FOUND" }))');return l(a,async()=>{let r=await d();return r!=null?W(r):N(o())},n)},l.retry=(a,d,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,d,{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,d,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,d,{key:o.key??a,timeout:o})},l.sleep=(a,d,o)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let n=typeof d=="string"?Be(d):d;if(!n)throw new Error(`step.sleep: invalid duration '${d}'`);let r=n.millis,p=o?.signal;return l(a,async()=>{if(A?.aborted||p?.aborted){let c=new Error("Sleep aborted");throw c.name="AbortError",c}return new Promise((c,m)=>{let w={timeoutId:void 0},k=()=>{w.timeoutId&&clearTimeout(w.timeoutId);let R=new Error("Sleep aborted");R.name="AbortError",m(R)};A?.addEventListener("abort",k,{once:!0}),p?.addEventListener("abort",k,{once:!0}),w.timeoutId=setTimeout(()=>{A?.removeEventListener("abort",k),p?.removeEventListener("abort",k),c(W(void 0))},r)})},{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 d=a[0],o=a[1];if(typeof o=="function")return $(d,o);if(o&&typeof o=="object"&&!Array.isArray(o)){let r=j(o);return re(r,{name:d})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),l.race=(a,d)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),r=!1,p={scopeId:o,type:"race",winnerId:void 0};P.push(p);let c=()=>{if(r)return;r=!0;let m=P.findIndex(w=>w.scopeId===o);m!==-1&&P.splice(m,1),u({type:"scope_end",workflowId:s,scopeId:o,ts:Date.now(),durationMs:performance.now()-n,winnerId:p.winnerId})};u({type:"scope_start",workflowId:s,scopeId:o,scopeType:"race",name:a,ts:Date.now()});try{let m=await d();if(c(),!m.ok)throw i?.(m.error,a,E),D(m.error,{origin:"result",resultCause:m.cause});return m.value}catch(m){throw c(),m}})()},l.allSettled=(a,d)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),r=!1;P.push({scopeId:o,type:"allSettled"});let p=()=>{if(r)return;r=!0;let c=P.findIndex(m=>m.scopeId===o);c!==-1&&P.splice(c,1),u({type:"scope_end",workflowId:s,scopeId:o,ts:Date.now(),durationMs:performance.now()-n})};u({type:"scope_start",workflowId:s,scopeId:o,scopeType:"allSettled",name:a,ts:Date.now()});try{let c=await d();if(p(),!c.ok)throw i?.(c.error,a,E),D(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw p(),c}})()},l.if=(a,d,o)=>o(),l.label=l.if,l.branch=async(a,d)=>{let{condition:o,then:n,else:r}=d;if(o())return await n();if(r)return await r()},l.arm=(a,d)=>({fn:a,errors:d}),l.forEach=async(a,d,o)=>{let n=[],r=o.maxIterations,p=0,c="run"in o,m=Symbol.asyncIterator in d?d:(async function*(){yield*d})();for await(let w of m){if(r!==void 0&&p>=r)break;let k;c?k=await o.run(w,p):k=await o.item.handler(w,p,l),n.push(k),p++}return n},l.item=a=>({__forEachItemHandler:!0,handler:a}),l.dep=(a,d)=>d,l.run=(a,d,o)=>l(a,()=>d,o),l.workflow=(a,d,o)=>l(a,d,o),l.andThen=(a,d,o,n)=>l(a,()=>o(d),n),l.match=async(a,d,o,n)=>l(a,async()=>{let r=await d;return r.ok?W(await o.ok(r.value)):W(await o.err(r.error,r.cause))},n),l.all=l.parallel,l.map=async(a,d,o,n)=>{let r=n?.concurrency??d.length;return l(a,()=>r>=d.length?Ae(d.map((p,c)=>o(p,c))):(async()=>{let p=[];for(let c=0;c<d.length;c+=r){let m=d.slice(c,c+r),w=await Ae(m.map((k,R)=>o(k,c+R)));if(!w.ok)return w;p.push(...w.value)}return W(p)})(),{key:n?.key})},l.withFallback=(a,d,o)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.withFallback() requires an explicit string ID as the first argument. Example: step.withFallback("getUser", () => fetchUser(id), { fallback: () => fetchFromCache(id) })');let n=o.key??a,r=a,p=H(n),c=y;return(async()=>{let m=c?performance.now():0;y&&u({type:"step_start",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now()});let w;try{w=await d()}catch(x){if(V(x))throw u({type:"step_aborted",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now(),durationMs:performance.now()-m}),x;let M;try{M=v(x)}catch(C){throw G(C)}if(o.on!==void 0&&o.on!==M){let C=performance.now()-m;throw u({type:"step_error",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now(),durationMs:C,error:M}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:r,ts:Date.now(),durationMs:C,result:N(M,{cause:x}),meta:{origin:"throw",thrown:x}}),i?.(M,r,E),D(M,{origin:"throw",thrown:x})}let h;try{h=await o.fallback()}catch(C){if(V(C))throw u({type:"step_aborted",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now(),durationMs:performance.now()-m}),C;let b;try{b=v(C)}catch(Y){throw G(Y)}let z=performance.now()-m;throw u({type:"step_error",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now(),durationMs:z,error:b}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:r,ts:Date.now(),durationMs:z,result:N(b,{cause:C}),meta:{origin:"throw",thrown:C}}),i?.(b,r,E),D(b,{origin:"throw",thrown:C})}if(h.ok){let C=performance.now()-m;return u({type:"step_success",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now(),durationMs:C}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:r,ts:Date.now(),durationMs:C,result:h,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(M)}}),h.value}else{let C=performance.now()-m,b=q(h.error,{origin:"result",resultCause:h.cause});throw u({type:"step_error",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now(),durationMs:C,error:b}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:r,ts:Date.now(),durationMs:C,result:h,meta:{origin:"result",resultCause:h.cause}}),i?.(b,r,E),D(b,{origin:"result",resultCause:h.cause})}}if(w.ok){let x=performance.now()-m;return u({type:"step_success",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now(),durationMs:x}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:r,ts:Date.now(),durationMs:x,result:w}),w.value}let k=w.error;if(o.on!==void 0&&o.on!==k){let x=performance.now()-m,M=q(k,{origin:"result",resultCause:w.cause});throw u({type:"step_error",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now(),durationMs:x,error:M}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:r,ts:Date.now(),durationMs:x,result:w,meta:{origin:"result",resultCause:w.cause}}),i?.(M,r,E),D(M,{origin:"result",resultCause:w.cause})}let R;try{R=await o.fallback()}catch(x){if(V(x))throw u({type:"step_aborted",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now(),durationMs:performance.now()-m}),x;let M;try{M=v(x)}catch(C){throw G(C)}let h=performance.now()-m;throw u({type:"step_error",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now(),durationMs:h,error:M}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:r,ts:Date.now(),durationMs:h,result:N(M,{cause:x}),meta:{origin:"throw",thrown:x}}),i?.(M,r,E),D(M,{origin:"throw",thrown:x})}if(R.ok){let x=performance.now()-m;return u({type:"step_success",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now(),durationMs:x}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:r,ts:Date.now(),durationMs:x,result:R,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(k)}}),R.value}let S=performance.now()-m,I=q(R.error,{origin:"result",resultCause:R.cause});throw u({type:"step_error",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now(),durationMs:S,error:I}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:r,ts:Date.now(),durationMs:S,result:R,meta:{origin:"result",resultCause:R.cause}}),i?.(I,r,E),D(I,{origin:"result",resultCause:R.cause})})()},l.withResource=(a,d)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.withResource() requires an explicit string ID as the first argument. Example: step.withResource("useDb", { acquire: () => connect(), use: (db) => query(db), release: (db) => db.close() })');let o=a,n=a,r=H(o),p=y;return(async()=>{let c=p?performance.now():0;y&&u({type:"step_start",workflowId:s,stepId:r,stepKey:o,name:n,ts:Date.now()});let m;try{m=await d.acquire()}catch(h){if(V(h))throw u({type:"step_aborted",workflowId:s,stepId:r,stepKey:o,name:n,ts:Date.now(),durationMs:performance.now()-c}),h;let C;try{C=v(h)}catch(z){throw G(z)}let b=performance.now()-c;throw u({type:"step_error",workflowId:s,stepId:r,stepKey:o,name:n,ts:Date.now(),durationMs:b,error:C}),o&&u({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:b,result:N(C,{cause:h}),meta:{origin:"throw",thrown:h}}),i?.(C,n,E),D(C,{origin:"throw",thrown:h})}if(!m.ok){let h=performance.now()-c,C=q(m.error,{origin:"result",resultCause:m.cause});throw u({type:"step_error",workflowId:s,stepId:r,stepKey:o,name:n,ts:Date.now(),durationMs:h,error:C}),o&&u({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:h,result:m,meta:{origin:"result",resultCause:m.cause}}),i?.(C,n,E),D(C,{origin:"result",resultCause:m.cause})}let w=m.value,k,R,S=!1;try{k=await d.use(w)}catch(h){if(V(h)){try{await d.release(w)}catch(C){console.warn(`[awaitly] step.withResource("${a}"): release threw after earlyExit:`,C)}throw h}R=h,S=!0}try{await d.release(w)}catch(h){console.warn(`[awaitly] step.withResource("${a}"): release threw:`,h)}if(S){let h;try{h=v(R)}catch(b){throw G(b)}let C=performance.now()-c;throw u({type:"step_error",workflowId:s,stepId:r,stepKey:o,name:n,ts:Date.now(),durationMs:C,error:h}),o&&u({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:C,result:N(h,{cause:R}),meta:{origin:"throw",thrown:R}}),i?.(h,n,E),D(h,{origin:"throw",thrown:R})}let I=k;if(I.ok){let h=performance.now()-c;return u({type:"step_success",workflowId:s,stepId:r,stepKey:o,name:n,ts:Date.now(),durationMs:h}),o&&u({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:h,result:I}),I.value}let x=performance.now()-c,M=q(I.error,{origin:"result",resultCause:I.cause});throw u({type:"step_error",workflowId:s,stepId:r,stepKey:o,name:n,ts:Date.now(),durationMs:x,error:M}),o&&u({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:x,result:I,meta:{origin:"result",resultCause:I.cause}}),i?.(M,n,E),D(M,{origin:"result",resultCause:I.cause})})()};let F=await e({step:l});if(process.env.NODE_ENV!=="production"&&F!==null&&typeof F=="object"&&"ok"in F&&typeof F.ok=="boolean"){let a=F;(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 W(
|
|
6
|
+
See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return W(F)}catch(l){if(qe(l))throw l.thrown;if(V(l)){let $=l.meta.origin==="throw"?l.meta.thrown:l.meta.origin==="result"?l.meta.resultCause:void 0;return N(l.error,{cause:$})}let j=v(l);return i?.(j,"unexpected",E),N(j,{cause:l})}}Se.strict=(e,t)=>Se(e,t);async function Ae(e){return e.length===0?W([]):new Promise(t=>{let i=!1,y=e.length,O=new Array(e.length);for(let T=0;T<e.length;T++){let f=T;Promise.resolve(e[f]).catch(E=>N({type:"PROMISE_REJECTED",cause:E},{cause:{type:"PROMISE_REJECTION",reason:E}})).then(E=>{if(!i){if(!E.ok){i=!0,t(E);return}O[f]=E.value,y--,y===0&&t(W(O))}})}})}function Je(e){return typeof e=="object"&&e!==null&&e.type==="VALIDATION_ERROR"}function Ee(e){return{status:400,body:{error:{type:e.type,message:e.message,details:e.field?{field:e.field}:e.details}}}}function me(e){return{status:500,body:{error:{type:"INTERNAL_ERROR",message:e instanceof Error?e.message:"An unexpected error occurred"}}}}function ze(e,t,i){let{validateInput:y,mapResult:O,mapValidationError:T=Ee,mapUnexpectedError:f=me,beforeValidation:E,afterResponse:A}=i;return async s=>{try{let v=E?await E(s):s,P=await y(v);if(!se(P)){let D=T(P.error,v);return A?await A(D,v):D}let U=P.value,H=await e.run(async({step:D,deps:V})=>t({step:D,deps:V,args:U})),u=O(H,v);return A?await A(u,v):u}catch(v){let P=f(v,s);return A?await A(P,s):P}}}function Ge(e){let{validateInput:t,handler:i,mapResult:y,mapValidationError:O=Ee,mapUnexpectedError:T=me}=e;return async f=>{try{let E=await t(f);if(!se(E))return O(E.error,f);let A=await i(E.value,f);return y(A,f)}catch(E){return T(E,f)}}}function Xe(e,t={}){let{defaultStatus:i=500,successStatus:y=200}=t,O=new Map;for(let T of e)O.set(T.error,T);return T=>{if(T.ok)return{status:y,body:T.value};if(Pe(T.error))return{status:500,body:{error:{type:"INTERNAL_ERROR",message:T.error instanceof Error?T.error.message:"An unexpected error occurred"}}};let f=O.get(T.error);return f?{status:f.status,body:{error:{type:String(f.error),message:f.message}}}:{status:i,body:{error:{type:String(T.error)}}}}}function ve(e){return{method:e.method,path:e.path,headers:e.headers,body:e.body,query:e.query,params:e.params,raw:e}}function Me(e,t){t.headers&&e.set(t.headers),e.status(t.status).json(t.body)}function Qe(e){return async(t,i)=>{let y=ve(t),O=await e(y);Me(i,O)}}function Ie(e,t,i){return{type:"VALIDATION_ERROR",message:e,field:t,details:i}}function Ze(e){return t=>{for(let i of e)if(t[i]===void 0||t[i]===null||t[i]==="")return N(Ie(`Missing required field: ${i}`,i));return W(void 0)}}function et(...e){return t=>{for(let i of e){let y=i(t);if(!y.ok)return y}return W(void 0)}}function tt(e,t,i){let{validatePayload:y,mapResult:O}=i;return async T=>{try{let f=y(T);if(!se(f))return{success:!1,ack:!0,error:{type:f.error.type,message:f.error.message,retryable:!1}};let E=f.value,A=await e.run(async({step:s,deps:v})=>t({step:s,deps:v,args:E}));return O(A,T)}catch(f){return{success:!1,ack:!1,error:{type:"UnexpectedError",message:f instanceof Error?f.message:String(f),retryable:!0}}}}}export{et as composeValidators,tt as createEventHandler,Qe as createExpressHandler,Xe as createResultMapper,Ge as createSimpleHandler,ze as createWebhookHandler,me as defaultUnexpectedErrorMapper,Ee as defaultValidationErrorMapper,Je as isValidationError,Ze as requireFields,Me as sendWebhookResponse,ve as toWebhookRequest,Ie as validationError};
|
|
7
7
|
//# sourceMappingURL=webhook.js.map
|