durabull
Version:
A durable workflow engine built on top of BullMQ and Redis
43 lines (42 loc) • 1.86 kB
TypeScript
/**
* ActivityStub - interface for executing activities from workflows
*/
import { Activity } from './Activity';
type AnyActivity = Activity<unknown[], unknown>;
type ActivityConstructor<T extends AnyActivity = AnyActivity> = new () => T;
type ActivityArgs<T extends AnyActivity> = Parameters<T['execute']>;
type ActivityResult<T extends AnyActivity> = Awaited<ReturnType<T['execute']>>;
/**
* Options for activity execution with per-invocation overrides
*/
export interface ActivityOptions {
tries?: number;
timeout?: number;
backoff?: number[];
activityId?: string;
}
/**
* Promise-like wrapper around activity execution
*/
export declare class ActivityPromise<T = unknown> implements PromiseLike<T> {
private promise;
constructor(promise: Promise<T>);
then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null): PromiseLike<TResult1 | TResult2>;
}
export declare class ActivityStub {
/**
* Execute an activity - queues to BullMQ in durable mode, executes inline in test mode
*/
static make<T extends AnyActivity>(activityClassOrName: ActivityConstructor<T> | string, ...argsWithOptions: [...args: ActivityArgs<T>, options?: ActivityOptions] | ActivityArgs<T>): ActivityPromise<ActivityResult<T>>;
/**
* Execute multiple activities in parallel
*/
static all<T extends readonly ActivityPromise<unknown>[]>(promises: T): ActivityPromise<{
[K in keyof T]: T[K] extends ActivityPromise<infer U> ? U : never;
}>;
/**
* Execute an async generator helper (mini sub-workflow)
*/
static async<T>(genFn: () => AsyncGenerator<unknown, T, unknown> | Generator<unknown, T, unknown>): ActivityPromise<T>;
}
export {};