import { ICallback } from '../../async/index.js';
import { ILogger } from '../../logger/index.js';
import { IRedisClient } from '../../redis-client/index.js';
import { Runnable } from '../../runnable/index.js';
import { RunnableWorker } from '../runnable-worker.js';
export type TWorkerClusterEvent = {
    'workerCluster.error': (err: Error) => void;
    'workerCluster.workerAdded': (worker: RunnableWorker<unknown>) => void;
    'workerCluster.workerRemoved': (workerId: string) => void;
};
export declare class WorkerCluster extends Runnable<TWorkerClusterEvent> {
    protected static LOCK_TTL: number;
    private readonly uniqueGroupIdentifier;
    private readonly workerHandler;
    private readonly workerLoader;
    private readonly redisClient;
    protected readonly logger: ILogger;
    private locker;
    constructor(redisClient: IRedisClient, logger: ILogger, uniqueGroupIdentifier: string | null, workerFilenamePattern?: string);
    private handleWorkerError;
    private acquireLock;
    private releaseLock;
    protected goingUp(): ((cb: ICallback) => void)[];
    protected goingDown(): ((cb: ICallback) => void)[];
    protected handleError(err: Error): void;
    addWorker(filename: string, payload: unknown): RunnableWorker<unknown>;
    loadFromDir: <WorkerPayload = unknown>(workersDir: string, payload: WorkerPayload, cb: ICallback) => void;
    private assertDownState;
    private validateDownState;
}
//# sourceMappingURL=worker-cluster.d.ts.map