@penkov/tasks_queue
Version:
A lightweight PostgreSQL-backed task queue system with scheduling, retries, backoff strategies, and priority handling. Designed for efficiency and observability in modern Node.js applications.
38 lines (37 loc) • 1.5 kB
TypeScript
import { MultiStepPayload } from "./multi-step-payload.js";
import { MultiStepTask } from "./multi-step-task.js";
import { TaskContext } from "./tasks-model.js";
/**
* Technical workflow state persisted in `workflowPayload` by {@link ManagedWorkflowTask}.
*/
export type ManagedWorkflowState = {
/**
* Number of successful parent workflow passes that entered {@link run}.
*/
runCount: number;
};
/**
* Base class for parent workflows that must explicitly either:
* - spawn a child task, or
* - submit a final result,
* on every parent run.
*
* The class owns technical workflow metadata (`runCount`) inside
* `MultiStepPayload.workflowPayload` and keeps business state in `userPayload`.
*/
export declare abstract class ManagedWorkflowTask<TUserPayload extends object = Record<string, unknown>> extends MultiStepTask<TUserPayload> {
protected readonly maxRuns: number;
constructor(maxRuns?: number);
private static validateMaxRuns;
private readCurrentRunCount;
/**
* Business workflow logic supplied by subclasses.
*
* Contract per invocation:
* - call `context.spawnChild(...)` exactly once, or
* - call `context.submitResult(...)` exactly once,
* and optionally update user payload through `context.setPayload(...)`.
*/
protected abstract run(userPayload: TUserPayload, context: TaskContext): Promise<void>;
protected processNext(payload: MultiStepPayload<TUserPayload>, context: TaskContext): Promise<void>;
}