import { EventEmitter, ICallback } from 'redis-smq-common';
import { IRedisSMQParsedConfig } from './types/index.js';
import { TConfigurationEvent } from '../event-bus/index.js';
interface IRedisSMQParsedConfigWithVersion {
    version: number;
    data: IRedisSMQParsedConfig;
}
export declare class Configuration extends EventEmitter<TConfigurationEvent> {
    private static instance;
    private static state;
    private static initQueue;
    private operationLock;
    private operationQueue;
    private completionWaiters;
    private readonly config;
    private constructor();
    static initialize(cb: ICallback): void;
    static getInstance(): Configuration;
    static getConfig(): IRedisSMQParsedConfig;
    static shutdown(cb: ICallback): void;
    getConfig(): IRedisSMQParsedConfigWithVersion;
    reload(cb: ICallback<IRedisSMQParsedConfigWithVersion>): void;
    save(config: IRedisSMQParsedConfig, cb: ICallback): void;
    updateConfigFromEvent(config: IRedisSMQParsedConfig, version: number, cb: ICallback): void;
    private static validateInitState;
    private static handleInitComplete;
    private runExclusive;
    private processNext;
    private notifyWaiters;
    private waitForCompletion;
}
export {};
//# sourceMappingURL=configuration.d.ts.map