awaitly 1.31.1 → 1.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/dist/adapters.cjs +2 -2
  2. package/dist/adapters.cjs.map +1 -1
  3. package/dist/adapters.d.cts +3 -1
  4. package/dist/adapters.d.ts +3 -1
  5. package/dist/adapters.js +2 -2
  6. package/dist/adapters.js.map +1 -1
  7. package/dist/batch.cjs +2 -2
  8. package/dist/batch.cjs.map +1 -1
  9. package/dist/batch.d.cts +3 -1
  10. package/dist/batch.d.ts +3 -1
  11. package/dist/batch.js +2 -2
  12. package/dist/batch.js.map +1 -1
  13. package/dist/circuit-breaker.cjs +2 -2
  14. package/dist/circuit-breaker.cjs.map +1 -1
  15. package/dist/circuit-breaker.d.cts +3 -1
  16. package/dist/circuit-breaker.d.ts +3 -1
  17. package/dist/circuit-breaker.js +2 -2
  18. package/dist/circuit-breaker.js.map +1 -1
  19. package/dist/conditional.d.cts +3 -1
  20. package/dist/conditional.d.ts +3 -1
  21. package/dist/core.cjs +2 -2
  22. package/dist/core.cjs.map +1 -1
  23. package/dist/core.d.cts +2 -1
  24. package/dist/core.d.ts +2 -1
  25. package/dist/core.js +2 -2
  26. package/dist/core.js.map +1 -1
  27. package/dist/diagnostics.cjs +3 -3
  28. package/dist/diagnostics.cjs.map +1 -1
  29. package/dist/diagnostics.d.cts +3 -1
  30. package/dist/diagnostics.d.ts +3 -1
  31. package/dist/diagnostics.js +3 -3
  32. package/dist/diagnostics.js.map +1 -1
  33. package/dist/durable.cjs +3 -3
  34. package/dist/durable.cjs.map +1 -1
  35. package/dist/durable.d.cts +8 -361
  36. package/dist/durable.d.ts +8 -361
  37. package/dist/durable.js +3 -3
  38. package/dist/durable.js.map +1 -1
  39. package/dist/engine.cjs +11 -0
  40. package/dist/engine.cjs.map +1 -0
  41. package/dist/engine.d.cts +114 -0
  42. package/dist/engine.d.ts +114 -0
  43. package/dist/engine.js +11 -0
  44. package/dist/engine.js.map +1 -0
  45. package/dist/errors-entry-CMH73Eym.d.cts +339 -0
  46. package/dist/errors-entry-DOt5UUl4.d.ts +339 -0
  47. package/dist/errors.cjs +1 -1
  48. package/dist/errors.cjs.map +1 -1
  49. package/dist/errors.d.cts +2 -318
  50. package/dist/errors.d.ts +2 -318
  51. package/dist/errors.js +1 -1
  52. package/dist/errors.js.map +1 -1
  53. package/dist/fetch.cjs +2 -2
  54. package/dist/fetch.cjs.map +1 -1
  55. package/dist/fetch.d.cts +3 -1
  56. package/dist/fetch.d.ts +3 -1
  57. package/dist/fetch.js +2 -2
  58. package/dist/fetch.js.map +1 -1
  59. package/dist/functional.cjs +1 -1
  60. package/dist/functional.cjs.map +1 -1
  61. package/dist/functional.d.cts +2 -0
  62. package/dist/functional.d.ts +2 -0
  63. package/dist/functional.js +1 -1
  64. package/dist/functional.js.map +1 -1
  65. package/dist/{guards-PU64_GKv.d.cts → guards-B79mP5Q8.d.cts} +3 -3
  66. package/dist/{guards-B5lgMJq0.d.ts → guards-BUq6NJCM.d.ts} +3 -3
  67. package/dist/{hitl-Dyiy0R1v.d.cts → hitl-BCqkMAHw.d.cts} +2 -2
  68. package/dist/{hitl-BjeSm1sJ.d.ts → hitl-BZtPx0aU.d.ts} +2 -2
  69. package/dist/hitl.cjs +2 -2
  70. package/dist/hitl.cjs.map +1 -1
  71. package/dist/hitl.d.cts +9 -6
  72. package/dist/hitl.d.ts +9 -6
  73. package/dist/hitl.js +2 -2
  74. package/dist/hitl.js.map +1 -1
  75. package/dist/index-BVUAOWGG.d.ts +417 -0
  76. package/dist/index-CQnpmUcC.d.cts +417 -0
  77. package/dist/index.cjs +1 -1
  78. package/dist/index.cjs.map +1 -1
  79. package/dist/index.d.cts +4 -3
  80. package/dist/index.d.ts +4 -3
  81. package/dist/index.js +1 -1
  82. package/dist/index.js.map +1 -1
  83. package/dist/otel.d.cts +3 -1
  84. package/dist/otel.d.ts +3 -1
  85. package/dist/{persistence-entry-B3ukwbb5.d.ts → persistence-entry-ClFhxd2Q.d.ts} +11 -5
  86. package/dist/{persistence-entry-CgVzswbg.d.cts → persistence-entry-jflY61az.d.cts} +11 -5
  87. package/dist/persistence.d.cts +6 -3
  88. package/dist/persistence.d.ts +6 -3
  89. package/dist/policies.d.cts +3 -1
  90. package/dist/policies.d.ts +3 -1
  91. package/dist/ratelimit.cjs +2 -2
  92. package/dist/ratelimit.cjs.map +1 -1
  93. package/dist/ratelimit.d.cts +3 -1
  94. package/dist/ratelimit.d.ts +3 -1
  95. package/dist/ratelimit.js +2 -2
  96. package/dist/ratelimit.js.map +1 -1
  97. package/dist/reliability.cjs +2 -2
  98. package/dist/reliability.cjs.map +1 -1
  99. package/dist/reliability.d.cts +3 -1
  100. package/dist/reliability.d.ts +3 -1
  101. package/dist/reliability.js +2 -2
  102. package/dist/reliability.js.map +1 -1
  103. package/dist/resolver.cjs +2 -2
  104. package/dist/resolver.cjs.map +1 -1
  105. package/dist/resolver.d.cts +5 -3
  106. package/dist/resolver.d.ts +5 -3
  107. package/dist/resolver.js +2 -2
  108. package/dist/resolver.js.map +1 -1
  109. package/dist/resource.cjs +2 -2
  110. package/dist/resource.cjs.map +1 -1
  111. package/dist/resource.d.cts +3 -1
  112. package/dist/resource.d.ts +3 -1
  113. package/dist/resource.js +2 -2
  114. package/dist/resource.js.map +1 -1
  115. package/dist/result/retry.cjs +1 -1
  116. package/dist/result/retry.cjs.map +1 -1
  117. package/dist/result/retry.d.cts +2 -0
  118. package/dist/result/retry.d.ts +2 -0
  119. package/dist/result/retry.js +1 -1
  120. package/dist/result/retry.js.map +1 -1
  121. package/dist/result.cjs +1 -1
  122. package/dist/result.cjs.map +1 -1
  123. package/dist/result.d.cts +8 -23
  124. package/dist/result.d.ts +8 -23
  125. package/dist/result.js +1 -1
  126. package/dist/result.js.map +1 -1
  127. package/dist/{run-entry-C1uFytM6.d.cts → run-entry-rw7zll_G.d.ts} +16 -45
  128. package/dist/{run-entry-C1uFytM6.d.ts → run-entry-yQu63Yj9.d.cts} +16 -45
  129. package/dist/run.cjs +2 -2
  130. package/dist/run.cjs.map +1 -1
  131. package/dist/run.d.cts +3 -1
  132. package/dist/run.d.ts +3 -1
  133. package/dist/run.js +2 -2
  134. package/dist/run.js.map +1 -1
  135. package/dist/saga.cjs +2 -2
  136. package/dist/saga.cjs.map +1 -1
  137. package/dist/saga.d.cts +3 -1
  138. package/dist/saga.d.ts +3 -1
  139. package/dist/saga.js +2 -2
  140. package/dist/saga.js.map +1 -1
  141. package/dist/singleflight.d.cts +3 -1
  142. package/dist/singleflight.d.ts +3 -1
  143. package/dist/streaming.cjs +4 -4
  144. package/dist/streaming.cjs.map +1 -1
  145. package/dist/streaming.d.cts +5 -3
  146. package/dist/streaming.d.ts +5 -3
  147. package/dist/streaming.js +4 -4
  148. package/dist/streaming.js.map +1 -1
  149. package/dist/testing.cjs +8 -4
  150. package/dist/testing.cjs.map +1 -1
  151. package/dist/testing.d.cts +87 -4
  152. package/dist/testing.d.ts +87 -4
  153. package/dist/testing.js +8 -4
  154. package/dist/testing.js.map +1 -1
  155. package/dist/{types-wa_wTOn3.d.ts → types-CuWK5AlK.d.ts} +1 -1
  156. package/dist/{types-DUWrNIJu.d.cts → types-uR3JpwvF.d.cts} +1 -1
  157. package/dist/webhook.cjs +2 -2
  158. package/dist/webhook.cjs.map +1 -1
  159. package/dist/webhook.d.cts +7 -4
  160. package/dist/webhook.d.ts +7 -4
  161. package/dist/webhook.js +2 -2
  162. package/dist/webhook.js.map +1 -1
  163. package/dist/workflow.cjs +3 -3
  164. package/dist/workflow.cjs.map +1 -1
  165. package/dist/workflow.d.cts +47 -11
  166. package/dist/workflow.d.ts +47 -11
  167. package/dist/workflow.js +3 -3
  168. package/dist/workflow.js.map +1 -1
  169. package/package.json +15 -1
@@ -1,4 +1,4 @@
1
- import { c as AsyncResult } from './run-entry-C1uFytM6.js';
1
+ import { c as AsyncResult } from './run-entry-rw7zll_G.js';
2
2
 
3
3
  /**
4
4
  * awaitly/streaming - Types
@@ -1,4 +1,4 @@
1
- import { c as AsyncResult } from './run-entry-C1uFytM6.cjs';
1
+ import { c as AsyncResult } from './run-entry-yQu63Yj9.cjs';
2
2
 
3
3
  /**
4
4
  * awaitly/streaming - Types
package/dist/webhook.cjs CHANGED
@@ -1,7 +1,7 @@
1
- "use strict";var le=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var Ne=Object.getOwnPropertyNames;var We=Object.prototype.hasOwnProperty;var Be=(t,s)=>{for(var a in s)le(t,a,{get:s[a],enumerable:!0})},Ke=(t,s,a,y)=>{if(s&&typeof s=="object"||typeof s=="function")for(let h of Ne(s))!We.call(t,h)&&h!==a&&le(t,h,{get:()=>s[h],enumerable:!(y=Ue(s,h))||y.enumerable});return t};var je=t=>Ke(le({},"__esModule",{value:!0}),t);var Qe={};Be(Qe,{composeValidators:()=>_e,createEventHandler:()=>ve,createExpressHandler:()=>Pe,createResultMapper:()=>Ae,createSimpleHandler:()=>Se,createWebhookHandler:()=>he,defaultUnexpectedErrorMapper:()=>oe,defaultValidationErrorMapper:()=>ne,isValidationError:()=>be,requireFields:()=>Oe,sendWebhookResponse:()=>me,toWebhookRequest:()=>Ee,validationError:()=>ye});module.exports=je(Qe);function Ve(t){let s=t.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!s)return;let a=parseFloat(s[1]),y=s[2].toLowerCase();return{_tag:"Duration",millis:a*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[y]??1)}}var Re="UNEXPECTED_ERROR";function Fe(t){return Re}function W(t){return{ok:!0,value:t}}function U(t,s){let a=s?.cause;return{ok:!1,error:t,...a!==void 0?{cause:a}:{}}}var re=t=>t.ok;var ge=t=>t===Re||typeof t=="object"&&t!==null&&t.type==="UNEXPECTED_ERROR";function qe(t){if(t==null)return"unknown";if(typeof t=="string")return t.trim()||"unknown";if(typeof t=="object"){let s=t;if(typeof s._tag=="string"){let a=s._tag.trim();if(a)return a}if(typeof s.tag=="string"){let a=s.tag.trim();if(a)return a}if(typeof s.code=="string"){let a=s.code.trim();if(a)return a}else if(typeof s.code=="number")return String(s.code);if(t instanceof Error&&t.name){let a=t.name.trim();if(a)return a}}return"unknown"}function Le(t,s){if(!(!s||!t))return s[t]}function He(t){let{intent:s,domain:a,owner:y,tags:h,stateChanges:S,emits:k,calls:m}=t;if(!s&&!a&&!y&&!h?.length&&!S?.length&&!k?.length&&!m?.length)return;let _={};return s&&(_.intent=s),a&&(_.domain=a),y&&(_.owner=y),h?.length&&(_.tags=h),S?.length&&(_.stateChanges=S),k?.length&&(_.emits=k),m?.length&&(_.calls=m),_}function B(t,s,a,y,h){let S=qe(t),k=Le(S,s),m={tag:S,origin:a};return k!==void 0&&(m.classification=k),y!==void 0&&(m.attempt=y),h!==void 0&&(m.cumulativeDurationMs=h),m}var z=Symbol.for("step_timeout_marker");function we(t){return typeof t!="object"||t===null?!1:t.type==="STEP_TIMEOUT"?!0:z in t}function Xe(t){if(!(typeof t!="object"||t===null)){if(t.type==="STEP_TIMEOUT"){let s=t;return{timeoutMs:s.timeoutMs,stepName:s.stepName,stepKey:s.stepKey,attempt:s.attempt}}if(z in t)return t[z]}}var xe=Symbol("early-exit");function Ye(t,s){return{[xe]:!0,error:t,meta:s}}function $e(t){return typeof t=="object"&&t!==null&&t[xe]===!0}var Ce=Symbol("mapper-exception");function J(t){return{[Ce]:!0,thrown:t}}function Je(t){return typeof t=="object"&&t!==null&&t[Ce]===!0}function ce(t,s){let{backoff:a,initialDelay:y,maxDelay:h,jitter:S}=s,k;switch(a){case"fixed":k=y;break;case"linear":k=y*t;break;case"exponential":k=y*Math.pow(2,t-1);break}if(k=Math.min(k,h),S){let m=k*.25*Math.random();k=k+m}return Math.floor(k)}function de(t){return new Promise(s=>setTimeout(s,t))}var Te=Symbol("timeout"),te=Symbol("timeout-option");function Ge(t){return typeof t=="object"&&t!==null&&t[te]===!0}async function ze(t,s,a,y){let h=new AbortController,S=s.onTimeout??"error",k=()=>typeof S=="function"?S({name:a.name,key:a.key,ms:s.ms}):s.error??{type:"STEP_TIMEOUT",stepName:a.name,stepKey:a.key,timeoutMs:s.ms,attempt:a.attempt},m;y?.aborted&&h.abort(y.reason);let _;y&&!y.aborted&&(_=()=>h.abort(y.reason),y.addEventListener("abort",_,{once:!0}));let i=new Promise((O,N)=>{m=setTimeout(()=>{if(S!=="disconnect"&&h.abort(),S==="option"){N({[te]:!0,ms:s.ms});return}N({[Te]:!0,error:k()})},s.ms)}),D;s.signal?D=Promise.resolve(t(h.signal)):D=Promise.resolve(t());try{return await Promise.race([D,i])}catch(O){if(typeof O=="object"&&O!==null&&O[te]===!0)throw{[te]:!0,ms:s.ms};if(typeof O=="object"&&O!==null&&O[Te]===!0){S==="disconnect"&&D.catch(()=>{});let N=O.error;if(typeof N=="object"&&N!==null&&N.type!=="STEP_TIMEOUT"){let q={timeoutMs:s.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 O}finally{clearTimeout(m),_&&y&&y.removeEventListener("abort",_)}}var G={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function fe(t,s){let{onError:a,onEvent:y,catchUnexpected:h,workflowId:S,workflowName:k,context:m,_workflowSignal:_}=s&&typeof s=="object"?s:{},i=S??crypto.randomUUID(),D=h??Fe,O=[],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=O.length-1;ee>=0;ee--){let j=O[ee];if(j.type==="race"&&!j.winnerId){j.winnerId=Z;break}}}y?.(H,m)},I=Ye,V=c=>$e(c),L=(c,K)=>c,Me=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,r]of Object.entries(o))if(typeof r=="function")d[n]=r;else if(r&&typeof r=="object"&&"fn"in r)d[n]=r.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 r=performance.now(),e=!1;O.push({scopeId:n,type:"parallel"});let p=()=>{if(e)return;e=!0;let l=O.findIndex(E=>E.scopeId===n);l!==-1&&O.splice(l,1),u({type:"scope_end",workflowId:i,scopeId:n,ts:Date.now(),durationMs:performance.now()-r})};u({type:"scope_start",workflowId:i,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),r=d.name??`Parallel(${n.join(", ")})`,e=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let p=performance.now(),l=!1;O.push({scopeId:e,type:"parallel"});let E=()=>{if(l)return;l=!0;let w=O.findIndex(T=>T.scopeId===e);w!==-1&&O.splice(w,1),u({type:"scope_end",workflowId:i,scopeId:e,ts:Date.now(),durationMs:performance.now()-p})};u({type:"scope_start",workflowId:i,scopeId:e,scopeType:"parallel",name:r,ts:Date.now()});try{let w=await new Promise(R=>{if(n.length===0){R([]);return}let A=!1,M=n.length,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(!A){if(!C.ok){A=!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:A}of w){if(!A.ok)throw a?.(A.error,R,m),I(A.error,{origin:"result",resultCause:A.cause});T[R]=A.value}return T}catch(w){throw E(),w}})()};var Ze=K,et=H,tt=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 r=n??{},e=He(r),p=o,l=r.key??o,E=r.key??o,{description:w,retry:T,timeout:R}=r,A=q(l),M=y,g=M?performance.now():0,x=Me(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};y&&u({type:"step_start",workflowId:i,stepId:A,stepKey:l,name:p,description:w,ts:Date.now(),...e&&{metadata:e}});let $;for(let P=1;P<=C.attempts;P++){let Ie=M?performance.now():0;try{let f;if(R?f=await ze(x,R,{name:p,key:l,attempt:P},_):f=await x(),f.ok){let Y=performance.now()-g;return u({type:"step_success",workflowId:i,stepId:A,stepKey:l,name:p,description:w,ts:Date.now(),durationMs:Y,...e&&{metadata:e}}),E&&u({type:"step_complete",workflowId:i,stepKey:E,name:p,description:w,ts:Date.now(),durationMs:Y,result:f,...e&&{metadata:e}}),f.value}if($=f,P<C.attempts&&C.retryOn(f.error,P)){let Y=ce(P,C);u({type:"step_retry",workflowId:i,stepId:A,stepKey:l,name:p,ts:Date.now(),attempt:P+1,maxAttempts:C.attempts,delayMs:Y,error:f.error,...e&&{metadata:e},diagnostics:B(f.error,r.errorMeta,"result",P,performance.now()-g)}),C.onRetry(f.error,P,Y),await de(Y);continue}C.attempts>1&&u({type:"step_retries_exhausted",workflowId:i,stepId:A,stepKey:l,name:p,ts:Date.now(),durationMs:performance.now()-g,attempts:P,lastError:f.error,...e&&{metadata:e},diagnostics:B(f.error,r.errorMeta,"result",P,performance.now()-g)});break}catch(f){let Y=performance.now()-Ie;if(Ge(f)){let F=f.ms;u({type:"step_timeout",workflowId:i,stepId:A,stepKey:l,name:p,ts:Date.now(),timeoutMs:F,attempt:P,...e&&{metadata:e},diagnostics:B(f,r.errorMeta,"timeout",P)}),u({type:"step_success",workflowId:i,stepId:A,stepKey:l,name:p,description:w,ts:Date.now(),durationMs:performance.now()-g,...e&&{metadata:e}}),E&&u({type:"step_complete",workflowId:i,stepKey:E,name:p,description:w,ts:Date.now(),durationMs:performance.now()-g,result:W(void 0),...e&&{metadata:e}});return}if(V(f))throw u({type:"step_aborted",workflowId:i,stepId:A,stepKey:l,name:p,description:w,ts:Date.now(),durationMs:Y,...e&&{metadata:e}}),f;if(we(f)){let F=Xe(f),De=R?.ms??F?.timeoutMs??0;if(u({type:"step_timeout",workflowId:i,stepId:A,stepKey:l,name:p,ts:Date.now(),timeoutMs:De,attempt:P,...e&&{metadata:e},diagnostics:B(f,r.errorMeta,"timeout",P)}),P<C.attempts&&C.retryOn(f,P)){let pe=ce(P,C);u({type:"step_retry",workflowId:i,stepId:A,stepKey:l,name:p,ts:Date.now(),attempt:P+1,maxAttempts:C.attempts,delayMs:pe,error:f,...e&&{metadata:e},diagnostics:B(f,r.errorMeta,"timeout",P,performance.now()-g)}),C.onRetry(f,P,pe),await de(pe);continue}C.attempts>1&&u({type:"step_retries_exhausted",workflowId:i,stepId:A,stepKey:l,name:p,ts:Date.now(),durationMs:performance.now()-g,attempts:P,lastError:f,...e&&{metadata:e},diagnostics:B(f,r.errorMeta,"timeout",P,performance.now()-g)});let ue=performance.now()-g;throw u({type:"step_error",workflowId:i,stepId:A,stepKey:l,name:p,description:w,ts:Date.now(),durationMs:ue,error:f,...e&&{metadata:e},diagnostics:B(f,r.errorMeta,"timeout",P,ue)}),E&&u({type:"step_complete",workflowId:i,stepKey:E,name:p,description:w,ts:Date.now(),durationMs:ue,result:U(f,{cause:f}),meta:{origin:"throw",thrown:f},...e&&{metadata:e}}),a?.(f,p,m),I(f,{origin:"throw",thrown:f})}if(P<C.attempts&&C.retryOn(f,P)){let F=ce(P,C);u({type:"step_retry",workflowId:i,stepId:A,stepKey:l,name:p,ts:Date.now(),attempt:P+1,maxAttempts:C.attempts,delayMs:F,error:f,...e&&{metadata:e},diagnostics:B(f,r.errorMeta,"throw",P,performance.now()-g)}),C.onRetry(f,P,F),await de(F);continue}C.attempts>1&&!we(f)&&u({type:"step_retries_exhausted",workflowId:i,stepId:A,stepKey:l,name:p,ts:Date.now(),durationMs:performance.now()-g,attempts:P,lastError:f,...e&&{metadata:e},diagnostics:B(f,r.errorMeta,"throw",P,performance.now()-g)});let ie=performance.now()-g,Q;try{Q=D(f)}catch(F){throw J(F)}throw u({type:"step_error",workflowId:i,stepId:A,stepKey:l,name:p,description:w,ts:Date.now(),durationMs:ie,error:Q,...e&&{metadata:e},diagnostics:B(f,r.errorMeta,"throw",P,ie)}),E&&u({type:"step_complete",workflowId:i,stepKey:E,name:p,description:w,ts:Date.now(),durationMs:ie,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=$,se=performance.now()-g,ae=L(X.error,{origin:"result",resultCause:X.cause});throw u({type:"step_error",workflowId:i,stepId:A,stepKey:l,name:p,description:w,ts:Date.now(),durationMs:se,error:ae,...e&&{metadata:e},diagnostics:B(X.error,r.errorMeta,"result",C.attempts,se)}),E&&u({type:"step_complete",workflowId:i,stepKey:E,name:p,description:w,ts:Date.now(),durationMs:se,result:X,meta:{origin:"result",resultCause:X.cause},...e&&{metadata:e}}),a?.(ae,p,m),I(ae,{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 r=n.key??o,e=o,p=o,l="error"in n?()=>n.error:n.onError,E=y;return(async()=>{let w=E?performance.now():0;y&&u({type:"step_start",workflowId:i,stepId:p,stepKey:r,name:e,ts:Date.now()});try{let T=await d(),R=performance.now()-w;return u({type:"step_success",workflowId:i,stepId:p,stepKey:r,name:e,ts:Date.now(),durationMs:R}),r&&u({type:"step_complete",workflowId:i,stepKey:r,name:e,ts:Date.now(),durationMs:R,result:W(T)}),T}catch(T){let R=l(T),A=performance.now()-w,M=L(R,{origin:"throw",thrown:T});throw u({type:"step_error",workflowId:i,stepId:p,stepKey:r,name:e,ts:Date.now(),durationMs:A,error:M}),r&&u({type:"step_complete",workflowId:i,stepKey:r,name:e,ts:Date.now(),durationMs:A,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 r=n.key??o,e=o,p=o,l="error"in n?()=>n.error:n.onError,E=y;return(async()=>{let w=E?performance.now():0;y&&u({type:"step_start",workflowId:i,stepId:p,stepKey:r,name:e,ts:Date.now()});let T=await d();if(T.ok){let R=performance.now()-w;return u({type:"step_success",workflowId:i,stepId:p,stepKey:r,name:e,ts:Date.now(),durationMs:R}),r&&u({type:"step_complete",workflowId:i,stepKey:r,name:e,ts:Date.now(),durationMs:R,result:W(T.value)}),T.value}else{let R=l(T.error),A=performance.now()-w,M=L(R,{origin:"result",resultCause:T.error});throw u({type:"step_error",workflowId:i,stepId:p,stepKey:r,name:e,ts:Date.now(),durationMs:A,error:M}),r&&u({type:"step_complete",workflowId:i,stepKey:r,name:e,ts:Date.now(),durationMs:A,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,r)=>{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())},r)},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 r=typeof d=="string"?Ve(d):d;if(!r)throw new Error(`step.sleep: invalid duration '${d}'`);let e=r.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 w={timeoutId:void 0},T=()=>{w.timeoutId&&clearTimeout(w.timeoutId);let R=new Error("Sleep aborted");R.name="AbortError",E(R)};_?.addEventListener("abort",T,{once:!0}),p?.addEventListener("abort",T,{once:!0}),w.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 r=performance.now(),e=!1,p={scopeId:n,type:"race",winnerId:void 0};O.push(p);let l=()=>{if(e)return;e=!0;let E=O.findIndex(w=>w.scopeId===n);E!==-1&&O.splice(E,1),u({type:"scope_end",workflowId:i,scopeId:n,ts:Date.now(),durationMs:performance.now()-r,winnerId:p.winnerId})};u({type:"scope_start",workflowId:i,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 r=performance.now(),e=!1;O.push({scopeId:n,type:"allSettled"});let p=()=>{if(e)return;e=!0;let l=O.findIndex(E=>E.scopeId===n);l!==-1&&O.splice(l,1),u({type:"scope_end",workflowId:i,scopeId:n,ts:Date.now(),durationMs:performance.now()-r})};u({type:"scope_start",workflowId:i,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:r,else:e}=d;if(n())return await r();if(e)return await e()},c.arm=(o,d)=>({fn:o,errors:d}),c.forEach=async(o,d,n)=>{let r=[],e=n.maxIterations,p=0,l="run"in n,E=Symbol.asyncIterator in d?d:(async function*(){yield*d})();for await(let w of E){if(e!==void 0&&p>=e)break;let T;l?T=await n.run(w,p):T=await n.item.handler(w,p,c),r.push(T),p++}return r},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,r)=>c(o,()=>n(d),r),c.match=async(o,d,n,r)=>c(o,async()=>{let e=await d;return e.ok?W(await n.ok(e.value)):W(await n.err(e.error,e.cause))},r),c.all=c.parallel,c.map=async(o,d,n,r)=>{let e=r?.concurrency??d.length;return c(o,()=>e>=d.length?ke(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),w=await ke(E.map((T,R)=>n(T,l+R)));if(!w.ok)return w;p.push(...w.value)}return W(p)})(),{key:r?.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 r=n.key??o,e=o,p=q(r),l=y;return(async()=>{let E=l?performance.now():0;y&&u({type:"step_start",workflowId:i,stepId:p,stepKey:r,name:e,ts:Date.now()});let w;try{w=await d()}catch(g){if(V(g))throw u({type:"step_aborted",workflowId:i,stepId:p,stepKey:r,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:i,stepId:p,stepKey:r,name:e,ts:Date.now(),durationMs:b,error:v}),r&&u({type:"step_complete",workflowId:i,stepKey:r,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:i,stepId:p,stepKey:r,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:i,stepId:p,stepKey:r,name:e,ts:Date.now(),durationMs:$,error:C}),r&&u({type:"step_complete",workflowId:i,stepKey:r,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:i,stepId:p,stepKey:r,name:e,ts:Date.now(),durationMs:b}),r&&u({type:"step_complete",workflowId:i,stepKey:r,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:i,stepId:p,stepKey:r,name:e,ts:Date.now(),durationMs:b,error:C}),r&&u({type:"step_complete",workflowId:i,stepKey:r,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(w.ok){let g=performance.now()-E;return u({type:"step_success",workflowId:i,stepId:p,stepKey:r,name:e,ts:Date.now(),durationMs:g}),r&&u({type:"step_complete",workflowId:i,stepKey:r,name:e,ts:Date.now(),durationMs:g,result:w}),w.value}let T=w.error;if(n.on!==void 0&&n.on!==T){let g=performance.now()-E,v=L(T,{origin:"result",resultCause:w.cause});throw u({type:"step_error",workflowId:i,stepId:p,stepKey:r,name:e,ts:Date.now(),durationMs:g,error:v}),r&&u({type:"step_complete",workflowId:i,stepKey:r,name:e,ts:Date.now(),durationMs:g,result:w,meta:{origin:"result",resultCause:w.cause}}),a?.(v,e,m),I(v,{origin:"result",resultCause:w.cause})}let R;try{R=await n.fallback()}catch(g){if(V(g))throw u({type:"step_aborted",workflowId:i,stepId:p,stepKey:r,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:i,stepId:p,stepKey:r,name:e,ts:Date.now(),durationMs:x,error:v}),r&&u({type:"step_complete",workflowId:i,stepKey:r,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:i,stepId:p,stepKey:r,name:e,ts:Date.now(),durationMs:g}),r&&u({type:"step_complete",workflowId:i,stepKey:r,name:e,ts:Date.now(),durationMs:g,result:R,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(T)}}),R.value}let A=performance.now()-E,M=L(R.error,{origin:"result",resultCause:R.cause});throw u({type:"step_error",workflowId:i,stepId:p,stepKey:r,name:e,ts:Date.now(),durationMs:A,error:M}),r&&u({type:"step_complete",workflowId:i,stepKey:r,name:e,ts:Date.now(),durationMs:A,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,r=o,e=q(n),p=y;return(async()=>{let l=p?performance.now():0;y&&u({type:"step_start",workflowId:i,stepId:e,stepKey:n,name:r,ts:Date.now()});let E;try{E=await d.acquire()}catch(x){if(V(x))throw u({type:"step_aborted",workflowId:i,stepId:e,stepKey:n,name:r,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:i,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:C,error:b}),n&&u({type:"step_complete",workflowId:i,stepKey:n,name:r,ts:Date.now(),durationMs:C,result:U(b,{cause:x}),meta:{origin:"throw",thrown:x}}),a?.(b,r,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:i,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:x,error:b}),n&&u({type:"step_complete",workflowId:i,stepKey:n,name:r,ts:Date.now(),durationMs:x,result:E,meta:{origin:"result",resultCause:E.cause}}),a?.(b,r,m),I(b,{origin:"result",resultCause:E.cause})}let w=E.value,T,R,A=!1;try{T=await d.use(w)}catch(x){if(V(x)){try{await d.release(w)}catch(b){console.warn(`[awaitly] step.withResource("${o}"): release threw after earlyExit:`,b)}throw x}R=x,A=!0}try{await d.release(w)}catch(x){console.warn(`[awaitly] step.withResource("${o}"): release threw:`,x)}if(A){let x;try{x=D(R)}catch(C){throw J(C)}let b=performance.now()-l;throw u({type:"step_error",workflowId:i,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:b,error:x}),n&&u({type:"step_complete",workflowId:i,stepKey:n,name:r,ts:Date.now(),durationMs:b,result:U(x,{cause:R}),meta:{origin:"throw",thrown:R}}),a?.(x,r,m),I(x,{origin:"throw",thrown:R})}let M=T;if(M.ok){let x=performance.now()-l;return u({type:"step_success",workflowId:i,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:x}),n&&u({type:"step_complete",workflowId:i,stepKey:n,name:r,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:i,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:g,error:v}),n&&u({type:"step_complete",workflowId:i,stepKey:n,name:r,ts:Date.now(),durationMs:g,result:M,meta:{origin:"result",resultCause:M.cause}}),a?.(v,r,m),I(v,{origin:"result",resultCause:M.cause})})()};let j=await t({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
+ "use strict";var Ee=Object.defineProperty;var $e=Object.getOwnPropertyDescriptor;var Ye=Object.getOwnPropertyNames;var Je=Object.prototype.hasOwnProperty;var ze=(e,t)=>{for(var i in t)Ee(e,i,{get:t[i],enumerable:!0})},Ge=(e,t,i,y)=>{if(t&&typeof t=="object"||typeof t=="function")for(let C of Ye(t))!Je.call(e,C)&&C!==i&&Ee(e,C,{get:()=>t[C],enumerable:!(y=$e(t,C))||y.enumerable});return e};var Xe=e=>Ge(Ee({},"__esModule",{value:!0}),e);var pt={};ze(pt,{composeValidators:()=>Fe,createEventHandler:()=>Ve,createExpressHandler:()=>Ke,createResultMapper:()=>We,createSimpleHandler:()=>Be,createWebhookHandler:()=>Ne,defaultUnexpectedErrorMapper:()=>ie,defaultValidationErrorMapper:()=>ae,isValidationError:()=>Ue,requireFields:()=>je,sendWebhookResponse:()=>fe,toWebhookRequest:()=>we,validationError:()=>Te});module.exports=Xe(pt);var ee=class extends Error{_tag};function B(e,t){return class extends ee{_tag=e;constructor(i,y){let C=t?.message?t.message(i??{}):e;if(super(C),this.name=e,Object.setPrototypeOf(this,new.target.prototype),i&&typeof i=="object"){let{_tag:T,name:f,message:E,stack:P,...s}=i,v=Object.prototype.hasOwnProperty.call(s,"cause"),O=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=O),U&&(this.cause=y?.cause)}else y?.cause!==void 0&&(this.cause=y.cause)}}}Object.defineProperty(B,Symbol.hasInstance,{value:e=>e instanceof ee});(C=>{function e(T){return T instanceof Error}C.isError=e;function t(T){return T instanceof ee}C.isTaggedError=t;function i(T,f){let E=T._tag,P=f[E];return P(T)}C.match=i;function y(T,f,E){let P=T._tag,s=f[P];return s?s(T):E(T)}C.matchPartial=y})(B||={});var ke=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`}){},ge=class extends B("RetryExhaustedError",{message:t=>t.operation?`RetryExhaustedError: ${t.operation} failed after ${t.attempts} attempts`:`RetryExhaustedError: Operation failed after ${t.attempts} attempts`}){},Re=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`:""}`}){},xe=class extends B("CircuitBreakerOpenError",{message:t=>`CircuitBreakerOpenError: Circuit ${t.circuitName} is ${t.state??"OPEN"}${t.retryAfterMs?`, retry after ${Math.ceil(t.retryAfterMs/1e3)}s`:""}`}){},he=class extends B("ValidationError",{message:t=>`ValidationError: Invalid ${t.field} - ${t.reason}`}){},be=class extends B("NotFoundError",{message:t=>t.id?`NotFoundError: ${t.resource} with id ${t.id} not found`:`NotFoundError: ${t.resource} not found`}){},Ce=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"}){},Se=class extends B("NetworkError",{message:t=>t.url?`NetworkError: ${t.reason} (${t.url})`:`NetworkError: ${t.reason}`}){},Ae=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 Qe(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 Ze(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 Me=e=>e instanceof te||typeof e=="object"&&e!==null&&"_tag"in e&&e._tag==="UnexpectedError";function et(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 tt(e,t){if(!(!t||!e))return t[e]}function rt(e){let{intent:t,domain:i,owner:y,tags:C,stateChanges:T,emits:f,calls:E}=e;if(!t&&!i&&!y&&!C?.length&&!T?.length&&!f?.length&&!E?.length)return;let P={};return t&&(P.intent=t),i&&(P.domain=i),y&&(P.owner=y),C?.length&&(P.tags=C),T?.length&&(P.stateChanges=T),f?.length&&(P.emits=f),E?.length&&(P.calls=E),P}function K(e,t,i,y,C){let T=et(e),f=tt(T,t),E={tag:T,origin:i};return f!==void 0&&(E.classification=f),y!==void 0&&(E.attempt=y),C!==void 0&&(E.cumulativeDurationMs=C),E}var Q=Symbol.for("step_timeout_marker");function Pe(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:Q in e}function nt(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 Ie=Symbol("early-exit");function ot(e,t){return{[Ie]:!0,error:e,meta:t}}function st(e){return typeof e=="object"&&e!==null&&e[Ie]===!0}var De=Symbol("mapper-exception");function G(e){return{[De]:!0,thrown:e}}function at(e){return typeof e=="object"&&e!==null&&e[De]===!0}function me(e,t){let{backoff:i,initialDelay:y,maxDelay:C,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,C),T){let E=f*.25*Math.random();f=f+E}return Math.floor(f)}function ye(e){return new Promise(t=>setTimeout(t,e))}var Oe=Symbol("timeout"),oe=Symbol("timeout-option");function it(e){return typeof e=="object"&&e!==null&&e[oe]===!0}async function ut(e,t,i,y){let C=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&&C.abort(y.reason);let P;y&&!y.aborted&&(P=()=>C.abort(y.reason),y.addEventListener("abort",P,{once:!0}));let s=new Promise((O,U)=>{E=setTimeout(()=>{if(T!=="disconnect"&&C.abort(),T==="option"){U({[oe]:!0,ms:t.ms});return}U({[Oe]:!0,error:f()})},t.ms)}),v;t.signal?v=Promise.resolve(e(C.signal)):v=Promise.resolve(e());try{return await Promise.race([v,s])}catch(O){if(typeof O=="object"&&O!==null&&O[oe]===!0)throw{[oe]:!0,ms:t.ms};if(typeof O=="object"&&O!==null&&O[Oe]===!0){T==="disconnect"&&v.catch(()=>{});let U=O.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 O}finally{clearTimeout(E),P&&y&&y.removeEventListener("abort",P)}}var X={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function _e(e,t){let{onError:i,onEvent:y,catchUnexpected:C,workflowId:T,workflowName:f,context:E,_workflowSignal:P}=t&&typeof t=="object"?t:{},s=T??crypto.randomUUID(),v=C??Ze,O=[],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=O.length-1;ne>=0;ne--){let F=O[ne];if(F.type==="race"&&!F.winnerId){F.winnerId=re;break}}}y?.($,E)},D=ot,V=l=>st(l),q=(l,j)=>l,Le=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;O.push({scopeId:o,type:"parallel"});let p=()=>{if(r)return;r=!0;let c=O.findIndex(m=>m.scopeId===o);c!==-1&&O.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;O.push({scopeId:r,type:"parallel"});let m=()=>{if(c)return;c=!0;let w=O.findIndex(k=>k.scopeId===r);w!==-1&&O.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 A=!1,I=o.length,x=new Array(o.length);for(let M=0;M<o.length;M++){let h=o[M],S=M;Promise.resolve(a[h]()).catch(b=>N({type:"PROMISE_REJECTED",cause:b},{cause:{type:"PROMISE_REJECTION",reason:b}})).then(b=>{if(!A){if(!b.ok){A=!0,R([{key:h,result:b}]);return}x[S]={key:h,result:b},I--,I===0&&R(x)}})}});m();let k={};for(let{key:R,result:A}of w){if(!A.ok)throw i?.(A.error,R,E),D(A.error,{origin:"result",resultCause:A.cause});k[R]=A.value}return k}catch(w){throw m(),w}})()};var ct=j,lt=$,dt=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=rt(n),p=a,c=n.key??a,m=n.key??a,{description:w,retry:k,timeout:R}=n,A=H(c),I=y,x=I?performance.now():0,h=Le(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:A,stepKey:c,name:p,description:w,ts:Date.now(),...r&&{metadata:r}});let z;for(let _=1;_<=b.attempts;_++){let He=I?performance.now():0;try{let g;if(R?g=await ut(h,R,{name:p,key:c,attempt:_},P):g=await h(),g.ok){let J=performance.now()-x;return u({type:"step_success",workflowId:s,stepId:A,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=me(_,b);u({type:"step_retry",workflowId:s,stepId:A,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 ye(J);continue}b.attempts>1&&u({type:"step_retries_exhausted",workflowId:s,stepId:A,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()-He;if(it(g)){let L=g.ms;u({type:"step_timeout",workflowId:s,stepId:A,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:A,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:A,stepKey:c,name:p,description:w,ts:Date.now(),durationMs:J,...r&&{metadata:r}}),g;if(Pe(g)){let L=nt(g),qe=R?.ms??L?.timeoutMs??0;if(u({type:"step_timeout",workflowId:s,stepId:A,stepKey:c,name:p,ts:Date.now(),timeoutMs:qe,attempt:_,...r&&{metadata:r},diagnostics:K(g,n.errorMeta,"timeout",_)}),_<b.attempts&&b.retryOn(g,_)){let de=me(_,b);u({type:"step_retry",workflowId:s,stepId:A,stepKey:c,name:p,ts:Date.now(),attempt:_+1,maxAttempts:b.attempts,delayMs:de,error:g,...r&&{metadata:r},diagnostics:K(g,n.errorMeta,"timeout",_,performance.now()-x)}),b.onRetry(g,_,de),await ye(de);continue}b.attempts>1&&u({type:"step_retries_exhausted",workflowId:s,stepId:A,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 le=performance.now()-x;throw u({type:"step_error",workflowId:s,stepId:A,stepKey:c,name:p,description:w,ts:Date.now(),durationMs:le,error:g,...r&&{metadata:r},diagnostics:K(g,n.errorMeta,"timeout",_,le)}),m&&u({type:"step_complete",workflowId:s,stepKey:m,name:p,description:w,ts:Date.now(),durationMs:le,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=me(_,b);u({type:"step_retry",workflowId:s,stepId:A,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 ye(L);continue}b.attempts>1&&!Pe(g)&&u({type:"step_retries_exhausted",workflowId:s,stepId:A,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 ce=performance.now()-x,Z;try{Z=v(g)}catch(L){throw G(L)}throw u({type:"step_error",workflowId:s,stepId:A,stepKey:c,name:p,description:w,ts:Date.now(),durationMs:ce,error:Z,...r&&{metadata:r},diagnostics:K(g,n.errorMeta,"throw",_,ce)}),m&&u({type:"step_complete",workflowId:s,stepKey:m,name:p,description:w,ts:Date.now(),durationMs:ce,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,ue=performance.now()-x,pe=q(Y.error,{origin:"result",resultCause:Y.cause});throw u({type:"step_error",workflowId:s,stepId:A,stepKey:c,name:p,description:w,ts:Date.now(),durationMs:ue,error:pe,...r&&{metadata:r},diagnostics:K(Y.error,n.errorMeta,"result",b.attempts,ue)}),m&&u({type:"step_complete",workflowId:s,stepKey:m,name:p,description:w,ts:Date.now(),durationMs:ue,result:Y,meta:{origin:"result",resultCause:Y.cause},...r&&{metadata:r}}),i?.(pe,p,E),D(pe,{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),A=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:A,error:I}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:r,ts:Date.now(),durationMs:A,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),A=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:A,error:I}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:r,ts:Date.now(),durationMs:A,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"?Qe(d):d;if(!n)throw new Error(`step.sleep: invalid duration '${d}'`);let r=n.millis,p=o?.signal;return l(a,async()=>{if(P?.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)};P?.addEventListener("abort",k,{once:!0}),p?.addEventListener("abort",k,{once:!0}),w.timeoutId=setTimeout(()=>{P?.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};O.push(p);let c=()=>{if(r)return;r=!0;let m=O.findIndex(w=>w.scopeId===o);m!==-1&&O.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;O.push({scopeId:o,type:"allSettled"});let p=()=>{if(r)return;r=!0;let c=O.findIndex(m=>m.scopeId===o);c!==-1&&O.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?ve(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 ve(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(S){throw G(S)}if(o.on!==void 0&&o.on!==M){let S=performance.now()-m;throw u({type:"step_error",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now(),durationMs:S,error:M}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:r,ts:Date.now(),durationMs:S,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(S){if(V(S))throw u({type:"step_aborted",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now(),durationMs:performance.now()-m}),S;let b;try{b=v(S)}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:S}),meta:{origin:"throw",thrown:S}}),i?.(b,r,E),D(b,{origin:"throw",thrown:S})}if(h.ok){let S=performance.now()-m;return u({type:"step_success",workflowId:s,stepId:p,stepKey:n,name:r,ts:Date.now(),durationMs:S}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:r,ts:Date.now(),durationMs:S,result:h,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(M)}}),h.value}else{let S=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:S,error:b}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:r,ts:Date.now(),durationMs:S,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(S){throw G(S)}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 A=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:A,error:I}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:r,ts:Date.now(),durationMs:A,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 S;try{S=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:S}),o&&u({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:b,result:N(S,{cause:h}),meta:{origin:"throw",thrown:h}}),i?.(S,n,E),D(S,{origin:"throw",thrown:h})}if(!m.ok){let h=performance.now()-c,S=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:S}),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?.(S,n,E),D(S,{origin:"result",resultCause:m.cause})}let w=m.value,k,R,A=!1;try{k=await d.use(w)}catch(h){if(V(h)){try{await d.release(w)}catch(S){console.warn(`[awaitly] step.withResource("${a}"): release threw after earlyExit:`,S)}throw h}R=h,A=!0}try{await d.release(w)}catch(h){console.warn(`[awaitly] step.withResource("${a}"): release threw:`,h)}if(A){let h;try{h=v(R)}catch(b){throw G(b)}let S=performance.now()-c;throw u({type:"step_error",workflowId:s,stepId:r,stepKey:o,name:n,ts:Date.now(),durationMs:S,error:h}),o&&u({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:S,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(j)}catch(c){if(Je(c))throw c.thrown;if(V(c)){let H=c.meta.origin==="throw"?c.meta.thrown:c.meta.origin==="result"?c.meta.resultCause:void 0;return U(c.error,{cause:H})}let K=D(c);return a?.(K,"unexpected",m),U(K,{cause:c})}}fe.strict=(t,s)=>fe(t,s);async function ke(t){return t.length===0?W([]):new Promise(s=>{let a=!1,y=t.length,h=new Array(t.length);for(let S=0;S<t.length;S++){let k=S;Promise.resolve(t[k]).catch(m=>U({type:"PROMISE_REJECTED",cause:m},{cause:{type:"PROMISE_REJECTION",reason:m}})).then(m=>{if(!a){if(!m.ok){a=!0,s(m);return}h[k]=m.value,y--,y===0&&s(W(h))}})}})}function be(t){return typeof t=="object"&&t!==null&&t.type==="VALIDATION_ERROR"}function ne(t){return{status:400,body:{error:{type:t.type,message:t.message,details:t.field?{field:t.field}:t.details}}}}function oe(t){return{status:500,body:{error:{type:"INTERNAL_ERROR",message:"An unexpected error occurred"}}}}function he(t,s,a){let{validateInput:y,mapResult:h,mapValidationError:S=ne,mapUnexpectedError:k=oe,beforeValidation:m,afterResponse:_}=a;return async i=>{try{let D=m?await m(i):i,O=await y(D);if(!re(O)){let I=S(O.error,D);return _?await _(I,D):I}let N=O.value,q=await t.run(async({step:I,deps:V})=>s({step:I,deps:V,args:N})),u=h(q,D);return _?await _(u,D):u}catch(D){let O=k(D,i);return _?await _(O,i):O}}}function Se(t){let{validateInput:s,handler:a,mapResult:y,mapValidationError:h=ne,mapUnexpectedError:S=oe}=t;return async k=>{try{let m=await s(k);if(!re(m))return h(m.error,k);let _=await a(m.value,k);return y(_,k)}catch(m){return S(m,k)}}}function Ae(t,s={}){let{defaultStatus:a=500,successStatus:y=200}=s,h=new Map;for(let S of t)h.set(S.error,S);return S=>{if(S.ok)return{status:y,body:S.value};if(ge(S.error))return{status:500,body:{error:{type:"INTERNAL_ERROR",message:"An unexpected error occurred"}}};let k=h.get(S.error);return k?{status:k.status,body:{error:{type:String(k.error),message:k.message}}}:{status:a,body:{error:{type:String(S.error)}}}}}function Ee(t){return{method:t.method,path:t.path,headers:t.headers,body:t.body,query:t.query,params:t.params,raw:t}}function me(t,s){s.headers&&t.set(s.headers),t.status(s.status).json(s.body)}function Pe(t){return async(s,a)=>{let y=Ee(s),h=await t(y);me(a,h)}}function ye(t,s,a){return{type:"VALIDATION_ERROR",message:t,field:s,details:a}}function Oe(t){return s=>{for(let a of t)if(s[a]===void 0||s[a]===null||s[a]==="")return U(ye(`Missing required field: ${a}`,a));return W(void 0)}}function _e(...t){return s=>{for(let a of t){let y=a(s);if(!y.ok)return y}return W(void 0)}}function ve(t,s,a){let{validatePayload:y,mapResult:h}=a;return async S=>{try{let k=y(S);if(!re(k))return{success:!1,ack:!0,error:{type:k.error.type,message:k.error.message,retryable:!1}};let m=k.value,_=await t.run(async({step:i,deps:D})=>s({step:i,deps:D,args:m}));return h(_,S)}catch(k){return{success:!1,ack:!1,error:{type:"UNEXPECTED_ERROR",message:k instanceof Error?k.message:String(k),retryable:!0}}}}}0&&(module.exports={composeValidators,createEventHandler,createExpressHandler,createResultMapper,createSimpleHandler,createWebhookHandler,defaultUnexpectedErrorMapper,defaultValidationErrorMapper,isValidationError,requireFields,sendWebhookResponse,toWebhookRequest,validationError});
6
+ See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return W(F)}catch(l){if(at(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})}}_e.strict=(e,t)=>_e(e,t);async function ve(e){return e.length===0?W([]):new Promise(t=>{let i=!1,y=e.length,C=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}C[f]=E.value,y--,y===0&&t(W(C))}})}})}function Ue(e){return typeof e=="object"&&e!==null&&e.type==="VALIDATION_ERROR"}function ae(e){return{status:400,body:{error:{type:e.type,message:e.message,details:e.field?{field:e.field}:e.details}}}}function ie(e){return{status:500,body:{error:{type:"INTERNAL_ERROR",message:e instanceof Error?e.message:"An unexpected error occurred"}}}}function Ne(e,t,i){let{validateInput:y,mapResult:C,mapValidationError:T=ae,mapUnexpectedError:f=ie,beforeValidation:E,afterResponse:P}=i;return async s=>{try{let v=E?await E(s):s,O=await y(v);if(!se(O)){let D=T(O.error,v);return P?await P(D,v):D}let U=O.value,H=await e.run(async({step:D,deps:V})=>t({step:D,deps:V,args:U})),u=C(H,v);return P?await P(u,v):u}catch(v){let O=f(v,s);return P?await P(O,s):O}}}function Be(e){let{validateInput:t,handler:i,mapResult:y,mapValidationError:C=ae,mapUnexpectedError:T=ie}=e;return async f=>{try{let E=await t(f);if(!se(E))return C(E.error,f);let P=await i(E.value,f);return y(P,f)}catch(E){return T(E,f)}}}function We(e,t={}){let{defaultStatus:i=500,successStatus:y=200}=t,C=new Map;for(let T of e)C.set(T.error,T);return T=>{if(T.ok)return{status:y,body:T.value};if(Me(T.error))return{status:500,body:{error:{type:"INTERNAL_ERROR",message:T.error instanceof Error?T.error.message:"An unexpected error occurred"}}};let f=C.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 we(e){return{method:e.method,path:e.path,headers:e.headers,body:e.body,query:e.query,params:e.params,raw:e}}function fe(e,t){t.headers&&e.set(t.headers),e.status(t.status).json(t.body)}function Ke(e){return async(t,i)=>{let y=we(t),C=await e(y);fe(i,C)}}function Te(e,t,i){return{type:"VALIDATION_ERROR",message:e,field:t,details:i}}function je(e){return t=>{for(let i of e)if(t[i]===void 0||t[i]===null||t[i]==="")return N(Te(`Missing required field: ${i}`,i));return W(void 0)}}function Fe(...e){return t=>{for(let i of e){let y=i(t);if(!y.ok)return y}return W(void 0)}}function Ve(e,t,i){let{validatePayload:y,mapResult:C}=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,P=await e.run(async({step:s,deps:v})=>t({step:s,deps:v,args:E}));return C(P,T)}catch(f){return{success:!1,ack:!1,error:{type:"UnexpectedError",message:f instanceof Error?f.message:String(f),retryable:!0}}}}}0&&(module.exports={composeValidators,createEventHandler,createExpressHandler,createResultMapper,createSimpleHandler,createWebhookHandler,defaultUnexpectedErrorMapper,defaultValidationErrorMapper,isValidationError,requireFields,sendWebhookResponse,toWebhookRequest,validationError});
7
7
  //# sourceMappingURL=webhook.cjs.map