import { Job } from "../types";
import { JobStorage } from "../storage/base-storage";
import { JobHandler } from "../types";
export declare class JobQueue extends EventTarget {
    /**
     * Job handlers registered with this queue
     */
    protected handlers: Map<string, JobHandler>;
    protected storage: JobStorage;
    /**
     * Set of job IDs that are currently being processed
     */
    protected activeJobs: Set<string>;
    /**
     * Number of jobs that can be processed concurrently
     */
    protected concurrency: number;
    /**
     * Interval in milliseconds at which to check for new jobs
     */
    private processing;
    private processingInterval;
    private intervalId?;
    protected name: string;
    protected maxRetries: number;
    protected logging: boolean;
    private lastPollingInterval;
    private pollingErrorCount;
    protected standAlone: boolean;
    private intelligentPolling;
    private minInterval;
    private maxInterval;
    private emptyPollsCount;
    private maxEmptyPolls;
    private loadFactor;
    private maxConcurrency;
    protected isStopping: boolean;
    private isUpdatingInterval;
    private isStopped;
    constructor(storage: JobStorage, options?: {
        concurrency?: number;
        name?: string;
        processingInterval?: number;
        maxRetries?: number;
        logging?: boolean;
        intelligentPolling?: boolean;
        minInterval?: number;
        maxInterval?: number;
        maxEmptyPolls?: number;
        loadFactor?: number;
        maxConcurrency?: number;
        standAlone?: boolean;
    });
    register<T, R>(name: string, handler: JobHandler<T, R>): void;
    add<T>(name: string, data: T, options?: {
        priority?: number;
        timeout?: number;
    }): Promise<Job<T>>;
    schedule<T>(name: string, data: T, scheduledAt: Date, options?: {
        timeout?: number;
    }): Promise<Job<T>>;
    scheduleIn<T>(name: string, data: T, delayMs: number): Promise<Job<T>>;
    getJob<T>(id: string): Promise<Job<T> | null>;
    getName(): string;
    isStandAlone(): boolean;
    start(): void;
    rollbackActiveJobs(): Promise<void>;
    stop(): Promise<void>;
    setProcessingInterval(ms: number): void;
    setConcurrency(level: number): void;
    protected processNextBatch(): Promise<void>;
    protected updatePollingInterval(hadJobs: boolean): void;
    protected processJob(job: Job): Promise<void>;
    protected scheduleNextRepeat(job: Job): Promise<void>;
    protected calculateNextExecutionTime(job: Job): Date | undefined;
    addRepeatable<T>(name: string, data: T, options: {
        every: number;
        unit: "seconds" | "minutes" | "hours" | "days" | "weeks" | "months";
        startDate?: Date;
        endDate?: Date;
        limit?: number;
        priority?: number;
        timeout?: number;
    }): Promise<Job<T>>;
}
