awaitly 1.35.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 +29 -4
- package/dist/result.d.ts +29 -4
- 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-DGs0tySr.d.cts → types-B8NfNRGX.d.ts} +1078 -1502
- package/dist/{run-entry-BOuNyVoO.d.ts → types-BZ2f4MRR.d.cts} +1078 -1502
- 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 +3 -168
- 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-By77n4Fa.d.ts +0 -15
- package/dist/di-OJfsohf-.d.cts +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-4sV7mTqj.d.cts +0 -72
- package/dist/guards-BIX05ALH.d.ts +0 -72
- package/dist/hitl-DFn4Xa_l.d.cts +0 -468
- package/dist/hitl-DU5VpKq7.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-CnvBryQB.d.ts +0 -417
- package/dist/index-DEZEf8Fs.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-B-8PjnSR.d.cts +0 -831
- package/dist/persistence-entry-D8zRkLiT.d.ts +0 -831
- 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-BziYHFkD.d.ts +0 -323
- package/dist/types-C5jLEUqY.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/durable.cjs
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";var ze=Object.defineProperty;var Ft=Object.getOwnPropertyDescriptor;var Vt=Object.getOwnPropertyNames;var Lt=Object.prototype.hasOwnProperty;var Bt=(e,t)=>{for(var s in t)ze(e,s,{get:t[s],enumerable:!0})},$t=(e,t,s,u)=>{if(t&&typeof t=="object"||typeof t=="function")for(let E of Vt(t))!Lt.call(e,E)&&E!==s&&ze(e,E,{get:()=>t[E],enumerable:!(u=Ft(t,E))||u.enumerable});return e};var Ht=e=>$t(ze({},"__esModule",{value:!0}),e);var wr={};Bt(wr,{durable:()=>jt,isConcurrentExecution:()=>Ut,isIdempotencyConflict:()=>Kt,isLeaseExpired:()=>Nt,isPersistenceError:()=>Wt,isVersionMismatch:()=>Mt,isWorkflowCancelled:()=>ve});module.exports=Ht(wr);var qt={"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 lt(e){return`https://jagreehal.github.io/awaitly/rules/#${e}`}var kr=Object.keys(qt);var Ke=class extends Error{_tag};function ye(e,t){return class extends Ke{_tag=e;constructor(s,u){let E=t?.message?t.message(s??{}):e;if(super(E),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:lt(t.slug),enumerable:!0,writable:!1,configurable:!1})}if(Object.setPrototypeOf(this,new.target.prototype),s&&typeof s=="object"){let l;if(t?.slug!==void 0){let{_tag:K,name:U,message:L,stack:r,code:oe,hint:te,docsUrl:Te,...re}=s;l=re}else{let{_tag:K,name:U,message:L,stack:r,...oe}=s;l=oe}let k=Object.prototype.hasOwnProperty.call(l,"cause"),I=k?l.cause:void 0;k&&delete l.cause;let H=u?.cause!==void 0;if(k&&H)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,l),k&&(this.cause=I),H&&(this.cause=u?.cause)}else u?.cause!==void 0&&(this.cause=u.cause)}}}Object.defineProperty(ye,Symbol.hasInstance,{value:e=>e instanceof Ke});(E=>{function e(l){return l instanceof Error}E.isError=e;function t(l){return l instanceof Ke}E.isTaggedError=t;function s(l,k){let I=l._tag,H=k[I];return H(l)}E.match=s;function u(l,k,I){let H=l._tag,K=k[H];return K?K(l):I(l)}E.matchPartial=u})(ye||={});var ct=class extends ye("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 ye("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`}){},dt=class extends ye("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`:""}`}){},mt=class extends ye("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`:""}`}){},Et=class extends ye("ValidationError",{message:t=>`ValidationError: Invalid ${t.field} - ${t.reason}`}){},ft=class extends ye("NotFoundError",{message:t=>t.id?`NotFoundError: ${t.resource} with id ${t.id} not found`:`NotFoundError: ${t.resource} not found`}){},wt=class extends ye("UnauthorizedError",{message:t=>t.reason?`UnauthorizedError: ${t.reason}`:t.action&&t.resource?`UnauthorizedError: Not authorized to ${t.action} ${t.resource}`:"UnauthorizedError: Access denied"}){},yt=class extends ye("NetworkError",{message:t=>t.url?`NetworkError: ${t.reason} (${t.url})`:`NetworkError: ${t.reason}`}){},kt=class extends ye("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}`}){},je=class extends ye("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 gt(e){return{ok:!0,value:e}}var Jt=e=>typeof e=="object"&&e!==null&&"ok"in e&&typeof e.ok=="boolean"&&(e.ok?"value"in e:"error"in e),Fe=(e,t)=>{let s={},u=new Map;for(let E of Object.keys(e)){let l=e[E];typeof l=="function"&&(s[E]=(...k)=>{let I=(u.get(E)??0)+1;u.set(E,I);let H=I===1?E:`${E}#${I}`;return t(H,async()=>{let K=await l(...k);return Jt(K)?K:gt(K)})})}return s};function zt(e){let t=e.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!t)return;let s=parseFloat(t[1]),u=t[2].toLowerCase();return{_tag:"Duration",millis:s*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[u]??1)}}function He(e){return new je({cause:e})}function ee(e){return{ok:!0,value:e}}function v(e,t){let s=t?.cause;return{ok:!1,error:e,...s!==void 0?{cause:s}:{}}}var ht=e=>e instanceof je||typeof e=="object"&&e!==null&&"_tag"in e&&e._tag==="UnexpectedError";function Yt(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 s=t._tag.trim();if(s)return s}if(typeof t.tag=="string"){let s=t.tag.trim();if(s)return s}if(typeof t.code=="string"){let s=t.code.trim();if(s)return s}else if(typeof t.code=="number")return String(t.code);if(e instanceof Error&&e.name){let s=e.name.trim();if(s)return s}}return"unknown"}function Gt(e,t){if(!(!t||!e))return t[e]}function Xe(e){let{intent:t,domain:s,owner:u,tags:E,stateChanges:l,emits:k,calls:I}=e;if(!t&&!s&&!u&&!E?.length&&!l?.length&&!k?.length&&!I?.length)return;let H={};return t&&(H.intent=t),s&&(H.domain=s),u&&(H.owner=u),E?.length&&(H.tags=E),l?.length&&(H.stateChanges=l),k?.length&&(H.emits=k),I?.length&&(H.calls=I),H}function Re(e,t,s,u,E){let l=Yt(e),k=Gt(l,t),I={tag:l,origin:s};return k!==void 0&&(I.classification=k),u!==void 0&&(I.attempt=u),E!==void 0&&(I.cumulativeDurationMs=E),I}var De=Symbol.for("step_timeout_marker");function Tt(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:De in e}function Xt(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(De in e)return e[De]}}var St=Symbol("early-exit");function _e(e,t){return{[St]:!0,error:e,meta:t}}function be(e){return typeof e=="object"&&e!==null&&e[St]===!0}var Ct=Symbol("mapper-exception");function Pe(e){return{[Ct]:!0,thrown:e}}function Zt(e){return typeof e=="object"&&e!==null&&e[Ct]===!0}function Ye(e,t){let{backoff:s,initialDelay:u,maxDelay:E,jitter:l}=t,k;switch(s){case"fixed":k=u;break;case"linear":k=u*e;break;case"exponential":k=u*Math.pow(2,e-1);break}if(k=Math.min(k,E),l){let I=k*.25*Math.random();k=k+I}return Math.floor(k)}function Ge(e){return new Promise(t=>setTimeout(t,e))}var Rt=Symbol("timeout"),$e=Symbol("timeout-option");function Qt(e){return typeof e=="object"&&e!==null&&e[$e]===!0}async function er(e,t,s,u){let E=new AbortController,l=t.onTimeout??"error",k=()=>typeof l=="function"?l({name:s.name,key:s.key,ms:t.ms}):t.error??{type:"STEP_TIMEOUT",stepName:s.name,stepKey:s.key,timeoutMs:t.ms,attempt:s.attempt},I;u?.aborted&&E.abort(u.reason);let H;u&&!u.aborted&&(H=()=>E.abort(u.reason),u.addEventListener("abort",H,{once:!0}));let K=new Promise((L,r)=>{I=setTimeout(()=>{if(l!=="disconnect"&&E.abort(),l==="option"){r({[$e]:!0,ms:t.ms});return}r({[Rt]:!0,error:k()})},t.ms)}),U;t.signal?U=Promise.resolve(e(E.signal)):U=Promise.resolve(e());try{return await Promise.race([U,K])}catch(L){if(typeof L=="object"&&L!==null&&L[$e]===!0)throw{[$e]:!0,ms:t.ms};if(typeof L=="object"&&L!==null&&L[Rt]===!0){l==="disconnect"&&U.catch(()=>{});let r=L.error;if(typeof r=="object"&&r!==null&&r.type!=="STEP_TIMEOUT"){let oe={timeoutMs:t.ms,stepName:s.name,stepKey:s.key,attempt:s.attempt};De in r?r[De]=oe:Object.defineProperty(r,De,{value:oe,enumerable:!1,writable:!0,configurable:!1})}throw r}throw L}finally{clearTimeout(I),H&&u&&u.removeEventListener("abort",H)}}var Oe={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,shouldRetry:()=>!0,onRetry:()=>{}};async function Ve(e,t,s){if(typeof e!="function"){let m=e,X=t;if(typeof X!="function")throw new TypeError("[awaitly] run(deps, fn) requires a callback as the second argument. Example: run({ getUser }, async (s) => s.getUser(id))");return Ve(({step:ce})=>X(Fe(m,ce),{step:ce}),s)}let u=e,E=t,{onError:l,onEvent:k,catchUnexpected:I,workflowId:H,workflowName:K,context:U,_workflowSignal:L}=E&&typeof E=="object"?E:{},r=H??crypto.randomUUID(),oe=I??He,te=[],Te=0,re=m=>m??`step_${++Te}`,p=m=>{let X=m.context!==void 0||U===void 0?m:{...m,context:U},se=K!==void 0&&X.workflowName===void 0?{...X,workflowName:K}:X;if(se.type==="step_success"){let ce=se.stepId;for(let ke=te.length-1;ke>=0;ke--){let W=te[ke];if(W.type==="race"&&!W.winnerId){W.winnerId=ce;break}}}k?.(se,U)},z=_e,ie=m=>be(m),le=(m,X)=>m,we=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 X=function(n){let w={};for(let[i,c]of Object.entries(n))if(typeof c=="function")w[i]=c;else if(c&&typeof c=="object"&&"fn"in c)w[i]=c.fn;else throw new TypeError(`step.all: operation "${i}" must be a function or { fn, errors? } object`);return w},se=function(n,w){let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let c=performance.now(),o=!1;te.push({scopeId:i,type:"parallel"});let a=()=>{if(o)return;o=!0;let g=te.findIndex(x=>x.scopeId===i);g!==-1&&te.splice(g,1),p({type:"scope_end",workflowId:r,scopeId:i,ts:Date.now(),durationMs:performance.now()-c})};p({type:"scope_start",workflowId:r,scopeId:i,scopeType:"parallel",name:n,ts:Date.now()});try{let g=await w();if(a(),!g.ok)throw l?.(g.error,n,U),z(g.error,{origin:"result",resultCause:g.cause});return g.value}catch(g){throw a(),g}})()},ce=function(n,w){let i=Object.keys(n),c=w.name??`Parallel(${i.join(", ")})`,o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let a=performance.now(),g=!1;te.push({scopeId:o,type:"parallel"});let x=()=>{if(g)return;g=!0;let C=te.findIndex(b=>b.scopeId===o);C!==-1&&te.splice(C,1),p({type:"scope_end",workflowId:r,scopeId:o,ts:Date.now(),durationMs:performance.now()-a})};p({type:"scope_start",workflowId:r,scopeId:o,scopeType:"parallel",name:c,ts:Date.now()});try{let C=await new Promise(D=>{if(i.length===0){D([]);return}let V=!1,Z=i.length,j=new Array(i.length);for(let q=0;q<i.length;q++){let F=i[q],$=q;Promise.resolve(n[F]()).catch(A=>v({type:"PROMISE_REJECTED",cause:A},{cause:{type:"PROMISE_REJECTION",reason:A}})).then(A=>{if(!V){if(!A.ok){V=!0,D([{key:F,result:A}]);return}j[$]={key:F,result:A},Z--,Z===0&&D(j)}})}});x();let b={};for(let{key:D,result:V}of C){if(!V.ok)throw l?.(V.error,D,U),z(V.error,{origin:"result",resultCause:V.cause});b[D]=V.value}return b}catch(C){throw x(),C}})()};var fe=X,xe=se,de=ce;let m=(n,w,i)=>(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 c=i??{},o=Xe(c),a=n,g=c.key??n,x=c.key??n,{description:C,retry:b,timeout:D}=c,V=re(g),Z=k,j=Z?performance.now():0,F=we(w)?()=>w:w,A={attempts:Math.max(1,b?.attempts??1),backoff:b?.backoff??Oe.backoff,initialDelay:b?.initialDelay??Oe.initialDelay,maxDelay:b?.maxDelay??Oe.maxDelay,jitter:b?.jitter??Oe.jitter,shouldRetry:b?.shouldRetry??Oe.shouldRetry,onRetry:b?.onRetry??Oe.onRetry};k&&p({type:"step_start",workflowId:r,stepId:V,stepKey:g,name:a,description:C,ts:Date.now(),...o&&{metadata:o}});let ge;for(let S=1;S<=A.attempts;S++){let R=Z?performance.now():0;try{let d;if(D?d=await er(F,D,{name:a,key:g,attempt:S},L):d=await F(),d.ok){let h=performance.now()-j;return p({type:"step_success",workflowId:r,stepId:V,stepKey:g,name:a,description:C,ts:Date.now(),durationMs:h,...o&&{metadata:o}}),x&&p({type:"step_complete",workflowId:r,stepKey:x,name:a,description:C,ts:Date.now(),durationMs:h,result:d,...o&&{metadata:o}}),d.value}if(ge=d,S<A.attempts&&A.shouldRetry(d.error,S)){let h=Ye(S,A);p({type:"step_retry",workflowId:r,stepId:V,stepKey:g,name:a,ts:Date.now(),attempt:S+1,maxAttempts:A.attempts,delayMs:h,error:d.error,...o&&{metadata:o},diagnostics:Re(d.error,c.errorMeta,"result",S,performance.now()-j)}),A.onRetry(d.error,S,h),await Ge(h);continue}A.attempts>1&&p({type:"step_retries_exhausted",workflowId:r,stepId:V,stepKey:g,name:a,ts:Date.now(),durationMs:performance.now()-j,attempts:S,lastError:d.error,...o&&{metadata:o},diagnostics:Re(d.error,c.errorMeta,"result",S,performance.now()-j)});break}catch(d){let h=performance.now()-R;if(Qt(d)){let _=d.ms;p({type:"step_timeout",workflowId:r,stepId:V,stepKey:g,name:a,ts:Date.now(),timeoutMs:_,attempt:S,...o&&{metadata:o},diagnostics:Re(d,c.errorMeta,"timeout",S)}),p({type:"step_success",workflowId:r,stepId:V,stepKey:g,name:a,description:C,ts:Date.now(),durationMs:performance.now()-j,...o&&{metadata:o}}),x&&p({type:"step_complete",workflowId:r,stepKey:x,name:a,description:C,ts:Date.now(),durationMs:performance.now()-j,result:ee(void 0),...o&&{metadata:o}});return}if(ie(d))throw p({type:"step_aborted",workflowId:r,stepId:V,stepKey:g,name:a,description:C,ts:Date.now(),durationMs:h,...o&&{metadata:o}}),d;if(Tt(d)){let _=Xt(d),T=D?.ms??_?.timeoutMs??0;if(p({type:"step_timeout",workflowId:r,stepId:V,stepKey:g,name:a,ts:Date.now(),timeoutMs:T,attempt:S,...o&&{metadata:o},diagnostics:Re(d,c.errorMeta,"timeout",S)}),S<A.attempts&&A.shouldRetry(d,S)){let Y=Ye(S,A);p({type:"step_retry",workflowId:r,stepId:V,stepKey:g,name:a,ts:Date.now(),attempt:S+1,maxAttempts:A.attempts,delayMs:Y,error:d,...o&&{metadata:o},diagnostics:Re(d,c.errorMeta,"timeout",S,performance.now()-j)}),A.onRetry(d,S,Y),await Ge(Y);continue}A.attempts>1&&p({type:"step_retries_exhausted",workflowId:r,stepId:V,stepKey:g,name:a,ts:Date.now(),durationMs:performance.now()-j,attempts:S,lastError:d,...o&&{metadata:o},diagnostics:Re(d,c.errorMeta,"timeout",S,performance.now()-j)});let N=performance.now()-j;throw p({type:"step_error",workflowId:r,stepId:V,stepKey:g,name:a,description:C,ts:Date.now(),durationMs:N,error:d,...o&&{metadata:o},diagnostics:Re(d,c.errorMeta,"timeout",S,N)}),x&&p({type:"step_complete",workflowId:r,stepKey:x,name:a,description:C,ts:Date.now(),durationMs:N,result:v(d,{cause:d}),meta:{origin:"throw",thrown:d},...o&&{metadata:o}}),l?.(d,a,U),z(d,{origin:"throw",thrown:d})}if(S<A.attempts&&A.shouldRetry(d,S)){let _=Ye(S,A);p({type:"step_retry",workflowId:r,stepId:V,stepKey:g,name:a,ts:Date.now(),attempt:S+1,maxAttempts:A.attempts,delayMs:_,error:d,...o&&{metadata:o},diagnostics:Re(d,c.errorMeta,"throw",S,performance.now()-j)}),A.onRetry(d,S,_),await Ge(_);continue}A.attempts>1&&!Tt(d)&&p({type:"step_retries_exhausted",workflowId:r,stepId:V,stepKey:g,name:a,ts:Date.now(),durationMs:performance.now()-j,attempts:S,lastError:d,...o&&{metadata:o},diagnostics:Re(d,c.errorMeta,"throw",S,performance.now()-j)});let O=performance.now()-j,P;try{P=oe(d)}catch(_){throw Pe(_)}throw p({type:"step_error",workflowId:r,stepId:V,stepKey:g,name:a,description:C,ts:Date.now(),durationMs:O,error:P,...o&&{metadata:o},diagnostics:Re(d,c.errorMeta,"throw",S,O)}),x&&p({type:"step_complete",workflowId:r,stepKey:x,name:a,description:C,ts:Date.now(),durationMs:O,result:v(P,{cause:d}),meta:{origin:"throw",thrown:d},...o&&{metadata:o}}),l?.(P,a,U),z(P,{origin:"throw",thrown:d})}}let f=ge,y=performance.now()-j,J=le(f.error,{origin:"result",resultCause:f.cause});throw p({type:"step_error",workflowId:r,stepId:V,stepKey:g,name:a,description:C,ts:Date.now(),durationMs:y,error:J,...o&&{metadata:o},diagnostics:Re(f.error,c.errorMeta,"result",A.attempts,y)}),x&&p({type:"step_complete",workflowId:r,stepKey:x,name:a,description:C,ts:Date.now(),durationMs:y,result:f,meta:{origin:"result",resultCause:f.cause},...o&&{metadata:o}}),l?.(J,a,U),z(J,{origin:"result",resultCause:f.cause})})();m.try=(n,w,i)=>{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 c="error"in i?()=>i.error:i.onError;if(i.retry||i.timeout)return m.retry(n,async()=>{try{return ee(await w())}catch(C){return v(c(C),{cause:C})}},{attempts:i.retry?.attempts??1,...i.retry??{},key:i.key,timeout:i.timeout});let o=i.key??n,a=n,g=n,x=k;return(async()=>{let C=x?performance.now():0;k&&p({type:"step_start",workflowId:r,stepId:g,stepKey:o,name:a,ts:Date.now()});try{let b=await w(),D=performance.now()-C;return p({type:"step_success",workflowId:r,stepId:g,stepKey:o,name:a,ts:Date.now(),durationMs:D}),o&&p({type:"step_complete",workflowId:r,stepKey:o,name:a,ts:Date.now(),durationMs:D,result:ee(b)}),b}catch(b){let D=c(b),V=performance.now()-C,Z=le(D,{origin:"throw",thrown:b});throw p({type:"step_error",workflowId:r,stepId:g,stepKey:o,name:a,ts:Date.now(),durationMs:V,error:Z}),o&&p({type:"step_complete",workflowId:r,stepKey:o,name:a,ts:Date.now(),durationMs:V,result:v(D,{cause:b}),meta:{origin:"throw",thrown:b}}),l?.(Z,a,U),z(Z,{origin:"throw",thrown:b})}})()},m.fromResult=(n,w,i)=>{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 c=i.key??n,o=n,a=n,g="error"in i?()=>i.error:i.onError,x=k;return(async()=>{let C=x?performance.now():0;k&&p({type:"step_start",workflowId:r,stepId:a,stepKey:c,name:o,ts:Date.now()});let b=await w();if(b.ok){let D=performance.now()-C;return p({type:"step_success",workflowId:r,stepId:a,stepKey:c,name:o,ts:Date.now(),durationMs:D}),c&&p({type:"step_complete",workflowId:r,stepKey:c,name:o,ts:Date.now(),durationMs:D,result:ee(b.value)}),b.value}else{let D=g(b.error),V=performance.now()-C,Z=le(D,{origin:"result",resultCause:b.error});throw p({type:"step_error",workflowId:r,stepId:a,stepKey:c,name:o,ts:Date.now(),durationMs:V,error:Z}),c&&p({type:"step_complete",workflowId:r,stepKey:c,name:o,ts:Date.now(),durationMs:V,result:v(D,{cause:b.error}),meta:{origin:"result",resultCause:b.error}}),l?.(Z,o,U),z(Z,{origin:"result",resultCause:b.error})}})()},m.fromNullable=(n,w,i,c)=>{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 o=await w();return o!=null?ee(o):v(i())},c)},m.retry=(n,w,i)=>{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,w,{key:i.key??n,retry:{attempts:i.attempts,backoff:i.backoff,initialDelay:i.initialDelay,maxDelay:i.maxDelay,jitter:i.jitter,shouldRetry:i.shouldRetry,onRetry:i.onRetry},timeout:i.timeout})},m.withTimeout=(n,w,i)=>{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,w,{key:i.key??n,timeout:i})},m.sleep=(n,w,i)=>{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 c=typeof w=="string"?zt(w):w;if(!c)throw new Error(`step.sleep: invalid duration '${w}'`);let o=c.millis,a=i?.signal;return m(n,async()=>{if(L?.aborted||a?.aborted){let g=new Error("Sleep aborted");throw g.name="AbortError",g}return new Promise((g,x)=>{let C={timeoutId:void 0},b=()=>{C.timeoutId&&clearTimeout(C.timeoutId);let D=new Error("Sleep aborted");D.name="AbortError",x(D)};L?.addEventListener("abort",b,{once:!0}),a?.addEventListener("abort",b,{once:!0}),C.timeoutId=setTimeout(()=>{L?.removeEventListener("abort",b),a?.removeEventListener("abort",b),g(ee(void 0))},o)})},{key:i?.key??n,description:i?.description})},m.all=((...n)=>{if(typeof n[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 w=n[0],i=n[1];if(typeof i=="function")return se(w,i);if(i&&typeof i=="object"&&!Array.isArray(i)){let o=X(i);return ce(o,{name:w})}throw new TypeError("step.all(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),m.race=(n,w)=>{let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let c=performance.now(),o=!1,a={scopeId:i,type:"race",winnerId:void 0};te.push(a);let g=()=>{if(o)return;o=!0;let x=te.findIndex(C=>C.scopeId===i);x!==-1&&te.splice(x,1),p({type:"scope_end",workflowId:r,scopeId:i,ts:Date.now(),durationMs:performance.now()-c,winnerId:a.winnerId})};p({type:"scope_start",workflowId:r,scopeId:i,scopeType:"race",name:n,ts:Date.now()});try{let x=await w();if(g(),!x.ok)throw l?.(x.error,n,U),z(x.error,{origin:"result",resultCause:x.cause});return x.value}catch(x){throw g(),x}})()},m.if=(n,w,i)=>i(),m.label=m.if,m.branch=async(n,w)=>{let{condition:i,then:c,else:o}=w;if(i())return await c();if(o)return await o()},m.arm=(n,w)=>({fn:n,errors:w}),m.forEach=async(n,w,i)=>{let c=[],o=i.maxIterations,a=0,g="run"in i,x=Symbol.asyncIterator in w?w:(async function*(){yield*w})();for await(let C of x){if(o!==void 0&&a>=o)break;let b;g?b=await i.run(C,a):b=await i.item.handler(C,a,m),c.push(b),a++}return c},m.item=n=>({__forEachItemHandler:!0,handler:n}),m.dep=(n,w)=>w,m.workflow=(n,w,i)=>m(n,w,i),m.map=async(n,w,i,c)=>{let o=c?.concurrency??w.length;return m(n,()=>o>=w.length?xt(w.map((a,g)=>i(a,g))):(async()=>{let a=[];for(let g=0;g<w.length;g+=o){let x=w.slice(g,g+o),C=await xt(x.map((b,D)=>i(b,g+D)));if(!C.ok)return C;a.push(...C.value)}return ee(a)})(),{key:c?.key})},m.withFallback=(n,w,i)=>{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 c=i.key??n,o=n,a=re(c),g=k;return(async()=>{let x=g?performance.now():0;k&&p({type:"step_start",workflowId:r,stepId:a,stepKey:c,name:o,ts:Date.now()});let C;try{C=await w()}catch(j){if(ie(j))throw p({type:"step_aborted",workflowId:r,stepId:a,stepKey:c,name:o,ts:Date.now(),durationMs:performance.now()-x}),j;let q;try{q=oe(j)}catch($){throw Pe($)}if(i.on!==void 0&&i.on!==q){let $=performance.now()-x;throw p({type:"step_error",workflowId:r,stepId:a,stepKey:c,name:o,ts:Date.now(),durationMs:$,error:q}),c&&p({type:"step_complete",workflowId:r,stepKey:c,name:o,ts:Date.now(),durationMs:$,result:v(q,{cause:j}),meta:{origin:"throw",thrown:j}}),l?.(q,o,U),z(q,{origin:"throw",thrown:j})}let F;try{F=await i.fallback()}catch($){if(ie($))throw p({type:"step_aborted",workflowId:r,stepId:a,stepKey:c,name:o,ts:Date.now(),durationMs:performance.now()-x}),$;let A;try{A=oe($)}catch(f){throw Pe(f)}let ge=performance.now()-x;throw p({type:"step_error",workflowId:r,stepId:a,stepKey:c,name:o,ts:Date.now(),durationMs:ge,error:A}),c&&p({type:"step_complete",workflowId:r,stepKey:c,name:o,ts:Date.now(),durationMs:ge,result:v(A,{cause:$}),meta:{origin:"throw",thrown:$}}),l?.(A,o,U),z(A,{origin:"throw",thrown:$})}if(F.ok){let $=performance.now()-x;return p({type:"step_success",workflowId:r,stepId:a,stepKey:c,name:o,ts:Date.now(),durationMs:$}),c&&p({type:"step_complete",workflowId:r,stepKey:c,name:o,ts:Date.now(),durationMs:$,result:F,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(q)}}),F.value}else{let $=performance.now()-x,A=le(F.error,{origin:"result",resultCause:F.cause});throw p({type:"step_error",workflowId:r,stepId:a,stepKey:c,name:o,ts:Date.now(),durationMs:$,error:A}),c&&p({type:"step_complete",workflowId:r,stepKey:c,name:o,ts:Date.now(),durationMs:$,result:F,meta:{origin:"result",resultCause:F.cause}}),l?.(A,o,U),z(A,{origin:"result",resultCause:F.cause})}}if(C.ok){let j=performance.now()-x;return p({type:"step_success",workflowId:r,stepId:a,stepKey:c,name:o,ts:Date.now(),durationMs:j}),c&&p({type:"step_complete",workflowId:r,stepKey:c,name:o,ts:Date.now(),durationMs:j,result:C}),C.value}let b=C.error;if(i.on!==void 0&&i.on!==b){let j=performance.now()-x,q=le(b,{origin:"result",resultCause:C.cause});throw p({type:"step_error",workflowId:r,stepId:a,stepKey:c,name:o,ts:Date.now(),durationMs:j,error:q}),c&&p({type:"step_complete",workflowId:r,stepKey:c,name:o,ts:Date.now(),durationMs:j,result:C,meta:{origin:"result",resultCause:C.cause}}),l?.(q,o,U),z(q,{origin:"result",resultCause:C.cause})}let D;try{D=await i.fallback()}catch(j){if(ie(j))throw p({type:"step_aborted",workflowId:r,stepId:a,stepKey:c,name:o,ts:Date.now(),durationMs:performance.now()-x}),j;let q;try{q=oe(j)}catch($){throw Pe($)}let F=performance.now()-x;throw p({type:"step_error",workflowId:r,stepId:a,stepKey:c,name:o,ts:Date.now(),durationMs:F,error:q}),c&&p({type:"step_complete",workflowId:r,stepKey:c,name:o,ts:Date.now(),durationMs:F,result:v(q,{cause:j}),meta:{origin:"throw",thrown:j}}),l?.(q,o,U),z(q,{origin:"throw",thrown:j})}if(D.ok){let j=performance.now()-x;return p({type:"step_success",workflowId:r,stepId:a,stepKey:c,name:o,ts:Date.now(),durationMs:j}),c&&p({type:"step_complete",workflowId:r,stepKey:c,name:o,ts:Date.now(),durationMs:j,result:D,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(b)}}),D.value}let V=performance.now()-x,Z=le(D.error,{origin:"result",resultCause:D.cause});throw p({type:"step_error",workflowId:r,stepId:a,stepKey:c,name:o,ts:Date.now(),durationMs:V,error:Z}),c&&p({type:"step_complete",workflowId:r,stepKey:c,name:o,ts:Date.now(),durationMs:V,result:D,meta:{origin:"result",resultCause:D.cause}}),l?.(Z,o,U),z(Z,{origin:"result",resultCause:D.cause})})()},m.withResource=(n,w)=>{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 i=n,c=n,o=re(i),a=k;return(async()=>{let g=a?performance.now():0;k&&p({type:"step_start",workflowId:r,stepId:o,stepKey:i,name:c,ts:Date.now()});let x;try{x=await w.acquire()}catch(F){if(ie(F))throw p({type:"step_aborted",workflowId:r,stepId:o,stepKey:i,name:c,ts:Date.now(),durationMs:performance.now()-g}),F;let $;try{$=oe(F)}catch(ge){throw Pe(ge)}let A=performance.now()-g;throw p({type:"step_error",workflowId:r,stepId:o,stepKey:i,name:c,ts:Date.now(),durationMs:A,error:$}),i&&p({type:"step_complete",workflowId:r,stepKey:i,name:c,ts:Date.now(),durationMs:A,result:v($,{cause:F}),meta:{origin:"throw",thrown:F}}),l?.($,c,U),z($,{origin:"throw",thrown:F})}if(!x.ok){let F=performance.now()-g,$=le(x.error,{origin:"result",resultCause:x.cause});throw p({type:"step_error",workflowId:r,stepId:o,stepKey:i,name:c,ts:Date.now(),durationMs:F,error:$}),i&&p({type:"step_complete",workflowId:r,stepKey:i,name:c,ts:Date.now(),durationMs:F,result:x,meta:{origin:"result",resultCause:x.cause}}),l?.($,c,U),z($,{origin:"result",resultCause:x.cause})}let C=x.value,b,D,V=!1;try{b=await w.use(C)}catch(F){if(ie(F)){try{await w.release(C)}catch($){console.warn(`[awaitly] step.withResource("${n}"): release threw after earlyExit:`,$)}throw F}D=F,V=!0}try{await w.release(C)}catch(F){console.warn(`[awaitly] step.withResource("${n}"): release threw:`,F)}if(V){let F;try{F=oe(D)}catch(A){throw Pe(A)}let $=performance.now()-g;throw p({type:"step_error",workflowId:r,stepId:o,stepKey:i,name:c,ts:Date.now(),durationMs:$,error:F}),i&&p({type:"step_complete",workflowId:r,stepKey:i,name:c,ts:Date.now(),durationMs:$,result:v(F,{cause:D}),meta:{origin:"throw",thrown:D}}),l?.(F,c,U),z(F,{origin:"throw",thrown:D})}let Z=b;if(Z.ok){let F=performance.now()-g;return p({type:"step_success",workflowId:r,stepId:o,stepKey:i,name:c,ts:Date.now(),durationMs:F}),i&&p({type:"step_complete",workflowId:r,stepKey:i,name:c,ts:Date.now(),durationMs:F,result:Z}),Z.value}let j=performance.now()-g,q=le(Z.error,{origin:"result",resultCause:Z.cause});throw p({type:"step_error",workflowId:r,stepId:o,stepKey:i,name:c,ts:Date.now(),durationMs:j,error:q}),i&&p({type:"step_complete",workflowId:r,stepKey:i,name:c,ts:Date.now(),durationMs:j,result:Z,meta:{origin:"result",resultCause:Z.cause}}),l?.(q,c,U),z(q,{origin:"result",resultCause:Z.cause})})()};let W=await u({step:m});if(process.env.NODE_ENV!=="production"&&W!==null&&typeof W=="object"&&"ok"in W&&typeof W.ok=="boolean"){let n=W;(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().
|
|
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 ee(W)}catch(m){if(Zt(m))throw m.thrown;if(ie(m)){let se=m.meta.origin==="throw"?m.meta.thrown:m.meta.origin==="result"?m.meta.resultCause:void 0;return v(m.error,{cause:se})}let X=oe(m);return l?.(X,"unexpected",U),v(X,{cause:m})}}Ve.strict=(e,t)=>Ve(e,t);async function xt(e){return e.length===0?ee([]):new Promise(t=>{let s=!1,u=e.length,E=new Array(e.length);for(let l=0;l<e.length;l++){let k=l;Promise.resolve(e[k]).catch(I=>v({type:"PROMISE_REJECTED",cause:I},{cause:{type:"PROMISE_REJECTION",reason:I}})).then(I=>{if(!s){if(!I.ok){s=!0,t(I);return}E[k]=I.value,u--,u===0&&t(ee(E))}})}})}function Ze(e){return e.type==="step_complete"}function ve(e){return typeof e=="object"&&e!==null&&e.type==="WORKFLOW_CANCELLED"}var Ae=class extends Error{constructor(s,u=[]){super(s);this.errors=u;this.name="SnapshotFormatError"}errors};var Ie=class extends Error{constructor(s,u,E){super(s);this.stepId=u;this.originalError=E;this.name="SnapshotDecodeError"}stepId;originalError};function tr(e){let t=[];if(typeof e!="object"||e===null)return{valid:!1,errors:["Snapshot must be an object"]};let s=e;if("formatVersion"in s?s.formatVersion!==1&&t.push(`Invalid formatVersion: expected 1, got ${s.formatVersion}`):t.push("Missing required field: formatVersion"),!("steps"in s))t.push("Missing required field: steps");else if(typeof s.steps!="object"||s.steps===null)t.push("steps must be an object");else{let u=s.steps;for(let[E,l]of Object.entries(u)){if(typeof l!="object"||l===null){t.push(`steps["${E}"] must be an object`);continue}let k=l;"ok"in k?typeof k.ok!="boolean"?t.push(`steps["${E}"].ok must be a boolean`):k.ok===!1&&("error"in k||t.push(`steps["${E}"] is error result but missing error field`),"cause"in k||t.push(`steps["${E}"] is error result but missing cause field`)):t.push(`steps["${E}"] missing required field: ok`)}}if(!("execution"in s))t.push("Missing required field: execution");else if(typeof s.execution!="object"||s.execution===null)t.push("execution must be an object");else{let u=s.execution;"status"in u?["running","completed","failed"].includes(u.status)||t.push("execution.status must be one of: running, completed, failed"):t.push("execution missing required field: status"),"lastUpdated"in u?typeof u.lastUpdated!="string"&&t.push("execution.lastUpdated must be a string (ISO timestamp)"):t.push("execution missing required field: lastUpdated")}return t.length>0?{valid:!1,errors:t}:{valid:!0,snapshot:e}}function vt(e){let t=tr(e);if(!t.valid)throw new Ae(`Invalid snapshot format: ${t.errors[0]}`,t.errors);return t.snapshot}function At(e,t){let s=Object.create(null);for(let[k,I]of Object.entries(e.steps))Object.prototype.hasOwnProperty.call(e.steps,k)&&(s[k]=I);for(let[k,I]of Object.entries(t.steps))Object.prototype.hasOwnProperty.call(t.steps,k)&&(s[k]=I);let u=e.metadata||t.metadata?{...e.metadata,...t.metadata}:void 0,l=[...(e.warnings||[]).filter(k=>!Object.prototype.hasOwnProperty.call(t.steps,k.stepId)),...t.warnings||[]];return{formatVersion:1,steps:s,execution:{...t.execution},metadata:u,warnings:l.length>0?l:void 0}}var bt=1e3;function Qe(e){let t={type:"error",name:e.name,message:e.message};e.stack&&(t.stack=e.stack);let s=e;return s.cause!==void 0&&(s.cause instanceof Error?t.cause=Qe(s.cause):t.cause=et(s.cause)),t}function et(e){let t,s=!1;try{t=String(e),t.length>bt&&(t=t.slice(0,bt),s=!0)}catch{t="[unable to convert to string]"}let u=e===null?"null":typeof e=="object"?e.constructor?.name??"Object":typeof e,E;try{let k=JSON.stringify(e);k!==void 0&&(E=JSON.parse(k))}catch{}let l={type:"thrown",originalType:u,stringRepresentation:t};return E!==void 0&&(l.value=E),s&&(l.truncated=!0),l}function tt(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=tt(e.cause)),t}return e.value!==void 0?e.value:e.stringRepresentation}function rr(e){return typeof e=="object"&&e!==null&&e.__cachedMeta===!0}function Ce(e,t,s){return v(e,{cause:{__cachedMeta:!0,originalCause:s,meta:t}})}function Le(e){return rr(e)?e.meta:{origin:"result",resultCause:e}}function Be(){let e=new Map;return{handleEvent:t=>{Ze(t)&&e.set(t.stepKey,{result:t.result,meta:t.meta})},getResumeState:()=>({steps:new Map(e)}),clear:()=>e.clear()}}var sr="STREAM_WRITE_ERROR",ar="STREAM_READ_ERROR",ir="STREAM_CLOSE_ERROR";var ur="STREAM_ENDED";function qe(e,t,s){return{type:sr,reason:e,message:t,...s!==void 0?{cause:s}:{}}}function rt(e,t,s){return{type:ar,reason:e,message:t,...s!==void 0?{cause:s}:{}}}function nt(e,t,s){return{type:ir,reason:e,message:t,...s!==void 0?{cause:s}:{}}}function Je(e){return{type:ur,finalPosition:e}}function Pt(e={}){let t=e.highWaterMark??16,s=e.lowWaterMark??Math.floor(t/2),u=e.onStateChange,E="flowing",l=0,k=[];function I(K){if(E!==K&&(E=K,u?.(K),K==="flowing"&&k.length>0)){let U=k;k=[];for(let L of U)L()}}function H(){E==="flowing"&&l>=t?I("paused"):E==="paused"&&l<=s&&I("flowing")}return{get state(){return E},get bufferedCount(){return l},get highWaterMark(){return t},get lowWaterMark(){return s},increment(){l++,H()},decrement(){l>0&&(l--,H())},setCount(K){l=Math.max(0,K),H()},waitForDrain(){return E==="flowing"?Promise.resolve():new Promise(K=>{k.push(K)})},reset(){l=0,k=[],I("flowing")}}}function lr(e){return{_tag:"Duration",millis:e}}function cr(e){return{_tag:"Duration",millis:e*1e3}}function pr(e){return{_tag:"Duration",millis:e*60*1e3}}function dr(e){return{_tag:"Duration",millis:e*60*60*1e3}}function mr(e){return{_tag:"Duration",millis:e*24*60*60*1e3}}function Ot(e){return e.millis}function Dt(e){let t=e.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!t)return;let s=parseFloat(t[1]);switch(t[2].toLowerCase()){case"ms":return lr(s);case"s":return cr(s);case"m":return pr(s);case"h":return dr(s);case"d":return mr(s);default:return}}async function _t(e,t){let s=e["~standard"].validate(t),u=s instanceof Promise?await s:s;return u.issues?v({type:"INPUT_VALIDATION_ERROR",issues:u.issues.map(E=>({message:E.message,path:E.path?.map(l=>typeof l=="object"?l.key:l)})),message:`Input validation failed: ${u.issues.map(E=>E.message).join(", ")}`}):ee(u.value)}function ot(e,t){let s=u=>((...E)=>{let l=E.at(-1),k=E.length>0&&typeof l=="object"&&l!==null&&!Array.isArray(l)&&typeof l!="function",I=k?l:void 0,H=k?E.slice(0,-1):E,K={...t,...I?.deps??{}},U=I?{...I,deps:K}:{deps:K};return e[u](...H,U)});return{run:s("run"),runWithState:s("runWithState"),withDeps(u){return ot(e,{...t,...u})}}}function st(e,t,s){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 u=t??{},E=s;async function l(K,U,L){let r=K??crypto.randomUUID(),oe=L?.deps?{...u,...L.deps}:u,te=[],Te=L?.createContext??E?.createContext,re=Te?await Te():void 0,p=L?.signal??E?.signal,z=L?.onEvent??E?.onEvent,ie=L?.onError??E?.onError,le=L?.shouldRun??E?.shouldRun,we=L?.onBeforeStart??E?.onBeforeStart,fe=L?.onAfterStep??E?.onAfterStep,xe=L?.resumeState??E?.resumeState,de=E?.catchUnexpected??He,m={},X=(L?.devWarnings??E?.devWarnings)===!0&&process.env.NODE_ENV!=="production",se=new Set,ce=new Set,ke={workflowId:r,onEvent:z,context:re!==void 0?re:void 0,signal:p,input:{},ref:f=>m[f],set:(f,y)=>{X&&!se.has(f)&&(se.add(f),console.warn(`awaitly: ctx.set('${f}', ...) is deprecated for static analysis. Use step('id', fn, { out: '${f}' }) instead.`)),m[f]=y},get:f=>(X&&!ce.has(f)&&(ce.add(f),console.warn(`awaitly: ctx.get('${f}') is deprecated for static analysis. Use ctx.ref('${f}') instead for tracked dependencies.`)),m[f])},W=f=>{let y=f.context!==void 0||re===void 0?f:{...f,context:re},J=y.workflowName===void 0?{...y,workflowName:e}:y;z?.(J,re)},n=(f,y)=>{let J={type:"WORKFLOW_CANCELLED",reason:f,lastStepKey:y};return v(de(J),{cause:J})};if(p?.aborted){let f=typeof p.reason=="string"?p.reason:p.reason instanceof Error?p.reason.message:void 0;return W({type:"workflow_cancelled",workflowId:r,ts:Date.now(),durationMs:0,reason:f}),n(f)}if(le){let f=performance.now();try{let y=await le(r,re),J=performance.now()-f;if(W({type:"hook_should_run",workflowId:r,ts:Date.now(),durationMs:J,result:y,skipped:!y}),!y){let S=new Error("Workflow skipped by shouldRun hook");return v(de(S),{cause:S})}}catch(y){let J=performance.now()-f;return W({type:"hook_should_run_error",workflowId:r,ts:Date.now(),durationMs:J,error:y}),v(de(y),{cause:y})}}if(we){let f=performance.now();try{let y=await we(r,re),J=performance.now()-f;if(W({type:"hook_before_start",workflowId:r,ts:Date.now(),durationMs:J,result:y,skipped:!y}),!y){let S=new Error("Workflow skipped by onBeforeStart hook");return v(de(S),{cause:S})}}catch(y){let J=performance.now()-f;return W({type:"hook_before_start_error",workflowId:r,ts:Date.now(),durationMs:J,error:y}),v(de(y),{cause:y})}}let w=E?.inputSchema,i=E?.input;if(w){let f=await _t(w,i);if(!f.ok)return v(f.error);ke.input=f.value}else i!==void 0&&(ke.input=i);let c=Date.now(),o=performance.now();W({type:"workflow_start",workflowId:r,ts:c});let a=L?.cache??E?.cache,g=L?.streamStore??E?.streamStore;if(xe&&!a&&(a=new Map),xe&&a){let f=typeof xe=="function"?await xe():xe;f.steps instanceof Map||(console.warn(`awaitly: resumeState.steps is not a Map (got ${typeof f.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 f.steps=="object"&&f.steps!==null&&(f.steps=new Map(Object.entries(f.steps))));for(let[y,J]of f.steps){let{result:S,meta:R}=J;if(S.ok)a.set(y,S);else{let d=R??{origin:"result",resultCause:S.cause};a.set(y,Ce(S.error,d,S.cause))}}}let x=L?.snapshot??E?.snapshot,C=E?.serialization;if(x&&!xe){a||(a=new Map);let f=x,y=C?.decode;for(let[J,S]of Object.entries(f.steps))if(Object.prototype.hasOwnProperty.call(f.steps,J))try{if(S.ok){let R=y?y(S.value):S.value;a.set(J,ee(R))}else{let R=y?y(S.error):S.error,d=tt(S.cause),h=S.meta?.origin==="throw"?{origin:"throw",thrown:d}:{origin:"result",resultCause:d};a.set(J,Ce(R,h,d))}}catch(R){throw new Ie(`Failed to decode step "${J}": ${R instanceof Error?R.message:String(R)}`,J,R instanceof Error?R:void 0)}}let b=!1,D,V,Z=()=>{b=!0,D=typeof p?.reason=="string"?p.reason:p?.reason instanceof Error?p.reason.message:void 0};p&&!p.aborted&&p.addEventListener("abort",Z,{once:!0});let j=()=>{if(b||p?.aborted)throw{type:"WORKFLOW_CANCELLED",reason:D??(typeof p?.reason=="string"?p.reason:p?.reason instanceof Error?p.reason.message:void 0),lastStepKey:V}},q=async(f,y,J)=>{if(!fe)return;let S=performance.now();try{await fe(f,y,r,re);let R=performance.now()-S;W({type:"hook_after_step",workflowId:r,stepKey:f,ts:Date.now(),durationMs:R})}catch(R){let d=performance.now()-S;throw W({type:"hook_after_step_error",workflowId:r,stepKey:f,ts:Date.now(),durationMs:d,error:R}),R}},F=f=>{let y=async(R,d,h)=>{if(typeof R!="string")throw new Error('[awaitly] step() requires a string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let O=R,P=h??{},_=O,T=Object.prototype.hasOwnProperty.call(P,"key")?P.key:O,{ttl:N,out:Y}=P;j();let Q=Xe(P);if(T&&a&&a.has(T)){W({type:"step_cache_hit",workflowId:r,stepKey:T,name:_,ts:Date.now(),...Q&&{metadata:Q}});let M=a.get(T);if(M.ok)return V=T,Y&&(m[Y]=M.value),M.value;let B=Le(M.cause);throw _e(M.error,B)}T&&a&&W({type:"step_cache_miss",workflowId:r,stepKey:T,name:_,ts:Date.now(),...Q&&{metadata:Q}});try{let M=await f(O,d,P);return Y&&(m[Y]=M),P.compensate&&te.push({stepName:_,value:M,compensate:P.compensate}),T&&(V=T,a&&a.set(T,ee(M),N?{ttl:N}:void 0),await q(T,ee(M))),M}catch(M){if(T&&be(M)){let B=M,ue=B.meta.origin==="result"?B.meta.resultCause:B.meta.origin==="throw"?B.meta.thrown:void 0,G=Ce(B.error,B.meta,ue);a&&a.set(T,G,N?{ttl:N}:void 0),await q(T,G,B.meta)}throw M}};y.try=async(R,d,h)=>{let{ttl:O}=h,P=h.key??R,_=R;if(a&&a.has(P)){W({type:"step_cache_hit",workflowId:r,stepKey:P,name:_,ts:Date.now()});let T=a.get(P);if(T.ok)return T.value;let N=Le(T.cause);throw _e(T.error,N)}a&&W({type:"step_cache_miss",workflowId:r,stepKey:P,name:_,ts:Date.now()});try{let T=await f.try(R,d,{...h,key:P});return h.compensate&&te.push({stepName:_,value:T,compensate:h.compensate}),a&&a.set(P,ee(T),O?{ttl:O}:void 0),await q(P,ee(T)),T}catch(T){if(be(T)){let N=T,Y=N.meta.origin==="result"?N.meta.resultCause:N.meta.origin==="throw"?N.meta.thrown:void 0,Q=Ce(N.error,N.meta,Y);a&&a.set(P,Q,O?{ttl:O}:void 0),await q(P,Q,N.meta)}throw T}},y.fromResult=async(R,d,h)=>{let{ttl:O}=h,P=h.key??R,_=R;if(a&&a.has(P)){W({type:"step_cache_hit",workflowId:r,stepKey:P,name:_,ts:Date.now()});let T=a.get(P);if(T.ok)return T.value;let N=Le(T.cause);throw _e(T.error,N)}a&&W({type:"step_cache_miss",workflowId:r,stepKey:P,name:_,ts:Date.now()});try{let T=await f.fromResult(R,d,{...h,key:P});return a&&a.set(P,ee(T),O?{ttl:O}:void 0),await q(P,ee(T)),T}catch(T){if(be(T)){let N=T,Y=N.meta.origin==="result"?N.meta.resultCause:N.meta.origin==="throw"?N.meta.thrown:void 0,Q=Ce(N.error,N.meta,Y);a&&a.set(P,Q,O?{ttl:O}:void 0),await q(P,Q,N.meta)}throw T}},y.race=f.race,y.withFallback=async(R,d,h)=>{let O=h.key??R,P=R;if(a&&a.has(O)){W({type:"step_cache_hit",workflowId:r,stepKey:O,name:P,ts:Date.now()});let _=a.get(O);if(_.ok)return _.value;let T=Le(_.cause);throw _e(_.error,T)}a&&W({type:"step_cache_miss",workflowId:r,stepKey:O,name:P,ts:Date.now()});try{let _=await f.withFallback(R,d,h);return a&&a.set(O,ee(_)),await q(O,ee(_)),_}catch(_){if(be(_)){let T=_,N=T.meta.origin==="result"?T.meta.resultCause:T.meta.origin==="throw"?T.meta.thrown:void 0,Y=Ce(T.error,T.meta,N);a&&a.set(O,Y),await q(O,Y,T.meta)}throw _}},y.withResource=async(R,d)=>{let h=R;try{let O=await f.withResource(R,d);return await q(h,ee(O)),O}catch(O){if(be(O)){let P=O,_=P.meta.origin==="result"?P.meta.resultCause:P.meta.origin==="throw"?P.meta.thrown:void 0,T=Ce(P.error,P.meta,_);await q(h,T,P.meta)}throw O}},y.retry=(R,d,h)=>{let O={key:h.key,retry:{attempts:h.attempts,backoff:h.backoff,initialDelay:h.initialDelay,maxDelay:h.maxDelay,jitter:h.jitter,shouldRetry:h.shouldRetry,onRetry:h.onRetry},timeout:h.timeout,ttl:h.ttl};return y(R,d,O)},y.withTimeout=(R,d,h)=>{let O={key:h.key,timeout:h,ttl:h.ttl};return y(R,d,O)},y.sleep=(R,d,h)=>{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 O=typeof d=="string"?Dt(d):d;if(!O)throw new Error(`step.sleep: invalid duration '${d}'`);let P=Ot(O),_=h?.signal;return y(R,async()=>{if(p?.aborted||_?.aborted){let N=new Error("Sleep aborted");throw N.name="AbortError",N}return new Promise((N,Y)=>{let Q={timeoutId:void 0},M=()=>{Q.timeoutId&&clearTimeout(Q.timeoutId);let B=new Error("Sleep aborted");B.name="AbortError",Y(B)};p?.addEventListener("abort",M,{once:!0}),_?.addEventListener("abort",M,{once:!0}),Q.timeoutId=setTimeout(()=>{p?.removeEventListener("abort",M),_?.removeEventListener("abort",M),N(ee(void 0))},P)})},{key:h?.key,ttl:h?.ttl,description:h?.description})};let J=new Map,S=new Map;return y.getWritable=R=>{let d=R?.namespace??"default",h=R?.highWaterMark??16;if(!g)throw new Error("streamStore is required to use getWritable(). Pass a streamStore to createWorkflow options.");let O=`${r}:${d}`,P=J.get(O);if(P&&!P.closed&&!P.aborted)return P.writer;let _=Pt({highWaterMark:h,onStateChange:B=>{W({type:"stream_backpressure",workflowId:r,namespace:d,bufferedCount:_.bufferedCount,state:B,ts:Date.now()})}}),T=0,N=!0,Y=!1,Q=!1;W({type:"stream_created",workflowId:r,namespace:d,ts:Date.now()});let M={async write(B){if(Q)return v(qe("closed","Stream is closed"));if(Y)return v(qe("aborted","Stream was aborted"));_.state==="paused"&&await _.waitForDrain();let ue={value:B,position:T,ts:Date.now()},G=await g.append(r,d,ue);return G.ok?(W({type:"stream_write",workflowId:r,namespace:d,position:T,ts:Date.now()}),T++,_.increment(),ee(void 0)):(W({type:"stream_error",workflowId:r,namespace:d,error:G.error,position:T,ts:Date.now()}),v(qe("store_error",G.error.message,G.error)))},async close(){if(Q)return v(nt("already_closed","Stream is already closed"));let B=await g.closeStream(r,d);return B.ok?(Q=!0,N=!1,W({type:"stream_close",workflowId:r,namespace:d,finalPosition:T,ts:Date.now()}),J.delete(O),ee(void 0)):v(nt("store_error",B.error.message,B.error))},abort(B){Y=!0,N=!1,Q=!0,W({type:"stream_error",workflowId:r,namespace:d,error:B,position:T,ts:Date.now()}),J.delete(O)},get writable(){return N},get position(){return T},get namespace(){return d}};return J.set(O,{writer:M,backpressure:_,aborted:Y,closed:Q}),M},y.getReadable=R=>{let d=R?.namespace??"default",h=R?.startIndex??0,O=R?.pollInterval??10,P=R?.pollTimeout??3e4;if(!g)throw new Error("streamStore is required to use getReadable(). Pass a streamStore to createWorkflow options.");let _=`${r}:${d}:${h}`,T=S.get(_);if(T&&!T.closed)return T.reader;let N=()=>{let he=`${r}:${d}`,ae=J.get(he);ae&&ae.backpressure.decrement()},Y=h,Q=!0,M=!1,B=[],ue=0,G={async read(){if(M)return v(rt("closed","Reader is closed"));if(ue<B.length){let Ee=B[ue++];return Y=Ee.position+1,N(),W({type:"stream_read",workflowId:r,namespace:d,position:Ee.position,ts:Date.now()}),ee(Ee.value)}let he=`${r}:${d}`,ae=Date.now(),me=J.has(he),ne=await g.getMetadata(r,d),pe=ne.ok&&ne.value!==void 0;for(;Date.now()-ae<P;){let Ee=await g.read(r,d,Y,100);if(!Ee.ok)return v(rt("store_error",Ee.error.message,Ee.error));let Ue=Ee.value;if(Ue.length>0){B=Ue,ue=1;let Ne=Ue[0];return Y=Ne.position+1,N(),W({type:"stream_read",workflowId:r,namespace:d,position:Ne.position,ts:Date.now()}),ee(Ne.value)}let We=J.has(he),Se=await g.getMetadata(r,d),ut=Se.ok&&Se.value!==void 0;if(We&&(me=!0),ut&&(pe=!0),Se.ok&&Se.value?.closed)return Q=!1,v(Je(Y));if(me&&!We&&!ut)return Q=!1,v(Je(Y));pe&&!We&&Se.ok&&Se.value?.closed,await new Promise(Ne=>setTimeout(Ne,O))}return Q=!1,v(Je(Y))},close(){M=!0,Q=!1,B=[],S.delete(_)},get readable(){return Q},get position(){return Y},get namespace(){return d}};return S.set(_,{reader:G,position:Y,closed:M}),G},y.streamForEach=async(R,d,h)=>{let O=h?.checkpointInterval??1,P=h?.concurrency??1,_=[],T=0,N=-1,Y=M=>typeof M=="object"&&M!==null&&"read"in M&&typeof M.read=="function",Q=async(M,B,ue,G)=>{let ae=O>0&&B%O===0?`stream-foreach:${G}:pos-${ue}`:void 0,me=ae??`stream-item-${ue}`,ne=await y(me,()=>d(M,B),{key:ae});return{index:B,position:ue,result:ne}};if(Y(R))if(P<=1){let M=R.position,B=await R.read();for(;B.ok;){let ue=B.value,{result:G}=await Q(ue,T,M,R.namespace);_.push(G),N=M,T++,M=R.position,B=await R.read()}}else{let M=new Map,B=0,ue=0,G=new Array(P).fill(null),he=async()=>{for(let Ee=0;Ee<G.length;Ee++)if(G[Ee]===null)return Ee;let ne=G.filter(Ee=>Ee!==null),pe=await Promise.race(ne);return M.set(pe.index,{position:pe.position,result:pe.result}),G[pe.slotIndex]=null,pe.slotIndex},ae=R.position,me=await R.read();for(;me.ok;){let ne=await he(),pe=B,Ee=ae,Ue=me.value,We=ne;G[ne]=Q(Ue,pe,Ee,R.namespace).then(Se=>({slotIndex:We,...Se})),ue++,B++,ae=R.position,me=await R.read()}for(let ne=0;ne<G.length;ne++)if(G[ne]!==null){let pe=await G[ne];M.set(pe.index,{position:pe.position,result:pe.result})}for(let ne=0;ne<ue;ne++){let pe=M.get(ne);pe&&(_.push(pe.result),N=pe.position,T++)}}else if(P<=1){let M=0;for await(let B of R){let{result:ue}=await Q(B,M,M,"async-iterable");_.push(ue),N=M,T++,M++}}else{let M=new Map,B=0,ue=0,G=new Array(P).fill(null),he=async()=>{for(let ne=0;ne<G.length;ne++)if(G[ne]===null)return ne;let ae=G.filter(ne=>ne!==null),me=await Promise.race(ae);return M.set(me.index,me.result),G[me.slotIndex]=null,me.slotIndex};for await(let ae of R){let me=await he(),ne=B,pe=me;G[me]=Q(ae,ne,ne,"async-iterable").then(Ee=>({slotIndex:pe,...Ee})),ue++,B++}for(let ae=0;ae<G.length;ae++)if(G[ae]!==null){let me=await G[ae];M.set(me.index,me.result)}for(let ae=0;ae<ue;ae++)M.has(ae)&&(_.push(M.get(ae)),N=ae,T++)}return{results:_,processedCount:T,lastPosition:N}},y.if=f.if,y.label=f.label,y.branch=f.branch,y.arm=f.arm,y.forEach=f.forEach,y.item=f.item,y.dep=f.dep,y.workflow=(R,d,h)=>y(R,d,h),y.all=(R,d,h)=>{let O=h!==void 0&&Object.prototype.hasOwnProperty.call(h,"key")?h:{...h,key:void 0};return y(R,async()=>ee(await f.all(R,d)),O)},y.map=(R,d,h,O)=>{let P=O!==void 0&&Object.prototype.hasOwnProperty.call(O,"key")?O:{...O,key:void 0};return y(R,async()=>ee(await f.map(R,d,h,O)),P)},y},$=({step:f})=>{let y=F(f);return U({step:y,steps:Fe(oe??{},y),deps:oe,ctx:ke})},A;try{A=await Ve($,{onError:ie,onEvent:z,catchUnexpected:de,workflowId:r,workflowName:e,context:re,_workflowSignal:p})}finally{p&&p.removeEventListener("abort",Z)}if(!A.ok&&te.length>0){let f=[];for(let y=te.length-1;y>=0;y--){let J=te[y];try{await J.compensate(J.value)}catch(S){f.push({stepName:J.stepName,error:S})}}if(f.length>0){let y={type:"SAGA_COMPENSATION_ERROR",originalError:A.error,compensationErrors:f};A=v(y,{cause:A.cause})}}let ge=performance.now()-o;if(!A.ok){let f;if(ve(A.cause)&&(f=A.cause),!f&&b&&ht(A.error)){let y=A.cause;y!=null&&typeof y=="object"&&"name"in y&&y.name==="AbortError"&&(f={type:"WORKFLOW_CANCELLED",reason:D??(typeof p?.reason=="string"?p.reason:p?.reason instanceof Error?p.reason.message:void 0),lastStepKey:V})}if(f)return W({type:"workflow_cancelled",workflowId:r,ts:Date.now(),durationMs:ge,reason:f.reason,lastStepKey:f.lastStepKey}),f&&!ve(A.cause)?v(A.error,{cause:f}):A}if(A.ok&&b){let f=D??(typeof p?.reason=="string"?p.reason:p?.reason instanceof Error?p.reason.message:void 0);W({type:"workflow_cancelled",workflowId:r,ts:Date.now(),durationMs:ge,reason:f,lastStepKey:V});let y={type:"WORKFLOW_CANCELLED",reason:f,lastStepKey:V};return v(de(y),{cause:y})}return A.ok?W({type:"workflow_success",workflowId:r,ts:Date.now(),durationMs:ge}):W({type:"workflow_error",workflowId:r,ts:Date.now(),durationMs:ge,error:A.error}),A}function k(K,U,L){let r,oe,te;return typeof K=="string"?(r=K,oe=U,te=L):(oe=K,te=U),l(r,oe,te)}async function I(K,U,L){let r,oe,te;typeof K=="string"?(r=K,oe=U,te=L):(oe=K,te=U);let Te=Be(),re=te?.onEvent,z={...te,onEvent:(we,fe)=>{Te.handleEvent(we);try{re?.(we,fe)}catch{}}},ie,le;try{ie=await l(r,oe,z)}catch(we){let fe=E?.catchUnexpected??He;ie=v(fe(we),{cause:we})}finally{le=Te.getResumeState()}return{result:ie,resumeState:le}}let H={withDeps:K=>ot(H,K),run:k,runWithState:I};return H}var at;function Er(){let e=new Map;return{async save(t,s){e.set(t,{snapshot:s,updatedAt:new Date})},async load(t){return e.get(t)?.snapshot??null},async delete(t){e.delete(t)},async list(t){let s=t?.prefix??"",u=t?.limit??100,E=[];for(let[l,k]of e.entries())if(!(s&&!l.startsWith(s))&&(E.push({id:l,updatedAt:k.updatedAt.toISOString()}),E.length>=u))break;return E.sort((l,k)=>k.updatedAt.localeCompare(l.updatedAt)),E},async close(){}}}function fr(){return at===void 0&&(at=Er()),at}function Mt(e){return typeof e=="object"&&e!==null&&e.type==="VERSION_MISMATCH"}function Ut(e){return typeof e=="object"&&e!==null&&e.type==="CONCURRENT_EXECUTION"}function Wt(e){return typeof e=="object"&&e!==null&&e.type==="PERSISTENCE_ERROR"}function Nt(e){return typeof e=="object"&&e!==null&&e.type==="LEASE_EXPIRED"}function Kt(e){return typeof e=="object"&&e!==null&&e.type==="IDEMPOTENCY_CONFLICT"}function It(e){return typeof e.tryAcquire=="function"&&typeof e.release=="function"}var it=new Set,Me=new Map,jt={async run(e,t,s){let{id:u,store:E,version:l=1,allowConcurrent:k=!1,lockTtlMs:I=6e4,heartbeatIntervalMs:H,abortOnLeaseLoss:K,metadata:U,signal:L,createContext:r,onEvent:oe,onError:te,onVersionMismatch:Te,idempotencyKey:re,input:p}=s,z=E??fr(),ie;if(re){let m=`idem:${re}`,X=Me.get(m);if(X)return await X;Me.set(m,new Promise(se=>{ie=se}));try{let se=await z.load(m);if(se){if(p!==void 0&&se.metadata?.input!==void 0){let ce=JSON.stringify(se.metadata.input),ke=JSON.stringify(p);if(ce!==ke){let W=v({type:"IDEMPOTENCY_CONFLICT",idempotencyKey:re,workflowId:u,message:`Idempotency key '${re}' already used with different input for workflow '${u}'.`});return ie(W),Me.delete(m),ie=void 0,W}}if(se.execution.status==="completed"&&se.metadata?.finalResult!==void 0){let ce=se.metadata.finalResult;return ie(ce),Me.delete(m),ie=void 0,ce}if(se.execution.status==="running"){let ce=v({type:"CONCURRENT_EXECUTION",workflowId:u,message:`Workflow '${u}' with idempotency key '${re}' is already running.`,reason:"cross-process"});return ie(ce),Me.delete(m),ie=void 0,ce}}}catch{}try{await z.save(m,{formatVersion:1,steps:{},execution:{status:"running",lastUpdated:new Date().toISOString()},metadata:{workflowId:u,idempotencyKey:re,input:p}})}catch{}}if(!k&&it.has(u)){let m={type:"CONCURRENT_EXECUTION",workflowId:u,message:`Workflow '${u}' is already running. Set allowConcurrent: true to allow parallel executions.`,reason:"in-process"};return v(m)}let le=null;if(!k&&It(z)){let m;try{m=await z.tryAcquire(u,{ttlMs:I})}catch(X){let se={type:"PERSISTENCE_ERROR",operation:"load",workflowId:u,cause:X,message:`Failed to acquire lock for workflow '${u}': ${X instanceof Error?X.message:String(X)}`};return v(se)}if(m===null){let X={type:"CONCURRENT_EXECUTION",workflowId:u,message:`Workflow '${u}' is already running (lease held by another process). Set allowConcurrent: true to allow parallel executions.`,reason:"cross-process"};return v(X)}le=m.ownerToken}let we,fe,xe=z;if(le&&typeof xe.renew=="function"){let m=H??Math.floor(I/3);fe=new AbortController,we=setInterval(async()=>{try{await xe.renew(u,le,{ttlMs:I})||fe.abort(new Error("Lease expired"))}catch{fe.abort(new Error("Lease renewal failed"))}},m)}it.add(u);let de;try{let m=null;try{m=await z.load(u)}catch(n){let w={type:"PERSISTENCE_ERROR",operation:"load",workflowId:u,cause:n,message:`Failed to load state for workflow '${u}': ${n instanceof Error?n.message:String(n)}`};return de=v(w),v(w)}if(m)try{vt(m)}catch(n){if(n instanceof Ae){let w={type:"PERSISTENCE_ERROR",operation:"load",workflowId:u,cause:n,message:`Invalid snapshot format for workflow '${u}': ${n.message}`};return de=v(w),v(w)}throw n}if(m){let n=typeof m.metadata?.version=="number"?m.metadata.version:1;if(n!==l){let w={type:"VERSION_MISMATCH",workflowId:u,storedVersion:n,requestedVersion:l,currentVersion:l,message:`Workflow '${u}' has stored state at version ${n} but this run requested version ${l}. Migrate the stored state to the new version, or clear state for this id (e.g. durable.deleteState(store, '${u}')) and re-run.`};if(!Te)return de=v(w),v(w);let i=await Promise.resolve(Te({id:u,storedVersion:n,requestedVersion:l}));if(i==="throw")return de=v(w),v(w);if(i==="clear"){try{await z.delete(u)}catch{}m=null}else m=i.migratedSnapshot}}let X=(n,w)=>{oe&&oe(n,w)},se=Be(),ce={snapshot:m,onAfterStep:async(n,w,i,c)=>{try{let o=se.getResumeState(),a={};for(let[C,b]of o.steps)if(b.result.ok)a[C]={ok:!0,value:b.result.value};else{let D=b.result.cause,V=D instanceof Error?Qe(D):et(D),Z=b.meta?.origin==="throw"?"throw":"result";a[C]={ok:!1,error:b.result.error,cause:V,meta:{origin:Z}}}let g={formatVersion:1,workflowName:u,steps:a,execution:{status:"running",lastUpdated:new Date().toISOString(),currentStepId:n},metadata:{...m?.metadata??{},...U,version:l,lastStepKey:n}},x=m?At(m,g):g;if(x.warnings&&x.warnings.length>0){let C=new Set(Object.keys(g.steps)),b=x.warnings.filter(D=>!C.has(D.stepId));x={...x,warnings:b.length>0?b:void 0}}await z.save(u,x),X({type:"persist_success",workflowId:i,stepKey:n,ts:Date.now(),context:c},c)}catch(o){X({type:"persist_error",workflowId:i,stepKey:n,error:o,ts:Date.now(),context:c},c)}},onEvent:(n,w)=>{se.handleEvent(n),X(n,w)},onError:te,signal:fe&&L?AbortSignal.any([L,fe.signal]):fe?.signal??L,createContext:r},ke;try{ke=st(u,e,ce)}catch(n){if(n instanceof Ae){let w={type:"PERSISTENCE_ERROR",operation:"load",workflowId:u,cause:n,message:`Invalid snapshot format for workflow '${u}': ${n.message}`};return de=v(w),v(w)}throw n}let W;try{W=await ke.run(t)}catch(n){if(n instanceof Ae||n instanceof Ie){let w={type:"PERSISTENCE_ERROR",operation:"load",workflowId:u,cause:n,message:`Invalid snapshot format for workflow '${u}': ${n.message}`};return de=v(w),v(w)}throw n}if(K!==!1&&fe?.signal.aborted){let n=v({type:"LEASE_EXPIRED",workflowId:u,message:`Lease expired for workflow '${u}' during execution. The workflow may have been reclaimed by another process.`});return de=n,n}if(W.ok){try{await z.delete(u)}catch(n){let w={type:"PERSISTENCE_ERROR",operation:"delete",workflowId:u,cause:n,message:`Failed to delete state for workflow '${u}': ${n instanceof Error?n.message:String(n)}`};return de=v(w),v(w)}if(re){let n=`idem:${re}`;try{await z.save(n,{formatVersion:1,steps:{},execution:{status:"completed",lastUpdated:new Date().toISOString(),completedAt:new Date().toISOString()},metadata:{workflowId:u,idempotencyKey:re,input:p,finalResult:W}})}catch{}}}return de=W,W}finally{if(it.delete(u),ie&&(ie(de),Me.delete(`idem:${re}`)),we&&clearInterval(we),le!==null&&It(z))try{await z.release(u,le)}catch{}}},async clearState(e){let t=e;if(typeof t.clear=="function"){await t.clear();return}let s=100;for(;;){let u=await e.list({limit:s});if(u.length===0)break;let E=u.map(l=>l.id);if(await this.deleteStates(e,E,{continueOnError:!0}),u.length<s)break}},async hasState(e,t){try{return await e.load(t)!==null}catch{return!1}},async deleteState(e,t){try{return await e.delete(t),!0}catch{return!1}},async deleteStates(e,t,s={}){let{concurrency:u=10,continueOnError:E=!0}=s;if(t.length===0)return{deleted:0};let l=[],k=0,I=async K=>{try{await e.delete(K),k++}catch(U){if(E)l.push({id:K,error:U});else throw U}},H=Math.max(1,u);for(let K=0;K<t.length;K+=H){let U=t.slice(K,K+H);await Promise.all(U.map(L=>I(L)))}return l.length>0?{deleted:k,errors:l}:{deleted:k}},async listPending(e,t){try{return await e.list(t)}catch{return[]}}};0&&(module.exports={durable,isConcurrentExecution,isIdempotencyConflict,isLeaseExpired,isPersistenceError,isVersionMismatch,isWorkflowCancelled});
|
|
11
|
-
//# sourceMappingURL=durable.cjs.map
|