UNPKG

queue-manager-pro

Version:

A flexible, TypeScript-first queue/task manager with pluggable backends ,dynamic persistence storage and event hooks.

74 lines (73 loc) 2.24 kB
import type { Redis } from 'ioredis'; import type { QueueRepository } from '../repositories/repository.interface.js'; import type { Pool } from 'pg'; export type HandlerMap = Record<string, (payload: any) => Promise<any>>; export interface TaskBase { id: string; status: 'pending' | 'processing' | 'done' | 'failed' | 'deleted'; log?: string; createdAt: Date | string; updatedAt: Date | string; maxRetries: number; maxProcessingTime: number; retryCount: number; priority: number; } export type Task<H extends HandlerMap> = { [K in keyof H]: TaskBase & { handler: K; payload: Parameters<H[K]>[0]; }; }[keyof H]; export type QueueManagerEvents<H extends HandlerMap> = { taskAdded: (task: Task<H>) => void; taskStarted: (task: Task<H>) => void; taskCompleted: (task: Task<H>) => void; taskFailed: (task: Task<H>, error: Error) => void; taskRetried: (task: Task<H>) => void; taskRemoved: (task: Task<H>) => void; tasksPurged: (tasks: Task<H>[]) => void; taskStuck: (task: Task<H>) => void; }; export type QueueBackendConfig = { type: 'file'; filePath: string; } | { type: 'memory'; } | { type: 'redis'; redisClient: Redis; options?: { storageName?: string; }; } | { type: 'postgres'; pg: Pool; options?: PostgresOptions; } | { type: 'custom'; repository: CustomQueueRepositoryProps; }; export type CustomQueueRepositoryProps = Omit<QueueRepository, 'logger' | 'emitEvent' | 'init' | 'id'>; export type PostgresOptions = { tableName?: string; schema?: string; }; export interface LoggerLike { error(...args: any[]): void; warn(...args: any[]): void; info(...args: any[]): void; debug?(...args: any[]): void; } export type ProcessType = 'single' | 'multi-atomic'; export interface IQueueManager { repository: QueueRepository; delay?: number; singleton?: boolean; maxRetries?: number; maxProcessingTime?: number; logger?: LoggerLike; backend: QueueBackendConfig; crashOnWorkerError?: boolean; } export type EmitMethod = <K extends keyof QueueManagerEvents<HandlerMap>>(event: K, ...args: Parameters<QueueManagerEvents<HandlerMap>[K]>) => boolean;