/** * Background Jobs - Persisted job queue with adapter support */ export type JobStatus = 'pending' | 'running' | 'completed' | 'failed' | 'cancelled'; export type JobPriority = 'low' | 'normal' | 'high' | 'critical'; export interface Job { id: string; name: string; data: T; status: JobStatus; priority: JobPriority; attempts: number; maxAttempts: number; createdAt: Date; startedAt?: Date; completedAt?: Date; result?: any; error?: string; progress?: number; metadata?: Record; } export interface JobQueueConfig { name?: string; concurrency?: number; maxAttempts?: number; retryDelay?: number; storage?: JobStorageAdapter; } export interface JobStorageAdapter { save(job: Job): Promise; get(id: string): Promise; getAll(): Promise; getByStatus(status: JobStatus): Promise; update(id: string, updates: Partial): Promise; delete(id: string): Promise; clear(): Promise; } export type JobHandler = (job: Job, context: JobContext) => Promise; export interface JobContext { updateProgress: (progress: number) => Promise; log: (message: string) => void; } /** * In-memory job storage adapter */ export declare class MemoryJobStorage implements JobStorageAdapter { private jobs; save(job: Job): Promise; get(id: string): Promise; getAll(): Promise; getByStatus(status: JobStatus): Promise; update(id: string, updates: Partial): Promise; delete(id: string): Promise; clear(): Promise; } /** * File-based job storage adapter */ export declare class FileJobStorage implements JobStorageAdapter { private filePath; private jobs; private initialized; constructor(filePath: string); private init; private persist; save(job: Job): Promise; get(id: string): Promise; getAll(): Promise; getByStatus(status: JobStatus): Promise; update(id: string, updates: Partial): Promise; delete(id: string): Promise; clear(): Promise; } /** * Job Queue class */ export declare class JobQueue { private config; private storage; private handlers; private running; private activeJobs; private processInterval?; constructor(config?: JobQueueConfig); /** * Register a job handler */ register(name: string, handler: JobHandler): void; /** * Add a job to the queue */ add(name: string, data: T, options?: Partial>): Promise>; /** * Get a job by ID */ get(id: string): Promise; /** * Get all jobs */ getAll(): Promise; /** * Get jobs by status */ getByStatus(status: JobStatus): Promise; /** * Cancel a job */ cancel(id: string): Promise; /** * Retry a failed job */ retry(id: string): Promise; /** * Start processing jobs */ start(): void; /** * Stop processing jobs */ stop(): void; /** * Process pending jobs */ private process; /** * Run a single job */ private runJob; /** * Process a job immediately (bypass queue) */ processNow(id: string): Promise; /** * Get queue stats */ getStats(): Promise<{ pending: number; running: number; completed: number; failed: number; cancelled: number; }>; /** * Clear completed/failed jobs */ cleanup(olderThan?: Date): Promise; } /** * Create a job queue */ export declare function createJobQueue(config?: JobQueueConfig): JobQueue; /** * Create a file-based job storage */ export declare function createFileJobStorage(filePath: string): FileJobStorage;