UNPKG

@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
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>; }