/** * PostgreSQL-backed Job Queue * * Uses raw SQL via a database executor for portability. * Supports: delayed jobs, retries with exponential backoff, priorities, expiration. * * The jobs table must exist (see packages/db/src/schema/jobs.ts). */ /** Minimal database executor - accepts raw SQL strings */ export interface DatabaseExecutor { execute(query: string, params?: unknown[]): Promise<{ rows: Record[]; }>; } export interface JobQueueConfig { /** Polling interval in milliseconds (default: 5000) */ pollingIntervalMs: number; /** Maximum concurrent jobs per worker (default: 5) */ concurrency: number; /** Default retry limit for jobs without explicit limit (default: 3) */ defaultRetryLimit: number; /** Base delay for exponential backoff in ms (default: 1000) */ retryBackoffMs: number; /** Logger with error method */ logger?: { error: (msg: string) => void; }; } export interface SendOptions { /** Higher priority = processed first (default: 0) */ priority?: number; /** Maximum retry attempts (default: config.defaultRetryLimit) */ retryLimit?: number; /** Delay before first processing (Date or milliseconds from now) */ startAfter?: Date | number; /** Job expires at this time (unprocessed jobs are skipped) */ expireAt?: Date; } export interface JobPayload { id: string; name: string; data: Record; retryCount: number; } export type JobHandler = (job: JobPayload) => Promise; export interface JobQueue { /** Enqueue a job for background processing */ send(name: string, data: Record, options?: SendOptions): Promise; /** Register a handler for a job type and start polling */ work(name: string, handler: JobHandler): void; /** Stop all polling workers */ stop(): void; /** Get counts by state for monitoring */ getQueueStats(): Promise>; } export declare function createJobQueue(executor: DatabaseExecutor, overrides?: Partial): JobQueue; //# sourceMappingURL=queue.d.ts.map