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,8 +1,8 @@
1
- "use strict";var pe=Object.defineProperty;var Se=Object.getOwnPropertyDescriptor;var Ae=Object.getOwnPropertyNames;var _e=Object.prototype.hasOwnProperty;var Pe=(o,l)=>{for(var u in l)pe(o,u,{get:l[u],enumerable:!0})},Oe=(o,l,u,a)=>{if(l&&typeof l=="object"||typeof l=="function")for(let S of Ae(l))!_e.call(o,S)&&S!==u&&pe(o,S,{get:()=>l[S],enumerable:!(a=Se(l,S))||a.enumerable});return o};var Me=o=>Oe(pe({},"__esModule",{value:!0}),o);var Ye={};Pe(Ye,{createDiagnosticsCollector:()=>xe});module.exports=Me(Ye);function ve(o){let l=o.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!l)return;let u=parseFloat(l[1]),a=l[2].toLowerCase();return{_tag:"Duration",millis:u*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[a]??1)}}var De="UNEXPECTED_ERROR";function Ie(o){return De}function $(o){return{ok:!0,value:o}}function q(o,l){let u=l?.cause;return{ok:!1,error:o,...u!==void 0?{cause:u}:{}}}function Ee(o){if(o==null)return"unknown";if(typeof o=="string")return o.trim()||"unknown";if(typeof o=="object"){let l=o;if(typeof l._tag=="string"){let u=l._tag.trim();if(u)return u}if(typeof l.tag=="string"){let u=l.tag.trim();if(u)return u}if(typeof l.code=="string"){let u=l.code.trim();if(u)return u}else if(typeof l.code=="number")return String(l.code);if(o instanceof Error&&o.name){let u=o.name.trim();if(u)return u}}return"unknown"}function Ue(o,l){if(!(!l||!o))return l[o]}function Ne(o){let{intent:l,domain:u,owner:a,tags:S,stateChanges:I,emits:O,calls:i}=o;if(!l&&!u&&!a&&!S?.length&&!I?.length&&!O?.length&&!i?.length)return;let M={};return l&&(M.intent=l),u&&(M.domain=u),a&&(M.owner=a),S?.length&&(M.tags=S),I?.length&&(M.stateChanges=I),O?.length&&(M.emits=O),i?.length&&(M.calls=i),M}function Y(o,l,u,a,S){let I=Ee(o),O=Ue(I,l),i={tag:I,origin:u};return O!==void 0&&(i.classification=O),a!==void 0&&(i.attempt=a),S!==void 0&&(i.cumulativeDurationMs=S),i}var ne=Symbol.for("step_timeout_marker");function we(o){return typeof o!="object"||o===null?!1:o.type==="STEP_TIMEOUT"?!0:ne in o}function Ke(o){if(!(typeof o!="object"||o===null)){if(o.type==="STEP_TIMEOUT"){let l=o;return{timeoutMs:l.timeoutMs,stepName:l.stepName,stepKey:l.stepKey,attempt:l.attempt}}if(ne in o)return o[ne]}}var Te=Symbol("early-exit");function We(o,l){return{[Te]:!0,error:o,meta:l}}function je(o){return typeof o=="object"&&o!==null&&o[Te]===!0}var ge=Symbol("mapper-exception");function te(o){return{[ge]:!0,thrown:o}}function Fe(o){return typeof o=="object"&&o!==null&&o[ge]===!0}function me(o,l){let{backoff:u,initialDelay:a,maxDelay:S,jitter:I}=l,O;switch(u){case"fixed":O=a;break;case"linear":O=a*o;break;case"exponential":O=a*Math.pow(2,o-1);break}if(O=Math.min(O,S),I){let i=O*.25*Math.random();O=O+i}return Math.floor(O)}function de(o){return new Promise(l=>setTimeout(l,o))}var fe=Symbol("timeout"),se=Symbol("timeout-option");function Le(o){return typeof o=="object"&&o!==null&&o[se]===!0}async function Be(o,l,u,a){let S=new AbortController,I=l.onTimeout??"error",O=()=>typeof I=="function"?I({name:u.name,key:u.key,ms:l.ms}):l.error??{type:"STEP_TIMEOUT",stepName:u.name,stepKey:u.key,timeoutMs:l.ms,attempt:u.attempt},i;a?.aborted&&S.abort(a.reason);let M;a&&!a.aborted&&(M=()=>S.abort(a.reason),a.addEventListener("abort",M,{once:!0}));let s=new Promise((_,j)=>{i=setTimeout(()=>{if(I!=="disconnect"&&S.abort(),I==="option"){j({[se]:!0,ms:l.ms});return}j({[fe]:!0,error:O()})},l.ms)}),N;l.signal?N=Promise.resolve(o(S.signal)):N=Promise.resolve(o());try{return await Promise.race([N,s])}catch(_){if(typeof _=="object"&&_!==null&&_[se]===!0)throw{[se]:!0,ms:l.ms};if(typeof _=="object"&&_!==null&&_[fe]===!0){I==="disconnect"&&N.catch(()=>{});let j=_.error;if(typeof j=="object"&&j!==null&&j.type!=="STEP_TIMEOUT"){let X={timeoutMs:l.ms,stepName:u.name,stepKey:u.key,attempt:u.attempt};ne in j?j[ne]=X:Object.defineProperty(j,ne,{value:X,enumerable:!1,writable:!0,configurable:!1})}throw j}throw _}finally{clearTimeout(i),M&&a&&a.removeEventListener("abort",M)}}var re={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function ye(o,l){let{onError:u,onEvent:a,catchUnexpected:S,workflowId:I,workflowName:O,context:i,_workflowSignal:M}=l&&typeof l=="object"?l:{},s=I??crypto.randomUUID(),N=S??Ie,_=[],j=0,X=m=>m??`step_${++j}`,c=m=>{let F=m.context!==void 0||i===void 0?m:{...m,context:i},L=O!==void 0&&F.workflowName===void 0?{...F,workflowName:O}:F;if(L.type==="step_success"){let Q=L.stepId;for(let B=_.length-1;B>=0;B--){let v=_[B];if(v.type==="race"&&!v.winnerId){v.winnerId=Q;break}}}a?.(L,i)},U=We,V=m=>je(m),K=(m,F)=>m,A=m=>typeof m=="function"?!1:!!(m&&typeof m=="object"&&"ok"in m||m&&typeof m=="object"&&"then"in m&&typeof m.then=="function");try{let F=function(n){let E={};for(let[r,t]of Object.entries(n))if(typeof t=="function")E[r]=t;else if(t&&typeof t=="object"&&"fn"in t)E[r]=t.fn;else throw new TypeError(`step.parallel: operation "${r}" must be a function or { fn, errors? } object`);return E},L=function(n,E){let r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1;_.push({scopeId:r,type:"parallel"});let p=()=>{if(e)return;e=!0;let d=_.findIndex(w=>w.scopeId===r);d!==-1&&_.splice(d,1),c({type:"scope_end",workflowId:s,scopeId:r,ts:Date.now(),durationMs:performance.now()-t})};c({type:"scope_start",workflowId:s,scopeId:r,scopeType:"parallel",name:n,ts:Date.now()});try{let d=await E();if(p(),!d.ok)throw u?.(d.error,n,i),U(d.error,{origin:"result",resultCause:d.cause});return d.value}catch(d){throw p(),d}})()},Q=function(n,E){let r=Object.keys(n),t=E.name??`Parallel(${r.join(", ")})`,e=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let p=performance.now(),d=!1;_.push({scopeId:e,type:"parallel"});let w=()=>{if(d)return;d=!0;let f=_.findIndex(y=>y.scopeId===e);f!==-1&&_.splice(f,1),c({type:"scope_end",workflowId:s,scopeId:e,ts:Date.now(),durationMs:performance.now()-p})};c({type:"scope_start",workflowId:s,scopeId:e,scopeType:"parallel",name:t,ts:Date.now()});try{let f=await new Promise(T=>{if(r.length===0){T([]);return}let b=!1,D=r.length,g=new Array(r.length);for(let P=0;P<r.length;P++){let R=r[P],x=P;Promise.resolve(n[R]()).catch(C=>q({type:"PROMISE_REJECTED",cause:C},{cause:{type:"PROMISE_REJECTION",reason:C}})).then(C=>{if(!b){if(!C.ok){b=!0,T([{key:R,result:C}]);return}g[x]={key:R,result:C},D--,D===0&&T(g)}})}});w();let y={};for(let{key:T,result:b}of f){if(!b.ok)throw u?.(b.error,T,i),U(b.error,{origin:"result",resultCause:b.cause});y[T]=b.value}return y}catch(f){throw w(),f}})()};var W=F,ee=L,H=Q;let m=(n,E,r)=>(async()=>{if(typeof n!="string"||n.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let t=r??{},e=Ne(t),p=n,d=t.key??n,w=t.key??n,{description:f,retry:y,timeout:T}=t,b=X(d),D=a,g=D?performance.now():0,R=A(E)?()=>E:E,C={attempts:Math.max(1,y?.attempts??1),backoff:y?.backoff??re.backoff,initialDelay:y?.initialDelay??re.initialDelay,maxDelay:y?.maxDelay??re.maxDelay,jitter:y?.jitter??re.jitter,retryOn:y?.retryOn??re.retryOn,onRetry:y?.onRetry??re.onRetry};a&&c({type:"step_start",workflowId:s,stepId:b,stepKey:d,name:p,description:f,ts:Date.now(),...e&&{metadata:e}});let Z;for(let h=1;h<=C.attempts;h++){let be=D?performance.now():0;try{let k;if(T?k=await Be(R,T,{name:p,key:d,attempt:h},M):k=await R(),k.ok){let G=performance.now()-g;return c({type:"step_success",workflowId:s,stepId:b,stepKey:d,name:p,description:f,ts:Date.now(),durationMs:G,...e&&{metadata:e}}),w&&c({type:"step_complete",workflowId:s,stepKey:w,name:p,description:f,ts:Date.now(),durationMs:G,result:k,...e&&{metadata:e}}),k.value}if(Z=k,h<C.attempts&&C.retryOn(k.error,h)){let G=me(h,C);c({type:"step_retry",workflowId:s,stepId:b,stepKey:d,name:p,ts:Date.now(),attempt:h+1,maxAttempts:C.attempts,delayMs:G,error:k.error,...e&&{metadata:e},diagnostics:Y(k.error,t.errorMeta,"result",h,performance.now()-g)}),C.onRetry(k.error,h,G),await de(G);continue}C.attempts>1&&c({type:"step_retries_exhausted",workflowId:s,stepId:b,stepKey:d,name:p,ts:Date.now(),durationMs:performance.now()-g,attempts:h,lastError:k.error,...e&&{metadata:e},diagnostics:Y(k.error,t.errorMeta,"result",h,performance.now()-g)});break}catch(k){let G=performance.now()-be;if(Le(k)){let J=k.ms;c({type:"step_timeout",workflowId:s,stepId:b,stepKey:d,name:p,ts:Date.now(),timeoutMs:J,attempt:h,...e&&{metadata:e},diagnostics:Y(k,t.errorMeta,"timeout",h)}),c({type:"step_success",workflowId:s,stepId:b,stepKey:d,name:p,description:f,ts:Date.now(),durationMs:performance.now()-g,...e&&{metadata:e}}),w&&c({type:"step_complete",workflowId:s,stepKey:w,name:p,description:f,ts:Date.now(),durationMs:performance.now()-g,result:$(void 0),...e&&{metadata:e}});return}if(V(k))throw c({type:"step_aborted",workflowId:s,stepId:b,stepKey:d,name:p,description:f,ts:Date.now(),durationMs:G,...e&&{metadata:e}}),k;if(we(k)){let J=Ke(k),he=T?.ms??J?.timeoutMs??0;if(c({type:"step_timeout",workflowId:s,stepId:b,stepKey:d,name:p,ts:Date.now(),timeoutMs:he,attempt:h,...e&&{metadata:e},diagnostics:Y(k,t.errorMeta,"timeout",h)}),h<C.attempts&&C.retryOn(k,h)){let le=me(h,C);c({type:"step_retry",workflowId:s,stepId:b,stepKey:d,name:p,ts:Date.now(),attempt:h+1,maxAttempts:C.attempts,delayMs:le,error:k,...e&&{metadata:e},diagnostics:Y(k,t.errorMeta,"timeout",h,performance.now()-g)}),C.onRetry(k,h,le),await de(le);continue}C.attempts>1&&c({type:"step_retries_exhausted",workflowId:s,stepId:b,stepKey:d,name:p,ts:Date.now(),durationMs:performance.now()-g,attempts:h,lastError:k,...e&&{metadata:e},diagnostics:Y(k,t.errorMeta,"timeout",h,performance.now()-g)});let ce=performance.now()-g;throw c({type:"step_error",workflowId:s,stepId:b,stepKey:d,name:p,description:f,ts:Date.now(),durationMs:ce,error:k,...e&&{metadata:e},diagnostics:Y(k,t.errorMeta,"timeout",h,ce)}),w&&c({type:"step_complete",workflowId:s,stepKey:w,name:p,description:f,ts:Date.now(),durationMs:ce,result:q(k,{cause:k}),meta:{origin:"throw",thrown:k},...e&&{metadata:e}}),u?.(k,p,i),U(k,{origin:"throw",thrown:k})}if(h<C.attempts&&C.retryOn(k,h)){let J=me(h,C);c({type:"step_retry",workflowId:s,stepId:b,stepKey:d,name:p,ts:Date.now(),attempt:h+1,maxAttempts:C.attempts,delayMs:J,error:k,...e&&{metadata:e},diagnostics:Y(k,t.errorMeta,"throw",h,performance.now()-g)}),C.onRetry(k,h,J),await de(J);continue}C.attempts>1&&!we(k)&&c({type:"step_retries_exhausted",workflowId:s,stepId:b,stepKey:d,name:p,ts:Date.now(),durationMs:performance.now()-g,attempts:h,lastError:k,...e&&{metadata:e},diagnostics:Y(k,t.errorMeta,"throw",h,performance.now()-g)});let ue=performance.now()-g,oe;try{oe=N(k)}catch(J){throw te(J)}throw c({type:"step_error",workflowId:s,stepId:b,stepKey:d,name:p,description:f,ts:Date.now(),durationMs:ue,error:oe,...e&&{metadata:e},diagnostics:Y(k,t.errorMeta,"throw",h,ue)}),w&&c({type:"step_complete",workflowId:s,stepKey:w,name:p,description:f,ts:Date.now(),durationMs:ue,result:q(oe,{cause:k}),meta:{origin:"throw",thrown:k},...e&&{metadata:e}}),u?.(oe,p,i),U(oe,{origin:"throw",thrown:k})}}let z=Z,ae=performance.now()-g,ie=K(z.error,{origin:"result",resultCause:z.cause});throw c({type:"step_error",workflowId:s,stepId:b,stepKey:d,name:p,description:f,ts:Date.now(),durationMs:ae,error:ie,...e&&{metadata:e},diagnostics:Y(z.error,t.errorMeta,"result",C.attempts,ae)}),w&&c({type:"step_complete",workflowId:s,stepKey:w,name:p,description:f,ts:Date.now(),durationMs:ae,result:z,meta:{origin:"result",resultCause:z.cause},...e&&{metadata:e}}),u?.(ie,p,i),U(ie,{origin:"result",resultCause:z.cause})})();m.try=(n,E,r)=>{if(typeof n!="string"||n.length===0)throw new Error('[awaitly] step.try() requires an explicit string ID as the first argument. Example: step.try("parse", () => JSON.parse(str), { error: "PARSE_ERROR" })');let t=r.key??n,e=n,p=n,d="error"in r?()=>r.error:r.onError,w=a;return(async()=>{let f=w?performance.now():0;a&&c({type:"step_start",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now()});try{let y=await E(),T=performance.now()-f;return c({type:"step_success",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:T}),t&&c({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:T,result:$(y)}),y}catch(y){let T=d(y),b=performance.now()-f,D=K(T,{origin:"throw",thrown:y});throw c({type:"step_error",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:b,error:D}),t&&c({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:b,result:q(T,{cause:y}),meta:{origin:"throw",thrown:y}}),u?.(D,e,i),U(D,{origin:"throw",thrown:y})}})()},m.fromResult=(n,E,r)=>{if(typeof n!="string"||n.length===0)throw new Error('[awaitly] step.fromResult() requires an explicit string ID as the first argument. Example: step.fromResult("callProvider", () => callProvider(input), { onError: (e) => ({ type: "FAILED" }) })');let t=r.key??n,e=n,p=n,d="error"in r?()=>r.error:r.onError,w=a;return(async()=>{let f=w?performance.now():0;a&&c({type:"step_start",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now()});let y=await E();if(y.ok){let T=performance.now()-f;return c({type:"step_success",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:T}),t&&c({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:T,result:$(y.value)}),y.value}else{let T=d(y.error),b=performance.now()-f,D=K(T,{origin:"result",resultCause:y.error});throw c({type:"step_error",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:b,error:D}),t&&c({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:b,result:q(T,{cause:y.error}),meta:{origin:"result",resultCause:y.error}}),u?.(D,e,i),U(D,{origin:"result",resultCause:y.error})}})()},m.fromNullable=(n,E,r,t)=>{if(typeof n!="string"||n.length===0)throw new Error('[awaitly] step.fromNullable() requires an explicit string ID as the first argument. Example: step.fromNullable("getUser", () => db.find(id), () => ({ type: "NOT_FOUND" }))');return m(n,async()=>{let e=await E();return e!=null?$(e):q(r())},t)},m.retry=(n,E,r)=>{if(typeof n!="string"||n.length===0)throw new Error('[awaitly] step.retry() requires an explicit string ID as the first argument. Example: step.retry("fetchData", () => fetchData(), { attempts: 3 })');return m(n,E,{key:r.key??n,retry:{attempts:r.attempts,backoff:r.backoff,initialDelay:r.initialDelay,maxDelay:r.maxDelay,jitter:r.jitter,retryOn:r.retryOn,onRetry:r.onRetry},timeout:r.timeout})},m.withTimeout=(n,E,r)=>{if(typeof n!="string"||n.length===0)throw new Error('[awaitly] step.withTimeout() requires an explicit string ID as the first argument. Example: step.withTimeout("slowOp", () => slowOp(), { ms: 5000 })');return m(n,E,{key:r.key??n,timeout:r})},m.sleep=(n,E,r)=>{if(typeof n!="string"||n.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let t=typeof E=="string"?ve(E):E;if(!t)throw new Error(`step.sleep: invalid duration '${E}'`);let e=t.millis,p=r?.signal;return m(n,async()=>{if(M?.aborted||p?.aborted){let d=new Error("Sleep aborted");throw d.name="AbortError",d}return new Promise((d,w)=>{let f={timeoutId:void 0},y=()=>{f.timeoutId&&clearTimeout(f.timeoutId);let T=new Error("Sleep aborted");T.name="AbortError",w(T)};M?.addEventListener("abort",y,{once:!0}),p?.addEventListener("abort",y,{once:!0}),f.timeoutId=setTimeout(()=>{M?.removeEventListener("abort",y),p?.removeEventListener("abort",y),d($(void 0))},e)})},{key:r?.key??n,description:r?.description})},m.parallel=((...n)=>{if(typeof n[0]!="string")throw new TypeError("step.parallel(name, ...): first argument must be a string (step name). Example: step.parallel('Fetch data', { user: () => fetchUser(), posts: () => fetchPosts() })");let E=n[0],r=n[1];if(typeof r=="function")return L(E,r);if(r&&typeof r=="object"&&!Array.isArray(r)){let e=F(r);return Q(e,{name:E})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),m.race=(n,E)=>{let r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1,p={scopeId:r,type:"race",winnerId:void 0};_.push(p);let d=()=>{if(e)return;e=!0;let w=_.findIndex(f=>f.scopeId===r);w!==-1&&_.splice(w,1),c({type:"scope_end",workflowId:s,scopeId:r,ts:Date.now(),durationMs:performance.now()-t,winnerId:p.winnerId})};c({type:"scope_start",workflowId:s,scopeId:r,scopeType:"race",name:n,ts:Date.now()});try{let w=await E();if(d(),!w.ok)throw u?.(w.error,n,i),U(w.error,{origin:"result",resultCause:w.cause});return w.value}catch(w){throw d(),w}})()},m.allSettled=(n,E)=>{let r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1;_.push({scopeId:r,type:"allSettled"});let p=()=>{if(e)return;e=!0;let d=_.findIndex(w=>w.scopeId===r);d!==-1&&_.splice(d,1),c({type:"scope_end",workflowId:s,scopeId:r,ts:Date.now(),durationMs:performance.now()-t})};c({type:"scope_start",workflowId:s,scopeId:r,scopeType:"allSettled",name:n,ts:Date.now()});try{let d=await E();if(p(),!d.ok)throw u?.(d.error,n,i),U(d.error,{origin:"result",resultCause:d.cause});return d.value}catch(d){throw p(),d}})()},m.if=(n,E,r)=>r(),m.label=m.if,m.branch=async(n,E)=>{let{condition:r,then:t,else:e}=E;if(r())return await t();if(e)return await e()},m.arm=(n,E)=>({fn:n,errors:E}),m.forEach=async(n,E,r)=>{let t=[],e=r.maxIterations,p=0,d="run"in r,w=Symbol.asyncIterator in E?E:(async function*(){yield*E})();for await(let f of w){if(e!==void 0&&p>=e)break;let y;d?y=await r.run(f,p):y=await r.item.handler(f,p,m),t.push(y),p++}return t},m.item=n=>({__forEachItemHandler:!0,handler:n}),m.dep=(n,E)=>E,m.run=(n,E,r)=>m(n,()=>E,r),m.workflow=(n,E,r)=>m(n,E,r),m.andThen=(n,E,r,t)=>m(n,()=>r(E),t),m.match=async(n,E,r,t)=>m(n,async()=>{let e=await E;return e.ok?$(await r.ok(e.value)):$(await r.err(e.error,e.cause))},t),m.all=m.parallel,m.map=async(n,E,r,t)=>{let e=t?.concurrency??E.length;return m(n,()=>e>=E.length?ke(E.map((p,d)=>r(p,d))):(async()=>{let p=[];for(let d=0;d<E.length;d+=e){let w=E.slice(d,d+e),f=await ke(w.map((y,T)=>r(y,d+T)));if(!f.ok)return f;p.push(...f.value)}return $(p)})(),{key:t?.key})},m.withFallback=(n,E,r)=>{if(typeof n!="string"||n.length===0)throw new Error('[awaitly] step.withFallback() requires an explicit string ID as the first argument. Example: step.withFallback("getUser", () => fetchUser(id), { fallback: () => fetchFromCache(id) })');let t=r.key??n,e=n,p=X(t),d=a;return(async()=>{let w=d?performance.now():0;a&&c({type:"step_start",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now()});let f;try{f=await E()}catch(g){if(V(g))throw c({type:"step_aborted",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-w}),g;let P;try{P=N(g)}catch(x){throw te(x)}if(r.on!==void 0&&r.on!==P){let x=performance.now()-w;throw c({type:"step_error",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:x,error:P}),t&&c({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:x,result:q(P,{cause:g}),meta:{origin:"throw",thrown:g}}),u?.(P,e,i),U(P,{origin:"throw",thrown:g})}let R;try{R=await r.fallback()}catch(x){if(V(x))throw c({type:"step_aborted",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-w}),x;let C;try{C=N(x)}catch(z){throw te(z)}let Z=performance.now()-w;throw c({type:"step_error",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:Z,error:C}),t&&c({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:Z,result:q(C,{cause:x}),meta:{origin:"throw",thrown:x}}),u?.(C,e,i),U(C,{origin:"throw",thrown:x})}if(R.ok){let x=performance.now()-w;return c({type:"step_success",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:x}),t&&c({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:x,result:R,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(P)}}),R.value}else{let x=performance.now()-w,C=K(R.error,{origin:"result",resultCause:R.cause});throw c({type:"step_error",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:x,error:C}),t&&c({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:x,result:R,meta:{origin:"result",resultCause:R.cause}}),u?.(C,e,i),U(C,{origin:"result",resultCause:R.cause})}}if(f.ok){let g=performance.now()-w;return c({type:"step_success",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:g}),t&&c({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:g,result:f}),f.value}let y=f.error;if(r.on!==void 0&&r.on!==y){let g=performance.now()-w,P=K(y,{origin:"result",resultCause:f.cause});throw c({type:"step_error",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:g,error:P}),t&&c({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:g,result:f,meta:{origin:"result",resultCause:f.cause}}),u?.(P,e,i),U(P,{origin:"result",resultCause:f.cause})}let T;try{T=await r.fallback()}catch(g){if(V(g))throw c({type:"step_aborted",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-w}),g;let P;try{P=N(g)}catch(x){throw te(x)}let R=performance.now()-w;throw c({type:"step_error",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:R,error:P}),t&&c({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:R,result:q(P,{cause:g}),meta:{origin:"throw",thrown:g}}),u?.(P,e,i),U(P,{origin:"throw",thrown:g})}if(T.ok){let g=performance.now()-w;return c({type:"step_success",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:g}),t&&c({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:g,result:T,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(y)}}),T.value}let b=performance.now()-w,D=K(T.error,{origin:"result",resultCause:T.cause});throw c({type:"step_error",workflowId:s,stepId:p,stepKey:t,name:e,ts:Date.now(),durationMs:b,error:D}),t&&c({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:b,result:T,meta:{origin:"result",resultCause:T.cause}}),u?.(D,e,i),U(D,{origin:"result",resultCause:T.cause})})()},m.withResource=(n,E)=>{if(typeof n!="string"||n.length===0)throw new Error('[awaitly] step.withResource() requires an explicit string ID as the first argument. Example: step.withResource("useDb", { acquire: () => connect(), use: (db) => query(db), release: (db) => db.close() })');let r=n,t=n,e=X(r),p=a;return(async()=>{let d=p?performance.now():0;a&&c({type:"step_start",workflowId:s,stepId:e,stepKey:r,name:t,ts:Date.now()});let w;try{w=await E.acquire()}catch(R){if(V(R))throw c({type:"step_aborted",workflowId:s,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:performance.now()-d}),R;let x;try{x=N(R)}catch(Z){throw te(Z)}let C=performance.now()-d;throw c({type:"step_error",workflowId:s,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:C,error:x}),r&&c({type:"step_complete",workflowId:s,stepKey:r,name:t,ts:Date.now(),durationMs:C,result:q(x,{cause:R}),meta:{origin:"throw",thrown:R}}),u?.(x,t,i),U(x,{origin:"throw",thrown:R})}if(!w.ok){let R=performance.now()-d,x=K(w.error,{origin:"result",resultCause:w.cause});throw c({type:"step_error",workflowId:s,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:R,error:x}),r&&c({type:"step_complete",workflowId:s,stepKey:r,name:t,ts:Date.now(),durationMs:R,result:w,meta:{origin:"result",resultCause:w.cause}}),u?.(x,t,i),U(x,{origin:"result",resultCause:w.cause})}let f=w.value,y,T,b=!1;try{y=await E.use(f)}catch(R){if(V(R)){try{await E.release(f)}catch(x){console.warn(`[awaitly] step.withResource("${n}"): release threw after earlyExit:`,x)}throw R}T=R,b=!0}try{await E.release(f)}catch(R){console.warn(`[awaitly] step.withResource("${n}"): release threw:`,R)}if(b){let R;try{R=N(T)}catch(C){throw te(C)}let x=performance.now()-d;throw c({type:"step_error",workflowId:s,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:x,error:R}),r&&c({type:"step_complete",workflowId:s,stepKey:r,name:t,ts:Date.now(),durationMs:x,result:q(R,{cause:T}),meta:{origin:"throw",thrown:T}}),u?.(R,t,i),U(R,{origin:"throw",thrown:T})}let D=y;if(D.ok){let R=performance.now()-d;return c({type:"step_success",workflowId:s,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:R}),r&&c({type:"step_complete",workflowId:s,stepKey:r,name:t,ts:Date.now(),durationMs:R,result:D}),D.value}let g=performance.now()-d,P=K(D.error,{origin:"result",resultCause:D.cause});throw c({type:"step_error",workflowId:s,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:g,error:P}),r&&c({type:"step_complete",workflowId:s,stepKey:r,name:t,ts:Date.now(),durationMs:g,result:D,meta:{origin:"result",resultCause:D.cause}}),u?.(P,t,i),U(P,{origin:"result",resultCause:D.cause})})()};let v=await o({step:m});if(process.env.NODE_ENV!=="production"&&v!==null&&typeof v=="object"&&"ok"in v&&typeof v.ok=="boolean"){let n=v;(n.ok===!0&&"value"in n||n.ok===!1&&"error"in n)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
1
+ "use strict";var Ee=Object.defineProperty;var Fe=Object.getOwnPropertyDescriptor;var je=Object.getOwnPropertyNames;var We=Object.prototype.hasOwnProperty;var Be=(r,e)=>{for(var c in e)Ee(r,c,{get:e[c],enumerable:!0})},Le=(r,e,c,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let S of je(e))!We.call(r,S)&&S!==c&&Ee(r,S,{get:()=>e[S],enumerable:!(i=Fe(e,S))||i.enumerable});return r};var $e=r=>Le(Ee({},"__esModule",{value:!0}),r);var nt={};Be(nt,{createDiagnosticsCollector:()=>Ue});module.exports=$e(nt);var ae=class extends Error{_tag};function V(r,e){return class extends ae{_tag=r;constructor(c,i){let S=e?.message?e.message(c??{}):r;if(super(S),this.name=r,Object.setPrototypeOf(this,new.target.prototype),c&&typeof c=="object"){let{_tag:b,name:P,message:u,stack:O,...a}=c,v=Object.prototype.hasOwnProperty.call(a,"cause"),_=v?a.cause:void 0;v&&delete a.cause;let F=i?.cause!==void 0;if(v&&F)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,a),v&&(this.cause=_),F&&(this.cause=i?.cause)}else i?.cause!==void 0&&(this.cause=i.cause)}}}Object.defineProperty(V,Symbol.hasInstance,{value:r=>r instanceof ae});(S=>{function r(b){return b instanceof Error}S.isError=r;function e(b){return b instanceof ae}S.isTaggedError=e;function c(b,P){let u=b._tag,O=P[u];return O(b)}S.match=c;function i(b,P,u){let O=b._tag,a=P[O];return a?a(b):u(b)}S.matchPartial=i})(V||={});var ge=class extends V("TimeoutError",{message:e=>e.operation?`TimeoutError: ${e.operation} timed out after ${e.ms}ms`:`TimeoutError: Operation timed out after ${e.ms}ms`}){},ke=class extends V("RetryExhaustedError",{message:e=>e.operation?`RetryExhaustedError: ${e.operation} failed after ${e.attempts} attempts`:`RetryExhaustedError: Operation failed after ${e.attempts} attempts`}){},Te=class extends V("RateLimitError",{message:e=>e.limiterName?`RateLimitError: Rate limit exceeded for ${e.limiterName}${e.retryAfterMs?`, retry after ${e.retryAfterMs}ms`:""}`:`RateLimitError: Rate limit exceeded${e.retryAfterMs?`, retry after ${e.retryAfterMs}ms`:""}`}){},Re=class extends V("CircuitBreakerOpenError",{message:e=>`CircuitBreakerOpenError: Circuit ${e.circuitName} is ${e.state??"OPEN"}${e.retryAfterMs?`, retry after ${Math.ceil(e.retryAfterMs/1e3)}s`:""}`}){},xe=class extends V("ValidationError",{message:e=>`ValidationError: Invalid ${e.field} - ${e.reason}`}){},Ce=class extends V("NotFoundError",{message:e=>e.id?`NotFoundError: ${e.resource} with id ${e.id} not found`:`NotFoundError: ${e.resource} not found`}){},be=class extends V("UnauthorizedError",{message:e=>e.reason?`UnauthorizedError: ${e.reason}`:e.action&&e.resource?`UnauthorizedError: Not authorized to ${e.action} ${e.resource}`:"UnauthorizedError: Access denied"}){},he=class extends V("NetworkError",{message:e=>e.url?`NetworkError: ${e.reason} (${e.url})`:`NetworkError: ${e.reason}`}){},Se=class extends V("CompensationError",{message:e=>`CompensationError: Failed to compensate step ${e.step}`}){},ie=class extends V("UnexpectedError",{message:e=>`UnexpectedError: ${e.cause instanceof Error?e.cause.message:String(e.cause??"unknown")}`}){};function Ve(r){let e=r.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!e)return;let c=parseFloat(e[1]),i=e[2].toLowerCase();return{_tag:"Duration",millis:c*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[i]??1)}}function He(r){return new ie({cause:r})}function z(r){return{ok:!0,value:r}}function H(r,e){let c=e?.cause;return{ok:!1,error:r,...c!==void 0?{cause:c}:{}}}function ye(r){if(r==null)return"unknown";if(typeof r=="string")return r.trim()||"unknown";if(typeof r=="object"){let e=r;if(typeof e._tag=="string"){let c=e._tag.trim();if(c)return c}if(typeof e.tag=="string"){let c=e.tag.trim();if(c)return c}if(typeof e.code=="string"){let c=e.code.trim();if(c)return c}else if(typeof e.code=="number")return String(e.code);if(r instanceof Error&&r.name){let c=r.name.trim();if(c)return c}}return"unknown"}function qe(r,e){if(!(!e||!r))return e[r]}function Ye(r){let{intent:e,domain:c,owner:i,tags:S,stateChanges:b,emits:P,calls:u}=r;if(!e&&!c&&!i&&!S?.length&&!b?.length&&!P?.length&&!u?.length)return;let O={};return e&&(O.intent=e),c&&(O.domain=c),i&&(O.owner=i),S?.length&&(O.tags=S),b?.length&&(O.stateChanges=b),P?.length&&(O.emits=P),u?.length&&(O.calls=u),O}function Y(r,e,c,i,S){let b=ye(r),P=qe(b,e),u={tag:b,origin:c};return P!==void 0&&(u.classification=P),i!==void 0&&(u.attempt=i),S!==void 0&&(u.cumulativeDurationMs=S),u}var oe=Symbol.for("step_timeout_marker");function Ae(r){return typeof r!="object"||r===null?!1:r.type==="STEP_TIMEOUT"?!0:oe in r}function ze(r){if(!(typeof r!="object"||r===null)){if(r.type==="STEP_TIMEOUT"){let e=r;return{timeoutMs:e.timeoutMs,stepName:e.stepName,stepKey:e.stepKey,attempt:e.attempt}}if(oe in r)return r[oe]}}var Me=Symbol("early-exit");function Je(r,e){return{[Me]:!0,error:r,meta:e}}function Ge(r){return typeof r=="object"&&r!==null&&r[Me]===!0}var ve=Symbol("mapper-exception");function re(r){return{[ve]:!0,thrown:r}}function Xe(r){return typeof r=="object"&&r!==null&&r[ve]===!0}function we(r,e){let{backoff:c,initialDelay:i,maxDelay:S,jitter:b}=e,P;switch(c){case"fixed":P=i;break;case"linear":P=i*r;break;case"exponential":P=i*Math.pow(2,r-1);break}if(P=Math.min(P,S),b){let u=P*.25*Math.random();P=P+u}return Math.floor(P)}function fe(r){return new Promise(e=>setTimeout(e,r))}var _e=Symbol("timeout"),ue=Symbol("timeout-option");function Qe(r){return typeof r=="object"&&r!==null&&r[ue]===!0}async function Ze(r,e,c,i){let S=new AbortController,b=e.onTimeout??"error",P=()=>typeof b=="function"?b({name:c.name,key:c.key,ms:e.ms}):e.error??{type:"STEP_TIMEOUT",stepName:c.name,stepKey:c.key,timeoutMs:e.ms,attempt:c.attempt},u;i?.aborted&&S.abort(i.reason);let O;i&&!i.aborted&&(O=()=>S.abort(i.reason),i.addEventListener("abort",O,{once:!0}));let a=new Promise((_,F)=>{u=setTimeout(()=>{if(b!=="disconnect"&&S.abort(),b==="option"){F({[ue]:!0,ms:e.ms});return}F({[_e]:!0,error:P()})},e.ms)}),v;e.signal?v=Promise.resolve(r(S.signal)):v=Promise.resolve(r());try{return await Promise.race([v,a])}catch(_){if(typeof _=="object"&&_!==null&&_[ue]===!0)throw{[ue]:!0,ms:e.ms};if(typeof _=="object"&&_!==null&&_[_e]===!0){b==="disconnect"&&v.catch(()=>{});let F=_.error;if(typeof F=="object"&&F!==null&&F.type!=="STEP_TIMEOUT"){let q={timeoutMs:e.ms,stepName:c.name,stepKey:c.key,attempt:c.attempt};oe in F?F[oe]=q:Object.defineProperty(F,oe,{value:q,enumerable:!1,writable:!0,configurable:!1})}throw F}throw _}finally{clearTimeout(u),O&&i&&i.removeEventListener("abort",O)}}var ne={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function Pe(r,e){let{onError:c,onEvent:i,catchUnexpected:S,workflowId:b,workflowName:P,context:u,_workflowSignal:O}=e&&typeof e=="object"?e:{},a=b??crypto.randomUUID(),v=S??He,_=[],F=0,q=d=>d??`step_${++F}`,l=d=>{let W=d.context!==void 0||u===void 0?d:{...d,context:u},B=P!==void 0&&W.workflowName===void 0?{...W,workflowName:P}:W;if(B.type==="step_success"){let Z=B.stepId;for(let L=_.length-1;L>=0;L--){let D=_[L];if(D.type==="race"&&!D.winnerId){D.winnerId=Z;break}}}i?.(B,u)},N=Je,$=d=>Ge(d),K=(d,W)=>d,M=d=>typeof d=="function"?!1:!!(d&&typeof d=="object"&&"ok"in d||d&&typeof d=="object"&&"then"in d&&typeof d.then=="function");try{let W=function(s){let E={};for(let[o,n]of Object.entries(s))if(typeof n=="function")E[o]=n;else if(n&&typeof n=="object"&&"fn"in n)E[o]=n.fn;else throw new TypeError(`step.parallel: operation "${o}" must be a function or { fn, errors? } object`);return E},B=function(s,E){let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),t=!1;_.push({scopeId:o,type:"parallel"});let p=()=>{if(t)return;t=!0;let m=_.findIndex(w=>w.scopeId===o);m!==-1&&_.splice(m,1),l({type:"scope_end",workflowId:a,scopeId:o,ts:Date.now(),durationMs:performance.now()-n})};l({type:"scope_start",workflowId:a,scopeId:o,scopeType:"parallel",name:s,ts:Date.now()});try{let m=await E();if(p(),!m.ok)throw c?.(m.error,s,u),N(m.error,{origin:"result",resultCause:m.cause});return m.value}catch(m){throw p(),m}})()},Z=function(s,E){let o=Object.keys(s),n=E.name??`Parallel(${o.join(", ")})`,t=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let p=performance.now(),m=!1;_.push({scopeId:t,type:"parallel"});let w=()=>{if(m)return;m=!0;let f=_.findIndex(y=>y.scopeId===t);f!==-1&&_.splice(f,1),l({type:"scope_end",workflowId:a,scopeId:t,ts:Date.now(),durationMs:performance.now()-p})};l({type:"scope_start",workflowId:a,scopeId:t,scopeType:"parallel",name:n,ts:Date.now()});try{let f=await new Promise(k=>{if(o.length===0){k([]);return}let h=!1,U=o.length,T=new Array(o.length);for(let I=0;I<o.length;I++){let R=o[I],C=I;Promise.resolve(s[R]()).catch(x=>H({type:"PROMISE_REJECTED",cause:x},{cause:{type:"PROMISE_REJECTION",reason:x}})).then(x=>{if(!h){if(!x.ok){h=!0,k([{key:R,result:x}]);return}T[C]={key:R,result:x},U--,U===0&&k(T)}})}});w();let y={};for(let{key:k,result:h}of f){if(!h.ok)throw c?.(h.error,k,u),N(h.error,{origin:"result",resultCause:h.cause});y[k]=h.value}return y}catch(f){throw w(),f}})()};var j=W,te=B,J=Z;let d=(s,E,o)=>(async()=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let n=o??{},t=Ye(n),p=s,m=n.key??s,w=n.key??s,{description:f,retry:y,timeout:k}=n,h=q(m),U=i,T=U?performance.now():0,R=M(E)?()=>E:E,x={attempts:Math.max(1,y?.attempts??1),backoff:y?.backoff??ne.backoff,initialDelay:y?.initialDelay??ne.initialDelay,maxDelay:y?.maxDelay??ne.maxDelay,jitter:y?.jitter??ne.jitter,retryOn:y?.retryOn??ne.retryOn,onRetry:y?.onRetry??ne.onRetry};i&&l({type:"step_start",workflowId:a,stepId:h,stepKey:m,name:p,description:f,ts:Date.now(),...t&&{metadata:t}});let ee;for(let A=1;A<=x.attempts;A++){let Ne=U?performance.now():0;try{let g;if(k?g=await Ze(R,k,{name:p,key:m,attempt:A},O):g=await R(),g.ok){let Q=performance.now()-T;return l({type:"step_success",workflowId:a,stepId:h,stepKey:m,name:p,description:f,ts:Date.now(),durationMs:Q,...t&&{metadata:t}}),w&&l({type:"step_complete",workflowId:a,stepKey:w,name:p,description:f,ts:Date.now(),durationMs:Q,result:g,...t&&{metadata:t}}),g.value}if(ee=g,A<x.attempts&&x.retryOn(g.error,A)){let Q=we(A,x);l({type:"step_retry",workflowId:a,stepId:h,stepKey:m,name:p,ts:Date.now(),attempt:A+1,maxAttempts:x.attempts,delayMs:Q,error:g.error,...t&&{metadata:t},diagnostics:Y(g.error,n.errorMeta,"result",A,performance.now()-T)}),x.onRetry(g.error,A,Q),await fe(Q);continue}x.attempts>1&&l({type:"step_retries_exhausted",workflowId:a,stepId:h,stepKey:m,name:p,ts:Date.now(),durationMs:performance.now()-T,attempts:A,lastError:g.error,...t&&{metadata:t},diagnostics:Y(g.error,n.errorMeta,"result",A,performance.now()-T)});break}catch(g){let Q=performance.now()-Ne;if(Qe(g)){let G=g.ms;l({type:"step_timeout",workflowId:a,stepId:h,stepKey:m,name:p,ts:Date.now(),timeoutMs:G,attempt:A,...t&&{metadata:t},diagnostics:Y(g,n.errorMeta,"timeout",A)}),l({type:"step_success",workflowId:a,stepId:h,stepKey:m,name:p,description:f,ts:Date.now(),durationMs:performance.now()-T,...t&&{metadata:t}}),w&&l({type:"step_complete",workflowId:a,stepKey:w,name:p,description:f,ts:Date.now(),durationMs:performance.now()-T,result:z(void 0),...t&&{metadata:t}});return}if($(g))throw l({type:"step_aborted",workflowId:a,stepId:h,stepKey:m,name:p,description:f,ts:Date.now(),durationMs:Q,...t&&{metadata:t}}),g;if(Ae(g)){let G=ze(g),Ke=k?.ms??G?.timeoutMs??0;if(l({type:"step_timeout",workflowId:a,stepId:h,stepKey:m,name:p,ts:Date.now(),timeoutMs:Ke,attempt:A,...t&&{metadata:t},diagnostics:Y(g,n.errorMeta,"timeout",A)}),A<x.attempts&&x.retryOn(g,A)){let me=we(A,x);l({type:"step_retry",workflowId:a,stepId:h,stepKey:m,name:p,ts:Date.now(),attempt:A+1,maxAttempts:x.attempts,delayMs:me,error:g,...t&&{metadata:t},diagnostics:Y(g,n.errorMeta,"timeout",A,performance.now()-T)}),x.onRetry(g,A,me),await fe(me);continue}x.attempts>1&&l({type:"step_retries_exhausted",workflowId:a,stepId:h,stepKey:m,name:p,ts:Date.now(),durationMs:performance.now()-T,attempts:A,lastError:g,...t&&{metadata:t},diagnostics:Y(g,n.errorMeta,"timeout",A,performance.now()-T)});let de=performance.now()-T;throw l({type:"step_error",workflowId:a,stepId:h,stepKey:m,name:p,description:f,ts:Date.now(),durationMs:de,error:g,...t&&{metadata:t},diagnostics:Y(g,n.errorMeta,"timeout",A,de)}),w&&l({type:"step_complete",workflowId:a,stepKey:w,name:p,description:f,ts:Date.now(),durationMs:de,result:H(g,{cause:g}),meta:{origin:"throw",thrown:g},...t&&{metadata:t}}),c?.(g,p,u),N(g,{origin:"throw",thrown:g})}if(A<x.attempts&&x.retryOn(g,A)){let G=we(A,x);l({type:"step_retry",workflowId:a,stepId:h,stepKey:m,name:p,ts:Date.now(),attempt:A+1,maxAttempts:x.attempts,delayMs:G,error:g,...t&&{metadata:t},diagnostics:Y(g,n.errorMeta,"throw",A,performance.now()-T)}),x.onRetry(g,A,G),await fe(G);continue}x.attempts>1&&!Ae(g)&&l({type:"step_retries_exhausted",workflowId:a,stepId:h,stepKey:m,name:p,ts:Date.now(),durationMs:performance.now()-T,attempts:A,lastError:g,...t&&{metadata:t},diagnostics:Y(g,n.errorMeta,"throw",A,performance.now()-T)});let pe=performance.now()-T,se;try{se=v(g)}catch(G){throw re(G)}throw l({type:"step_error",workflowId:a,stepId:h,stepKey:m,name:p,description:f,ts:Date.now(),durationMs:pe,error:se,...t&&{metadata:t},diagnostics:Y(g,n.errorMeta,"throw",A,pe)}),w&&l({type:"step_complete",workflowId:a,stepKey:w,name:p,description:f,ts:Date.now(),durationMs:pe,result:H(se,{cause:g}),meta:{origin:"throw",thrown:g},...t&&{metadata:t}}),c?.(se,p,u),N(se,{origin:"throw",thrown:g})}}let X=ee,ce=performance.now()-T,le=K(X.error,{origin:"result",resultCause:X.cause});throw l({type:"step_error",workflowId:a,stepId:h,stepKey:m,name:p,description:f,ts:Date.now(),durationMs:ce,error:le,...t&&{metadata:t},diagnostics:Y(X.error,n.errorMeta,"result",x.attempts,ce)}),w&&l({type:"step_complete",workflowId:a,stepKey:w,name:p,description:f,ts:Date.now(),durationMs:ce,result:X,meta:{origin:"result",resultCause:X.cause},...t&&{metadata:t}}),c?.(le,p,u),N(le,{origin:"result",resultCause:X.cause})})();d.try=(s,E,o)=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step.try() requires an explicit string ID as the first argument. Example: step.try("parse", () => JSON.parse(str), { error: "PARSE_ERROR" })');let n=o.key??s,t=s,p=s,m="error"in o?()=>o.error:o.onError,w=i;return(async()=>{let f=w?performance.now():0;i&&l({type:"step_start",workflowId:a,stepId:p,stepKey:n,name:t,ts:Date.now()});try{let y=await E(),k=performance.now()-f;return l({type:"step_success",workflowId:a,stepId:p,stepKey:n,name:t,ts:Date.now(),durationMs:k}),n&&l({type:"step_complete",workflowId:a,stepKey:n,name:t,ts:Date.now(),durationMs:k,result:z(y)}),y}catch(y){let k=m(y),h=performance.now()-f,U=K(k,{origin:"throw",thrown:y});throw l({type:"step_error",workflowId:a,stepId:p,stepKey:n,name:t,ts:Date.now(),durationMs:h,error:U}),n&&l({type:"step_complete",workflowId:a,stepKey:n,name:t,ts:Date.now(),durationMs:h,result:H(k,{cause:y}),meta:{origin:"throw",thrown:y}}),c?.(U,t,u),N(U,{origin:"throw",thrown:y})}})()},d.fromResult=(s,E,o)=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step.fromResult() requires an explicit string ID as the first argument. Example: step.fromResult("callProvider", () => callProvider(input), { onError: (e) => ({ type: "FAILED" }) })');let n=o.key??s,t=s,p=s,m="error"in o?()=>o.error:o.onError,w=i;return(async()=>{let f=w?performance.now():0;i&&l({type:"step_start",workflowId:a,stepId:p,stepKey:n,name:t,ts:Date.now()});let y=await E();if(y.ok){let k=performance.now()-f;return l({type:"step_success",workflowId:a,stepId:p,stepKey:n,name:t,ts:Date.now(),durationMs:k}),n&&l({type:"step_complete",workflowId:a,stepKey:n,name:t,ts:Date.now(),durationMs:k,result:z(y.value)}),y.value}else{let k=m(y.error),h=performance.now()-f,U=K(k,{origin:"result",resultCause:y.error});throw l({type:"step_error",workflowId:a,stepId:p,stepKey:n,name:t,ts:Date.now(),durationMs:h,error:U}),n&&l({type:"step_complete",workflowId:a,stepKey:n,name:t,ts:Date.now(),durationMs:h,result:H(k,{cause:y.error}),meta:{origin:"result",resultCause:y.error}}),c?.(U,t,u),N(U,{origin:"result",resultCause:y.error})}})()},d.fromNullable=(s,E,o,n)=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step.fromNullable() requires an explicit string ID as the first argument. Example: step.fromNullable("getUser", () => db.find(id), () => ({ type: "NOT_FOUND" }))');return d(s,async()=>{let t=await E();return t!=null?z(t):H(o())},n)},d.retry=(s,E,o)=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step.retry() requires an explicit string ID as the first argument. Example: step.retry("fetchData", () => fetchData(), { attempts: 3 })');return d(s,E,{key:o.key??s,retry:{attempts:o.attempts,backoff:o.backoff,initialDelay:o.initialDelay,maxDelay:o.maxDelay,jitter:o.jitter,retryOn:o.retryOn,onRetry:o.onRetry},timeout:o.timeout})},d.withTimeout=(s,E,o)=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step.withTimeout() requires an explicit string ID as the first argument. Example: step.withTimeout("slowOp", () => slowOp(), { ms: 5000 })');return d(s,E,{key:o.key??s,timeout:o})},d.sleep=(s,E,o)=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let n=typeof E=="string"?Ve(E):E;if(!n)throw new Error(`step.sleep: invalid duration '${E}'`);let t=n.millis,p=o?.signal;return d(s,async()=>{if(O?.aborted||p?.aborted){let m=new Error("Sleep aborted");throw m.name="AbortError",m}return new Promise((m,w)=>{let f={timeoutId:void 0},y=()=>{f.timeoutId&&clearTimeout(f.timeoutId);let k=new Error("Sleep aborted");k.name="AbortError",w(k)};O?.addEventListener("abort",y,{once:!0}),p?.addEventListener("abort",y,{once:!0}),f.timeoutId=setTimeout(()=>{O?.removeEventListener("abort",y),p?.removeEventListener("abort",y),m(z(void 0))},t)})},{key:o?.key??s,description:o?.description})},d.parallel=((...s)=>{if(typeof s[0]!="string")throw new TypeError("step.parallel(name, ...): first argument must be a string (step name). Example: step.parallel('Fetch data', { user: () => fetchUser(), posts: () => fetchPosts() })");let E=s[0],o=s[1];if(typeof o=="function")return B(E,o);if(o&&typeof o=="object"&&!Array.isArray(o)){let t=W(o);return Z(t,{name:E})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),d.race=(s,E)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),t=!1,p={scopeId:o,type:"race",winnerId:void 0};_.push(p);let m=()=>{if(t)return;t=!0;let w=_.findIndex(f=>f.scopeId===o);w!==-1&&_.splice(w,1),l({type:"scope_end",workflowId:a,scopeId:o,ts:Date.now(),durationMs:performance.now()-n,winnerId:p.winnerId})};l({type:"scope_start",workflowId:a,scopeId:o,scopeType:"race",name:s,ts:Date.now()});try{let w=await E();if(m(),!w.ok)throw c?.(w.error,s,u),N(w.error,{origin:"result",resultCause:w.cause});return w.value}catch(w){throw m(),w}})()},d.allSettled=(s,E)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),t=!1;_.push({scopeId:o,type:"allSettled"});let p=()=>{if(t)return;t=!0;let m=_.findIndex(w=>w.scopeId===o);m!==-1&&_.splice(m,1),l({type:"scope_end",workflowId:a,scopeId:o,ts:Date.now(),durationMs:performance.now()-n})};l({type:"scope_start",workflowId:a,scopeId:o,scopeType:"allSettled",name:s,ts:Date.now()});try{let m=await E();if(p(),!m.ok)throw c?.(m.error,s,u),N(m.error,{origin:"result",resultCause:m.cause});return m.value}catch(m){throw p(),m}})()},d.if=(s,E,o)=>o(),d.label=d.if,d.branch=async(s,E)=>{let{condition:o,then:n,else:t}=E;if(o())return await n();if(t)return await t()},d.arm=(s,E)=>({fn:s,errors:E}),d.forEach=async(s,E,o)=>{let n=[],t=o.maxIterations,p=0,m="run"in o,w=Symbol.asyncIterator in E?E:(async function*(){yield*E})();for await(let f of w){if(t!==void 0&&p>=t)break;let y;m?y=await o.run(f,p):y=await o.item.handler(f,p,d),n.push(y),p++}return n},d.item=s=>({__forEachItemHandler:!0,handler:s}),d.dep=(s,E)=>E,d.run=(s,E,o)=>d(s,()=>E,o),d.workflow=(s,E,o)=>d(s,E,o),d.andThen=(s,E,o,n)=>d(s,()=>o(E),n),d.match=async(s,E,o,n)=>d(s,async()=>{let t=await E;return t.ok?z(await o.ok(t.value)):z(await o.err(t.error,t.cause))},n),d.all=d.parallel,d.map=async(s,E,o,n)=>{let t=n?.concurrency??E.length;return d(s,()=>t>=E.length?Oe(E.map((p,m)=>o(p,m))):(async()=>{let p=[];for(let m=0;m<E.length;m+=t){let w=E.slice(m,m+t),f=await Oe(w.map((y,k)=>o(y,m+k)));if(!f.ok)return f;p.push(...f.value)}return z(p)})(),{key:n?.key})},d.withFallback=(s,E,o)=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step.withFallback() requires an explicit string ID as the first argument. Example: step.withFallback("getUser", () => fetchUser(id), { fallback: () => fetchFromCache(id) })');let n=o.key??s,t=s,p=q(n),m=i;return(async()=>{let w=m?performance.now():0;i&&l({type:"step_start",workflowId:a,stepId:p,stepKey:n,name:t,ts:Date.now()});let f;try{f=await E()}catch(T){if($(T))throw l({type:"step_aborted",workflowId:a,stepId:p,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-w}),T;let I;try{I=v(T)}catch(C){throw re(C)}if(o.on!==void 0&&o.on!==I){let C=performance.now()-w;throw l({type:"step_error",workflowId:a,stepId:p,stepKey:n,name:t,ts:Date.now(),durationMs:C,error:I}),n&&l({type:"step_complete",workflowId:a,stepKey:n,name:t,ts:Date.now(),durationMs:C,result:H(I,{cause:T}),meta:{origin:"throw",thrown:T}}),c?.(I,t,u),N(I,{origin:"throw",thrown:T})}let R;try{R=await o.fallback()}catch(C){if($(C))throw l({type:"step_aborted",workflowId:a,stepId:p,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-w}),C;let x;try{x=v(C)}catch(X){throw re(X)}let ee=performance.now()-w;throw l({type:"step_error",workflowId:a,stepId:p,stepKey:n,name:t,ts:Date.now(),durationMs:ee,error:x}),n&&l({type:"step_complete",workflowId:a,stepKey:n,name:t,ts:Date.now(),durationMs:ee,result:H(x,{cause:C}),meta:{origin:"throw",thrown:C}}),c?.(x,t,u),N(x,{origin:"throw",thrown:C})}if(R.ok){let C=performance.now()-w;return l({type:"step_success",workflowId:a,stepId:p,stepKey:n,name:t,ts:Date.now(),durationMs:C}),n&&l({type:"step_complete",workflowId:a,stepKey:n,name:t,ts:Date.now(),durationMs:C,result:R,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(I)}}),R.value}else{let C=performance.now()-w,x=K(R.error,{origin:"result",resultCause:R.cause});throw l({type:"step_error",workflowId:a,stepId:p,stepKey:n,name:t,ts:Date.now(),durationMs:C,error:x}),n&&l({type:"step_complete",workflowId:a,stepKey:n,name:t,ts:Date.now(),durationMs:C,result:R,meta:{origin:"result",resultCause:R.cause}}),c?.(x,t,u),N(x,{origin:"result",resultCause:R.cause})}}if(f.ok){let T=performance.now()-w;return l({type:"step_success",workflowId:a,stepId:p,stepKey:n,name:t,ts:Date.now(),durationMs:T}),n&&l({type:"step_complete",workflowId:a,stepKey:n,name:t,ts:Date.now(),durationMs:T,result:f}),f.value}let y=f.error;if(o.on!==void 0&&o.on!==y){let T=performance.now()-w,I=K(y,{origin:"result",resultCause:f.cause});throw l({type:"step_error",workflowId:a,stepId:p,stepKey:n,name:t,ts:Date.now(),durationMs:T,error:I}),n&&l({type:"step_complete",workflowId:a,stepKey:n,name:t,ts:Date.now(),durationMs:T,result:f,meta:{origin:"result",resultCause:f.cause}}),c?.(I,t,u),N(I,{origin:"result",resultCause:f.cause})}let k;try{k=await o.fallback()}catch(T){if($(T))throw l({type:"step_aborted",workflowId:a,stepId:p,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-w}),T;let I;try{I=v(T)}catch(C){throw re(C)}let R=performance.now()-w;throw l({type:"step_error",workflowId:a,stepId:p,stepKey:n,name:t,ts:Date.now(),durationMs:R,error:I}),n&&l({type:"step_complete",workflowId:a,stepKey:n,name:t,ts:Date.now(),durationMs:R,result:H(I,{cause:T}),meta:{origin:"throw",thrown:T}}),c?.(I,t,u),N(I,{origin:"throw",thrown:T})}if(k.ok){let T=performance.now()-w;return l({type:"step_success",workflowId:a,stepId:p,stepKey:n,name:t,ts:Date.now(),durationMs:T}),n&&l({type:"step_complete",workflowId:a,stepKey:n,name:t,ts:Date.now(),durationMs:T,result:k,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(y)}}),k.value}let h=performance.now()-w,U=K(k.error,{origin:"result",resultCause:k.cause});throw l({type:"step_error",workflowId:a,stepId:p,stepKey:n,name:t,ts:Date.now(),durationMs:h,error:U}),n&&l({type:"step_complete",workflowId:a,stepKey:n,name:t,ts:Date.now(),durationMs:h,result:k,meta:{origin:"result",resultCause:k.cause}}),c?.(U,t,u),N(U,{origin:"result",resultCause:k.cause})})()},d.withResource=(s,E)=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step.withResource() requires an explicit string ID as the first argument. Example: step.withResource("useDb", { acquire: () => connect(), use: (db) => query(db), release: (db) => db.close() })');let o=s,n=s,t=q(o),p=i;return(async()=>{let m=p?performance.now():0;i&&l({type:"step_start",workflowId:a,stepId:t,stepKey:o,name:n,ts:Date.now()});let w;try{w=await E.acquire()}catch(R){if($(R))throw l({type:"step_aborted",workflowId:a,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:performance.now()-m}),R;let C;try{C=v(R)}catch(ee){throw re(ee)}let x=performance.now()-m;throw l({type:"step_error",workflowId:a,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:x,error:C}),o&&l({type:"step_complete",workflowId:a,stepKey:o,name:n,ts:Date.now(),durationMs:x,result:H(C,{cause:R}),meta:{origin:"throw",thrown:R}}),c?.(C,n,u),N(C,{origin:"throw",thrown:R})}if(!w.ok){let R=performance.now()-m,C=K(w.error,{origin:"result",resultCause:w.cause});throw l({type:"step_error",workflowId:a,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:R,error:C}),o&&l({type:"step_complete",workflowId:a,stepKey:o,name:n,ts:Date.now(),durationMs:R,result:w,meta:{origin:"result",resultCause:w.cause}}),c?.(C,n,u),N(C,{origin:"result",resultCause:w.cause})}let f=w.value,y,k,h=!1;try{y=await E.use(f)}catch(R){if($(R)){try{await E.release(f)}catch(C){console.warn(`[awaitly] step.withResource("${s}"): release threw after earlyExit:`,C)}throw R}k=R,h=!0}try{await E.release(f)}catch(R){console.warn(`[awaitly] step.withResource("${s}"): release threw:`,R)}if(h){let R;try{R=v(k)}catch(x){throw re(x)}let C=performance.now()-m;throw l({type:"step_error",workflowId:a,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:C,error:R}),o&&l({type:"step_complete",workflowId:a,stepKey:o,name:n,ts:Date.now(),durationMs:C,result:H(R,{cause:k}),meta:{origin:"throw",thrown:k}}),c?.(R,n,u),N(R,{origin:"throw",thrown:k})}let U=y;if(U.ok){let R=performance.now()-m;return l({type:"step_success",workflowId:a,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:R}),o&&l({type:"step_complete",workflowId:a,stepKey:o,name:n,ts:Date.now(),durationMs:R,result:U}),U.value}let T=performance.now()-m,I=K(U.error,{origin:"result",resultCause:U.cause});throw l({type:"step_error",workflowId:a,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:T,error:I}),o&&l({type:"step_complete",workflowId:a,stepKey:o,name:n,ts:Date.now(),durationMs:T,result:U,meta:{origin:"result",resultCause:U.cause}}),c?.(I,n,u),N(I,{origin:"result",resultCause:U.cause})})()};let D=await r({step:d});if(process.env.NODE_ENV!=="production"&&D!==null&&typeof D=="object"&&"ok"in D&&typeof D.ok=="boolean"){let s=D;(s.ok===!0&&"value"in s||s.ok===!1&&"error"in s)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
2
2
 
3
3
  Incorrect: return ok({ data });
4
4
  Correct: return { data };
5
5
 
6
- See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return $(v)}catch(m){if(Fe(m))throw m.thrown;if(V(m)){let L=m.meta.origin==="throw"?m.meta.thrown:m.meta.origin==="result"?m.meta.resultCause:void 0;return q(m.error,{cause:L})}let F=N(m);return u?.(F,"unexpected",i),q(F,{cause:m})}}ye.strict=(o,l)=>ye(o,l);async function ke(o){return o.length===0?$([]):new Promise(l=>{let u=!1,a=o.length,S=new Array(o.length);for(let I=0;I<o.length;I++){let O=I;Promise.resolve(o[O]).catch(i=>q({type:"PROMISE_REJECTED",cause:i},{cause:{type:"PROMISE_REJECTION",reason:i}})).then(i=>{if(!u){if(!i.ok){u=!0,l(i);return}S[O]=i.value,a--,a===0&&l($(S))}})}})}function Re(){return{terminalSeen:!1,steps:new Map,stepKeyToId:new Map,counters:{errors:0,retries:0,cacheHits:0,timeouts:0},integrityWarnings:[]}}function Ve(o,l){let u=o.steps.get(l);return u||(u={events:[],terminalSeen:!1},o.steps.set(l,u)),u}function qe(o,l){if("stepId"in o&&typeof o.stepId=="string")return o.stepId;if("stepKey"in o&&typeof o.stepKey=="string"){let u=l.stepKeyToId.get(o.stepKey);return u?l.steps.get(u)?.terminalSeen?(l.stepKeyToId.delete(o.stepKey),o.stepKey):u:o.stepKey}}var Xe=new Set(["step_success","step_error","step_cache_hit","step_skipped","step_aborted"]);function Ce(o,l,u){let S={tag:u?.tag??Ee(o)};return u?.classification&&(S.classification=u.classification),u?.origin&&(S.origin=u.origin),l&&o instanceof Error&&o.stack&&(S.stack=o.stack.split(`
7
- `).map(I=>I.trim())),S}function xe(o){let l=o?.includeStacks??!1,u=o?.redact,a=Re();function S(i){switch(i.type){case"workflow_start":a.workflowId=i.workflowId,a.workflowName=i.workflowName,a.startedAt=i.ts;break;case"workflow_success":a.terminalSeen&&a.integrityWarnings.push("Duplicate workflow terminal event: workflow_success"),a.status="success",a.endedAt=i.ts,a.terminalSeen=!0;break;case"workflow_error":a.terminalSeen&&a.integrityWarnings.push("Duplicate workflow terminal event: workflow_error"),a.status="error",a.endedAt=i.ts,a.workflowError=i.error,a.terminalSeen=!0;break;case"workflow_cancelled":a.terminalSeen&&a.integrityWarnings.push("Duplicate workflow terminal event: workflow_cancelled"),a.status="cancelled",a.endedAt=i.ts,a.terminalSeen=!0;break;default:{let M=qe(i,a);if(!M)break;let s=Ve(a,M);switch(s.events.push(i),i.type){case"step_start":if(s.metadata=i.metadata,s.startTs=i.ts,s.name=i.name,s.key=i.stepKey,i.stepKey&&i.stepId!==i.stepKey){a.stepKeyToId.set(i.stepKey,M);let N=a.steps.get(i.stepKey);N&&N!==s&&N.startTs===void 0&&(s.events.unshift(...N.events),N.terminalSeen&&(s.terminalSeen=!0),a.steps.delete(i.stepKey))}break;case"step_success":case"step_error":case"step_cache_hit":case"step_skipped":case"step_aborted":s.terminalSeen&&a.integrityWarnings.push(`Duplicate step terminal event for step "${M}": ${i.type}`),s.terminalSeen=!0,i.type==="step_error"&&a.counters.errors++,i.type==="step_cache_hit"&&a.counters.cacheHits++,!s.name&&"name"in i&&i.name&&(s.name=i.name),!s.key&&"stepKey"in i&&i.stepKey&&(s.key=i.stepKey),!s.metadata&&"metadata"in i&&i.metadata&&(s.metadata=i.metadata);break;case"step_retry":a.counters.retries++;break;case"step_timeout":a.counters.timeouts++;break}break}}}function I(){let i=[...a.integrityWarnings];a.terminalSeen||i.push("wideEvent() called before workflow terminal event");let M=a.startedAt??0,s=a.endedAt??0,N=[],_=new Map,j=new Map,X=new Map;for(let[K,A]of a.steps){A.events.some(v=>v.type==="step_start")||i.push(`No step_start seen for step "${K}"`);let W="error",ee,H,m,F=[...A.events].reverse().find(v=>Xe.has(v.type));if(F){switch(F.type){case"step_success":W="success";break;case"step_error":W="error";break;case"step_cache_hit":W="cached";break;case"step_skipped":W="skipped";break;case"step_aborted":W="aborted";break}"durationMs"in F&&typeof F.durationMs=="number"&&(ee=F.durationMs)}else A.events.some(n=>n.type==="step_timeout")&&(W="error",m=!0);let L=[...A.events].reverse().find(v=>v.type==="step_error"||v.type==="step_retries_exhausted");if(L){let v="error"in L?L.error:"lastError"in L?L.lastError:void 0,n="diagnostics"in L?L.diagnostics:void 0;if(H=Ce(v,l,n),H?.tag&&X.set(H.tag,(X.get(H.tag)??0)+1),H?.classification?.severity){let E=H.classification.severity;j.set(E,(j.get(E)??0)+1)}}m===void 0&&A.events.some(n=>n.type==="step_timeout")&&(m=!0);let Q=A.events.filter(v=>v.type==="step_retry").length;if(A.metadata?.domain&&(W==="success"||W==="error")){let v=A.metadata.domain,n=_.get(v);n||(n={total:0,errors:0,totalDuration:0,counted:0},_.set(v,n)),n.total++,W==="error"&&n.errors++,ee!==void 0&&(n.totalDuration+=ee,n.counted++)}let B={stepId:K,name:A.name??K,status:W};A.key&&(B.key=A.key),ee!==void 0&&(B.durationMs=ee),A.metadata?.domain&&(B.domain=A.metadata.domain),A.metadata?.owner&&(B.owner=A.metadata.owner),A.metadata?.intent&&(B.intent=A.metadata.intent),A.metadata?.tags?.length&&(B.tags=A.metadata.tags),A.metadata?.calls?.length&&(B.calls=A.metadata.calls),H&&(B.error=H),Q>0&&(B.retryCount=Q),m&&(B.timedOut=m),N.push(B)}let c={totalSteps:N.length,errors:a.counters.errors,retries:a.counters.retries,cacheHits:a.counters.cacheHits,timeouts:a.counters.timeouts};if(_.size>0){let K={};for(let[A,W]of _)K[A]={total:W.total,errors:W.errors,avgDurationMs:W.counted>0?W.totalDuration/W.counted:0};c.byDomain=K}if(j.size>0){let K={};for(let[A,W]of j)K[A]=W;c.bySeverity=K}X.size>0&&(c.topFailingTags=[...X.entries()].map(([K,A])=>({tag:K,count:A})).sort((K,A)=>A.count-K.count));let U;a.status==="error"&&a.workflowError!==void 0&&(U=Ce(a.workflowError,l));let V={workflowId:a.workflowId??"unknown",startedAt:new Date(M).toISOString(),endedAt:new Date(s).toISOString(),durationMs:s-M,status:a.status??"error",steps:N,summary:c};return a.workflowName&&(V.workflowName=a.workflowName),U&&(V.error=U),i.length>0&&(V.integrityWarnings=i),u&&(V=u(V)),V}function O(){a=Re()}return{handleEvent:S,wideEvent:I,reset:O}}0&&(module.exports={createDiagnosticsCollector});
6
+ See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return z(D)}catch(d){if(Xe(d))throw d.thrown;if($(d)){let B=d.meta.origin==="throw"?d.meta.thrown:d.meta.origin==="result"?d.meta.resultCause:void 0;return H(d.error,{cause:B})}let W=v(d);return c?.(W,"unexpected",u),H(W,{cause:d})}}Pe.strict=(r,e)=>Pe(r,e);async function Oe(r){return r.length===0?z([]):new Promise(e=>{let c=!1,i=r.length,S=new Array(r.length);for(let b=0;b<r.length;b++){let P=b;Promise.resolve(r[P]).catch(u=>H({type:"PROMISE_REJECTED",cause:u},{cause:{type:"PROMISE_REJECTION",reason:u}})).then(u=>{if(!c){if(!u.ok){c=!0,e(u);return}S[P]=u.value,i--,i===0&&e(z(S))}})}})}function Ie(){return{terminalSeen:!1,steps:new Map,stepKeyToId:new Map,counters:{errors:0,retries:0,cacheHits:0,timeouts:0},integrityWarnings:[]}}function et(r,e){let c=r.steps.get(e);return c||(c={events:[],terminalSeen:!1},r.steps.set(e,c)),c}function tt(r,e){if("stepId"in r&&typeof r.stepId=="string")return r.stepId;if("stepKey"in r&&typeof r.stepKey=="string"){let c=e.stepKeyToId.get(r.stepKey);return c?e.steps.get(c)?.terminalSeen?(e.stepKeyToId.delete(r.stepKey),r.stepKey):c:r.stepKey}}var rt=new Set(["step_success","step_error","step_cache_hit","step_skipped","step_aborted"]);function De(r,e,c){let S={tag:c?.tag??ye(r)};return c?.classification&&(S.classification=c.classification),c?.origin&&(S.origin=c.origin),e&&r instanceof Error&&r.stack&&(S.stack=r.stack.split(`
7
+ `).map(b=>b.trim())),S}function Ue(r){let e=r?.includeStacks??!1,c=r?.redact,i=Ie();function S(u){switch(u.type){case"workflow_start":i.workflowId=u.workflowId,i.workflowName=u.workflowName,i.startedAt=u.ts;break;case"workflow_success":i.terminalSeen&&i.integrityWarnings.push("Duplicate workflow terminal event: workflow_success"),i.status="success",i.endedAt=u.ts,i.terminalSeen=!0;break;case"workflow_error":i.terminalSeen&&i.integrityWarnings.push("Duplicate workflow terminal event: workflow_error"),i.status="error",i.endedAt=u.ts,i.workflowError=u.error,i.terminalSeen=!0;break;case"workflow_cancelled":i.terminalSeen&&i.integrityWarnings.push("Duplicate workflow terminal event: workflow_cancelled"),i.status="cancelled",i.endedAt=u.ts,i.terminalSeen=!0;break;default:{let O=tt(u,i);if(!O)break;let a=et(i,O);switch(a.events.push(u),u.type){case"step_start":if(a.metadata=u.metadata,a.startTs=u.ts,a.name=u.name,a.key=u.stepKey,u.stepKey&&u.stepId!==u.stepKey){i.stepKeyToId.set(u.stepKey,O);let v=i.steps.get(u.stepKey);v&&v!==a&&v.startTs===void 0&&(a.events.unshift(...v.events),v.terminalSeen&&(a.terminalSeen=!0),i.steps.delete(u.stepKey))}break;case"step_success":case"step_error":case"step_cache_hit":case"step_skipped":case"step_aborted":a.terminalSeen&&i.integrityWarnings.push(`Duplicate step terminal event for step "${O}": ${u.type}`),a.terminalSeen=!0,u.type==="step_error"&&i.counters.errors++,u.type==="step_cache_hit"&&i.counters.cacheHits++,!a.name&&"name"in u&&u.name&&(a.name=u.name),!a.key&&"stepKey"in u&&u.stepKey&&(a.key=u.stepKey),!a.metadata&&"metadata"in u&&u.metadata&&(a.metadata=u.metadata);break;case"step_retry":i.counters.retries++;break;case"step_timeout":i.counters.timeouts++;break}break}}}function b(){let u=[...i.integrityWarnings];i.terminalSeen||u.push("wideEvent() called before workflow terminal event");let O=i.startedAt??0,a=i.endedAt??0,v=[],_=new Map,F=new Map,q=new Map;for(let[K,M]of i.steps){M.events.some(D=>D.type==="step_start")||u.push(`No step_start seen for step "${K}"`);let j="error",te,J,d,W=[...M.events].reverse().find(D=>rt.has(D.type));if(W){switch(W.type){case"step_success":j="success";break;case"step_error":j="error";break;case"step_cache_hit":j="cached";break;case"step_skipped":j="skipped";break;case"step_aborted":j="aborted";break}"durationMs"in W&&typeof W.durationMs=="number"&&(te=W.durationMs)}else M.events.some(s=>s.type==="step_timeout")&&(j="error",d=!0);let B=[...M.events].reverse().find(D=>D.type==="step_error"||D.type==="step_retries_exhausted");if(B){let D="error"in B?B.error:"lastError"in B?B.lastError:void 0,s="diagnostics"in B?B.diagnostics:void 0;if(J=De(D,e,s),J?.tag&&q.set(J.tag,(q.get(J.tag)??0)+1),J?.classification?.severity){let E=J.classification.severity;F.set(E,(F.get(E)??0)+1)}}d===void 0&&M.events.some(s=>s.type==="step_timeout")&&(d=!0);let Z=M.events.filter(D=>D.type==="step_retry").length;if(M.metadata?.domain&&(j==="success"||j==="error")){let D=M.metadata.domain,s=_.get(D);s||(s={total:0,errors:0,totalDuration:0,counted:0},_.set(D,s)),s.total++,j==="error"&&s.errors++,te!==void 0&&(s.totalDuration+=te,s.counted++)}let L={stepId:K,name:M.name??K,status:j};M.key&&(L.key=M.key),te!==void 0&&(L.durationMs=te),M.metadata?.domain&&(L.domain=M.metadata.domain),M.metadata?.owner&&(L.owner=M.metadata.owner),M.metadata?.intent&&(L.intent=M.metadata.intent),M.metadata?.tags?.length&&(L.tags=M.metadata.tags),M.metadata?.calls?.length&&(L.calls=M.metadata.calls),J&&(L.error=J),Z>0&&(L.retryCount=Z),d&&(L.timedOut=d),v.push(L)}let l={totalSteps:v.length,errors:i.counters.errors,retries:i.counters.retries,cacheHits:i.counters.cacheHits,timeouts:i.counters.timeouts};if(_.size>0){let K={};for(let[M,j]of _)K[M]={total:j.total,errors:j.errors,avgDurationMs:j.counted>0?j.totalDuration/j.counted:0};l.byDomain=K}if(F.size>0){let K={};for(let[M,j]of F)K[M]=j;l.bySeverity=K}q.size>0&&(l.topFailingTags=[...q.entries()].map(([K,M])=>({tag:K,count:M})).sort((K,M)=>M.count-K.count));let N;i.status==="error"&&i.workflowError!==void 0&&(N=De(i.workflowError,e));let $={workflowId:i.workflowId??"unknown",startedAt:new Date(O).toISOString(),endedAt:new Date(a).toISOString(),durationMs:a-O,status:i.status??"error",steps:v,summary:l};return i.workflowName&&($.workflowName=i.workflowName),N&&($.error=N),u.length>0&&($.integrityWarnings=u),c&&($=c($)),$}function P(){i=Ie()}return{handleEvent:S,wideEvent:b,reset:P}}0&&(module.exports={createDiagnosticsCollector});
8
8
  //# sourceMappingURL=diagnostics.cjs.map