import * as IORedis from "ioredis";
import { Connection } from "..";
export interface ConnectionOptions {
    pkg?: string;
    host?: string;
    port?: number;
    database?: number;
    namespace?: string;
    looping?: boolean;
    options?: any;
    redis?: IORedis.Redis | IORedis.Cluster;
    scanCount?: number;
}
export interface WorkerOptions extends ConnectionOptions {
    name?: string;
    queues?: Array<string>;
    timeout?: number;
    looping?: boolean;
}
export interface SchedulerOptions extends ConnectionOptions {
    name?: string;
    timeout?: number;
    leaderLockTimeout: number;
    stuckWorkerTimeout: number;
    retryStuckJobs: boolean;
}
export interface MultiWorkerOptions extends ConnectionOptions {
    name?: string;
    queues?: Array<string>;
    timeout?: number;
    maxEventLoopDelay?: number;
    checkTimeout?: number;
    connection?: Connection;
    minTaskProcessors?: number;
    maxTaskProcessors?: number;
}
export interface Job<TResult> {
    plugins?: string[];
    pluginOptions?: {
        [pluginName: string]: any;
    };
    perform: (...args: any[]) => Promise<TResult>;
}
