import { THeartbeatDataFn, IHeartbeatConfig, IHeartbeatPayload, THeartbeatEvent } from './types/index.js';
import { Runnable } from '../runnable/index.js';
import { IRedisClient } from '../redis-client/index.js';
import { ILogger } from '../logger/index.js';
import { ICallback } from '../async/index.js';
import { Backoff } from '../backoff/backoff.js';
import { Timer } from '../timer/index.js';
export declare class Heartbeat<T = Record<string, unknown>> extends Runnable<THeartbeatEvent<T>> {
    protected static readonly MIN_HEARTBEAT_TTL = 3000;
    protected static readonly DEFAULT_HEARTBEAT_TTL: number;
    protected readonly redisClient: IRedisClient;
    protected readonly componentId: string;
    protected readonly componentType: string;
    protected readonly heartbeatKey: string;
    protected readonly heartbeatTTL: number;
    protected readonly heartbeatInterval: number;
    protected readonly logger: ILogger;
    protected readonly dataFn: THeartbeatDataFn<T>;
    protected timer: Timer;
    protected backoff: Backoff;
    constructor(redisClient: IRedisClient, logger: ILogger, config: IHeartbeatConfig, dataFn: THeartbeatDataFn<T>);
    static isComponentAlive(redisClient: IRedisClient, heartbeatKey: string, cb: ICallback<boolean>): void;
    static areComponentsAlive(redisClient: IRedisClient, heartbeatKeys: string[], cb: ICallback<Record<string, boolean>>): void;
    private getPayload;
    private scheduleNextBeat;
    protected beat: (cb: ICallback<IHeartbeatPayload<T>>) => void;
    protected handleError(err: Error): void;
    protected finalizeUp(): void;
    protected finalizeDown(): void;
    protected goingUp(): ((cb: ICallback<void>) => void)[];
    protected goingDown(): ((cb: ICallback) => void)[];
}
//# sourceMappingURL=heartbeart.d.ts.map