durabull
Version:
A durable workflow engine built on top of BullMQ and Redis
72 lines (71 loc) • 2.88 kB
TypeScript
import type { Workflow } from '../Workflow';
import type { Activity } from '../Activity';
export interface WorkflowLifecycleHooks {
onStart?: (workflowId: string, workflowName: string, args: unknown[]) => void | Promise<void>;
onComplete?: (workflowId: string, workflowName: string, output: unknown) => void | Promise<void>;
onFailed?: (workflowId: string, workflowName: string, error: Error) => void | Promise<void>;
onWaiting?: (workflowId: string, workflowName: string) => void | Promise<void>;
onContinued?: (workflowId: string, workflowName: string, newWorkflowId: string) => void | Promise<void>;
}
export interface ActivityLifecycleHooks {
onStart?: (workflowId: string, activityId: string, activityName: string, args: unknown[]) => void | Promise<void>;
onComplete?: (workflowId: string, activityId: string, activityName: string, result: unknown) => void | Promise<void>;
onFailed?: (workflowId: string, activityId: string, activityName: string, error: Error) => void | Promise<void>;
}
export type QueueRouter = (workflowName: string, context?: Record<string, unknown>) => {
workflow?: string;
activity?: string;
};
export interface DurabullGlobalConfig {
redisUrl: string;
queues?: {
workflow?: string;
activity?: string;
};
queueRouter?: QueueRouter;
serializer?: 'json' | 'base64';
pruneAge?: string;
webhooks?: {
route?: string;
auth?: {
method: 'none' | 'token' | 'signature' | 'custom';
header?: string;
token?: string;
secret?: string;
};
};
logger?: DurabullLogger;
lifecycleHooks?: {
workflow?: WorkflowLifecycleHooks;
activity?: ActivityLifecycleHooks;
};
}
export interface DurabullLogger {
info?: (...args: unknown[]) => void;
warn?: (...args: unknown[]) => void;
error?: (...args: unknown[]) => void;
debug?: (...args: unknown[]) => void;
}
export interface ResolvedDurabullConfig extends DurabullGlobalConfig {
queues: {
workflow: string;
activity: string;
};
}
export declare class Durabull {
private config;
private workflowRegistry;
private activityRegistry;
constructor(config: DurabullGlobalConfig);
getConfig(): ResolvedDurabullConfig;
registerWorkflow(name: string, WorkflowClass: new () => Workflow<unknown[], unknown>): void;
resolveWorkflow(name: string): (new () => Workflow<unknown[], unknown>) | null;
registerActivity(name: string, ActivityClass: new () => Activity<unknown[], unknown>): void;
resolveActivity(name: string): (new () => Activity<unknown[], unknown>) | null;
getQueues(workflowName?: string, context?: Record<string, unknown>): {
workflow: string;
activity: string;
};
setActive(): void;
static getActive(): Durabull | null;
}