import type { Job, JobSummary, Queue, JobCounts, JobQueryOptions, WorkerCount, } from "@bullstudio/connect-types"; import type { QueueProviderCapabilities } from "./provider-capabilities.types"; /** * Provider type identifier for extensibility. */ export type QueueProviderType = "bullmq" | "bull" | "agenda" | "bee"; /** * Callbacks for connection events from the queue service. */ export interface QueueServiceEventCallbacks { onDisconnect?: (reason?: string) => void; onError?: (error: Error) => void; onReconnecting?: () => void; onReconnected?: () => void; } /** * Configuration for initializing a queue service provider. */ export interface QueueServiceConfig { redisUrl: string; prefix?: string; eventCallbacks?: QueueServiceEventCallbacks; } /** * Abstract interface for queue service providers. * Implement this interface to add support for different queue systems. */ export interface QueueService { /** Provider type identifier */ readonly providerType: QueueProviderType; /** Establish connection to the queue backend */ connect(): Promise; /** Gracefully disconnect from the queue backend */ disconnect(): Promise; /** Check if currently connected */ isConnected(): boolean; // Queue operations getQueues(): Promise; getQueue(name: string): Promise; pauseQueue(queueName: string): Promise; resumeQueue(queueName: string): Promise; getJobCounts(queueName: string): Promise; // Job operations getJobs(queueName: string, options?: JobQueryOptions): Promise; getJobsSummary( queueName: string, options?: JobQueryOptions, ): Promise; getJob(queueName: string, jobId: string): Promise; retryJob(queueName: string, jobId: string): Promise; removeJob(queueName: string, jobId: string): Promise; // Worker operations getWorkerCount(queueName: string): Promise; // Provider capabilities getCapabilities(): QueueProviderCapabilities; }