import type { PeerId } from "@libp2p/interface";
import { type CoreProtocolResult, type IRoutingInfo } from "@waku/interfaces";
import type { PeerManager } from "../peer_manager/index.js";
type RetryManagerConfig = {
    retryIntervalMs: number;
    peerManager: PeerManager;
};
type AttemptCallback = (peerId: PeerId) => Promise<CoreProtocolResult>;
export type ScheduledTask = {
    maxAttempts: number;
    routingInfo: IRoutingInfo;
    callback: AttemptCallback;
};
export declare class RetryManager {
    private intervalID;
    private readonly retryIntervalMs;
    private inProgress;
    private readonly queue;
    private readonly peerManager;
    constructor(config: RetryManagerConfig);
    start(): void;
    stop(): void;
    push(callback: AttemptCallback, maxAttempts: number, routingInfo: IRoutingInfo): void;
    private processQueue;
    private scheduleTask;
    private taskExecutor;
}
export {};
