import { Logger } from 'pino';
import { Redis } from 'ioredis';
import { Netron } from '../netron';
import { NodeInfo, ServiceInfo, DiscoveryEvent, DiscoveryOptions } from './types';
export declare class ServiceDiscovery {
    private redis;
    private nodeId;
    private address;
    private services;
    private heartbeatTimer?;
    private options;
    private readonly pubSubChannel;
    private subscriber?;
    private stopped;
    private shutdownPromise?;
    private registered;
    logger: Logger;
    constructor(redis: Redis, netron: Netron, address: string, services: ServiceInfo[], options?: DiscoveryOptions);
    startHeartbeat(): void;
    shutdown(): Promise<void>;
    publishHeartbeat(): Promise<void>;
    getActiveNodes(): Promise<NodeInfo[]>;
    findNodesByService(name: string, version?: string): Promise<NodeInfo[]>;
    subscribeToEvents(handler: (event: DiscoveryEvent) => void): Promise<void>;
    private deregisterNodeById;
    isNodeActive(nodeId: string): Promise<boolean>;
    updateServices(services: ServiceInfo[]): Promise<void>;
    updateAddress(address: string): Promise<void>;
    private publishEvent;
    private unsubscribeFromEvents;
}
