export type QueueMessage<T = unknown> = {
    id: string;
    payload: T;
    attempts: number;
};
export interface IQueueDriver {
    enqueue<T = unknown>(queue: string, payload: T): Promise<string>;
    dequeue<T = unknown>(queue: string): Promise<QueueMessage<T> | undefined>;
    ack(queue: string, id: string): Promise<void>;
    length(queue: string): Promise<number>;
    drain(queue: string): Promise<void>;
}
/**
 * BullMQ payload interface with all supported JobOptions
 */
export interface BullMQPayload {
    to?: string;
    subject?: string;
    template?: string;
    templateData?: Record<string, unknown>;
    timestamp?: number;
    attempts?: number;
    uniqueId?: string;
    delay?: number;
    priority?: number;
    removeOnComplete?: number | boolean;
    removeOnFail?: number | boolean;
    backoff?: {
        type: 'fixed' | 'exponential';
        delay: number;
    };
    repeat?: {
        every?: number;
        cron?: string;
        limit?: number;
    };
    lifo?: boolean;
    deduplication?: {
        id: string;
        ttl?: number;
        releaseAfter?: string | number | {
            condition: string;
            delay: number;
        };
    };
    uniqueVia?: string;
    [key: string]: unknown;
}
/**
 * Resolves the lock prefix for queue operations
 * Uses singleton RedisKeys for consistent key management
 */
export declare const resolveLockPrefix: () => string;
export declare const Queue: Readonly<{
    register(name: string, driver: IQueueDriver): void;
    reset(): void;
    get(name?: string): IQueueDriver;
    enqueue(queue: string, payload: BullMQPayload, driverName?: string): Promise<string>;
    dequeue<T = unknown>(queue: string, driverName?: string): Promise<QueueMessage<T> | undefined>;
    ack(queue: string, id: string, driverName?: string): Promise<void>;
    length(queue: string, driverName?: string): Promise<number>;
    drain(queue: string, driverName?: string): Promise<void>;
}>;
export default Queue;
//# sourceMappingURL=Queue.d.ts.map