import { ICallback } from '../async/index.js';
import { Runnable } from '../runnable/index.js';
import { ILogger } from '../logger/index.js';
import { IBackoffConfig, IBackoffParsedConfig } from './types/index.js';
export declare abstract class Backoff extends Runnable {
    private timer;
    protected readonly config: IBackoffParsedConfig;
    protected readonly logger: ILogger;
    protected attempts: number;
    constructor(logger: ILogger, config?: IBackoffConfig);
    protected runTask<TResult>(task: (cb: ICallback<TResult>) => void, callback: ICallback<TResult>): void;
    protected scheduleRetry<TResult>(task: (cb: ICallback<TResult>) => void, callback: ICallback<TResult>): void;
    protected calculateNextDelay(): number;
    protected abstract getNextDelay(baseDelay: number, attempts: number): number;
    protected goingUp(): Array<(cb: ICallback<void>) => void>;
    protected goingDown(): Array<(cb: ICallback<void>) => void>;
    getConfig(): IBackoffParsedConfig;
    execute<TResult>(task: (cb: ICallback<TResult>) => void, callback: ICallback<TResult>): void;
    getAttempts(): number;
    reset(): void;
}
//# sourceMappingURL=backoff.d.ts.map