awaitly 1.31.1 → 1.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters.cjs +2 -2
- package/dist/adapters.cjs.map +1 -1
- package/dist/adapters.d.cts +3 -1
- package/dist/adapters.d.ts +3 -1
- package/dist/adapters.js +2 -2
- package/dist/adapters.js.map +1 -1
- package/dist/batch.cjs +2 -2
- package/dist/batch.cjs.map +1 -1
- package/dist/batch.d.cts +3 -1
- package/dist/batch.d.ts +3 -1
- package/dist/batch.js +2 -2
- package/dist/batch.js.map +1 -1
- package/dist/circuit-breaker.cjs +2 -2
- package/dist/circuit-breaker.cjs.map +1 -1
- package/dist/circuit-breaker.d.cts +3 -1
- package/dist/circuit-breaker.d.ts +3 -1
- package/dist/circuit-breaker.js +2 -2
- package/dist/circuit-breaker.js.map +1 -1
- package/dist/conditional.d.cts +3 -1
- package/dist/conditional.d.ts +3 -1
- package/dist/core.cjs +2 -2
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +2 -1
- package/dist/core.d.ts +2 -1
- package/dist/core.js +2 -2
- package/dist/core.js.map +1 -1
- package/dist/diagnostics.cjs +3 -3
- package/dist/diagnostics.cjs.map +1 -1
- package/dist/diagnostics.d.cts +3 -1
- package/dist/diagnostics.d.ts +3 -1
- package/dist/diagnostics.js +3 -3
- package/dist/diagnostics.js.map +1 -1
- package/dist/durable.cjs +3 -3
- package/dist/durable.cjs.map +1 -1
- package/dist/durable.d.cts +8 -361
- package/dist/durable.d.ts +8 -361
- package/dist/durable.js +3 -3
- package/dist/durable.js.map +1 -1
- package/dist/engine.cjs +11 -0
- package/dist/engine.cjs.map +1 -0
- package/dist/engine.d.cts +114 -0
- package/dist/engine.d.ts +114 -0
- package/dist/engine.js +11 -0
- package/dist/engine.js.map +1 -0
- package/dist/errors-entry-CMH73Eym.d.cts +339 -0
- package/dist/errors-entry-DOt5UUl4.d.ts +339 -0
- package/dist/errors.cjs +1 -1
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.cts +2 -318
- package/dist/errors.d.ts +2 -318
- package/dist/errors.js +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/fetch.cjs +2 -2
- package/dist/fetch.cjs.map +1 -1
- package/dist/fetch.d.cts +3 -1
- package/dist/fetch.d.ts +3 -1
- package/dist/fetch.js +2 -2
- package/dist/fetch.js.map +1 -1
- package/dist/functional.cjs +1 -1
- package/dist/functional.cjs.map +1 -1
- package/dist/functional.d.cts +2 -0
- package/dist/functional.d.ts +2 -0
- package/dist/functional.js +1 -1
- package/dist/functional.js.map +1 -1
- package/dist/{guards-PU64_GKv.d.cts → guards-B79mP5Q8.d.cts} +3 -3
- package/dist/{guards-B5lgMJq0.d.ts → guards-BUq6NJCM.d.ts} +3 -3
- package/dist/{hitl-Dyiy0R1v.d.cts → hitl-BCqkMAHw.d.cts} +2 -2
- package/dist/{hitl-BjeSm1sJ.d.ts → hitl-BZtPx0aU.d.ts} +2 -2
- package/dist/hitl.cjs +2 -2
- package/dist/hitl.cjs.map +1 -1
- package/dist/hitl.d.cts +9 -6
- package/dist/hitl.d.ts +9 -6
- package/dist/hitl.js +2 -2
- package/dist/hitl.js.map +1 -1
- package/dist/index-BVUAOWGG.d.ts +417 -0
- package/dist/index-CQnpmUcC.d.cts +417 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -3
- package/dist/index.d.ts +4 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/otel.d.cts +3 -1
- package/dist/otel.d.ts +3 -1
- package/dist/{persistence-entry-B3ukwbb5.d.ts → persistence-entry-ClFhxd2Q.d.ts} +11 -5
- package/dist/{persistence-entry-CgVzswbg.d.cts → persistence-entry-jflY61az.d.cts} +11 -5
- package/dist/persistence.d.cts +6 -3
- package/dist/persistence.d.ts +6 -3
- package/dist/policies.d.cts +3 -1
- package/dist/policies.d.ts +3 -1
- package/dist/ratelimit.cjs +2 -2
- package/dist/ratelimit.cjs.map +1 -1
- package/dist/ratelimit.d.cts +3 -1
- package/dist/ratelimit.d.ts +3 -1
- package/dist/ratelimit.js +2 -2
- package/dist/ratelimit.js.map +1 -1
- package/dist/reliability.cjs +2 -2
- package/dist/reliability.cjs.map +1 -1
- package/dist/reliability.d.cts +3 -1
- package/dist/reliability.d.ts +3 -1
- package/dist/reliability.js +2 -2
- package/dist/reliability.js.map +1 -1
- package/dist/resolver.cjs +2 -2
- package/dist/resolver.cjs.map +1 -1
- package/dist/resolver.d.cts +5 -3
- package/dist/resolver.d.ts +5 -3
- package/dist/resolver.js +2 -2
- package/dist/resolver.js.map +1 -1
- package/dist/resource.cjs +2 -2
- package/dist/resource.cjs.map +1 -1
- package/dist/resource.d.cts +3 -1
- package/dist/resource.d.ts +3 -1
- package/dist/resource.js +2 -2
- package/dist/resource.js.map +1 -1
- package/dist/result/retry.cjs +1 -1
- package/dist/result/retry.cjs.map +1 -1
- package/dist/result/retry.d.cts +2 -0
- package/dist/result/retry.d.ts +2 -0
- package/dist/result/retry.js +1 -1
- package/dist/result/retry.js.map +1 -1
- package/dist/result.cjs +1 -1
- package/dist/result.cjs.map +1 -1
- package/dist/result.d.cts +8 -23
- package/dist/result.d.ts +8 -23
- package/dist/result.js +1 -1
- package/dist/result.js.map +1 -1
- package/dist/{run-entry-C1uFytM6.d.cts → run-entry-rw7zll_G.d.ts} +16 -45
- package/dist/{run-entry-C1uFytM6.d.ts → run-entry-yQu63Yj9.d.cts} +16 -45
- package/dist/run.cjs +2 -2
- package/dist/run.cjs.map +1 -1
- package/dist/run.d.cts +3 -1
- package/dist/run.d.ts +3 -1
- package/dist/run.js +2 -2
- package/dist/run.js.map +1 -1
- package/dist/saga.cjs +2 -2
- package/dist/saga.cjs.map +1 -1
- package/dist/saga.d.cts +3 -1
- package/dist/saga.d.ts +3 -1
- package/dist/saga.js +2 -2
- package/dist/saga.js.map +1 -1
- package/dist/singleflight.d.cts +3 -1
- package/dist/singleflight.d.ts +3 -1
- package/dist/streaming.cjs +4 -4
- package/dist/streaming.cjs.map +1 -1
- package/dist/streaming.d.cts +5 -3
- package/dist/streaming.d.ts +5 -3
- package/dist/streaming.js +4 -4
- package/dist/streaming.js.map +1 -1
- package/dist/testing.cjs +8 -4
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +87 -4
- package/dist/testing.d.ts +87 -4
- package/dist/testing.js +8 -4
- package/dist/testing.js.map +1 -1
- package/dist/{types-wa_wTOn3.d.ts → types-CuWK5AlK.d.ts} +1 -1
- package/dist/{types-DUWrNIJu.d.cts → types-uR3JpwvF.d.cts} +1 -1
- package/dist/webhook.cjs +2 -2
- package/dist/webhook.cjs.map +1 -1
- package/dist/webhook.d.cts +7 -4
- package/dist/webhook.d.ts +7 -4
- package/dist/webhook.js +2 -2
- package/dist/webhook.js.map +1 -1
- package/dist/workflow.cjs +3 -3
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.d.cts +47 -11
- package/dist/workflow.d.ts +47 -11
- package/dist/workflow.js +3 -3
- package/dist/workflow.js.map +1 -1
- package/package.json +15 -1
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { R as Result, C as CauseOf, f as ErrorOf,
|
|
2
|
-
import { S as StreamStore } from './types-
|
|
1
|
+
import { R as Result, C as CauseOf, f as ErrorOf, ad as WorkflowEvent, at as StepFailureMeta, ae as RunStep, c as AsyncResult } from './run-entry-rw7zll_G.js';
|
|
2
|
+
import { S as StreamStore } from './types-CuWK5AlK.js';
|
|
3
|
+
import { StandardSchemaV1 } from '@standard-schema/spec';
|
|
4
|
+
import { U as UnexpectedError } from './errors-entry-DOt5UUl4.js';
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
7
|
* awaitly/persistence
|
|
@@ -463,16 +465,20 @@ type RunConfig<E, U = UnexpectedError, C = void, Deps = unknown> = ExecutionOpti
|
|
|
463
465
|
};
|
|
464
466
|
/**
|
|
465
467
|
* Workflow options. Error union is always closed: E | U.
|
|
466
|
-
* When catchUnexpected is omitted, U defaults to UnexpectedError
|
|
468
|
+
* When catchUnexpected is omitted, U defaults to UnexpectedError.
|
|
467
469
|
*/
|
|
468
470
|
type WorkflowOptions<E, U = UnexpectedError, C = void, Errs extends readonly string[] = readonly string[]> = {
|
|
471
|
+
/** Standard Schema for input validation. Works with Zod, Valibot, ArkType, etc. */
|
|
472
|
+
inputSchema?: StandardSchemaV1;
|
|
473
|
+
/** Input data to validate against inputSchema and pass to workflow context. */
|
|
474
|
+
input?: unknown;
|
|
469
475
|
/** Short description for labels/tooltips (static analysis) */
|
|
470
476
|
description?: string;
|
|
471
477
|
/** Full markdown documentation (static analysis) */
|
|
472
478
|
markdown?: string;
|
|
473
479
|
/**
|
|
474
480
|
* Map uncaught exceptions (and cancellation) to your error type U.
|
|
475
|
-
* When omitted, U = UnexpectedError and the default mapper returns
|
|
481
|
+
* When omitted, U = UnexpectedError and the default mapper returns an UnexpectedError instance.
|
|
476
482
|
*/
|
|
477
483
|
catchUnexpected?: (cause: unknown) => U;
|
|
478
484
|
/**
|
|
@@ -807,4 +813,4 @@ interface GatedStepOptions<TArgs, T> {
|
|
|
807
813
|
metadata?: Record<string, unknown>;
|
|
808
814
|
}
|
|
809
815
|
|
|
810
|
-
export { type ApprovalRejected as A, serializeError as B, type CausesOfDeps as C, serializeThrown as D, type ErrorsOfDeps as E, type GatedStepOptions as G, type JSONValue as J, type MemoryCacheOptions as M, type PendingApproval as P, type ResumeState as R, type SnapshotStore as S, type
|
|
816
|
+
export { type ApprovalRejected as A, serializeError as B, type CausesOfDeps as C, serializeThrown as D, type ErrorsOfDeps as E, type GatedStepOptions as G, type JSONValue as J, type MemoryCacheOptions as M, type PendingApproval as P, type ResumeState as R, type SnapshotStore as S, type WorkflowCancelledError as W, type Workflow as a, type ApprovalStepOptions as b, type PendingHook as c, type WorkflowSnapshot as d, type AnyResultFn as e, type WorkflowContext as f, type StepResult as g, type WorkflowOptions as h, type ExecutionOptions as i, type ResumeStateEntry as j, type RunConfig as k, type RunWithStateResult as l, type SerializedCause as m, SnapshotDecodeError as n, SnapshotFormatError as o, SnapshotMismatchError as p, type SnapshotWarning as q, type StepCache as r, type WorkflowFn as s, assertValidSnapshot as t, isWorkflowSnapshot as u, looksLikeWorkflowSnapshot as v, mergeSnapshots as w, validateSnapshot as x, createMemoryCache as y, deserializeCauseNew as z };
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { R as Result, C as CauseOf, f as ErrorOf,
|
|
2
|
-
import { S as StreamStore } from './types-
|
|
1
|
+
import { R as Result, C as CauseOf, f as ErrorOf, ad as WorkflowEvent, at as StepFailureMeta, ae as RunStep, c as AsyncResult } from './run-entry-yQu63Yj9.cjs';
|
|
2
|
+
import { S as StreamStore } from './types-uR3JpwvF.cjs';
|
|
3
|
+
import { StandardSchemaV1 } from '@standard-schema/spec';
|
|
4
|
+
import { U as UnexpectedError } from './errors-entry-CMH73Eym.cjs';
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
7
|
* awaitly/persistence
|
|
@@ -463,16 +465,20 @@ type RunConfig<E, U = UnexpectedError, C = void, Deps = unknown> = ExecutionOpti
|
|
|
463
465
|
};
|
|
464
466
|
/**
|
|
465
467
|
* Workflow options. Error union is always closed: E | U.
|
|
466
|
-
* When catchUnexpected is omitted, U defaults to UnexpectedError
|
|
468
|
+
* When catchUnexpected is omitted, U defaults to UnexpectedError.
|
|
467
469
|
*/
|
|
468
470
|
type WorkflowOptions<E, U = UnexpectedError, C = void, Errs extends readonly string[] = readonly string[]> = {
|
|
471
|
+
/** Standard Schema for input validation. Works with Zod, Valibot, ArkType, etc. */
|
|
472
|
+
inputSchema?: StandardSchemaV1;
|
|
473
|
+
/** Input data to validate against inputSchema and pass to workflow context. */
|
|
474
|
+
input?: unknown;
|
|
469
475
|
/** Short description for labels/tooltips (static analysis) */
|
|
470
476
|
description?: string;
|
|
471
477
|
/** Full markdown documentation (static analysis) */
|
|
472
478
|
markdown?: string;
|
|
473
479
|
/**
|
|
474
480
|
* Map uncaught exceptions (and cancellation) to your error type U.
|
|
475
|
-
* When omitted, U = UnexpectedError and the default mapper returns
|
|
481
|
+
* When omitted, U = UnexpectedError and the default mapper returns an UnexpectedError instance.
|
|
476
482
|
*/
|
|
477
483
|
catchUnexpected?: (cause: unknown) => U;
|
|
478
484
|
/**
|
|
@@ -807,4 +813,4 @@ interface GatedStepOptions<TArgs, T> {
|
|
|
807
813
|
metadata?: Record<string, unknown>;
|
|
808
814
|
}
|
|
809
815
|
|
|
810
|
-
export { type ApprovalRejected as A, serializeError as B, type CausesOfDeps as C, serializeThrown as D, type ErrorsOfDeps as E, type GatedStepOptions as G, type JSONValue as J, type MemoryCacheOptions as M, type PendingApproval as P, type ResumeState as R, type SnapshotStore as S, type
|
|
816
|
+
export { type ApprovalRejected as A, serializeError as B, type CausesOfDeps as C, serializeThrown as D, type ErrorsOfDeps as E, type GatedStepOptions as G, type JSONValue as J, type MemoryCacheOptions as M, type PendingApproval as P, type ResumeState as R, type SnapshotStore as S, type WorkflowCancelledError as W, type Workflow as a, type ApprovalStepOptions as b, type PendingHook as c, type WorkflowSnapshot as d, type AnyResultFn as e, type WorkflowContext as f, type StepResult as g, type WorkflowOptions as h, type ExecutionOptions as i, type ResumeStateEntry as j, type RunConfig as k, type RunWithStateResult as l, type SerializedCause as m, SnapshotDecodeError as n, SnapshotFormatError as o, SnapshotMismatchError as p, type SnapshotWarning as q, type StepCache as r, type WorkflowFn as s, assertValidSnapshot as t, isWorkflowSnapshot as u, looksLikeWorkflowSnapshot as v, mergeSnapshots as w, validateSnapshot as x, createMemoryCache as y, deserializeCauseNew as z };
|
package/dist/persistence.d.cts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
export { J as JSONValue, M as MemoryCacheOptions, m as SerializedCause, n as SnapshotDecodeError, o as SnapshotFormatError, p as SnapshotMismatchError, S as SnapshotStore, q as SnapshotWarning, g as StepResult,
|
|
2
|
-
import './run-entry-
|
|
3
|
-
import './
|
|
1
|
+
export { J as JSONValue, M as MemoryCacheOptions, m as SerializedCause, n as SnapshotDecodeError, o as SnapshotFormatError, p as SnapshotMismatchError, S as SnapshotStore, q as SnapshotWarning, g as StepResult, d as WorkflowSnapshot, t as assertValidSnapshot, y as createMemoryCache, z as deserializeCauseNew, v as looksLikeWorkflowSnapshot, w as mergeSnapshots, B as serializeError, D as serializeThrown, x as validateSnapshot } from './persistence-entry-jflY61az.cjs';
|
|
2
|
+
import './run-entry-yQu63Yj9.cjs';
|
|
3
|
+
import './errors-entry-CMH73Eym.cjs';
|
|
4
|
+
import './tagged-error.cjs';
|
|
5
|
+
import './types-uR3JpwvF.cjs';
|
|
6
|
+
import '@standard-schema/spec';
|
package/dist/persistence.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
export { J as JSONValue, M as MemoryCacheOptions, m as SerializedCause, n as SnapshotDecodeError, o as SnapshotFormatError, p as SnapshotMismatchError, S as SnapshotStore, q as SnapshotWarning, g as StepResult,
|
|
2
|
-
import './run-entry-
|
|
3
|
-
import './
|
|
1
|
+
export { J as JSONValue, M as MemoryCacheOptions, m as SerializedCause, n as SnapshotDecodeError, o as SnapshotFormatError, p as SnapshotMismatchError, S as SnapshotStore, q as SnapshotWarning, g as StepResult, d as WorkflowSnapshot, t as assertValidSnapshot, y as createMemoryCache, z as deserializeCauseNew, v as looksLikeWorkflowSnapshot, w as mergeSnapshots, B as serializeError, D as serializeThrown, x as validateSnapshot } from './persistence-entry-ClFhxd2Q.js';
|
|
2
|
+
import './run-entry-rw7zll_G.js';
|
|
3
|
+
import './errors-entry-DOt5UUl4.js';
|
|
4
|
+
import './tagged-error.js';
|
|
5
|
+
import './types-CuWK5AlK.js';
|
|
6
|
+
import '@standard-schema/spec';
|
package/dist/policies.d.cts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ag as StepOptions, af as RetryOptions, ap as TimeoutOptions } from './run-entry-yQu63Yj9.cjs';
|
|
2
|
+
import './errors-entry-CMH73Eym.cjs';
|
|
3
|
+
import './tagged-error.cjs';
|
|
2
4
|
|
|
3
5
|
/**
|
|
4
6
|
* awaitly/policies
|
package/dist/policies.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ag as StepOptions, af as RetryOptions, ap as TimeoutOptions } from './run-entry-rw7zll_G.js';
|
|
2
|
+
import './errors-entry-DOt5UUl4.js';
|
|
3
|
+
import './tagged-error.js';
|
|
2
4
|
|
|
3
5
|
/**
|
|
4
6
|
* awaitly/policies
|
package/dist/ratelimit.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var ie=Object.defineProperty;var Ae=Object.getOwnPropertyDescriptor;var Pe=Object.getOwnPropertyNames;var _e=Object.prototype.hasOwnProperty;var Me=(n,u)=>{for(var i in u)ie(n,i,{get:u[i],enumerable:!0})},ve=(n,u,i,y)=>{if(u&&typeof u=="object"||typeof u=="function")for(let x of Pe(u))!_e.call(n,x)&&x!==i&&ie(n,x,{get:()=>u[x],enumerable:!(y=Ae(u,x))||y.enumerable});return n};var Oe=n=>ve(ie({},"__esModule",{value:!0}),n);var Xe={};Me(Xe,{createCombinedLimiter:()=>Re,createConcurrencyLimiter:()=>me,createCostBasedRateLimiter:()=>xe,createFixedWindowLimiter:()=>ge,createRateLimiter:()=>pe,isQueueFullError:()=>le,isRateLimitExceededError:()=>ke,rateLimiterPresets:()=>Ce});module.exports=Oe(Xe);function De(n){let u=n.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!u)return;let i=parseFloat(u[1]),y=u[2].toLowerCase();return{_tag:"Duration",millis:i*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[y]??1)}}var Ie="UNEXPECTED_ERROR";function Ue(n){return Ie}function K(n){return{ok:!0,value:n}}function N(n,u){let i=u?.cause;return{ok:!1,error:n,...i!==void 0?{cause:i}:{}}}function Le(n){if(n==null)return"unknown";if(typeof n=="string")return n.trim()||"unknown";if(typeof n=="object"){let u=n;if(typeof u._tag=="string"){let i=u._tag.trim();if(i)return i}if(typeof u.tag=="string"){let i=u.tag.trim();if(i)return i}if(typeof u.code=="string"){let i=u.code.trim();if(i)return i}else if(typeof u.code=="number")return String(u.code);if(n instanceof Error&&n.name){let i=n.name.trim();if(i)return i}}return"unknown"}function Ne(n,u){if(!(!u||!n))return u[n]}function Fe(n){let{intent:u,domain:i,owner:y,tags:x,stateChanges:f,emits:k,calls:E}=n;if(!u&&!i&&!y&&!x?.length&&!f?.length&&!k?.length&&!E?.length)return;let M={};return u&&(M.intent=u),i&&(M.domain=i),y&&(M.owner=y),x?.length&&(M.tags=x),f?.length&&(M.stateChanges=f),k?.length&&(M.emits=k),E?.length&&(M.calls=E),M}function j(n,u,i,y,x){let f=Le(n),k=Ne(f,u),E={tag:f,origin:i};return k!==void 0&&(E.classification=k),y!==void 0&&(E.attempt=y),x!==void 0&&(E.cumulativeDurationMs=x),E}var H=Symbol.for("step_timeout_marker");function Ee(n){return typeof n!="object"||n===null?!1:n.type==="STEP_TIMEOUT"?!0:H in n}function je(n){if(!(typeof n!="object"||n===null)){if(n.type==="STEP_TIMEOUT"){let u=n;return{timeoutMs:u.timeoutMs,stepName:u.stepName,stepKey:u.stepKey,attempt:u.attempt}}if(H in n)return n[H]}}var fe=Symbol("early-exit");function Ke(n,u){return{[fe]:!0,error:n,meta:u}}function Be(n){return typeof n=="object"&&n!==null&&n[fe]===!0}var Te=Symbol("mapper-exception");function J(n){return{[Te]:!0,thrown:n}}function We(n){return typeof n=="object"&&n!==null&&n[Te]===!0}function ue(n,u){let{backoff:i,initialDelay:y,maxDelay:x,jitter:f}=u,k;switch(i){case"fixed":k=y;break;case"linear":k=y*n;break;case"exponential":k=y*Math.pow(2,n-1);break}if(k=Math.min(k,x),f){let E=k*.25*Math.random();k=k+E}return Math.floor(k)}function ce(n){return new Promise(u=>setTimeout(u,n))}var de=Symbol("timeout"),te=Symbol("timeout-option");function qe(n){return typeof n=="object"&&n!==null&&n[te]===!0}async function Ve(n,u,i,y){let x=new AbortController,f=u.onTimeout??"error",k=()=>typeof f=="function"?f({name:i.name,key:i.key,ms:u.ms}):u.error??{type:"STEP_TIMEOUT",stepName:i.name,stepKey:i.key,timeoutMs:u.ms,attempt:i.attempt},E;y?.aborted&&x.abort(y.reason);let M;y&&!y.aborted&&(M=()=>x.abort(y.reason),y.addEventListener("abort",M,{once:!0}));let o=new Promise((R,w)=>{E=setTimeout(()=>{if(f!=="disconnect"&&x.abort(),f==="option"){w({[te]:!0,ms:u.ms});return}w({[de]:!0,error:k()})},u.ms)}),D;u.signal?D=Promise.resolve(n(x.signal)):D=Promise.resolve(n());try{return await Promise.race([D,o])}catch(R){if(typeof R=="object"&&R!==null&&R[te]===!0)throw{[te]:!0,ms:u.ms};if(typeof R=="object"&&R!==null&&R[de]===!0){f==="disconnect"&&D.catch(()=>{});let w=R.error;if(typeof w=="object"&&w!==null&&w.type!=="STEP_TIMEOUT"){let C={timeoutMs:u.ms,stepName:i.name,stepKey:i.key,attempt:i.attempt};H in w?w[H]=C:Object.defineProperty(w,H,{value:C,enumerable:!1,writable:!0,configurable:!1})}throw w}throw R}finally{clearTimeout(E),M&&y&&y.removeEventListener("abort",M)}}var z={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function ye(n,u){let{onError:i,onEvent:y,catchUnexpected:x,workflowId:f,workflowName:k,context:E,_workflowSignal:M}=u&&typeof u=="object"?u:{},o=f??crypto.randomUUID(),D=x??Ue,R=[],w=0,C=p=>p??`step_${++w}`,s=p=>{let W=p.context!==void 0||E===void 0?p:{...p,context:E},X=k!==void 0&&W.workflowName===void 0?{...W,workflowName:k}:W;if(X.type==="step_success"){let Z=X.stepId;for(let ee=R.length-1;ee>=0;ee--){let q=R[ee];if(q.type==="race"&&!q.winnerId){q.winnerId=Z;break}}}y?.(X,E)},I=Ke,F=p=>Be(p),B=(p,W)=>p,be=p=>typeof p=="function"?!1:!!(p&&typeof p=="object"&&"ok"in p||p&&typeof p=="object"&&"then"in p&&typeof p.then=="function");try{let W=function(a){let m={};for(let[r,t]of Object.entries(a))if(typeof t=="function")m[r]=t;else if(t&&typeof t=="object"&&"fn"in t)m[r]=t.fn;else throw new TypeError(`step.parallel: operation "${r}" must be a function or { fn, errors? } object`);return m},X=function(a,m){let r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1;R.push({scopeId:r,type:"parallel"});let c=()=>{if(e)return;e=!0;let l=R.findIndex(d=>d.scopeId===r);l!==-1&&R.splice(l,1),s({type:"scope_end",workflowId:o,scopeId:r,ts:Date.now(),durationMs:performance.now()-t})};s({type:"scope_start",workflowId:o,scopeId:r,scopeType:"parallel",name:a,ts:Date.now()});try{let l=await m();if(c(),!l.ok)throw i?.(l.error,a,E),I(l.error,{origin:"result",resultCause:l.cause});return l.value}catch(l){throw c(),l}})()},Z=function(a,m){let r=Object.keys(a),t=m.name??`Parallel(${r.join(", ")})`,e=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let c=performance.now(),l=!1;R.push({scopeId:e,type:"parallel"});let d=()=>{if(l)return;l=!0;let T=R.findIndex(g=>g.scopeId===e);T!==-1&&R.splice(T,1),s({type:"scope_end",workflowId:o,scopeId:e,ts:Date.now(),durationMs:performance.now()-c})};s({type:"scope_start",workflowId:o,scopeId:e,scopeType:"parallel",name:t,ts:Date.now()});try{let T=await new Promise(h=>{if(r.length===0){h([]);return}let v=!1,L=r.length,S=new Array(r.length);for(let U=0;U<r.length;U++){let A=r[U],_=U;Promise.resolve(a[A]()).catch(P=>N({type:"PROMISE_REJECTED",cause:P},{cause:{type:"PROMISE_REJECTION",reason:P}})).then(P=>{if(!v){if(!P.ok){v=!0,h([{key:A,result:P}]);return}S[_]={key:A,result:P},L--,L===0&&h(S)}})}});d();let g={};for(let{key:h,result:v}of T){if(!v.ok)throw i?.(v.error,h,E),I(v.error,{origin:"result",resultCause:v.cause});g[h]=v.value}return g}catch(T){throw d(),T}})()};var Qe=W,Ye=X,$e=Z;let p=(a,m,r)=>(async()=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let t=r??{},e=Fe(t),c=a,l=t.key??a,d=t.key??a,{description:T,retry:g,timeout:h}=t,v=C(l),L=y,S=L?performance.now():0,A=be(m)?()=>m:m,P={attempts:Math.max(1,g?.attempts??1),backoff:g?.backoff??z.backoff,initialDelay:g?.initialDelay??z.initialDelay,maxDelay:g?.maxDelay??z.maxDelay,jitter:g?.jitter??z.jitter,retryOn:g?.retryOn??z.retryOn,onRetry:g?.onRetry??z.onRetry};y&&s({type:"step_start",workflowId:o,stepId:v,stepKey:l,name:c,description:T,ts:Date.now(),...e&&{metadata:e}});let $;for(let O=1;O<=P.attempts;O++){let he=L?performance.now():0;try{let b;if(h?b=await Ve(A,h,{name:c,key:l,attempt:O},M):b=await A(),b.ok){let Y=performance.now()-S;return s({type:"step_success",workflowId:o,stepId:v,stepKey:l,name:c,description:T,ts:Date.now(),durationMs:Y,...e&&{metadata:e}}),d&&s({type:"step_complete",workflowId:o,stepKey:d,name:c,description:T,ts:Date.now(),durationMs:Y,result:b,...e&&{metadata:e}}),b.value}if($=b,O<P.attempts&&P.retryOn(b.error,O)){let Y=ue(O,P);s({type:"step_retry",workflowId:o,stepId:v,stepKey:l,name:c,ts:Date.now(),attempt:O+1,maxAttempts:P.attempts,delayMs:Y,error:b.error,...e&&{metadata:e},diagnostics:j(b.error,t.errorMeta,"result",O,performance.now()-S)}),P.onRetry(b.error,O,Y),await ce(Y);continue}P.attempts>1&&s({type:"step_retries_exhausted",workflowId:o,stepId:v,stepKey:l,name:c,ts:Date.now(),durationMs:performance.now()-S,attempts:O,lastError:b.error,...e&&{metadata:e},diagnostics:j(b.error,t.errorMeta,"result",O,performance.now()-S)});break}catch(b){let Y=performance.now()-he;if(qe(b)){let V=b.ms;s({type:"step_timeout",workflowId:o,stepId:v,stepKey:l,name:c,ts:Date.now(),timeoutMs:V,attempt:O,...e&&{metadata:e},diagnostics:j(b,t.errorMeta,"timeout",O)}),s({type:"step_success",workflowId:o,stepId:v,stepKey:l,name:c,description:T,ts:Date.now(),durationMs:performance.now()-S,...e&&{metadata:e}}),d&&s({type:"step_complete",workflowId:o,stepKey:d,name:c,description:T,ts:Date.now(),durationMs:performance.now()-S,result:K(void 0),...e&&{metadata:e}});return}if(F(b))throw s({type:"step_aborted",workflowId:o,stepId:v,stepKey:l,name:c,description:T,ts:Date.now(),durationMs:Y,...e&&{metadata:e}}),b;if(Ee(b)){let V=je(b),Se=h?.ms??V?.timeoutMs??0;if(s({type:"step_timeout",workflowId:o,stepId:v,stepKey:l,name:c,ts:Date.now(),timeoutMs:Se,attempt:O,...e&&{metadata:e},diagnostics:j(b,t.errorMeta,"timeout",O)}),O<P.attempts&&P.retryOn(b,O)){let ae=ue(O,P);s({type:"step_retry",workflowId:o,stepId:v,stepKey:l,name:c,ts:Date.now(),attempt:O+1,maxAttempts:P.attempts,delayMs:ae,error:b,...e&&{metadata:e},diagnostics:j(b,t.errorMeta,"timeout",O,performance.now()-S)}),P.onRetry(b,O,ae),await ce(ae);continue}P.attempts>1&&s({type:"step_retries_exhausted",workflowId:o,stepId:v,stepKey:l,name:c,ts:Date.now(),durationMs:performance.now()-S,attempts:O,lastError:b,...e&&{metadata:e},diagnostics:j(b,t.errorMeta,"timeout",O,performance.now()-S)});let se=performance.now()-S;throw s({type:"step_error",workflowId:o,stepId:v,stepKey:l,name:c,description:T,ts:Date.now(),durationMs:se,error:b,...e&&{metadata:e},diagnostics:j(b,t.errorMeta,"timeout",O,se)}),d&&s({type:"step_complete",workflowId:o,stepKey:d,name:c,description:T,ts:Date.now(),durationMs:se,result:N(b,{cause:b}),meta:{origin:"throw",thrown:b},...e&&{metadata:e}}),i?.(b,c,E),I(b,{origin:"throw",thrown:b})}if(O<P.attempts&&P.retryOn(b,O)){let V=ue(O,P);s({type:"step_retry",workflowId:o,stepId:v,stepKey:l,name:c,ts:Date.now(),attempt:O+1,maxAttempts:P.attempts,delayMs:V,error:b,...e&&{metadata:e},diagnostics:j(b,t.errorMeta,"throw",O,performance.now()-S)}),P.onRetry(b,O,V),await ce(V);continue}P.attempts>1&&!Ee(b)&&s({type:"step_retries_exhausted",workflowId:o,stepId:v,stepKey:l,name:c,ts:Date.now(),durationMs:performance.now()-S,attempts:O,lastError:b,...e&&{metadata:e},diagnostics:j(b,t.errorMeta,"throw",O,performance.now()-S)});let oe=performance.now()-S,G;try{G=D(b)}catch(V){throw J(V)}throw s({type:"step_error",workflowId:o,stepId:v,stepKey:l,name:c,description:T,ts:Date.now(),durationMs:oe,error:G,...e&&{metadata:e},diagnostics:j(b,t.errorMeta,"throw",O,oe)}),d&&s({type:"step_complete",workflowId:o,stepKey:d,name:c,description:T,ts:Date.now(),durationMs:oe,result:N(G,{cause:b}),meta:{origin:"throw",thrown:b},...e&&{metadata:e}}),i?.(G,c,E),I(G,{origin:"throw",thrown:b})}}let Q=$,re=performance.now()-S,ne=B(Q.error,{origin:"result",resultCause:Q.cause});throw s({type:"step_error",workflowId:o,stepId:v,stepKey:l,name:c,description:T,ts:Date.now(),durationMs:re,error:ne,...e&&{metadata:e},diagnostics:j(Q.error,t.errorMeta,"result",P.attempts,re)}),d&&s({type:"step_complete",workflowId:o,stepKey:d,name:c,description:T,ts:Date.now(),durationMs:re,result:Q,meta:{origin:"result",resultCause:Q.cause},...e&&{metadata:e}}),i?.(ne,c,E),I(ne,{origin:"result",resultCause:Q.cause})})();p.try=(a,m,r)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.try() requires an explicit string ID as the first argument. Example: step.try("parse", () => JSON.parse(str), { error: "PARSE_ERROR" })');let t=r.key??a,e=a,c=a,l="error"in r?()=>r.error:r.onError,d=y;return(async()=>{let T=d?performance.now():0;y&&s({type:"step_start",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now()});try{let g=await m(),h=performance.now()-T;return s({type:"step_success",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:h}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:h,result:K(g)}),g}catch(g){let h=l(g),v=performance.now()-T,L=B(h,{origin:"throw",thrown:g});throw s({type:"step_error",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:v,error:L}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:v,result:N(h,{cause:g}),meta:{origin:"throw",thrown:g}}),i?.(L,e,E),I(L,{origin:"throw",thrown:g})}})()},p.fromResult=(a,m,r)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.fromResult() requires an explicit string ID as the first argument. Example: step.fromResult("callProvider", () => callProvider(input), { onError: (e) => ({ type: "FAILED" }) })');let t=r.key??a,e=a,c=a,l="error"in r?()=>r.error:r.onError,d=y;return(async()=>{let T=d?performance.now():0;y&&s({type:"step_start",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now()});let g=await m();if(g.ok){let h=performance.now()-T;return s({type:"step_success",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:h}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:h,result:K(g.value)}),g.value}else{let h=l(g.error),v=performance.now()-T,L=B(h,{origin:"result",resultCause:g.error});throw s({type:"step_error",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:v,error:L}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:v,result:N(h,{cause:g.error}),meta:{origin:"result",resultCause:g.error}}),i?.(L,e,E),I(L,{origin:"result",resultCause:g.error})}})()},p.fromNullable=(a,m,r,t)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.fromNullable() requires an explicit string ID as the first argument. Example: step.fromNullable("getUser", () => db.find(id), () => ({ type: "NOT_FOUND" }))');return p(a,async()=>{let e=await m();return e!=null?K(e):N(r())},t)},p.retry=(a,m,r)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.retry() requires an explicit string ID as the first argument. Example: step.retry("fetchData", () => fetchData(), { attempts: 3 })');return p(a,m,{key:r.key??a,retry:{attempts:r.attempts,backoff:r.backoff,initialDelay:r.initialDelay,maxDelay:r.maxDelay,jitter:r.jitter,retryOn:r.retryOn,onRetry:r.onRetry},timeout:r.timeout})},p.withTimeout=(a,m,r)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.withTimeout() requires an explicit string ID as the first argument. Example: step.withTimeout("slowOp", () => slowOp(), { ms: 5000 })');return p(a,m,{key:r.key??a,timeout:r})},p.sleep=(a,m,r)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let t=typeof m=="string"?De(m):m;if(!t)throw new Error(`step.sleep: invalid duration '${m}'`);let e=t.millis,c=r?.signal;return p(a,async()=>{if(M?.aborted||c?.aborted){let l=new Error("Sleep aborted");throw l.name="AbortError",l}return new Promise((l,d)=>{let T={timeoutId:void 0},g=()=>{T.timeoutId&&clearTimeout(T.timeoutId);let h=new Error("Sleep aborted");h.name="AbortError",d(h)};M?.addEventListener("abort",g,{once:!0}),c?.addEventListener("abort",g,{once:!0}),T.timeoutId=setTimeout(()=>{M?.removeEventListener("abort",g),c?.removeEventListener("abort",g),l(K(void 0))},e)})},{key:r?.key??a,description:r?.description})},p.parallel=((...a)=>{if(typeof a[0]!="string")throw new TypeError("step.parallel(name, ...): first argument must be a string (step name). Example: step.parallel('Fetch data', { user: () => fetchUser(), posts: () => fetchPosts() })");let m=a[0],r=a[1];if(typeof r=="function")return X(m,r);if(r&&typeof r=="object"&&!Array.isArray(r)){let e=W(r);return Z(e,{name:m})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),p.race=(a,m)=>{let r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1,c={scopeId:r,type:"race",winnerId:void 0};R.push(c);let l=()=>{if(e)return;e=!0;let d=R.findIndex(T=>T.scopeId===r);d!==-1&&R.splice(d,1),s({type:"scope_end",workflowId:o,scopeId:r,ts:Date.now(),durationMs:performance.now()-t,winnerId:c.winnerId})};s({type:"scope_start",workflowId:o,scopeId:r,scopeType:"race",name:a,ts:Date.now()});try{let d=await m();if(l(),!d.ok)throw i?.(d.error,a,E),I(d.error,{origin:"result",resultCause:d.cause});return d.value}catch(d){throw l(),d}})()},p.allSettled=(a,m)=>{let r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1;R.push({scopeId:r,type:"allSettled"});let c=()=>{if(e)return;e=!0;let l=R.findIndex(d=>d.scopeId===r);l!==-1&&R.splice(l,1),s({type:"scope_end",workflowId:o,scopeId:r,ts:Date.now(),durationMs:performance.now()-t})};s({type:"scope_start",workflowId:o,scopeId:r,scopeType:"allSettled",name:a,ts:Date.now()});try{let l=await m();if(c(),!l.ok)throw i?.(l.error,a,E),I(l.error,{origin:"result",resultCause:l.cause});return l.value}catch(l){throw c(),l}})()},p.if=(a,m,r)=>r(),p.label=p.if,p.branch=async(a,m)=>{let{condition:r,then:t,else:e}=m;if(r())return await t();if(e)return await e()},p.arm=(a,m)=>({fn:a,errors:m}),p.forEach=async(a,m,r)=>{let t=[],e=r.maxIterations,c=0,l="run"in r,d=Symbol.asyncIterator in m?m:(async function*(){yield*m})();for await(let T of d){if(e!==void 0&&c>=e)break;let g;l?g=await r.run(T,c):g=await r.item.handler(T,c,p),t.push(g),c++}return t},p.item=a=>({__forEachItemHandler:!0,handler:a}),p.dep=(a,m)=>m,p.run=(a,m,r)=>p(a,()=>m,r),p.workflow=(a,m,r)=>p(a,m,r),p.andThen=(a,m,r,t)=>p(a,()=>r(m),t),p.match=async(a,m,r,t)=>p(a,async()=>{let e=await m;return e.ok?K(await r.ok(e.value)):K(await r.err(e.error,e.cause))},t),p.all=p.parallel,p.map=async(a,m,r,t)=>{let e=t?.concurrency??m.length;return p(a,()=>e>=m.length?we(m.map((c,l)=>r(c,l))):(async()=>{let c=[];for(let l=0;l<m.length;l+=e){let d=m.slice(l,l+e),T=await we(d.map((g,h)=>r(g,l+h)));if(!T.ok)return T;c.push(...T.value)}return K(c)})(),{key:t?.key})},p.withFallback=(a,m,r)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.withFallback() requires an explicit string ID as the first argument. Example: step.withFallback("getUser", () => fetchUser(id), { fallback: () => fetchFromCache(id) })');let t=r.key??a,e=a,c=C(t),l=y;return(async()=>{let d=l?performance.now():0;y&&s({type:"step_start",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now()});let T;try{T=await m()}catch(S){if(F(S))throw s({type:"step_aborted",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-d}),S;let U;try{U=D(S)}catch(_){throw J(_)}if(r.on!==void 0&&r.on!==U){let _=performance.now()-d;throw s({type:"step_error",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:_,error:U}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:_,result:N(U,{cause:S}),meta:{origin:"throw",thrown:S}}),i?.(U,e,E),I(U,{origin:"throw",thrown:S})}let A;try{A=await r.fallback()}catch(_){if(F(_))throw s({type:"step_aborted",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-d}),_;let P;try{P=D(_)}catch(Q){throw J(Q)}let $=performance.now()-d;throw s({type:"step_error",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:$,error:P}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:$,result:N(P,{cause:_}),meta:{origin:"throw",thrown:_}}),i?.(P,e,E),I(P,{origin:"throw",thrown:_})}if(A.ok){let _=performance.now()-d;return s({type:"step_success",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:_}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:_,result:A,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(U)}}),A.value}else{let _=performance.now()-d,P=B(A.error,{origin:"result",resultCause:A.cause});throw s({type:"step_error",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:_,error:P}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:_,result:A,meta:{origin:"result",resultCause:A.cause}}),i?.(P,e,E),I(P,{origin:"result",resultCause:A.cause})}}if(T.ok){let S=performance.now()-d;return s({type:"step_success",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:S}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:S,result:T}),T.value}let g=T.error;if(r.on!==void 0&&r.on!==g){let S=performance.now()-d,U=B(g,{origin:"result",resultCause:T.cause});throw s({type:"step_error",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:S,error:U}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:S,result:T,meta:{origin:"result",resultCause:T.cause}}),i?.(U,e,E),I(U,{origin:"result",resultCause:T.cause})}let h;try{h=await r.fallback()}catch(S){if(F(S))throw s({type:"step_aborted",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-d}),S;let U;try{U=D(S)}catch(_){throw J(_)}let A=performance.now()-d;throw s({type:"step_error",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:A,error:U}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:A,result:N(U,{cause:S}),meta:{origin:"throw",thrown:S}}),i?.(U,e,E),I(U,{origin:"throw",thrown:S})}if(h.ok){let S=performance.now()-d;return s({type:"step_success",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:S}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:S,result:h,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(g)}}),h.value}let v=performance.now()-d,L=B(h.error,{origin:"result",resultCause:h.cause});throw s({type:"step_error",workflowId:o,stepId:c,stepKey:t,name:e,ts:Date.now(),durationMs:v,error:L}),t&&s({type:"step_complete",workflowId:o,stepKey:t,name:e,ts:Date.now(),durationMs:v,result:h,meta:{origin:"result",resultCause:h.cause}}),i?.(L,e,E),I(L,{origin:"result",resultCause:h.cause})})()},p.withResource=(a,m)=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step.withResource() requires an explicit string ID as the first argument. Example: step.withResource("useDb", { acquire: () => connect(), use: (db) => query(db), release: (db) => db.close() })');let r=a,t=a,e=C(r),c=y;return(async()=>{let l=c?performance.now():0;y&&s({type:"step_start",workflowId:o,stepId:e,stepKey:r,name:t,ts:Date.now()});let d;try{d=await m.acquire()}catch(A){if(F(A))throw s({type:"step_aborted",workflowId:o,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:performance.now()-l}),A;let _;try{_=D(A)}catch($){throw J($)}let P=performance.now()-l;throw s({type:"step_error",workflowId:o,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:P,error:_}),r&&s({type:"step_complete",workflowId:o,stepKey:r,name:t,ts:Date.now(),durationMs:P,result:N(_,{cause:A}),meta:{origin:"throw",thrown:A}}),i?.(_,t,E),I(_,{origin:"throw",thrown:A})}if(!d.ok){let A=performance.now()-l,_=B(d.error,{origin:"result",resultCause:d.cause});throw s({type:"step_error",workflowId:o,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:A,error:_}),r&&s({type:"step_complete",workflowId:o,stepKey:r,name:t,ts:Date.now(),durationMs:A,result:d,meta:{origin:"result",resultCause:d.cause}}),i?.(_,t,E),I(_,{origin:"result",resultCause:d.cause})}let T=d.value,g,h,v=!1;try{g=await m.use(T)}catch(A){if(F(A)){try{await m.release(T)}catch(_){console.warn(`[awaitly] step.withResource("${a}"): release threw after earlyExit:`,_)}throw A}h=A,v=!0}try{await m.release(T)}catch(A){console.warn(`[awaitly] step.withResource("${a}"): release threw:`,A)}if(v){let A;try{A=D(h)}catch(P){throw J(P)}let _=performance.now()-l;throw s({type:"step_error",workflowId:o,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:_,error:A}),r&&s({type:"step_complete",workflowId:o,stepKey:r,name:t,ts:Date.now(),durationMs:_,result:N(A,{cause:h}),meta:{origin:"throw",thrown:h}}),i?.(A,t,E),I(A,{origin:"throw",thrown:h})}let L=g;if(L.ok){let A=performance.now()-l;return s({type:"step_success",workflowId:o,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:A}),r&&s({type:"step_complete",workflowId:o,stepKey:r,name:t,ts:Date.now(),durationMs:A,result:L}),L.value}let S=performance.now()-l,U=B(L.error,{origin:"result",resultCause:L.cause});throw s({type:"step_error",workflowId:o,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:S,error:U}),r&&s({type:"step_complete",workflowId:o,stepKey:r,name:t,ts:Date.now(),durationMs:S,result:L,meta:{origin:"result",resultCause:L.cause}}),i?.(U,t,E),I(U,{origin:"result",resultCause:L.cause})})()};let q=await n({step:p});if(process.env.NODE_ENV!=="production"&&q!==null&&typeof q=="object"&&"ok"in q&&typeof q.ok=="boolean"){let a=q;(a.ok===!0&&"value"in a||a.ok===!1&&"error"in a)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
|
|
1
|
+
"use strict";var le=Object.defineProperty;var je=Object.getOwnPropertyDescriptor;var Ke=Object.getOwnPropertyNames;var Be=Object.prototype.hasOwnProperty;var We=(r,e)=>{for(var i in e)le(r,i,{get:e[i],enumerable:!0})},$e=(r,e,i,y)=>{if(e&&typeof e=="object"||typeof e=="function")for(let R of Ke(e))!Be.call(r,R)&&R!==i&&le(r,R,{get:()=>e[R],enumerable:!(y=je(e,R))||y.enumerable});return r};var Ve=r=>$e(le({},"__esModule",{value:!0}),r);var rt={};We(rt,{createCombinedLimiter:()=>Oe,createConcurrencyLimiter:()=>ye,createCostBasedRateLimiter:()=>De,createFixedWindowLimiter:()=>Ie,createRateLimiter:()=>de,isQueueFullError:()=>Ee,isRateLimitExceededError:()=>ve,rateLimiterPresets:()=>Ue});module.exports=Ve(rt);var ee=class extends Error{_tag};function F(r,e){return class extends ee{_tag=r;constructor(i,y){let R=e?.message?e.message(i??{}):r;if(super(R),this.name=r,Object.setPrototypeOf(this,new.target.prototype),i&&typeof i=="object"){let{_tag:E,name:T,message:m,stack:_,...s}=i,M=Object.prototype.hasOwnProperty.call(s,"cause"),k=M?s.cause:void 0;M&&delete s.cause;let f=y?.cause!==void 0;if(M&&f)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,s),M&&(this.cause=k),f&&(this.cause=y?.cause)}else y?.cause!==void 0&&(this.cause=y.cause)}}}Object.defineProperty(F,Symbol.hasInstance,{value:r=>r instanceof ee});(R=>{function r(E){return E instanceof Error}R.isError=r;function e(E){return E instanceof ee}R.isTaggedError=e;function i(E,T){let m=E._tag,_=T[m];return _(E)}R.match=i;function y(E,T,m){let _=E._tag,s=T[_];return s?s(E):m(E)}R.matchPartial=y})(F||={});var we=class extends F("TimeoutError",{message:e=>e.operation?`TimeoutError: ${e.operation} timed out after ${e.ms}ms`:`TimeoutError: Operation timed out after ${e.ms}ms`}){},fe=class extends F("RetryExhaustedError",{message:e=>e.operation?`RetryExhaustedError: ${e.operation} failed after ${e.attempts} attempts`:`RetryExhaustedError: Operation failed after ${e.attempts} attempts`}){},Te=class extends F("RateLimitError",{message:e=>e.limiterName?`RateLimitError: Rate limit exceeded for ${e.limiterName}${e.retryAfterMs?`, retry after ${e.retryAfterMs}ms`:""}`:`RateLimitError: Rate limit exceeded${e.retryAfterMs?`, retry after ${e.retryAfterMs}ms`:""}`}){},ge=class extends F("CircuitBreakerOpenError",{message:e=>`CircuitBreakerOpenError: Circuit ${e.circuitName} is ${e.state??"OPEN"}${e.retryAfterMs?`, retry after ${Math.ceil(e.retryAfterMs/1e3)}s`:""}`}){},ke=class extends F("ValidationError",{message:e=>`ValidationError: Invalid ${e.field} - ${e.reason}`}){},Re=class extends F("NotFoundError",{message:e=>e.id?`NotFoundError: ${e.resource} with id ${e.id} not found`:`NotFoundError: ${e.resource} not found`}){},xe=class extends F("UnauthorizedError",{message:e=>e.reason?`UnauthorizedError: ${e.reason}`:e.action&&e.resource?`UnauthorizedError: Not authorized to ${e.action} ${e.resource}`:"UnauthorizedError: Access denied"}){},Ce=class extends F("NetworkError",{message:e=>e.url?`NetworkError: ${e.reason} (${e.url})`:`NetworkError: ${e.reason}`}){},he=class extends F("CompensationError",{message:e=>`CompensationError: Failed to compensate step ${e.step}`}){},ne=class extends F("UnexpectedError",{message:e=>`UnexpectedError: ${e.cause instanceof Error?e.cause.message:String(e.cause??"unknown")}`}){};function qe(r){let e=r.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!e)return;let i=parseFloat(e[1]),y=e[2].toLowerCase();return{_tag:"Duration",millis:i*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[y]??1)}}function He(r){return new ne({cause:r})}function B(r){return{ok:!0,value:r}}function N(r,e){let i=e?.cause;return{ok:!1,error:r,...i!==void 0?{cause:i}:{}}}function ze(r){if(r==null)return"unknown";if(typeof r=="string")return r.trim()||"unknown";if(typeof r=="object"){let e=r;if(typeof e._tag=="string"){let i=e._tag.trim();if(i)return i}if(typeof e.tag=="string"){let i=e.tag.trim();if(i)return i}if(typeof e.code=="string"){let i=e.code.trim();if(i)return i}else if(typeof e.code=="number")return String(e.code);if(r instanceof Error&&r.name){let i=r.name.trim();if(i)return i}}return"unknown"}function Qe(r,e){if(!(!e||!r))return e[r]}function Ye(r){let{intent:e,domain:i,owner:y,tags:R,stateChanges:E,emits:T,calls:m}=r;if(!e&&!i&&!y&&!R?.length&&!E?.length&&!T?.length&&!m?.length)return;let _={};return e&&(_.intent=e),i&&(_.domain=i),y&&(_.owner=y),R?.length&&(_.tags=R),E?.length&&(_.stateChanges=E),T?.length&&(_.emits=T),m?.length&&(_.calls=m),_}function K(r,e,i,y,R){let E=ze(r),T=Qe(E,e),m={tag:E,origin:i};return T!==void 0&&(m.classification=T),y!==void 0&&(m.attempt=y),R!==void 0&&(m.cumulativeDurationMs=R),m}var G=Symbol.for("step_timeout_marker");function be(r){return typeof r!="object"||r===null?!1:r.type==="STEP_TIMEOUT"?!0:G in r}function Xe(r){if(!(typeof r!="object"||r===null)){if(r.type==="STEP_TIMEOUT"){let e=r;return{timeoutMs:e.timeoutMs,stepName:e.stepName,stepKey:e.stepKey,attempt:e.attempt}}if(G in r)return r[G]}}var _e=Symbol("early-exit");function Je(r,e){return{[_e]:!0,error:r,meta:e}}function Ge(r){return typeof r=="object"&&r!==null&&r[_e]===!0}var Me=Symbol("mapper-exception");function X(r){return{[Me]:!0,thrown:r}}function Ze(r){return typeof r=="object"&&r!==null&&r[Me]===!0}function pe(r,e){let{backoff:i,initialDelay:y,maxDelay:R,jitter:E}=e,T;switch(i){case"fixed":T=y;break;case"linear":T=y*r;break;case"exponential":T=y*Math.pow(2,r-1);break}if(T=Math.min(T,R),E){let m=T*.25*Math.random();T=T+m}return Math.floor(T)}function me(r){return new Promise(e=>setTimeout(e,r))}var Se=Symbol("timeout"),oe=Symbol("timeout-option");function et(r){return typeof r=="object"&&r!==null&&r[oe]===!0}async function tt(r,e,i,y){let R=new AbortController,E=e.onTimeout??"error",T=()=>typeof E=="function"?E({name:i.name,key:i.key,ms:e.ms}):e.error??{type:"STEP_TIMEOUT",stepName:i.name,stepKey:i.key,timeoutMs:e.ms,attempt:i.attempt},m;y?.aborted&&R.abort(y.reason);let _;y&&!y.aborted&&(_=()=>R.abort(y.reason),y.addEventListener("abort",_,{once:!0}));let s=new Promise((k,f)=>{m=setTimeout(()=>{if(E!=="disconnect"&&R.abort(),E==="option"){f({[oe]:!0,ms:e.ms});return}f({[Se]:!0,error:T()})},e.ms)}),M;e.signal?M=Promise.resolve(r(R.signal)):M=Promise.resolve(r());try{return await Promise.race([M,s])}catch(k){if(typeof k=="object"&&k!==null&&k[oe]===!0)throw{[oe]:!0,ms:e.ms};if(typeof k=="object"&&k!==null&&k[Se]===!0){E==="disconnect"&&M.catch(()=>{});let f=k.error;if(typeof f=="object"&&f!==null&&f.type!=="STEP_TIMEOUT"){let C={timeoutMs:e.ms,stepName:i.name,stepKey:i.key,attempt:i.attempt};G in f?f[G]=C:Object.defineProperty(f,G,{value:C,enumerable:!1,writable:!0,configurable:!1})}throw f}throw k}finally{clearTimeout(m),_&&y&&y.removeEventListener("abort",_)}}var J={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function Ae(r,e){let{onError:i,onEvent:y,catchUnexpected:R,workflowId:E,workflowName:T,context:m,_workflowSignal:_}=e&&typeof e=="object"?e:{},s=E??crypto.randomUUID(),M=R??He,k=[],f=0,C=p=>p??`step_${++f}`,a=p=>{let $=p.context!==void 0||m===void 0?p:{...p,context:m},H=T!==void 0&&$.workflowName===void 0?{...$,workflowName:T}:$;if(H.type==="step_success"){let te=H.stepId;for(let re=k.length-1;re>=0;re--){let V=k[re];if(V.type==="race"&&!V.winnerId){V.winnerId=te;break}}}y?.(H,m)},D=Je,j=p=>Ge(p),W=(p,$)=>p,Le=p=>typeof p=="function"?!1:!!(p&&typeof p=="object"&&"ok"in p||p&&typeof p=="object"&&"then"in p&&typeof p.then=="function");try{let $=function(u){let d={};for(let[o,n]of Object.entries(u))if(typeof n=="function")d[o]=n;else if(n&&typeof n=="object"&&"fn"in n)d[o]=n.fn;else throw new TypeError(`step.parallel: operation "${o}" must be a function or { fn, errors? } object`);return d},H=function(u,d){let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),t=!1;k.push({scopeId:o,type:"parallel"});let c=()=>{if(t)return;t=!0;let l=k.findIndex(w=>w.scopeId===o);l!==-1&&k.splice(l,1),a({type:"scope_end",workflowId:s,scopeId:o,ts:Date.now(),durationMs:performance.now()-n})};a({type:"scope_start",workflowId:s,scopeId:o,scopeType:"parallel",name:u,ts:Date.now()});try{let l=await d();if(c(),!l.ok)throw i?.(l.error,u,m),D(l.error,{origin:"result",resultCause:l.cause});return l.value}catch(l){throw c(),l}})()},te=function(u,d){let o=Object.keys(u),n=d.name??`Parallel(${o.join(", ")})`,t=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let c=performance.now(),l=!1;k.push({scopeId:t,type:"parallel"});let w=()=>{if(l)return;l=!0;let g=k.findIndex(x=>x.scopeId===t);g!==-1&&k.splice(g,1),a({type:"scope_end",workflowId:s,scopeId:t,ts:Date.now(),durationMs:performance.now()-c})};a({type:"scope_start",workflowId:s,scopeId:t,scopeType:"parallel",name:n,ts:Date.now()});try{let g=await new Promise(b=>{if(o.length===0){b([]);return}let O=!1,L=o.length,S=new Array(o.length);for(let U=0;U<o.length;U++){let A=o[U],v=U;Promise.resolve(u[A]()).catch(P=>N({type:"PROMISE_REJECTED",cause:P},{cause:{type:"PROMISE_REJECTION",reason:P}})).then(P=>{if(!O){if(!P.ok){O=!0,b([{key:A,result:P}]);return}S[v]={key:A,result:P},L--,L===0&&b(S)}})}});w();let x={};for(let{key:b,result:O}of g){if(!O.ok)throw i?.(O.error,b,m),D(O.error,{origin:"result",resultCause:O.cause});x[b]=O.value}return x}catch(g){throw w(),g}})()};var nt=$,ot=H,st=te;let p=(u,d,o)=>(async()=>{if(typeof u!="string"||u.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let n=o??{},t=Ye(n),c=u,l=n.key??u,w=n.key??u,{description:g,retry:x,timeout:b}=n,O=C(l),L=y,S=L?performance.now():0,A=Le(d)?()=>d:d,P={attempts:Math.max(1,x?.attempts??1),backoff:x?.backoff??J.backoff,initialDelay:x?.initialDelay??J.initialDelay,maxDelay:x?.maxDelay??J.maxDelay,jitter:x?.jitter??J.jitter,retryOn:x?.retryOn??J.retryOn,onRetry:x?.onRetry??J.onRetry};y&&a({type:"step_start",workflowId:s,stepId:O,stepKey:l,name:c,description:g,ts:Date.now(),...t&&{metadata:t}});let Y;for(let I=1;I<=P.attempts;I++){let Ne=L?performance.now():0;try{let h;if(b?h=await tt(A,b,{name:c,key:l,attempt:I},_):h=await A(),h.ok){let Q=performance.now()-S;return a({type:"step_success",workflowId:s,stepId:O,stepKey:l,name:c,description:g,ts:Date.now(),durationMs:Q,...t&&{metadata:t}}),w&&a({type:"step_complete",workflowId:s,stepKey:w,name:c,description:g,ts:Date.now(),durationMs:Q,result:h,...t&&{metadata:t}}),h.value}if(Y=h,I<P.attempts&&P.retryOn(h.error,I)){let Q=pe(I,P);a({type:"step_retry",workflowId:s,stepId:O,stepKey:l,name:c,ts:Date.now(),attempt:I+1,maxAttempts:P.attempts,delayMs:Q,error:h.error,...t&&{metadata:t},diagnostics:K(h.error,n.errorMeta,"result",I,performance.now()-S)}),P.onRetry(h.error,I,Q),await me(Q);continue}P.attempts>1&&a({type:"step_retries_exhausted",workflowId:s,stepId:O,stepKey:l,name:c,ts:Date.now(),durationMs:performance.now()-S,attempts:I,lastError:h.error,...t&&{metadata:t},diagnostics:K(h.error,n.errorMeta,"result",I,performance.now()-S)});break}catch(h){let Q=performance.now()-Ne;if(et(h)){let q=h.ms;a({type:"step_timeout",workflowId:s,stepId:O,stepKey:l,name:c,ts:Date.now(),timeoutMs:q,attempt:I,...t&&{metadata:t},diagnostics:K(h,n.errorMeta,"timeout",I)}),a({type:"step_success",workflowId:s,stepId:O,stepKey:l,name:c,description:g,ts:Date.now(),durationMs:performance.now()-S,...t&&{metadata:t}}),w&&a({type:"step_complete",workflowId:s,stepKey:w,name:c,description:g,ts:Date.now(),durationMs:performance.now()-S,result:B(void 0),...t&&{metadata:t}});return}if(j(h))throw a({type:"step_aborted",workflowId:s,stepId:O,stepKey:l,name:c,description:g,ts:Date.now(),durationMs:Q,...t&&{metadata:t}}),h;if(be(h)){let q=Xe(h),Fe=b?.ms??q?.timeoutMs??0;if(a({type:"step_timeout",workflowId:s,stepId:O,stepKey:l,name:c,ts:Date.now(),timeoutMs:Fe,attempt:I,...t&&{metadata:t},diagnostics:K(h,n.errorMeta,"timeout",I)}),I<P.attempts&&P.retryOn(h,I)){let ce=pe(I,P);a({type:"step_retry",workflowId:s,stepId:O,stepKey:l,name:c,ts:Date.now(),attempt:I+1,maxAttempts:P.attempts,delayMs:ce,error:h,...t&&{metadata:t},diagnostics:K(h,n.errorMeta,"timeout",I,performance.now()-S)}),P.onRetry(h,I,ce),await me(ce);continue}P.attempts>1&&a({type:"step_retries_exhausted",workflowId:s,stepId:O,stepKey:l,name:c,ts:Date.now(),durationMs:performance.now()-S,attempts:I,lastError:h,...t&&{metadata:t},diagnostics:K(h,n.errorMeta,"timeout",I,performance.now()-S)});let ue=performance.now()-S;throw a({type:"step_error",workflowId:s,stepId:O,stepKey:l,name:c,description:g,ts:Date.now(),durationMs:ue,error:h,...t&&{metadata:t},diagnostics:K(h,n.errorMeta,"timeout",I,ue)}),w&&a({type:"step_complete",workflowId:s,stepKey:w,name:c,description:g,ts:Date.now(),durationMs:ue,result:N(h,{cause:h}),meta:{origin:"throw",thrown:h},...t&&{metadata:t}}),i?.(h,c,m),D(h,{origin:"throw",thrown:h})}if(I<P.attempts&&P.retryOn(h,I)){let q=pe(I,P);a({type:"step_retry",workflowId:s,stepId:O,stepKey:l,name:c,ts:Date.now(),attempt:I+1,maxAttempts:P.attempts,delayMs:q,error:h,...t&&{metadata:t},diagnostics:K(h,n.errorMeta,"throw",I,performance.now()-S)}),P.onRetry(h,I,q),await me(q);continue}P.attempts>1&&!be(h)&&a({type:"step_retries_exhausted",workflowId:s,stepId:O,stepKey:l,name:c,ts:Date.now(),durationMs:performance.now()-S,attempts:I,lastError:h,...t&&{metadata:t},diagnostics:K(h,n.errorMeta,"throw",I,performance.now()-S)});let ie=performance.now()-S,Z;try{Z=M(h)}catch(q){throw X(q)}throw a({type:"step_error",workflowId:s,stepId:O,stepKey:l,name:c,description:g,ts:Date.now(),durationMs:ie,error:Z,...t&&{metadata:t},diagnostics:K(h,n.errorMeta,"throw",I,ie)}),w&&a({type:"step_complete",workflowId:s,stepKey:w,name:c,description:g,ts:Date.now(),durationMs:ie,result:N(Z,{cause:h}),meta:{origin:"throw",thrown:h},...t&&{metadata:t}}),i?.(Z,c,m),D(Z,{origin:"throw",thrown:h})}}let z=Y,se=performance.now()-S,ae=W(z.error,{origin:"result",resultCause:z.cause});throw a({type:"step_error",workflowId:s,stepId:O,stepKey:l,name:c,description:g,ts:Date.now(),durationMs:se,error:ae,...t&&{metadata:t},diagnostics:K(z.error,n.errorMeta,"result",P.attempts,se)}),w&&a({type:"step_complete",workflowId:s,stepKey:w,name:c,description:g,ts:Date.now(),durationMs:se,result:z,meta:{origin:"result",resultCause:z.cause},...t&&{metadata:t}}),i?.(ae,c,m),D(ae,{origin:"result",resultCause:z.cause})})();p.try=(u,d,o)=>{if(typeof u!="string"||u.length===0)throw new Error('[awaitly] step.try() requires an explicit string ID as the first argument. Example: step.try("parse", () => JSON.parse(str), { error: "PARSE_ERROR" })');let n=o.key??u,t=u,c=u,l="error"in o?()=>o.error:o.onError,w=y;return(async()=>{let g=w?performance.now():0;y&&a({type:"step_start",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now()});try{let x=await d(),b=performance.now()-g;return a({type:"step_success",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:b}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:b,result:B(x)}),x}catch(x){let b=l(x),O=performance.now()-g,L=W(b,{origin:"throw",thrown:x});throw a({type:"step_error",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:O,error:L}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:O,result:N(b,{cause:x}),meta:{origin:"throw",thrown:x}}),i?.(L,t,m),D(L,{origin:"throw",thrown:x})}})()},p.fromResult=(u,d,o)=>{if(typeof u!="string"||u.length===0)throw new Error('[awaitly] step.fromResult() requires an explicit string ID as the first argument. Example: step.fromResult("callProvider", () => callProvider(input), { onError: (e) => ({ type: "FAILED" }) })');let n=o.key??u,t=u,c=u,l="error"in o?()=>o.error:o.onError,w=y;return(async()=>{let g=w?performance.now():0;y&&a({type:"step_start",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now()});let x=await d();if(x.ok){let b=performance.now()-g;return a({type:"step_success",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:b}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:b,result:B(x.value)}),x.value}else{let b=l(x.error),O=performance.now()-g,L=W(b,{origin:"result",resultCause:x.error});throw a({type:"step_error",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:O,error:L}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:O,result:N(b,{cause:x.error}),meta:{origin:"result",resultCause:x.error}}),i?.(L,t,m),D(L,{origin:"result",resultCause:x.error})}})()},p.fromNullable=(u,d,o,n)=>{if(typeof u!="string"||u.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 p(u,async()=>{let t=await d();return t!=null?B(t):N(o())},n)},p.retry=(u,d,o)=>{if(typeof u!="string"||u.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 p(u,d,{key:o.key??u,retry:{attempts:o.attempts,backoff:o.backoff,initialDelay:o.initialDelay,maxDelay:o.maxDelay,jitter:o.jitter,retryOn:o.retryOn,onRetry:o.onRetry},timeout:o.timeout})},p.withTimeout=(u,d,o)=>{if(typeof u!="string"||u.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 p(u,d,{key:o.key??u,timeout:o})},p.sleep=(u,d,o)=>{if(typeof u!="string"||u.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let n=typeof d=="string"?qe(d):d;if(!n)throw new Error(`step.sleep: invalid duration '${d}'`);let t=n.millis,c=o?.signal;return p(u,async()=>{if(_?.aborted||c?.aborted){let l=new Error("Sleep aborted");throw l.name="AbortError",l}return new Promise((l,w)=>{let g={timeoutId:void 0},x=()=>{g.timeoutId&&clearTimeout(g.timeoutId);let b=new Error("Sleep aborted");b.name="AbortError",w(b)};_?.addEventListener("abort",x,{once:!0}),c?.addEventListener("abort",x,{once:!0}),g.timeoutId=setTimeout(()=>{_?.removeEventListener("abort",x),c?.removeEventListener("abort",x),l(B(void 0))},t)})},{key:o?.key??u,description:o?.description})},p.parallel=((...u)=>{if(typeof u[0]!="string")throw new TypeError("step.parallel(name, ...): first argument must be a string (step name). Example: step.parallel('Fetch data', { user: () => fetchUser(), posts: () => fetchPosts() })");let d=u[0],o=u[1];if(typeof o=="function")return H(d,o);if(o&&typeof o=="object"&&!Array.isArray(o)){let t=$(o);return te(t,{name:d})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),p.race=(u,d)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),t=!1,c={scopeId:o,type:"race",winnerId:void 0};k.push(c);let l=()=>{if(t)return;t=!0;let w=k.findIndex(g=>g.scopeId===o);w!==-1&&k.splice(w,1),a({type:"scope_end",workflowId:s,scopeId:o,ts:Date.now(),durationMs:performance.now()-n,winnerId:c.winnerId})};a({type:"scope_start",workflowId:s,scopeId:o,scopeType:"race",name:u,ts:Date.now()});try{let w=await d();if(l(),!w.ok)throw i?.(w.error,u,m),D(w.error,{origin:"result",resultCause:w.cause});return w.value}catch(w){throw l(),w}})()},p.allSettled=(u,d)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),t=!1;k.push({scopeId:o,type:"allSettled"});let c=()=>{if(t)return;t=!0;let l=k.findIndex(w=>w.scopeId===o);l!==-1&&k.splice(l,1),a({type:"scope_end",workflowId:s,scopeId:o,ts:Date.now(),durationMs:performance.now()-n})};a({type:"scope_start",workflowId:s,scopeId:o,scopeType:"allSettled",name:u,ts:Date.now()});try{let l=await d();if(c(),!l.ok)throw i?.(l.error,u,m),D(l.error,{origin:"result",resultCause:l.cause});return l.value}catch(l){throw c(),l}})()},p.if=(u,d,o)=>o(),p.label=p.if,p.branch=async(u,d)=>{let{condition:o,then:n,else:t}=d;if(o())return await n();if(t)return await t()},p.arm=(u,d)=>({fn:u,errors:d}),p.forEach=async(u,d,o)=>{let n=[],t=o.maxIterations,c=0,l="run"in o,w=Symbol.asyncIterator in d?d:(async function*(){yield*d})();for await(let g of w){if(t!==void 0&&c>=t)break;let x;l?x=await o.run(g,c):x=await o.item.handler(g,c,p),n.push(x),c++}return n},p.item=u=>({__forEachItemHandler:!0,handler:u}),p.dep=(u,d)=>d,p.run=(u,d,o)=>p(u,()=>d,o),p.workflow=(u,d,o)=>p(u,d,o),p.andThen=(u,d,o,n)=>p(u,()=>o(d),n),p.match=async(u,d,o,n)=>p(u,async()=>{let t=await d;return t.ok?B(await o.ok(t.value)):B(await o.err(t.error,t.cause))},n),p.all=p.parallel,p.map=async(u,d,o,n)=>{let t=n?.concurrency??d.length;return p(u,()=>t>=d.length?Pe(d.map((c,l)=>o(c,l))):(async()=>{let c=[];for(let l=0;l<d.length;l+=t){let w=d.slice(l,l+t),g=await Pe(w.map((x,b)=>o(x,l+b)));if(!g.ok)return g;c.push(...g.value)}return B(c)})(),{key:n?.key})},p.withFallback=(u,d,o)=>{if(typeof u!="string"||u.length===0)throw new Error('[awaitly] step.withFallback() requires an explicit string ID as the first argument. Example: step.withFallback("getUser", () => fetchUser(id), { fallback: () => fetchFromCache(id) })');let n=o.key??u,t=u,c=C(n),l=y;return(async()=>{let w=l?performance.now():0;y&&a({type:"step_start",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now()});let g;try{g=await d()}catch(S){if(j(S))throw a({type:"step_aborted",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-w}),S;let U;try{U=M(S)}catch(v){throw X(v)}if(o.on!==void 0&&o.on!==U){let v=performance.now()-w;throw a({type:"step_error",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:v,error:U}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:v,result:N(U,{cause:S}),meta:{origin:"throw",thrown:S}}),i?.(U,t,m),D(U,{origin:"throw",thrown:S})}let A;try{A=await o.fallback()}catch(v){if(j(v))throw a({type:"step_aborted",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-w}),v;let P;try{P=M(v)}catch(z){throw X(z)}let Y=performance.now()-w;throw a({type:"step_error",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:Y,error:P}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:Y,result:N(P,{cause:v}),meta:{origin:"throw",thrown:v}}),i?.(P,t,m),D(P,{origin:"throw",thrown:v})}if(A.ok){let v=performance.now()-w;return a({type:"step_success",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:v}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:v,result:A,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(U)}}),A.value}else{let v=performance.now()-w,P=W(A.error,{origin:"result",resultCause:A.cause});throw a({type:"step_error",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:v,error:P}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:v,result:A,meta:{origin:"result",resultCause:A.cause}}),i?.(P,t,m),D(P,{origin:"result",resultCause:A.cause})}}if(g.ok){let S=performance.now()-w;return a({type:"step_success",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:S}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:S,result:g}),g.value}let x=g.error;if(o.on!==void 0&&o.on!==x){let S=performance.now()-w,U=W(x,{origin:"result",resultCause:g.cause});throw a({type:"step_error",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:S,error:U}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:S,result:g,meta:{origin:"result",resultCause:g.cause}}),i?.(U,t,m),D(U,{origin:"result",resultCause:g.cause})}let b;try{b=await o.fallback()}catch(S){if(j(S))throw a({type:"step_aborted",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-w}),S;let U;try{U=M(S)}catch(v){throw X(v)}let A=performance.now()-w;throw a({type:"step_error",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:A,error:U}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:A,result:N(U,{cause:S}),meta:{origin:"throw",thrown:S}}),i?.(U,t,m),D(U,{origin:"throw",thrown:S})}if(b.ok){let S=performance.now()-w;return a({type:"step_success",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:S}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:S,result:b,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(x)}}),b.value}let O=performance.now()-w,L=W(b.error,{origin:"result",resultCause:b.cause});throw a({type:"step_error",workflowId:s,stepId:c,stepKey:n,name:t,ts:Date.now(),durationMs:O,error:L}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:O,result:b,meta:{origin:"result",resultCause:b.cause}}),i?.(L,t,m),D(L,{origin:"result",resultCause:b.cause})})()},p.withResource=(u,d)=>{if(typeof u!="string"||u.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=u,n=u,t=C(o),c=y;return(async()=>{let l=c?performance.now():0;y&&a({type:"step_start",workflowId:s,stepId:t,stepKey:o,name:n,ts:Date.now()});let w;try{w=await d.acquire()}catch(A){if(j(A))throw a({type:"step_aborted",workflowId:s,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:performance.now()-l}),A;let v;try{v=M(A)}catch(Y){throw X(Y)}let P=performance.now()-l;throw a({type:"step_error",workflowId:s,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:P,error:v}),o&&a({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:P,result:N(v,{cause:A}),meta:{origin:"throw",thrown:A}}),i?.(v,n,m),D(v,{origin:"throw",thrown:A})}if(!w.ok){let A=performance.now()-l,v=W(w.error,{origin:"result",resultCause:w.cause});throw a({type:"step_error",workflowId:s,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:A,error:v}),o&&a({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:A,result:w,meta:{origin:"result",resultCause:w.cause}}),i?.(v,n,m),D(v,{origin:"result",resultCause:w.cause})}let g=w.value,x,b,O=!1;try{x=await d.use(g)}catch(A){if(j(A)){try{await d.release(g)}catch(v){console.warn(`[awaitly] step.withResource("${u}"): release threw after earlyExit:`,v)}throw A}b=A,O=!0}try{await d.release(g)}catch(A){console.warn(`[awaitly] step.withResource("${u}"): release threw:`,A)}if(O){let A;try{A=M(b)}catch(P){throw X(P)}let v=performance.now()-l;throw a({type:"step_error",workflowId:s,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:v,error:A}),o&&a({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:v,result:N(A,{cause:b}),meta:{origin:"throw",thrown:b}}),i?.(A,n,m),D(A,{origin:"throw",thrown:b})}let L=x;if(L.ok){let A=performance.now()-l;return a({type:"step_success",workflowId:s,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:A}),o&&a({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:A,result:L}),L.value}let S=performance.now()-l,U=W(L.error,{origin:"result",resultCause:L.cause});throw a({type:"step_error",workflowId:s,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:S,error:U}),o&&a({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:S,result:L,meta:{origin:"result",resultCause:L.cause}}),i?.(U,n,m),D(U,{origin:"result",resultCause:L.cause})})()};let V=await r({step:p});if(process.env.NODE_ENV!=="production"&&V!==null&&typeof V=="object"&&"ok"in V&&typeof V.ok=="boolean"){let u=V;(u.ok===!0&&"value"in u||u.ok===!1&&"error"in u)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
|
|
2
2
|
|
|
3
3
|
Incorrect: return ok({ data });
|
|
4
4
|
Correct: return { data };
|
|
5
5
|
|
|
6
|
-
See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return
|
|
6
|
+
See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return B(V)}catch(p){if(Ze(p))throw p.thrown;if(j(p)){let H=p.meta.origin==="throw"?p.meta.thrown:p.meta.origin==="result"?p.meta.resultCause:void 0;return N(p.error,{cause:H})}let $=M(p);return i?.($,"unexpected",m),N($,{cause:p})}}Ae.strict=(r,e)=>Ae(r,e);async function Pe(r){return r.length===0?B([]):new Promise(e=>{let i=!1,y=r.length,R=new Array(r.length);for(let E=0;E<r.length;E++){let T=E;Promise.resolve(r[T]).catch(m=>N({type:"PROMISE_REJECTED",cause:m},{cause:{type:"PROMISE_REJECTION",reason:m}})).then(m=>{if(!i){if(!m.ok){i=!0,e(m);return}R[T]=m.value,y--,y===0&&e(B(R))}})}})}function ve(r){return typeof r=="object"&&r!==null&&r.type==="RATE_LIMIT_EXCEEDED"}function Ee(r){return typeof r=="object"&&r!==null&&r.type==="QUEUE_FULL"}function de(r,e){let{maxPerSecond:i,strategy:y="wait"}=e,R=e.burstCapacity??i*2,E=R,T=Date.now(),m=i/1e3,_=[];function s(){let f=Date.now(),a=(f-T)*m;E=Math.min(R,E+a),T=f}function M(){if(s(),E>=1)return E-=1,0;let f=1-E;return Math.ceil(f/m)}async function k(){return new Promise(f=>{let C=()=>{let a=M();a===0?f():(_.push(C),setTimeout(()=>{let D=_.indexOf(C);D!==-1&&(_.splice(D,1),C())},a))};C()})}return{async execute(f){let C=M();if(C>0){if(y==="reject")throw{type:"RATE_LIMIT_EXCEEDED",limiterName:r,retryAfterMs:C};await k()}return f()},async executeResult(f){let C=M();if(C>0){if(y==="reject")return N({type:"RATE_LIMIT_EXCEEDED",limiterName:r,retryAfterMs:C});await k()}return f()},getStats(){return s(),{availableTokens:Math.floor(E),maxTokens:R,tokensPerSecond:i,waitingCount:_.length}},reset(){E=R,T=Date.now(),_.length=0}}}function ye(r,e){let{maxConcurrent:i,strategy:y="queue",maxQueueSize:R=1/0}=e,E=0,T=[];async function m(){if(E<i){E++;return}if(y==="reject")throw{type:"QUEUE_FULL",limiterName:r,queueSize:T.length,maxQueueSize:R};if(T.length>=R)throw{type:"QUEUE_FULL",limiterName:r,queueSize:T.length,maxQueueSize:R};return new Promise((s,M)=>{T.push({resolve:s,reject:M})})}function _(){E--,T.length>0&&E<i&&(E++,T.shift()?.resolve())}return{async execute(s){await m();try{return await s()}finally{_()}},async executeAll(s){let M=new Array(s.length),k=[];for(let f=0;f<s.length;f++){let C=f,a=this.execute(s[C]).then(D=>{M[C]=D});k.push(a)}return await Promise.all(k),M},async executeResult(s){try{await m()}catch(M){if(Ee(M))return N(M);throw M}try{return await s()}finally{_()}},getStats(){return{activeCount:E,maxConcurrent:i,queueSize:T.length,maxQueueSize:R}},reset(){for(E=0;T.length>0;)T.shift()?.reject(new Error("Limiter reset"))}}}function Oe(r,e){let i=e.rate?de(`${r}-rate`,e.rate):void 0,y=e.concurrency?ye(`${r}-concurrency`,e.concurrency):void 0;return{rate:i,concurrency:y,async execute(R){let E=R;if(i){let T=E;E=()=>i.execute(T)}return y?y.execute(E):E()}}}function Ie(r,e){let{limit:i,windowMs:y=1e3,strategy:R="wait"}=e,E=Date.now(),T=0,m=[];function _(){let k=Date.now(),f=k-E;return f>=y?(E=k,T=0,0):y-f}function s(k){let f=_();return T+k<=i?(T+=k,0):f}async function M(k){return new Promise(f=>{let C=()=>{let a=s(k);a===0?f():(m.push({resolve:C,cost:k}),setTimeout(()=>{let D=m.findIndex(j=>j.resolve===C);D!==-1&&(m.splice(D,1),C())},a))};C()})}return{async execute(k,f=1){if(f>i)throw{type:"RATE_LIMIT_EXCEEDED",limiterName:r,retryAfterMs:y};let C=s(f);if(C>0){if(R==="reject")throw{type:"RATE_LIMIT_EXCEEDED",limiterName:r,retryAfterMs:C};await M(f)}return k()},async executeResult(k,f=1){if(f>i)return N({type:"RATE_LIMIT_EXCEEDED",limiterName:r,retryAfterMs:y});let C=s(f);if(C>0){if(R==="reject")return N({type:"RATE_LIMIT_EXCEEDED",limiterName:r,retryAfterMs:C});await M(f)}return k()},getStats(){let k=_();return{requestCount:T,limit:i,windowMs:y,remainingMs:k,waitingCount:m.length}},reset(){E=Date.now(),T=0,m.length=0}}}function De(r,e){let{tokensPerSecond:i,strategy:y="wait"}=e,R=e.maxTokens??i*2,E=R,T=Date.now(),m=i/1e3,_=[];function s(){let f=Date.now(),a=(f-T)*m;E=Math.min(R,E+a),T=f}function M(f){if(s(),E>=f)return E-=f,0;let C=f-E;return Math.ceil(C/m)}async function k(f){return new Promise(C=>{let a=()=>{let D=M(f);D===0?C():(_.push({check:a,cost:f}),setTimeout(()=>{let j=_.findIndex(W=>W.check===a);j!==-1&&(_.splice(j,1),a())},D))};a()})}return{async execute(f,C=1){if(C>R)throw{type:"RATE_LIMIT_EXCEEDED",limiterName:r,retryAfterMs:Math.ceil(C/m)};let a=M(C);if(a>0){if(y==="reject")throw{type:"RATE_LIMIT_EXCEEDED",limiterName:r,retryAfterMs:a};await k(C)}return f()},async executeResult(f,C=1){if(C>R)return N({type:"RATE_LIMIT_EXCEEDED",limiterName:r,retryAfterMs:Math.ceil(C/m)});let a=M(C);if(a>0){if(y==="reject")return N({type:"RATE_LIMIT_EXCEEDED",limiterName:r,retryAfterMs:a});await k(C)}return f()},getStats(){return s(),{availableTokens:E,maxTokens:R,tokensPerSecond:i,waitingCount:_.length}},reset(){E=R,T=Date.now(),_.length=0}}}var Ue={api:{maxPerSecond:10,burstCapacity:20,strategy:"wait"},database:{maxConcurrent:10,strategy:"queue",maxQueueSize:100},external:{maxPerSecond:5,burstCapacity:10,strategy:"wait"}};0&&(module.exports={createCombinedLimiter,createConcurrencyLimiter,createCostBasedRateLimiter,createFixedWindowLimiter,createRateLimiter,isQueueFullError,isRateLimitExceededError,rateLimiterPresets});
|
|
7
7
|
//# sourceMappingURL=ratelimit.cjs.map
|