awaitly 1.34.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{duration.d.ts → di-BDlT7InM.d.cts} +15 -1
- package/dist/{duration.d.cts → di-BbFFfO8y.d.ts} +15 -1
- package/dist/errors-DtXvrCiO.d.cts +708 -0
- package/dist/errors-DtXvrCiO.d.ts +708 -0
- package/dist/index.cjs +4594 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1970 -141
- package/dist/index.d.ts +1970 -141
- package/dist/index.js +4398 -1
- package/dist/index.js.map +1 -1
- package/dist/result.cjs +641 -1
- package/dist/result.cjs.map +1 -1
- package/dist/result.d.cts +35 -5
- package/dist/result.d.ts +35 -5
- package/dist/result.js +561 -1
- package/dist/result.js.map +1 -1
- package/dist/testing.cjs +4202 -8
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +2 -6
- package/dist/testing.d.ts +2 -6
- package/dist/testing.js +4154 -8
- package/dist/testing.js.map +1 -1
- package/dist/{run-entry-D2MmJFj9.d.cts → types-B8NfNRGX.d.ts} +1152 -1499
- package/dist/{run-entry-Dduz-is2.d.ts → types-BZ2f4MRR.d.cts} +1152 -1499
- package/dist/workflow.cjs +7096 -6
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.d.cts +3346 -22
- package/dist/workflow.d.ts +3346 -22
- package/dist/workflow.js +6929 -6
- package/dist/workflow.js.map +1 -1
- package/package.json +13 -178
- package/dist/adapters.cjs +0 -7
- package/dist/adapters.cjs.map +0 -1
- package/dist/adapters.d.cts +0 -179
- package/dist/adapters.d.ts +0 -179
- package/dist/adapters.js +0 -7
- package/dist/adapters.js.map +0 -1
- package/dist/batch.cjs +0 -7
- package/dist/batch.cjs.map +0 -1
- package/dist/batch.d.cts +0 -200
- package/dist/batch.d.ts +0 -200
- package/dist/batch.js +0 -7
- package/dist/batch.js.map +0 -1
- package/dist/bind-deps.cjs +0 -2
- package/dist/bind-deps.cjs.map +0 -1
- package/dist/bind-deps.d.cts +0 -28
- package/dist/bind-deps.d.ts +0 -28
- package/dist/bind-deps.js +0 -2
- package/dist/bind-deps.js.map +0 -1
- package/dist/cache.cjs +0 -2
- package/dist/cache.cjs.map +0 -1
- package/dist/cache.d.cts +0 -269
- package/dist/cache.d.ts +0 -269
- package/dist/cache.js +0 -2
- package/dist/cache.js.map +0 -1
- package/dist/circuit-breaker.cjs +0 -7
- package/dist/circuit-breaker.cjs.map +0 -1
- package/dist/circuit-breaker.d.cts +0 -211
- package/dist/circuit-breaker.d.ts +0 -211
- package/dist/circuit-breaker.js +0 -7
- package/dist/circuit-breaker.js.map +0 -1
- package/dist/conditional.cjs +0 -2
- package/dist/conditional.cjs.map +0 -1
- package/dist/conditional.d.cts +0 -252
- package/dist/conditional.d.ts +0 -252
- package/dist/conditional.js +0 -2
- package/dist/conditional.js.map +0 -1
- package/dist/core.cjs +0 -7
- package/dist/core.cjs.map +0 -1
- package/dist/core.d.cts +0 -5
- package/dist/core.d.ts +0 -5
- package/dist/core.js +0 -7
- package/dist/core.js.map +0 -1
- package/dist/di-COl5oFnR.d.cts +0 -15
- package/dist/di-CyDj_JyZ.d.ts +0 -15
- package/dist/diagnostics.cjs +0 -8
- package/dist/diagnostics.cjs.map +0 -1
- package/dist/diagnostics.d.cts +0 -68
- package/dist/diagnostics.d.ts +0 -68
- package/dist/diagnostics.js +0 -8
- package/dist/diagnostics.js.map +0 -1
- package/dist/durable.cjs +0 -11
- package/dist/durable.cjs.map +0 -1
- package/dist/durable.d.cts +0 -9
- package/dist/durable.d.ts +0 -9
- package/dist/durable.js +0 -11
- package/dist/durable.js.map +0 -1
- package/dist/duration.cjs +0 -2
- package/dist/duration.cjs.map +0 -1
- package/dist/duration.js +0 -2
- package/dist/duration.js.map +0 -1
- package/dist/engine.cjs +0 -11
- package/dist/engine.cjs.map +0 -1
- package/dist/engine.d.cts +0 -115
- package/dist/engine.d.ts +0 -115
- package/dist/engine.js +0 -11
- package/dist/engine.js.map +0 -1
- package/dist/errors.cjs +0 -2
- package/dist/errors.cjs.map +0 -1
- package/dist/errors.d.cts +0 -361
- package/dist/errors.d.ts +0 -361
- package/dist/errors.js +0 -2
- package/dist/errors.js.map +0 -1
- package/dist/fetch.cjs +0 -7
- package/dist/fetch.cjs.map +0 -1
- package/dist/fetch.d.cts +0 -86
- package/dist/fetch.d.ts +0 -86
- package/dist/fetch.js +0 -7
- package/dist/fetch.js.map +0 -1
- package/dist/flow.cjs +0 -7
- package/dist/flow.cjs.map +0 -1
- package/dist/flow.d.cts +0 -163
- package/dist/flow.d.ts +0 -163
- package/dist/flow.js +0 -7
- package/dist/flow.js.map +0 -1
- package/dist/functional.cjs +0 -2
- package/dist/functional.cjs.map +0 -1
- package/dist/functional.d.cts +0 -444
- package/dist/functional.d.ts +0 -444
- package/dist/functional.js +0 -2
- package/dist/functional.js.map +0 -1
- package/dist/guards-BodHXLzX.d.cts +0 -72
- package/dist/guards-CeWoQ8fn.d.ts +0 -72
- package/dist/hitl-BPE_1UiM.d.cts +0 -468
- package/dist/hitl-byp570uC.d.ts +0 -468
- package/dist/hitl.cjs +0 -7
- package/dist/hitl.cjs.map +0 -1
- package/dist/hitl.d.cts +0 -442
- package/dist/hitl.d.ts +0 -442
- package/dist/hitl.js +0 -7
- package/dist/hitl.js.map +0 -1
- package/dist/index-BYT3amEz.d.ts +0 -417
- package/dist/index-C_ak66jy.d.cts +0 -417
- package/dist/match-entry-DjI2bLpD.d.cts +0 -209
- package/dist/match-entry-DjI2bLpD.d.ts +0 -209
- package/dist/match.cjs +0 -2
- package/dist/match.cjs.map +0 -1
- package/dist/match.d.cts +0 -1
- package/dist/match.d.ts +0 -1
- package/dist/match.js +0 -2
- package/dist/match.js.map +0 -1
- package/dist/otel.cjs +0 -2
- package/dist/otel.cjs.map +0 -1
- package/dist/otel.d.cts +0 -188
- package/dist/otel.d.ts +0 -188
- package/dist/otel.js +0 -2
- package/dist/otel.js.map +0 -1
- package/dist/persistence-entry-DOMx3woy.d.ts +0 -822
- package/dist/persistence-entry-ymCA4iDu.d.cts +0 -822
- package/dist/persistence.cjs +0 -2
- package/dist/persistence.cjs.map +0 -1
- package/dist/persistence.d.cts +0 -7
- package/dist/persistence.d.ts +0 -7
- package/dist/persistence.js +0 -2
- package/dist/persistence.js.map +0 -1
- package/dist/policies.cjs +0 -2
- package/dist/policies.cjs.map +0 -1
- package/dist/policies.d.cts +0 -379
- package/dist/policies.d.ts +0 -379
- package/dist/policies.js +0 -2
- package/dist/policies.js.map +0 -1
- package/dist/ratelimit.cjs +0 -7
- package/dist/ratelimit.cjs.map +0 -1
- package/dist/ratelimit.d.cts +0 -458
- package/dist/ratelimit.d.ts +0 -458
- package/dist/ratelimit.js +0 -7
- package/dist/ratelimit.js.map +0 -1
- package/dist/reliability.cjs +0 -11
- package/dist/reliability.cjs.map +0 -1
- package/dist/reliability.d.cts +0 -11
- package/dist/reliability.d.ts +0 -11
- package/dist/reliability.js +0 -11
- package/dist/reliability.js.map +0 -1
- package/dist/resolver.cjs +0 -7
- package/dist/resolver.cjs.map +0 -1
- package/dist/resolver.d.cts +0 -68
- package/dist/resolver.d.ts +0 -68
- package/dist/resolver.js +0 -7
- package/dist/resolver.js.map +0 -1
- package/dist/resource.cjs +0 -7
- package/dist/resource.cjs.map +0 -1
- package/dist/resource.d.cts +0 -174
- package/dist/resource.d.ts +0 -174
- package/dist/resource.js +0 -7
- package/dist/resource.js.map +0 -1
- package/dist/result/retry.cjs +0 -2
- package/dist/result/retry.cjs.map +0 -1
- package/dist/result/retry.d.cts +0 -70
- package/dist/result/retry.d.ts +0 -70
- package/dist/result/retry.js +0 -2
- package/dist/result/retry.js.map +0 -1
- package/dist/retry.cjs +0 -2
- package/dist/retry.cjs.map +0 -1
- package/dist/retry.d.cts +0 -388
- package/dist/retry.d.ts +0 -388
- package/dist/retry.js +0 -2
- package/dist/retry.js.map +0 -1
- package/dist/run.cjs +0 -7
- package/dist/run.cjs.map +0 -1
- package/dist/run.d.cts +0 -4
- package/dist/run.d.ts +0 -4
- package/dist/run.js +0 -7
- package/dist/run.js.map +0 -1
- package/dist/saga.cjs +0 -11
- package/dist/saga.cjs.map +0 -1
- package/dist/saga.d.cts +0 -164
- package/dist/saga.d.ts +0 -164
- package/dist/saga.js +0 -11
- package/dist/saga.js.map +0 -1
- package/dist/singleflight.cjs +0 -2
- package/dist/singleflight.cjs.map +0 -1
- package/dist/singleflight.d.cts +0 -145
- package/dist/singleflight.d.ts +0 -145
- package/dist/singleflight.js +0 -2
- package/dist/singleflight.js.map +0 -1
- package/dist/slugs.cjs +0 -2
- package/dist/slugs.cjs.map +0 -1
- package/dist/slugs.d.cts +0 -67
- package/dist/slugs.d.ts +0 -67
- package/dist/slugs.js +0 -2
- package/dist/slugs.js.map +0 -1
- package/dist/streaming.cjs +0 -9
- package/dist/streaming.cjs.map +0 -1
- package/dist/streaming.d.cts +0 -596
- package/dist/streaming.d.ts +0 -596
- package/dist/streaming.js +0 -9
- package/dist/streaming.js.map +0 -1
- package/dist/tagged-error.cjs +0 -2
- package/dist/tagged-error.cjs.map +0 -1
- package/dist/tagged-error.d.cts +0 -275
- package/dist/tagged-error.d.ts +0 -275
- package/dist/tagged-error.js +0 -2
- package/dist/tagged-error.js.map +0 -1
- package/dist/types-DQmzO9f4.d.ts +0 -323
- package/dist/types-qBUOYi-4.d.cts +0 -323
- package/dist/webhook.cjs +0 -7
- package/dist/webhook.cjs.map +0 -1
- package/dist/webhook.d.cts +0 -499
- package/dist/webhook.d.ts +0 -499
- package/dist/webhook.js +0 -7
- package/dist/webhook.js.map +0 -1
package/dist/reliability.cjs
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";var Ye=Object.defineProperty;var Xt=Object.getOwnPropertyDescriptor;var Gt=Object.getOwnPropertyNames;var Zt=Object.prototype.hasOwnProperty;var er=(e,t)=>{for(var r in t)Ye(e,r,{get:t[r],enumerable:!0})},tr=(e,t,r,p)=>{if(t&&typeof t=="object"||typeof t=="function")for(let m of Gt(t))!Zt.call(e,m)&&m!==r&&Ye(e,m,{get:()=>t[m],enumerable:!(p=Xt(t,m))||p.enumerable});return e};var rr=e=>tr(Ye({},"__esModule",{value:!0}),e);var xr={};er(xr,{CircuitOpenError:()=>We,circuitBreakerPresets:()=>At,conditionalPolicy:()=>zt,createCircuitBreaker:()=>bt,createCombinedLimiter:()=>Pt,createConcurrencyLimiter:()=>tt,createCostBasedRateLimiter:()=>Dt,createFixedWindowLimiter:()=>_t,createPolicyApplier:()=>Vt,createPolicyBundle:()=>$t,createPolicyRegistry:()=>Yt,createRateLimiter:()=>et,createSagaWorkflow:()=>Kt,envPolicy:()=>Jt,isCircuitOpenError:()=>Ct,isQueueFullError:()=>Ze,isRateLimitExceededError:()=>vt,isSagaCompensationError:()=>jt,mergePolicies:()=>de,rateLimiterPresets:()=>Ot,retryPolicies:()=>De,retryPolicy:()=>ye,runSaga:()=>Bt,servicePolicies:()=>Ht,stepOptions:()=>Qt,timeoutPolicies:()=>_e,timeoutPolicy:()=>Ee,withPolicies:()=>qt,withPolicy:()=>it});module.exports=rr(xr);var nr={"step-require-id":"step-require-id","step-no-immediate-execution":"step-no-immediate-execution","step-require-thunk-for-key":"step-require-thunk-for-key","step-no-bare-await":"step-no-bare-await","step-no-try-catch-wrap":"step-no-try-catch-wrap","step-stable-cache-keys":"step-stable-cache-keys","workflow-no-floating":"workflow-no-floating","workflow-options-position":"workflow-options-position","workflow-callback-shape":"workflow-callback-shape","workflow-no-callable-form":"workflow-no-callable-form","workflow-no-dynamic-import":"workflow-no-dynamic-import","result-no-floating":"result-no-floating","result-require-handling":"result-require-handling","result-no-double-wrap":"result-no-double-wrap","result-no-manual-propagation":"result-no-manual-propagation","result-no-direct-ok-err":"result-no-direct-ok-err","error-check-unexpected-first":"error-check-unexpected-first","error-access-cause":"error-access-cause","error-normalize":"error-normalize","error-no-throw-in-deps":"error-no-throw-in-deps","concurrency-no-promise-all":"concurrency-no-promise-all","concurrency-no-promise-race":"concurrency-no-promise-race","concurrency-no-promise-allsettled":"concurrency-no-promise-allsettled","runtime-step-timeout":"runtime-step-timeout","runtime-step-aborted":"runtime-step-aborted","runtime-retry-exhausted":"runtime-retry-exhausted","runtime-rate-limit":"runtime-rate-limit","runtime-circuit-open":"runtime-circuit-open","runtime-unexpected":"runtime-unexpected","runtime-resolver-not-found":"runtime-resolver-not-found","runtime-saga-compensation":"runtime-saga-compensation"};function ct(e){return`https://jagreehal.github.io/awaitly/rules/#${e}`}var Sr=Object.keys(nr);var Ke=class extends Error{_tag};function me(e,t){return class extends Ke{_tag=e;constructor(r,p){let m=t?.message?t.message(r??{}):e;if(super(m),this.name=e,t?.slug!==void 0){if(!t.hint)throw new TypeError(`TaggedError: 'hint' is required when 'slug' is set (slug: "${t.slug}")`);Object.defineProperty(this,"code",{value:t.slug,enumerable:!0,writable:!1,configurable:!1}),Object.defineProperty(this,"hint",{value:t.hint,enumerable:!0,writable:!1,configurable:!1}),Object.defineProperty(this,"docsUrl",{value:ct(t.slug),enumerable:!0,writable:!1,configurable:!1})}if(Object.setPrototypeOf(this,new.target.prototype),r&&typeof r=="object"){let c;if(t?.slug!==void 0){let{_tag:n,name:O,message:f,stack:i,code:T,hint:a,docsUrl:_,...q}=r;c=q}else{let{_tag:n,name:O,message:f,stack:i,...T}=r;c=T}let x=Object.prototype.hasOwnProperty.call(c,"cause"),w=x?c.cause:void 0;x&&delete c.cause;let P=p?.cause!==void 0;if(x&&P)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,c),x&&(this.cause=w),P&&(this.cause=p?.cause)}else p?.cause!==void 0&&(this.cause=p.cause)}}}Object.defineProperty(me,Symbol.hasInstance,{value:e=>e instanceof Ke});(m=>{function e(c){return c instanceof Error}m.isError=e;function t(c){return c instanceof Ke}m.isTaggedError=t;function r(c,x){let w=c._tag,P=x[w];return P(c)}m.match=r;function p(c,x,w){let P=c._tag,n=x[P];return n?n(c):w(c)}m.matchPartial=p})(me||={});var lt=class extends me("TimeoutError",{slug:"runtime-step-timeout",hint:"Increase the step's timeout option, or check why the upstream operation is slow.",message:t=>t.operation?`TimeoutError: ${t.operation} timed out after ${t.ms}ms`:`TimeoutError: Operation timed out after ${t.ms}ms`}){},pt=class extends me("RetryExhaustedError",{slug:"runtime-retry-exhausted",hint:"All retry attempts failed. Inspect lastError and decide whether to surface it or compensate.",message:t=>t.operation?`RetryExhaustedError: ${t.operation} failed after ${t.attempts} attempts`:`RetryExhaustedError: Operation failed after ${t.attempts} attempts`}){},mt=class extends me("RateLimitError",{slug:"runtime-rate-limit",hint:"Wait retryAfterMs before retrying, or apply step.cache to deduplicate calls.",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`:""}`}){},dt=class extends me("CircuitBreakerOpenError",{slug:"runtime-circuit-open",hint:"The circuit is open. Wait for it to half-open or fall back to a degraded path.",message:t=>`CircuitBreakerOpenError: Circuit ${t.circuitName} is ${t.state??"OPEN"}${t.retryAfterMs?`, retry after ${Math.ceil(t.retryAfterMs/1e3)}s`:""}`}){},ft=class extends me("ValidationError",{message:t=>`ValidationError: Invalid ${t.field} - ${t.reason}`}){},Et=class extends me("NotFoundError",{message:t=>t.id?`NotFoundError: ${t.resource} with id ${t.id} not found`:`NotFoundError: ${t.resource} not found`}){},yt=class extends me("UnauthorizedError",{message:t=>t.reason?`UnauthorizedError: ${t.reason}`:t.action&&t.resource?`UnauthorizedError: Not authorized to ${t.action} ${t.resource}`:"UnauthorizedError: Access denied"}){},wt=class extends me("NetworkError",{message:t=>t.url?`NetworkError: ${t.reason} (${t.url})`:`NetworkError: ${t.reason}`}){},gt=class extends me("CompensationError",{slug:"runtime-saga-compensation",hint:"A saga compensation step failed. Inspect compensationError and ensure compensation is idempotent.",message:t=>`CompensationError: Failed to compensate step ${t.step}`}){},Pe=class extends me("UnexpectedError",{slug:"runtime-unexpected",hint:"An unexpected exception escaped a step. Inspect cause; consider returning a typed Result instead of throwing.",message:t=>`UnexpectedError: ${t.cause instanceof Error?t.cause.message:String(t.cause??"unknown")}`}){};function or(e){let t=e.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!t)return;let r=parseFloat(t[1]),p=t[2].toLowerCase();return{_tag:"Duration",millis:r*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[p]??1)}}function He(e){return new Pe({cause:e})}function G(e){return{ok:!0,value:e}}function W(e,t){let r=t?.cause;return{ok:!1,error:e,...r!==void 0?{cause:r}:{}}}var xt=e=>e instanceof Pe||typeof e=="object"&&e!==null&&"_tag"in e&&e._tag==="UnexpectedError";function sr(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 r=t._tag.trim();if(r)return r}if(typeof t.tag=="string"){let r=t.tag.trim();if(r)return r}if(typeof t.code=="string"){let r=t.code.trim();if(r)return r}else if(typeof t.code=="number")return String(t.code);if(e instanceof Error&&e.name){let r=e.name.trim();if(r)return r}}return"unknown"}function ar(e,t){if(!(!t||!e))return t[e]}function Ge(e){let{intent:t,domain:r,owner:p,tags:m,stateChanges:c,emits:x,calls:w}=e;if(!t&&!r&&!p&&!m?.length&&!c?.length&&!x?.length&&!w?.length)return;let P={};return t&&(P.intent=t),r&&(P.domain=r),p&&(P.owner=p),m?.length&&(P.tags=m),c?.length&&(P.stateChanges=c),x?.length&&(P.emits=x),w?.length&&(P.calls=w),P}function we(e,t,r,p,m){let c=sr(e),x=ar(c,t),w={tag:c,origin:r};return x!==void 0&&(w.classification=x),p!==void 0&&(w.attempt=p),m!==void 0&&(w.cumulativeDurationMs=m),w}var Ne=Symbol.for("step_timeout_marker");function kt(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:Ne in e}function ir(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(Ne in e)return e[Ne]}}var ht=Symbol("early-exit");function Se(e,t){return{[ht]:!0,error:e,meta:t}}function Te(e){return typeof e=="object"&&e!==null&&e[ht]===!0}var St=Symbol("mapper-exception");function Ie(e){return{[St]:!0,thrown:e}}function ur(e){return typeof e=="object"&&e!==null&&e[St]===!0}function Qe(e,t){let{backoff:r,initialDelay:p,maxDelay:m,jitter:c}=t,x;switch(r){case"fixed":x=p;break;case"linear":x=p*e;break;case"exponential":x=p*Math.pow(2,e-1);break}if(x=Math.min(x,m),c){let w=x*.25*Math.random();x=x+w}return Math.floor(x)}function Xe(e){return new Promise(t=>setTimeout(t,e))}var Tt=Symbol("timeout"),Ve=Symbol("timeout-option");function cr(e){return typeof e=="object"&&e!==null&&e[Ve]===!0}async function lr(e,t,r,p){let m=new AbortController,c=t.onTimeout??"error",x=()=>typeof c=="function"?c({name:r.name,key:r.key,ms:t.ms}):t.error??{type:"STEP_TIMEOUT",stepName:r.name,stepKey:r.key,timeoutMs:t.ms,attempt:r.attempt},w;p?.aborted&&m.abort(p.reason);let P;p&&!p.aborted&&(P=()=>m.abort(p.reason),p.addEventListener("abort",P,{once:!0}));let n=new Promise((f,i)=>{w=setTimeout(()=>{if(c!=="disconnect"&&m.abort(),c==="option"){i({[Ve]:!0,ms:t.ms});return}i({[Tt]:!0,error:x()})},t.ms)}),O;t.signal?O=Promise.resolve(e(m.signal)):O=Promise.resolve(e());try{return await Promise.race([O,n])}catch(f){if(typeof f=="object"&&f!==null&&f[Ve]===!0)throw{[Ve]:!0,ms:t.ms};if(typeof f=="object"&&f!==null&&f[Tt]===!0){c==="disconnect"&&O.catch(()=>{});let i=f.error;if(typeof i=="object"&&i!==null&&i.type!=="STEP_TIMEOUT"){let T={timeoutMs:t.ms,stepName:r.name,stepKey:r.key,attempt:r.attempt};Ne in i?i[Ne]=T:Object.defineProperty(i,Ne,{value:T,enumerable:!1,writable:!0,configurable:!1})}throw i}throw f}finally{clearTimeout(w),P&&p&&p.removeEventListener("abort",P)}}var Ue={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,shouldRetry:()=>!0,onRetry:()=>{}};async function $e(e,t){let{onError:r,onEvent:p,catchUnexpected:m,workflowId:c,workflowName:x,context:w,_workflowSignal:P}=t&&typeof t=="object"?t:{},n=c??crypto.randomUUID(),O=m??He,f=[],i=0,T=S=>S??`step_${++i}`,a=S=>{let le=S.context!==void 0||w===void 0?S:{...S,context:w},pe=x!==void 0&&le.workflowName===void 0?{...le,workflowName:x}:le;if(pe.type==="step_success"){let ge=pe.stepId;for(let ve=f.length-1;ve>=0;ve--){let fe=f[ve];if(fe.type==="race"&&!fe.winnerId){fe.winnerId=ge;break}}}p?.(pe,w)},_=Se,q=S=>Te(S),F=(S,le)=>S,ie=S=>typeof S=="function"?!1:!!(S&&typeof S=="object"&&"ok"in S||S&&typeof S=="object"&&"then"in S&&typeof S.then=="function");try{let le=function(E){let A={};for(let[o,l]of Object.entries(E))if(typeof l=="function")A[o]=l;else if(l&&typeof l=="object"&&"fn"in l)A[o]=l.fn;else throw new TypeError(`step.all: operation "${o}" must be a function or { fn, errors? } object`);return A},pe=function(E,A){let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let l=performance.now(),s=!1;f.push({scopeId:o,type:"parallel"});let k=()=>{if(s)return;s=!0;let C=f.findIndex(D=>D.scopeId===o);C!==-1&&f.splice(C,1),a({type:"scope_end",workflowId:n,scopeId:o,ts:Date.now(),durationMs:performance.now()-l})};a({type:"scope_start",workflowId:n,scopeId:o,scopeType:"parallel",name:E,ts:Date.now()});try{let C=await A();if(k(),!C.ok)throw r?.(C.error,E,w),_(C.error,{origin:"result",resultCause:C.cause});return C.value}catch(C){throw k(),C}})()},ge=function(E,A){let o=Object.keys(E),l=A.name??`Parallel(${o.join(", ")})`,s=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let k=performance.now(),C=!1;f.push({scopeId:s,type:"parallel"});let D=()=>{if(C)return;C=!0;let d=f.findIndex(I=>I.scopeId===s);d!==-1&&f.splice(d,1),a({type:"scope_end",workflowId:n,scopeId:s,ts:Date.now(),durationMs:performance.now()-k})};a({type:"scope_start",workflowId:n,scopeId:s,scopeType:"parallel",name:l,ts:Date.now()});try{let d=await new Promise(B=>{if(o.length===0){B([]);return}let J=!1,Z=o.length,j=new Array(o.length);for(let Q=0;Q<o.length;Q++){let V=o[Q],z=Q;Promise.resolve(E[V]()).catch(N=>W({type:"PROMISE_REJECTED",cause:N},{cause:{type:"PROMISE_REJECTION",reason:N}})).then(N=>{if(!J){if(!N.ok){J=!0,B([{key:V,result:N}]);return}j[z]={key:V,result:N},Z--,Z===0&&B(j)}})}});D();let I={};for(let{key:B,result:J}of d){if(!J.ok)throw r?.(J.error,B,w),_(J.error,{origin:"result",resultCause:J.cause});I[B]=J.value}return I}catch(d){throw D(),d}})()};var Oe=le,Me=pe,Re=ge;let S=(E,A,o)=>(async()=>{if(typeof E!="string"||E.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let l=o??{},s=Ge(l),k=E,C=l.key??E,D=l.key??E,{description:d,retry:I,timeout:B}=l,J=T(C),Z=p,j=Z?performance.now():0,V=ie(A)?()=>A:A,N={attempts:Math.max(1,I?.attempts??1),backoff:I?.backoff??Ue.backoff,initialDelay:I?.initialDelay??Ue.initialDelay,maxDelay:I?.maxDelay??Ue.maxDelay,jitter:I?.jitter??Ue.jitter,shouldRetry:I?.shouldRetry??Ue.shouldRetry,onRetry:I?.onRetry??Ue.onRetry};p&&a({type:"step_start",workflowId:n,stepId:J,stepKey:C,name:k,description:d,ts:Date.now(),...s&&{metadata:s}});let xe;for(let u=1;u<=N.attempts;u++){let g=Z?performance.now():0;try{let y;if(B?y=await lr(V,B,{name:k,key:C,attempt:u},P):y=await V(),y.ok){let Y=performance.now()-j;return a({type:"step_success",workflowId:n,stepId:J,stepKey:C,name:k,description:d,ts:Date.now(),durationMs:Y,...s&&{metadata:s}}),D&&a({type:"step_complete",workflowId:n,stepKey:D,name:k,description:d,ts:Date.now(),durationMs:Y,result:y,...s&&{metadata:s}}),y.value}if(xe=y,u<N.attempts&&N.shouldRetry(y.error,u)){let Y=Qe(u,N);a({type:"step_retry",workflowId:n,stepId:J,stepKey:C,name:k,ts:Date.now(),attempt:u+1,maxAttempts:N.attempts,delayMs:Y,error:y.error,...s&&{metadata:s},diagnostics:we(y.error,l.errorMeta,"result",u,performance.now()-j)}),N.onRetry(y.error,u,Y),await Xe(Y);continue}N.attempts>1&&a({type:"step_retries_exhausted",workflowId:n,stepId:J,stepKey:C,name:k,ts:Date.now(),durationMs:performance.now()-j,attempts:u,lastError:y.error,...s&&{metadata:s},diagnostics:we(y.error,l.errorMeta,"result",u,performance.now()-j)});break}catch(y){let Y=performance.now()-g;if(cr(y)){let b=y.ms;a({type:"step_timeout",workflowId:n,stepId:J,stepKey:C,name:k,ts:Date.now(),timeoutMs:b,attempt:u,...s&&{metadata:s},diagnostics:we(y,l.errorMeta,"timeout",u)}),a({type:"step_success",workflowId:n,stepId:J,stepKey:C,name:k,description:d,ts:Date.now(),durationMs:performance.now()-j,...s&&{metadata:s}}),D&&a({type:"step_complete",workflowId:n,stepKey:D,name:k,description:d,ts:Date.now(),durationMs:performance.now()-j,result:G(void 0),...s&&{metadata:s}});return}if(q(y))throw a({type:"step_aborted",workflowId:n,stepId:J,stepKey:C,name:k,description:d,ts:Date.now(),durationMs:Y,...s&&{metadata:s}}),y;if(kt(y)){let b=ir(y),U=B?.ms??b?.timeoutMs??0;if(a({type:"step_timeout",workflowId:n,stepId:J,stepKey:C,name:k,ts:Date.now(),timeoutMs:U,attempt:u,...s&&{metadata:s},diagnostics:we(y,l.errorMeta,"timeout",u)}),u<N.attempts&&N.shouldRetry(y,u)){let K=Qe(u,N);a({type:"step_retry",workflowId:n,stepId:J,stepKey:C,name:k,ts:Date.now(),attempt:u+1,maxAttempts:N.attempts,delayMs:K,error:y,...s&&{metadata:s},diagnostics:we(y,l.errorMeta,"timeout",u,performance.now()-j)}),N.onRetry(y,u,K),await Xe(K);continue}N.attempts>1&&a({type:"step_retries_exhausted",workflowId:n,stepId:J,stepKey:C,name:k,ts:Date.now(),durationMs:performance.now()-j,attempts:u,lastError:y,...s&&{metadata:s},diagnostics:we(y,l.errorMeta,"timeout",u,performance.now()-j)});let M=performance.now()-j;throw a({type:"step_error",workflowId:n,stepId:J,stepKey:C,name:k,description:d,ts:Date.now(),durationMs:M,error:y,...s&&{metadata:s},diagnostics:we(y,l.errorMeta,"timeout",u,M)}),D&&a({type:"step_complete",workflowId:n,stepKey:D,name:k,description:d,ts:Date.now(),durationMs:M,result:W(y,{cause:y}),meta:{origin:"throw",thrown:y},...s&&{metadata:s}}),r?.(y,k,w),_(y,{origin:"throw",thrown:y})}if(u<N.attempts&&N.shouldRetry(y,u)){let b=Qe(u,N);a({type:"step_retry",workflowId:n,stepId:J,stepKey:C,name:k,ts:Date.now(),attempt:u+1,maxAttempts:N.attempts,delayMs:b,error:y,...s&&{metadata:s},diagnostics:we(y,l.errorMeta,"throw",u,performance.now()-j)}),N.onRetry(y,u,b),await Xe(b);continue}N.attempts>1&&!kt(y)&&a({type:"step_retries_exhausted",workflowId:n,stepId:J,stepKey:C,name:k,ts:Date.now(),durationMs:performance.now()-j,attempts:u,lastError:y,...s&&{metadata:s},diagnostics:we(y,l.errorMeta,"throw",u,performance.now()-j)});let R=performance.now()-j,v;try{v=O(y)}catch(b){throw Ie(b)}throw a({type:"step_error",workflowId:n,stepId:J,stepKey:C,name:k,description:d,ts:Date.now(),durationMs:R,error:v,...s&&{metadata:s},diagnostics:we(y,l.errorMeta,"throw",u,R)}),D&&a({type:"step_complete",workflowId:n,stepKey:D,name:k,description:d,ts:Date.now(),durationMs:R,result:W(v,{cause:y}),meta:{origin:"throw",thrown:y},...s&&{metadata:s}}),r?.(v,k,w),_(v,{origin:"throw",thrown:y})}}let ke=xe,oe=performance.now()-j,Ce=F(ke.error,{origin:"result",resultCause:ke.cause});throw a({type:"step_error",workflowId:n,stepId:J,stepKey:C,name:k,description:d,ts:Date.now(),durationMs:oe,error:Ce,...s&&{metadata:s},diagnostics:we(ke.error,l.errorMeta,"result",N.attempts,oe)}),D&&a({type:"step_complete",workflowId:n,stepKey:D,name:k,description:d,ts:Date.now(),durationMs:oe,result:ke,meta:{origin:"result",resultCause:ke.cause},...s&&{metadata:s}}),r?.(Ce,k,w),_(Ce,{origin:"result",resultCause:ke.cause})})();S.try=(E,A,o)=>{if(typeof E!="string"||E.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 l="error"in o?()=>o.error:o.onError;if(o.retry||o.timeout)return S.retry(E,async()=>{try{return G(await A())}catch(d){return W(l(d),{cause:d})}},{attempts:o.retry?.attempts??1,...o.retry??{},key:o.key,timeout:o.timeout});let s=o.key??E,k=E,C=E,D=p;return(async()=>{let d=D?performance.now():0;p&&a({type:"step_start",workflowId:n,stepId:C,stepKey:s,name:k,ts:Date.now()});try{let I=await A(),B=performance.now()-d;return a({type:"step_success",workflowId:n,stepId:C,stepKey:s,name:k,ts:Date.now(),durationMs:B}),s&&a({type:"step_complete",workflowId:n,stepKey:s,name:k,ts:Date.now(),durationMs:B,result:G(I)}),I}catch(I){let B=l(I),J=performance.now()-d,Z=F(B,{origin:"throw",thrown:I});throw a({type:"step_error",workflowId:n,stepId:C,stepKey:s,name:k,ts:Date.now(),durationMs:J,error:Z}),s&&a({type:"step_complete",workflowId:n,stepKey:s,name:k,ts:Date.now(),durationMs:J,result:W(B,{cause:I}),meta:{origin:"throw",thrown:I}}),r?.(Z,k,w),_(Z,{origin:"throw",thrown:I})}})()},S.fromResult=(E,A,o)=>{if(typeof E!="string"||E.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 l=o.key??E,s=E,k=E,C="error"in o?()=>o.error:o.onError,D=p;return(async()=>{let d=D?performance.now():0;p&&a({type:"step_start",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now()});let I=await A();if(I.ok){let B=performance.now()-d;return a({type:"step_success",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:B}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:B,result:G(I.value)}),I.value}else{let B=C(I.error),J=performance.now()-d,Z=F(B,{origin:"result",resultCause:I.error});throw a({type:"step_error",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:J,error:Z}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:J,result:W(B,{cause:I.error}),meta:{origin:"result",resultCause:I.error}}),r?.(Z,s,w),_(Z,{origin:"result",resultCause:I.error})}})()},S.fromNullable=(E,A,o,l)=>{if(typeof E!="string"||E.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 S(E,async()=>{let s=await A();return s!=null?G(s):W(o())},l)},S.retry=(E,A,o)=>{if(typeof E!="string"||E.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 S(E,A,{key:o.key??E,retry:{attempts:o.attempts,backoff:o.backoff,initialDelay:o.initialDelay,maxDelay:o.maxDelay,jitter:o.jitter,shouldRetry:o.shouldRetry,onRetry:o.onRetry},timeout:o.timeout})},S.withTimeout=(E,A,o)=>{if(typeof E!="string"||E.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 S(E,A,{key:o.key??E,timeout:o})},S.sleep=(E,A,o)=>{if(typeof E!="string"||E.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let l=typeof A=="string"?or(A):A;if(!l)throw new Error(`step.sleep: invalid duration '${A}'`);let s=l.millis,k=o?.signal;return S(E,async()=>{if(P?.aborted||k?.aborted){let C=new Error("Sleep aborted");throw C.name="AbortError",C}return new Promise((C,D)=>{let d={timeoutId:void 0},I=()=>{d.timeoutId&&clearTimeout(d.timeoutId);let B=new Error("Sleep aborted");B.name="AbortError",D(B)};P?.addEventListener("abort",I,{once:!0}),k?.addEventListener("abort",I,{once:!0}),d.timeoutId=setTimeout(()=>{P?.removeEventListener("abort",I),k?.removeEventListener("abort",I),C(G(void 0))},s)})},{key:o?.key??E,description:o?.description})},S.all=((...E)=>{if(typeof E[0]!="string")throw new TypeError("step.all(name, ...): first argument must be a string (step name). Example: step.all('Fetch data', { user: () => fetchUser(), posts: () => fetchPosts() })");let A=E[0],o=E[1];if(typeof o=="function")return pe(A,o);if(o&&typeof o=="object"&&!Array.isArray(o)){let s=le(o);return ge(s,{name:A})}throw new TypeError("step.all(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),S.race=(E,A)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let l=performance.now(),s=!1,k={scopeId:o,type:"race",winnerId:void 0};f.push(k);let C=()=>{if(s)return;s=!0;let D=f.findIndex(d=>d.scopeId===o);D!==-1&&f.splice(D,1),a({type:"scope_end",workflowId:n,scopeId:o,ts:Date.now(),durationMs:performance.now()-l,winnerId:k.winnerId})};a({type:"scope_start",workflowId:n,scopeId:o,scopeType:"race",name:E,ts:Date.now()});try{let D=await A();if(C(),!D.ok)throw r?.(D.error,E,w),_(D.error,{origin:"result",resultCause:D.cause});return D.value}catch(D){throw C(),D}})()},S.if=(E,A,o)=>o(),S.label=S.if,S.branch=async(E,A)=>{let{condition:o,then:l,else:s}=A;if(o())return await l();if(s)return await s()},S.arm=(E,A)=>({fn:E,errors:A}),S.forEach=async(E,A,o)=>{let l=[],s=o.maxIterations,k=0,C="run"in o,D=Symbol.asyncIterator in A?A:(async function*(){yield*A})();for await(let d of D){if(s!==void 0&&k>=s)break;let I;C?I=await o.run(d,k):I=await o.item.handler(d,k,S),l.push(I),k++}return l},S.item=E=>({__forEachItemHandler:!0,handler:E}),S.dep=(E,A)=>A,S.workflow=(E,A,o)=>S(E,A,o),S.map=async(E,A,o,l)=>{let s=l?.concurrency??A.length;return S(E,()=>s>=A.length?Rt(A.map((k,C)=>o(k,C))):(async()=>{let k=[];for(let C=0;C<A.length;C+=s){let D=A.slice(C,C+s),d=await Rt(D.map((I,B)=>o(I,C+B)));if(!d.ok)return d;k.push(...d.value)}return G(k)})(),{key:l?.key})},S.withFallback=(E,A,o)=>{if(typeof E!="string"||E.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 l=o.key??E,s=E,k=T(l),C=p;return(async()=>{let D=C?performance.now():0;p&&a({type:"step_start",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now()});let d;try{d=await A()}catch(j){if(q(j))throw a({type:"step_aborted",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:performance.now()-D}),j;let Q;try{Q=O(j)}catch(z){throw Ie(z)}if(o.on!==void 0&&o.on!==Q){let z=performance.now()-D;throw a({type:"step_error",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:z,error:Q}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:z,result:W(Q,{cause:j}),meta:{origin:"throw",thrown:j}}),r?.(Q,s,w),_(Q,{origin:"throw",thrown:j})}let V;try{V=await o.fallback()}catch(z){if(q(z))throw a({type:"step_aborted",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:performance.now()-D}),z;let N;try{N=O(z)}catch(ke){throw Ie(ke)}let xe=performance.now()-D;throw a({type:"step_error",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:xe,error:N}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:xe,result:W(N,{cause:z}),meta:{origin:"throw",thrown:z}}),r?.(N,s,w),_(N,{origin:"throw",thrown:z})}if(V.ok){let z=performance.now()-D;return a({type:"step_success",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:z}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:z,result:V,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(Q)}}),V.value}else{let z=performance.now()-D,N=F(V.error,{origin:"result",resultCause:V.cause});throw a({type:"step_error",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:z,error:N}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:z,result:V,meta:{origin:"result",resultCause:V.cause}}),r?.(N,s,w),_(N,{origin:"result",resultCause:V.cause})}}if(d.ok){let j=performance.now()-D;return a({type:"step_success",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:j}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:j,result:d}),d.value}let I=d.error;if(o.on!==void 0&&o.on!==I){let j=performance.now()-D,Q=F(I,{origin:"result",resultCause:d.cause});throw a({type:"step_error",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:j,error:Q}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:j,result:d,meta:{origin:"result",resultCause:d.cause}}),r?.(Q,s,w),_(Q,{origin:"result",resultCause:d.cause})}let B;try{B=await o.fallback()}catch(j){if(q(j))throw a({type:"step_aborted",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:performance.now()-D}),j;let Q;try{Q=O(j)}catch(z){throw Ie(z)}let V=performance.now()-D;throw a({type:"step_error",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:V,error:Q}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:V,result:W(Q,{cause:j}),meta:{origin:"throw",thrown:j}}),r?.(Q,s,w),_(Q,{origin:"throw",thrown:j})}if(B.ok){let j=performance.now()-D;return a({type:"step_success",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:j}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:j,result:B,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(I)}}),B.value}let J=performance.now()-D,Z=F(B.error,{origin:"result",resultCause:B.cause});throw a({type:"step_error",workflowId:n,stepId:k,stepKey:l,name:s,ts:Date.now(),durationMs:J,error:Z}),l&&a({type:"step_complete",workflowId:n,stepKey:l,name:s,ts:Date.now(),durationMs:J,result:B,meta:{origin:"result",resultCause:B.cause}}),r?.(Z,s,w),_(Z,{origin:"result",resultCause:B.cause})})()},S.withResource=(E,A)=>{if(typeof E!="string"||E.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=E,l=E,s=T(o),k=p;return(async()=>{let C=k?performance.now():0;p&&a({type:"step_start",workflowId:n,stepId:s,stepKey:o,name:l,ts:Date.now()});let D;try{D=await A.acquire()}catch(V){if(q(V))throw a({type:"step_aborted",workflowId:n,stepId:s,stepKey:o,name:l,ts:Date.now(),durationMs:performance.now()-C}),V;let z;try{z=O(V)}catch(xe){throw Ie(xe)}let N=performance.now()-C;throw a({type:"step_error",workflowId:n,stepId:s,stepKey:o,name:l,ts:Date.now(),durationMs:N,error:z}),o&&a({type:"step_complete",workflowId:n,stepKey:o,name:l,ts:Date.now(),durationMs:N,result:W(z,{cause:V}),meta:{origin:"throw",thrown:V}}),r?.(z,l,w),_(z,{origin:"throw",thrown:V})}if(!D.ok){let V=performance.now()-C,z=F(D.error,{origin:"result",resultCause:D.cause});throw a({type:"step_error",workflowId:n,stepId:s,stepKey:o,name:l,ts:Date.now(),durationMs:V,error:z}),o&&a({type:"step_complete",workflowId:n,stepKey:o,name:l,ts:Date.now(),durationMs:V,result:D,meta:{origin:"result",resultCause:D.cause}}),r?.(z,l,w),_(z,{origin:"result",resultCause:D.cause})}let d=D.value,I,B,J=!1;try{I=await A.use(d)}catch(V){if(q(V)){try{await A.release(d)}catch(z){console.warn(`[awaitly] step.withResource("${E}"): release threw after earlyExit:`,z)}throw V}B=V,J=!0}try{await A.release(d)}catch(V){console.warn(`[awaitly] step.withResource("${E}"): release threw:`,V)}if(J){let V;try{V=O(B)}catch(N){throw Ie(N)}let z=performance.now()-C;throw a({type:"step_error",workflowId:n,stepId:s,stepKey:o,name:l,ts:Date.now(),durationMs:z,error:V}),o&&a({type:"step_complete",workflowId:n,stepKey:o,name:l,ts:Date.now(),durationMs:z,result:W(V,{cause:B}),meta:{origin:"throw",thrown:B}}),r?.(V,l,w),_(V,{origin:"throw",thrown:B})}let Z=I;if(Z.ok){let V=performance.now()-C;return a({type:"step_success",workflowId:n,stepId:s,stepKey:o,name:l,ts:Date.now(),durationMs:V}),o&&a({type:"step_complete",workflowId:n,stepKey:o,name:l,ts:Date.now(),durationMs:V,result:Z}),Z.value}let j=performance.now()-C,Q=F(Z.error,{origin:"result",resultCause:Z.cause});throw a({type:"step_error",workflowId:n,stepId:s,stepKey:o,name:l,ts:Date.now(),durationMs:j,error:Q}),o&&a({type:"step_complete",workflowId:n,stepKey:o,name:l,ts:Date.now(),durationMs:j,result:Z,meta:{origin:"result",resultCause:Z.cause}}),r?.(Q,l,w),_(Q,{origin:"result",resultCause:Z.cause})})()};let fe=await e({step:S});if(process.env.NODE_ENV!=="production"&&fe!==null&&typeof fe=="object"&&"ok"in fe&&typeof fe.ok=="boolean"){let E=fe;(E.ok===!0&&"value"in E||E.ok===!1&&"error"in E)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
|
|
2
|
-
|
|
3
|
-
Incorrect: return ok({ data });
|
|
4
|
-
Correct: return { data };
|
|
5
|
-
|
|
6
|
-
See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return G(fe)}catch(S){if(ur(S))throw S.thrown;if(q(S)){let pe=S.meta.origin==="throw"?S.meta.thrown:S.meta.origin==="result"?S.meta.resultCause:void 0;return W(S.error,{cause:pe})}let le=O(S);return r?.(le,"unexpected",w),W(le,{cause:S})}}$e.strict=(e,t)=>$e(e,t);async function Rt(e){return e.length===0?G([]):new Promise(t=>{let r=!1,p=e.length,m=new Array(e.length);for(let c=0;c<e.length;c++){let x=c;Promise.resolve(e[x]).catch(w=>W({type:"PROMISE_REJECTED",cause:w},{cause:{type:"PROMISE_REJECTION",reason:w}})).then(w=>{if(!r){if(!w.ok){r=!0,t(w);return}m[x]=w.value,p--,p===0&&t(G(m))}})}})}var We=class extends Error{type="CIRCUIT_OPEN";circuitName;state;retryAfterMs;constructor(t){super(t.message??`Circuit breaker "${t.circuitName}" is ${t.state}. Retry after ${Math.ceil(t.retryAfterMs/1e3)}s`),this.name="CircuitOpenError",this.circuitName=t.circuitName,this.state=t.state,this.retryAfterMs=t.retryAfterMs}};function Ct(e){return typeof e=="object"&&e!==null&&e.type==="CIRCUIT_OPEN"}var pr={failureThreshold:5,resetTimeout:3e4,windowSize:6e4,halfOpenMax:3};function bt(e,t){let r={...pr,...t},p="CLOSED",m=[],c=null,x=null,w=0,P=0;function n(){let _=Date.now();m=m.filter(q=>_-q.timestamp<r.windowSize)}function O(_){if(p!==_){let q=p;p=_,_==="HALF_OPEN"&&(P=0),r.onStateChange?.(q,_,e)}}function f(){return p!=="OPEN"||c===null?!1:Date.now()-c>=r.resetTimeout?(O("HALF_OPEN"),!0):!1}function i(){x=Date.now(),w++,p==="HALF_OPEN"&&(P++,P>=r.halfOpenMax&&(O("CLOSED"),m=[]))}function T(_){let q=Date.now();c=q,n(),m.push({timestamp:q,error:_}),(p==="HALF_OPEN"||p==="CLOSED"&&m.length>=r.failureThreshold)&&O("OPEN")}function a(){if(p==="CLOSED")return 0;if(p==="OPEN"){if(f())return 0;let _=Date.now(),q=c?_-c:0;return Math.max(0,r.resetTimeout-q)}return 0}return{async execute(_,q){let F=a();if(F>0)throw new We({circuitName:e,state:p,retryAfterMs:F});try{let ie=await _();return i(),ie}catch(ie){throw T(ie),ie}},async executeResult(_,q){let F=a();if(F>0)return W(new We({circuitName:e,state:p,retryAfterMs:F}));try{let ie=await _();return ie.ok?i():T(ie.error),ie}catch(ie){throw T(ie),ie}},getState(){return p==="OPEN"&&f(),p},getStats(){return n(),{state:this.getState(),failureCount:m.length,successCount:w,lastFailureTime:c,lastSuccessTime:x,halfOpenSuccesses:P}},reset(){O("CLOSED"),m=[],P=0},forceOpen(){c=Date.now(),O("OPEN")},recordSuccess(){i()},recordFailure(_){T(_??new Error("Manual failure"))}}}var At={critical:{failureThreshold:3,resetTimeout:6e4,windowSize:3e4,halfOpenMax:1},standard:{failureThreshold:5,resetTimeout:3e4,windowSize:6e4,halfOpenMax:3},lenient:{failureThreshold:10,resetTimeout:15e3,windowSize:12e4,halfOpenMax:5}};function vt(e){return typeof e=="object"&&e!==null&&e.type==="RATE_LIMIT_EXCEEDED"}function Ze(e){return typeof e=="object"&&e!==null&&e.type==="QUEUE_FULL"}function et(e,t){let{maxPerSecond:r,strategy:p="wait"}=t,m=t.burstCapacity??r*2,c=m,x=Date.now(),w=r/1e3,P=[];function n(){let i=Date.now(),a=(i-x)*w;c=Math.min(m,c+a),x=i}function O(){if(n(),c>=1)return c-=1,0;let i=1-c;return Math.ceil(i/w)}async function f(){return new Promise(i=>{let T=()=>{let a=O();a===0?i():(P.push(T),setTimeout(()=>{let _=P.indexOf(T);_!==-1&&(P.splice(_,1),T())},a))};T()})}return{async execute(i){let T=O();if(T>0){if(p==="reject")throw{type:"RATE_LIMIT_EXCEEDED",limiterName:e,retryAfterMs:T};await f()}return i()},async executeResult(i){let T=O();if(T>0){if(p==="reject")return W({type:"RATE_LIMIT_EXCEEDED",limiterName:e,retryAfterMs:T});await f()}return i()},getStats(){return n(),{availableTokens:Math.floor(c),maxTokens:m,tokensPerSecond:r,waitingCount:P.length}},reset(){c=m,x=Date.now(),P.length=0}}}function tt(e,t){let{maxConcurrent:r,strategy:p="queue",maxQueueSize:m=1/0}=t,c=0,x=[];async function w(){if(c<r){c++;return}if(p==="reject")throw{type:"QUEUE_FULL",limiterName:e,queueSize:x.length,maxQueueSize:m};if(x.length>=m)throw{type:"QUEUE_FULL",limiterName:e,queueSize:x.length,maxQueueSize:m};return new Promise((n,O)=>{x.push({resolve:n,reject:O})})}function P(){c--,x.length>0&&c<r&&(c++,x.shift()?.resolve())}return{async execute(n){await w();try{return await n()}finally{P()}},async executeAll(n){let O=new Array(n.length),f=[];for(let i=0;i<n.length;i++){let T=i,a=this.execute(n[T]).then(_=>{O[T]=_});f.push(a)}return await Promise.all(f),O},async executeResult(n){try{await w()}catch(O){if(Ze(O))return W(O);throw O}try{return await n()}finally{P()}},getStats(){return{activeCount:c,maxConcurrent:r,queueSize:x.length,maxQueueSize:m}},reset(){for(c=0;x.length>0;)x.shift()?.reject(new Error("Limiter reset"))}}}function Pt(e,t){let r=t.rate?et(`${e}-rate`,t.rate):void 0,p=t.concurrency?tt(`${e}-concurrency`,t.concurrency):void 0;return{rate:r,concurrency:p,async execute(m){let c=m;if(r){let x=c;c=()=>r.execute(x)}return p?p.execute(c):c()}}}function _t(e,t){let{limit:r,windowMs:p=1e3,strategy:m="wait"}=t,c=Date.now(),x=0,w=[];function P(){let f=Date.now(),i=f-c;return i>=p?(c=f,x=0,0):p-i}function n(f){let i=P();return x+f<=r?(x+=f,0):i}async function O(f){return new Promise(i=>{let T=()=>{let a=n(f);a===0?i():(w.push({resolve:T,cost:f}),setTimeout(()=>{let _=w.findIndex(q=>q.resolve===T);_!==-1&&(w.splice(_,1),T())},a))};T()})}return{async execute(f,i=1){if(i>r)throw{type:"RATE_LIMIT_EXCEEDED",limiterName:e,retryAfterMs:p};let T=n(i);if(T>0){if(m==="reject")throw{type:"RATE_LIMIT_EXCEEDED",limiterName:e,retryAfterMs:T};await O(i)}return f()},async executeResult(f,i=1){if(i>r)return W({type:"RATE_LIMIT_EXCEEDED",limiterName:e,retryAfterMs:p});let T=n(i);if(T>0){if(m==="reject")return W({type:"RATE_LIMIT_EXCEEDED",limiterName:e,retryAfterMs:T});await O(i)}return f()},getStats(){let f=P();return{requestCount:x,limit:r,windowMs:p,remainingMs:f,waitingCount:w.length}},reset(){c=Date.now(),x=0,w.length=0}}}function Dt(e,t){let{tokensPerSecond:r,strategy:p="wait"}=t,m=t.maxTokens??r*2,c=m,x=Date.now(),w=r/1e3,P=[];function n(){let i=Date.now(),a=(i-x)*w;c=Math.min(m,c+a),x=i}function O(i){if(n(),c>=i)return c-=i,0;let T=i-c;return Math.ceil(T/w)}async function f(i){return new Promise(T=>{let a=()=>{let _=O(i);_===0?T():(P.push({check:a,cost:i}),setTimeout(()=>{let q=P.findIndex(F=>F.check===a);q!==-1&&(P.splice(q,1),a())},_))};a()})}return{async execute(i,T=1){if(T>m)throw{type:"RATE_LIMIT_EXCEEDED",limiterName:e,retryAfterMs:Math.ceil(T/w)};let a=O(T);if(a>0){if(p==="reject")throw{type:"RATE_LIMIT_EXCEEDED",limiterName:e,retryAfterMs:a};await f(T)}return i()},async executeResult(i,T=1){if(T>m)return W({type:"RATE_LIMIT_EXCEEDED",limiterName:e,retryAfterMs:Math.ceil(T/w)});let a=O(T);if(a>0){if(p==="reject")return W({type:"RATE_LIMIT_EXCEEDED",limiterName:e,retryAfterMs:a});await f(T)}return i()},getStats(){return n(),{availableTokens:c,maxTokens:m,tokensPerSecond:r,waitingCount:P.length}},reset(){c=m,x=Date.now(),P.length=0}}}var Ot={api:{maxPerSecond:10,burstCapacity:20,strategy:"wait"},database:{maxConcurrent:10,strategy:"queue",maxQueueSize:100},external:{maxPerSecond:5,burstCapacity:10,strategy:"wait"}};var mr="STREAM_WRITE_ERROR",dr="STREAM_READ_ERROR",fr="STREAM_CLOSE_ERROR";var Er="STREAM_ENDED";function qe(e,t,r){return{type:mr,reason:e,message:t,...r!==void 0?{cause:r}:{}}}function rt(e,t,r){return{type:dr,reason:e,message:t,...r!==void 0?{cause:r}:{}}}function nt(e,t,r){return{type:fr,reason:e,message:t,...r!==void 0?{cause:r}:{}}}function ze(e){return{type:Er,finalPosition:e}}function Mt(e={}){let t=e.highWaterMark??16,r=e.lowWaterMark??Math.floor(t/2),p=e.onStateChange,m="flowing",c=0,x=[];function w(n){if(m!==n&&(m=n,p?.(n),n==="flowing"&&x.length>0)){let O=x;x=[];for(let f of O)f()}}function P(){m==="flowing"&&c>=t?w("paused"):m==="paused"&&c<=r&&w("flowing")}return{get state(){return m},get bufferedCount(){return c},get highWaterMark(){return t},get lowWaterMark(){return r},increment(){c++,P()},decrement(){c>0&&(c--,P())},setCount(n){c=Math.max(0,n),P()},waitForDrain(){return m==="flowing"?Promise.resolve():new Promise(n=>{x.push(n)})},reset(){c=0,x=[],w("flowing")}}}function yr(e){return{_tag:"Duration",millis:e}}function wr(e){return{_tag:"Duration",millis:e*1e3}}function gr(e){return{_tag:"Duration",millis:e*60*1e3}}function kr(e){return{_tag:"Duration",millis:e*60*60*1e3}}function Tr(e){return{_tag:"Duration",millis:e*24*60*60*1e3}}function It(e){return e.millis}function Ut(e){let t=e.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!t)return;let r=parseFloat(t[1]);switch(t[2].toLowerCase()){case"ms":return yr(r);case"s":return wr(r);case"m":return gr(r);case"h":return kr(r);case"d":return Tr(r);default:return}}function Nt(e){return e.type==="step_complete"}function ot(e){return typeof e=="object"&&e!==null&&e.type==="WORKFLOW_CANCELLED"}function Wt(){let e=new Map;return{handleEvent:t=>{Nt(t)&&e.set(t.stepKey,{result:t.result,meta:t.meta})},getResumeState:()=>({steps:new Map(e)}),clear:()=>e.clear()}}function Rr(e){return typeof e=="object"&&e!==null&&e.__cachedMeta===!0}function Ae(e,t,r){return W(e,{cause:{__cachedMeta:!0,originalCause:r,meta:t}})}function Be(e){return Rr(e)?e.meta:{origin:"result",resultCause:e}}async function Lt(e,t){let r=e["~standard"].validate(t),p=r instanceof Promise?await r:r;return p.issues?W({type:"INPUT_VALIDATION_ERROR",issues:p.issues.map(m=>({message:m.message,path:m.path?.map(c=>typeof c=="object"?c.key:c)})),message:`Input validation failed: ${p.issues.map(m=>m.message).join(", ")}`}):G(p.value)}function st(e,t){let r=p=>((...m)=>{let c=m.at(-1),x=m.length>0&&typeof c=="object"&&c!==null&&!Array.isArray(c)&&typeof c!="function",w=x?c:void 0,P=x?m.slice(0,-1):m,n={...t,...w?.deps??{}},O=w?{...w,deps:n}:{deps:n};return e[p](...P,O)});return{run:r("run"),runWithState:r("runWithState"),withDeps(p){return st(e,{...t,...p})}}}var Je=class extends Error{constructor(r,p,m){super(r);this.stepId=p;this.originalError=m;this.name="SnapshotDecodeError"}};function at(e){if(e.type==="error"){let t=new Error(e.message);return t.name=e.name,e.stack&&(t.stack=e.stack),e.cause&&(t.cause=at(e.cause)),t}return e.value!==void 0?e.value:e.stringRepresentation}function Ft(e,t,r){if(typeof e!="string"||e.length===0)throw new TypeError("createWorkflow(workflowName, deps, options?): first argument must be a non-empty string. Example: createWorkflow('checkout', { chargeCard, sendEmail })");let p=t??{},m=r;async function c(n,O,f){let i=n??crypto.randomUUID(),T=f?.deps?{...p,...f.deps}:p,a=[],_=f?.createContext??m?.createContext,q=_?await _():void 0,F=f?.signal??m?.signal,ie=f?.onEvent??m?.onEvent,Oe=f?.onError??m?.onError,Me=f?.shouldRun??m?.shouldRun,Re=f?.onBeforeStart??m?.onBeforeStart,S=f?.onAfterStep??m?.onAfterStep,le=f?.resumeState??m?.resumeState,pe=m?.catchUnexpected??He,ge={},ve=(f?.devWarnings??m?.devWarnings)===!0&&process.env.NODE_ENV!=="production",fe=new Set,E=new Set,A={workflowId:i,onEvent:ie,context:q!==void 0?q:void 0,signal:F,input:{},ref:u=>ge[u],set:(u,g)=>{ve&&!fe.has(u)&&(fe.add(u),console.warn(`awaitly: ctx.set('${u}', ...) is deprecated for static analysis. Use step('id', fn, { out: '${u}' }) instead.`)),ge[u]=g},get:u=>(ve&&!E.has(u)&&(E.add(u),console.warn(`awaitly: ctx.get('${u}') is deprecated for static analysis. Use ctx.ref('${u}') instead for tracked dependencies.`)),ge[u])},o=u=>{let g=u.context!==void 0||q===void 0?u:{...u,context:q},y=g.workflowName===void 0?{...g,workflowName:e}:g;ie?.(y,q)},l=(u,g)=>{let y={type:"WORKFLOW_CANCELLED",reason:u,lastStepKey:g};return W(pe(y),{cause:y})};if(F?.aborted){let u=typeof F.reason=="string"?F.reason:F.reason instanceof Error?F.reason.message:void 0;return o({type:"workflow_cancelled",workflowId:i,ts:Date.now(),durationMs:0,reason:u}),l(u)}if(Me){let u=performance.now();try{let g=await Me(i,q),y=performance.now()-u;if(o({type:"hook_should_run",workflowId:i,ts:Date.now(),durationMs:y,result:g,skipped:!g}),!g){let Y=new Error("Workflow skipped by shouldRun hook");return W(pe(Y),{cause:Y})}}catch(g){let y=performance.now()-u;return o({type:"hook_should_run_error",workflowId:i,ts:Date.now(),durationMs:y,error:g}),W(pe(g),{cause:g})}}if(Re){let u=performance.now();try{let g=await Re(i,q),y=performance.now()-u;if(o({type:"hook_before_start",workflowId:i,ts:Date.now(),durationMs:y,result:g,skipped:!g}),!g){let Y=new Error("Workflow skipped by onBeforeStart hook");return W(pe(Y),{cause:Y})}}catch(g){let y=performance.now()-u;return o({type:"hook_before_start_error",workflowId:i,ts:Date.now(),durationMs:y,error:g}),W(pe(g),{cause:g})}}let s=m?.inputSchema,k=m?.input;if(s){let u=await Lt(s,k);if(!u.ok)return W(u.error);A.input=u.value}else k!==void 0&&(A.input=k);let C=Date.now(),D=performance.now();o({type:"workflow_start",workflowId:i,ts:C});let d=f?.cache??m?.cache,I=f?.streamStore??m?.streamStore;if(le&&!d&&(d=new Map),le&&d){let u=typeof le=="function"?await le():le;u.steps instanceof Map||(console.warn(`awaitly: resumeState.steps is not a Map (got ${typeof u.steps}). This usually happens when state is serialized with JSON.stringify() directly.
|
|
7
|
-
Use stringifyState() and parseState() from 'awaitly/persistence' instead:
|
|
8
|
-
import { stringifyState, parseState } from 'awaitly/persistence';
|
|
9
|
-
const json = stringifyState(state); // Save this
|
|
10
|
-
const restored = parseState(json); // Load this`),typeof u.steps=="object"&&u.steps!==null&&(u.steps=new Map(Object.entries(u.steps))));for(let[g,y]of u.steps){let{result:Y,meta:R}=y;if(Y.ok)d.set(g,Y);else{let v=R??{origin:"result",resultCause:Y.cause};d.set(g,Ae(Y.error,v,Y.cause))}}}let B=f?.snapshot??m?.snapshot,J=m?.serialization;if(B&&!le){d||(d=new Map);let u=B,g=J?.decode;for(let[y,Y]of Object.entries(u.steps))if(Object.prototype.hasOwnProperty.call(u.steps,y))try{if(Y.ok){let R=g?g(Y.value):Y.value;d.set(y,G(R))}else{let R=g?g(Y.error):Y.error,v=at(Y.cause),b=Y.meta?.origin==="throw"?{origin:"throw",thrown:v}:{origin:"result",resultCause:v};d.set(y,Ae(R,b,v))}}catch(R){throw new Je(`Failed to decode step "${y}": ${R instanceof Error?R.message:String(R)}`,y,R instanceof Error?R:void 0)}}let Z=!1,j,Q,V=()=>{Z=!0,j=typeof F?.reason=="string"?F.reason:F?.reason instanceof Error?F.reason.message:void 0};F&&!F.aborted&&F.addEventListener("abort",V,{once:!0});let z=()=>{if(Z||F?.aborted)throw{type:"WORKFLOW_CANCELLED",reason:j??(typeof F?.reason=="string"?F.reason:F?.reason instanceof Error?F.reason.message:void 0),lastStepKey:Q}},N=async(u,g,y)=>{if(!S)return;let Y=performance.now();try{await S(u,g,i,q);let R=performance.now()-Y;o({type:"hook_after_step",workflowId:i,stepKey:u,ts:Date.now(),durationMs:R})}catch(R){let v=performance.now()-Y;throw o({type:"hook_after_step_error",workflowId:i,stepKey:u,ts:Date.now(),durationMs:v,error:R}),R}},xe=u=>{let g=async(R,v,b)=>{if(typeof R!="string")throw new Error('[awaitly] step() requires a string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let U=R,M=b??{},K=U,h=Object.prototype.hasOwnProperty.call(M,"key")?M.key:U,{ttl:$,out:te}=M;z();let ee=Ge(M);if(h&&d&&d.has(h)){o({type:"step_cache_hit",workflowId:i,stepKey:h,name:K,ts:Date.now(),...ee&&{metadata:ee}});let L=d.get(h);if(L.ok)return Q=h,te&&(ge[te]=L.value),L.value;let H=Be(L.cause);throw Se(L.error,H)}h&&d&&o({type:"step_cache_miss",workflowId:i,stepKey:h,name:K,ts:Date.now(),...ee&&{metadata:ee}});try{let L=await u(U,v,M);return te&&(ge[te]=L),M.compensate&&a.push({stepName:K,value:L,compensate:M.compensate}),h&&(Q=h,d&&d.set(h,G(L),$?{ttl:$}:void 0),await N(h,G(L))),L}catch(L){if(h&&Te(L)){let H=L,se=H.meta.origin==="result"?H.meta.resultCause:H.meta.origin==="throw"?H.meta.thrown:void 0,X=Ae(H.error,H.meta,se);d&&d.set(h,X,$?{ttl:$}:void 0),await N(h,X,H.meta)}throw L}};g.try=async(R,v,b)=>{let{ttl:U}=b,M=b.key??R,K=R;if(d&&d.has(M)){o({type:"step_cache_hit",workflowId:i,stepKey:M,name:K,ts:Date.now()});let h=d.get(M);if(h.ok)return h.value;let $=Be(h.cause);throw Se(h.error,$)}d&&o({type:"step_cache_miss",workflowId:i,stepKey:M,name:K,ts:Date.now()});try{let h=await u.try(R,v,{...b,key:M});return b.compensate&&a.push({stepName:K,value:h,compensate:b.compensate}),d&&d.set(M,G(h),U?{ttl:U}:void 0),await N(M,G(h)),h}catch(h){if(Te(h)){let $=h,te=$.meta.origin==="result"?$.meta.resultCause:$.meta.origin==="throw"?$.meta.thrown:void 0,ee=Ae($.error,$.meta,te);d&&d.set(M,ee,U?{ttl:U}:void 0),await N(M,ee,$.meta)}throw h}},g.fromResult=async(R,v,b)=>{let{ttl:U}=b,M=b.key??R,K=R;if(d&&d.has(M)){o({type:"step_cache_hit",workflowId:i,stepKey:M,name:K,ts:Date.now()});let h=d.get(M);if(h.ok)return h.value;let $=Be(h.cause);throw Se(h.error,$)}d&&o({type:"step_cache_miss",workflowId:i,stepKey:M,name:K,ts:Date.now()});try{let h=await u.fromResult(R,v,{...b,key:M});return d&&d.set(M,G(h),U?{ttl:U}:void 0),await N(M,G(h)),h}catch(h){if(Te(h)){let $=h,te=$.meta.origin==="result"?$.meta.resultCause:$.meta.origin==="throw"?$.meta.thrown:void 0,ee=Ae($.error,$.meta,te);d&&d.set(M,ee,U?{ttl:U}:void 0),await N(M,ee,$.meta)}throw h}},g.race=u.race,g.withFallback=async(R,v,b)=>{let U=b.key??R,M=R;if(d&&d.has(U)){o({type:"step_cache_hit",workflowId:i,stepKey:U,name:M,ts:Date.now()});let K=d.get(U);if(K.ok)return K.value;let h=Be(K.cause);throw Se(K.error,h)}d&&o({type:"step_cache_miss",workflowId:i,stepKey:U,name:M,ts:Date.now()});try{let K=await u.withFallback(R,v,b);return d&&d.set(U,G(K)),await N(U,G(K)),K}catch(K){if(Te(K)){let h=K,$=h.meta.origin==="result"?h.meta.resultCause:h.meta.origin==="throw"?h.meta.thrown:void 0,te=Ae(h.error,h.meta,$);d&&d.set(U,te),await N(U,te,h.meta)}throw K}},g.withResource=async(R,v)=>{let b=R;try{let U=await u.withResource(R,v);return await N(b,G(U)),U}catch(U){if(Te(U)){let M=U,K=M.meta.origin==="result"?M.meta.resultCause:M.meta.origin==="throw"?M.meta.thrown:void 0,h=Ae(M.error,M.meta,K);await N(b,h,M.meta)}throw U}},g.retry=(R,v,b)=>{let U={key:b.key,retry:{attempts:b.attempts,backoff:b.backoff,initialDelay:b.initialDelay,maxDelay:b.maxDelay,jitter:b.jitter,shouldRetry:b.shouldRetry,onRetry:b.onRetry},timeout:b.timeout,ttl:b.ttl};return g(R,v,U)},g.withTimeout=(R,v,b)=>{let U={key:b.key,timeout:b,ttl:b.ttl};return g(R,v,U)},g.sleep=(R,v,b)=>{if(typeof R!="string"||R.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let U=typeof v=="string"?Ut(v):v;if(!U)throw new Error(`step.sleep: invalid duration '${v}'`);let M=It(U),K=b?.signal;return g(R,async()=>{if(F?.aborted||K?.aborted){let $=new Error("Sleep aborted");throw $.name="AbortError",$}return new Promise(($,te)=>{let ee={timeoutId:void 0},L=()=>{ee.timeoutId&&clearTimeout(ee.timeoutId);let H=new Error("Sleep aborted");H.name="AbortError",te(H)};F?.addEventListener("abort",L,{once:!0}),K?.addEventListener("abort",L,{once:!0}),ee.timeoutId=setTimeout(()=>{F?.removeEventListener("abort",L),K?.removeEventListener("abort",L),$(G(void 0))},M)})},{key:b?.key,ttl:b?.ttl,description:b?.description})};let y=new Map,Y=new Map;return g.getWritable=R=>{let v=R?.namespace??"default",b=R?.highWaterMark??16;if(!I)throw new Error("streamStore is required to use getWritable(). Pass a streamStore to createWorkflow options.");let U=`${i}:${v}`,M=y.get(U);if(M&&!M.closed&&!M.aborted)return M.writer;let K=Mt({highWaterMark:b,onStateChange:H=>{o({type:"stream_backpressure",workflowId:i,namespace:v,bufferedCount:K.bufferedCount,state:H,ts:Date.now()})}}),h=0,$=!0,te=!1,ee=!1;o({type:"stream_created",workflowId:i,namespace:v,ts:Date.now()});let L={async write(H){if(ee)return W(qe("closed","Stream is closed"));if(te)return W(qe("aborted","Stream was aborted"));K.state==="paused"&&await K.waitForDrain();let se={value:H,position:h,ts:Date.now()},X=await I.append(i,v,se);return X.ok?(o({type:"stream_write",workflowId:i,namespace:v,position:h,ts:Date.now()}),h++,K.increment(),G(void 0)):(o({type:"stream_error",workflowId:i,namespace:v,error:X.error,position:h,ts:Date.now()}),W(qe("store_error",X.error.message,X.error)))},async close(){if(ee)return W(nt("already_closed","Stream is already closed"));let H=await I.closeStream(i,v);return H.ok?(ee=!0,$=!1,o({type:"stream_close",workflowId:i,namespace:v,finalPosition:h,ts:Date.now()}),y.delete(U),G(void 0)):W(nt("store_error",H.error.message,H.error))},abort(H){te=!0,$=!1,ee=!0,o({type:"stream_error",workflowId:i,namespace:v,error:H,position:h,ts:Date.now()}),y.delete(U)},get writable(){return $},get position(){return h},get namespace(){return v}};return y.set(U,{writer:L,backpressure:K,aborted:te,closed:ee}),L},g.getReadable=R=>{let v=R?.namespace??"default",b=R?.startIndex??0,U=R?.pollInterval??10,M=R?.pollTimeout??3e4;if(!I)throw new Error("streamStore is required to use getReadable(). Pass a streamStore to createWorkflow options.");let K=`${i}:${v}:${b}`,h=Y.get(K);if(h&&!h.closed)return h.reader;let $=()=>{let he=`${i}:${v}`,ne=y.get(he);ne&&ne.backpressure.decrement()},te=b,ee=!0,L=!1,H=[],se=0,X={async read(){if(L)return W(rt("closed","Reader is closed"));if(se<H.length){let ce=H[se++];return te=ce.position+1,$(),o({type:"stream_read",workflowId:i,namespace:v,position:ce.position,ts:Date.now()}),G(ce.value)}let he=`${i}:${v}`,ne=Date.now(),ue=y.has(he),re=await I.getMetadata(i,v),ae=re.ok&&re.value!==void 0;for(;Date.now()-ne<M;){let ce=await I.read(i,v,te,100);if(!ce.ok)return W(rt("store_error",ce.error.message,ce.error));let Le=ce.value;if(Le.length>0){H=Le,se=1;let je=Le[0];return te=je.position+1,$(),o({type:"stream_read",workflowId:i,namespace:v,position:je.position,ts:Date.now()}),G(je.value)}let Fe=y.has(he),be=await I.getMetadata(i,v),ut=be.ok&&be.value!==void 0;if(Fe&&(ue=!0),ut&&(ae=!0),be.ok&&be.value?.closed)return ee=!1,W(ze(te));if(ue&&!Fe&&!ut)return ee=!1,W(ze(te));ae&&!Fe&&be.ok&&be.value?.closed,await new Promise(je=>setTimeout(je,U))}return ee=!1,W(ze(te))},close(){L=!0,ee=!1,H=[],Y.delete(K)},get readable(){return ee},get position(){return te},get namespace(){return v}};return Y.set(K,{reader:X,position:te,closed:L}),X},g.streamForEach=async(R,v,b)=>{let U=b?.checkpointInterval??1,M=b?.concurrency??1,K=[],h=0,$=-1,te=L=>typeof L=="object"&&L!==null&&"read"in L&&typeof L.read=="function",ee=async(L,H,se,X)=>{let ne=U>0&&H%U===0?`stream-foreach:${X}:pos-${se}`:void 0,ue=ne??`stream-item-${se}`,re=await g(ue,()=>v(L,H),{key:ne});return{index:H,position:se,result:re}};if(te(R))if(M<=1){let L=R.position,H=await R.read();for(;H.ok;){let se=H.value,{result:X}=await ee(se,h,L,R.namespace);K.push(X),$=L,h++,L=R.position,H=await R.read()}}else{let L=new Map,H=0,se=0,X=new Array(M).fill(null),he=async()=>{for(let ce=0;ce<X.length;ce++)if(X[ce]===null)return ce;let re=X.filter(ce=>ce!==null),ae=await Promise.race(re);return L.set(ae.index,{position:ae.position,result:ae.result}),X[ae.slotIndex]=null,ae.slotIndex},ne=R.position,ue=await R.read();for(;ue.ok;){let re=await he(),ae=H,ce=ne,Le=ue.value,Fe=re;X[re]=ee(Le,ae,ce,R.namespace).then(be=>({slotIndex:Fe,...be})),se++,H++,ne=R.position,ue=await R.read()}for(let re=0;re<X.length;re++)if(X[re]!==null){let ae=await X[re];L.set(ae.index,{position:ae.position,result:ae.result})}for(let re=0;re<se;re++){let ae=L.get(re);ae&&(K.push(ae.result),$=ae.position,h++)}}else if(M<=1){let L=0;for await(let H of R){let{result:se}=await ee(H,L,L,"async-iterable");K.push(se),$=L,h++,L++}}else{let L=new Map,H=0,se=0,X=new Array(M).fill(null),he=async()=>{for(let re=0;re<X.length;re++)if(X[re]===null)return re;let ne=X.filter(re=>re!==null),ue=await Promise.race(ne);return L.set(ue.index,ue.result),X[ue.slotIndex]=null,ue.slotIndex};for await(let ne of R){let ue=await he(),re=H,ae=ue;X[ue]=ee(ne,re,re,"async-iterable").then(ce=>({slotIndex:ae,...ce})),se++,H++}for(let ne=0;ne<X.length;ne++)if(X[ne]!==null){let ue=await X[ne];L.set(ue.index,ue.result)}for(let ne=0;ne<se;ne++)L.has(ne)&&(K.push(L.get(ne)),$=ne,h++)}return{results:K,processedCount:h,lastPosition:$}},g.if=u.if,g.label=u.label,g.branch=u.branch,g.arm=u.arm,g.forEach=u.forEach,g.item=u.item,g.dep=u.dep,g.workflow=(R,v,b)=>g(R,v,b),g.all=(R,v,b)=>{let U=b!==void 0&&Object.prototype.hasOwnProperty.call(b,"key")?b:{...b,key:void 0};return g(R,async()=>G(await u.all(R,v)),U)},g.map=(R,v,b,U)=>{let M=U!==void 0&&Object.prototype.hasOwnProperty.call(U,"key")?U:{...U,key:void 0};return g(R,async()=>G(await u.map(R,v,b,U)),M)},g},ke=({step:u})=>O({step:xe(u),deps:T,ctx:A}),oe;try{oe=await $e(ke,{onError:Oe,onEvent:ie,catchUnexpected:pe,workflowId:i,workflowName:e,context:q,_workflowSignal:F})}finally{F&&F.removeEventListener("abort",V)}if(!oe.ok&&a.length>0){let u=[];for(let g=a.length-1;g>=0;g--){let y=a[g];try{await y.compensate(y.value)}catch(Y){u.push({stepName:y.stepName,error:Y})}}if(u.length>0){let g={type:"SAGA_COMPENSATION_ERROR",originalError:oe.error,compensationErrors:u};oe=W(g,{cause:oe.cause})}}let Ce=performance.now()-D;if(!oe.ok){let u;if(ot(oe.cause)&&(u=oe.cause),!u&&Z&&xt(oe.error)){let g=oe.cause;g!=null&&typeof g=="object"&&"name"in g&&g.name==="AbortError"&&(u={type:"WORKFLOW_CANCELLED",reason:j??(typeof F?.reason=="string"?F.reason:F?.reason instanceof Error?F.reason.message:void 0),lastStepKey:Q})}if(u)return o({type:"workflow_cancelled",workflowId:i,ts:Date.now(),durationMs:Ce,reason:u.reason,lastStepKey:u.lastStepKey}),u&&!ot(oe.cause)?W(oe.error,{cause:u}):oe}if(oe.ok&&Z){let u=j??(typeof F?.reason=="string"?F.reason:F?.reason instanceof Error?F.reason.message:void 0);o({type:"workflow_cancelled",workflowId:i,ts:Date.now(),durationMs:Ce,reason:u,lastStepKey:Q});let g={type:"WORKFLOW_CANCELLED",reason:u,lastStepKey:Q};return W(pe(g),{cause:g})}return oe.ok?o({type:"workflow_success",workflowId:i,ts:Date.now(),durationMs:Ce}):o({type:"workflow_error",workflowId:i,ts:Date.now(),durationMs:Ce,error:oe.error}),oe}function x(n,O,f){let i,T,a;return typeof n=="string"?(i=n,T=O,a=f):(T=n,a=O),c(i,T,a)}async function w(n,O,f){let i,T,a;typeof n=="string"?(i=n,T=O,a=f):(T=n,a=O);let _=Wt(),q=a?.onEvent,ie={...a,onEvent:(Re,S)=>{_.handleEvent(Re);try{q?.(Re,S)}catch{}}},Oe,Me;try{Oe=await c(i,T,ie)}catch(Re){let S=m?.catchUnexpected??He;Oe=W(S(Re),{cause:Re})}finally{Me=_.getResumeState()}return{result:Oe,resumeState:Me}}let P={withDeps:n=>st(P,n),run:x,runWithState:w};return P}function jt(e){return typeof e=="object"&&e!==null&&e.type==="SAGA_COMPENSATION_ERROR"}function Kt(e,t,r){return Ft(e,t,r)}async function Bt(e,t){let r=crypto.randomUUID(),p=performance.now(),m=[],c=n=>t?.onEvent?.(n);c({type:"saga_start",sagaId:r,ts:Date.now()});let P=Object.assign(async(n,O,f)=>{if(typeof n!="string"||n.length===0)throw new TypeError("step(name, operation, options?): first argument must be a string.");let i=await O();if(i.ok)return f?.compensate&&m.push({name:n,value:i.value,compensate:f.compensate}),i.value;throw Se(i.error,{origin:"result",resultCause:i.cause})},{try:async(n,O,f)=>{if(typeof n!="string"||n.length===0)throw new TypeError("step.try(name, operation, options): first argument must be a string.");let i="error"in f?()=>f.error:f.onError;try{let T=await O();return f.compensate&&m.push({name:n,value:T,compensate:f.compensate}),T}catch(T){let a=i(T);throw Se(a,{origin:"throw",thrown:T})}}});try{let n=await e({step:P});return c({type:"saga_success",sagaId:r,ts:Date.now(),durationMs:performance.now()-p}),G(n)}catch(n){let O=performance.now()-p,f=Te(n)?n.error:n;c({type:"saga_error",sagaId:r,ts:Date.now(),durationMs:O,error:f}),c({type:"saga_compensation_start",sagaId:r,ts:Date.now(),stepCount:m.length});let i=performance.now(),T=[];for(let a=m.length-1;a>=0;a--){let _=m[a];try{await _.compensate(_.value),c({type:"saga_compensation_step",sagaId:r,stepName:_.name,ts:Date.now(),success:!0})}catch(q){T.push({stepName:_.name,error:q}),c({type:"saga_compensation_step",sagaId:r,stepName:_.name,ts:Date.now(),success:!1,error:q})}}if(c({type:"saga_compensation_end",sagaId:r,ts:Date.now(),durationMs:performance.now()-i,success:T.length===0,failedCount:T.length}),T.length>0){let a={type:"SAGA_COMPENSATION_ERROR",originalError:f,compensationErrors:T};if(t?.onError?.(a),t?.throwOnCompensationFailure)throw a;return W(a)}return t?.onError?.(f),Te(n)?W(f):W(new Pe({cause:n}))}}function de(...e){let t={};for(let r of e)r.key!==void 0&&(t.key=r.key),r.retry!==void 0&&(t.retry=t.retry?{...t.retry,...r.retry}:{...r.retry}),r.timeout!==void 0&&(t.timeout=t.timeout?{...t.timeout,...r.timeout}:{...r.timeout});return t}function Vt(...e){let t=de(...e);return r=>de(t,r??{})}function $t(e,...t){return{name:e,policy:de(...t)}}function ye(e){return{retry:e}}var De={none:ye({attempts:1}),transient:ye({attempts:3,backoff:"exponential",initialDelay:100,maxDelay:1e3,jitter:!0}),standard:ye({attempts:3,backoff:"exponential",initialDelay:200,maxDelay:5e3,jitter:!0}),aggressive:ye({attempts:5,backoff:"exponential",initialDelay:500,maxDelay:3e4,jitter:!0}),fixed:(e,t)=>ye({attempts:e,backoff:"fixed",initialDelay:t,jitter:!1}),linear:(e,t)=>ye({attempts:e,backoff:"linear",initialDelay:t,jitter:!0}),custom:e=>ye({backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,...e})};function Ee(e){return{timeout:e}}var _e={none:{},fast:Ee({ms:1e3}),api:Ee({ms:5e3}),extended:Ee({ms:3e4}),long:Ee({ms:12e4}),ms:e=>Ee({ms:e}),seconds:e=>Ee({ms:e*1e3}),withError:(e,t)=>Ee({ms:e,error:t}),withSignal:e=>Ee({ms:e,signal:!0})},Ht={httpApi:de(_e.api,De.standard),database:de(_e.extended,ye({attempts:2,backoff:"exponential",initialDelay:100,maxDelay:2e3,jitter:!0})),cache:de(_e.fast,De.none),messageQueue:de(_e.extended,De.aggressive),fileSystem:de(_e.long,De.standard),rateLimited:de(Ee({ms:1e4}),ye({attempts:5,backoff:"linear",initialDelay:1e3,maxDelay:1e4,jitter:!0}))};function it(e,t){return de(e,t??{})}function qt(e,t){let r=t??{};return de(...e,r)}function zt(e,t,r={}){return e?t:r}function Jt(e,t=process.env.NODE_ENV??"development",r={}){return e[t]??r}function Yt(){let e=new Map;return{register(t,r){e.set(t,r)},get(t){return e.get(t)},has(t){return e.has(t)},names(){return Array.from(e.keys())},apply(t,r){let p=e.get(t);if(!p)throw new Error(`Policy not found: ${t}`);return it(p,r)}}}function Qt(){let e=[],t={key(r){return e.push({key:r}),t},policy(r){return e.push(r),t},timeout(r){return e.push(Ee({ms:r})),t},retry(r){return e.push(ye(r)),t},retries(r){return e.push(De.custom({attempts:r})),t},build(){return de(...e)}};return t}0&&(module.exports={CircuitOpenError,circuitBreakerPresets,conditionalPolicy,createCircuitBreaker,createCombinedLimiter,createConcurrencyLimiter,createCostBasedRateLimiter,createFixedWindowLimiter,createPolicyApplier,createPolicyBundle,createPolicyRegistry,createRateLimiter,createSagaWorkflow,envPolicy,isCircuitOpenError,isQueueFullError,isRateLimitExceededError,isSagaCompensationError,mergePolicies,rateLimiterPresets,retryPolicies,retryPolicy,runSaga,servicePolicies,stepOptions,timeoutPolicies,timeoutPolicy,withPolicies,withPolicy});
|
|
11
|
-
//# sourceMappingURL=reliability.cjs.map
|