import { Broker } from './broker.js';
import { MicroserviceInfo } from './types/index.js';
export type MonitorDiscoveryOptions = {
    doNotClear: boolean;
};
type UserConnectEvent = {
    id?: string;
    server: {
        name: string;
        host: string;
        id: string;
        ver: string;
    };
    client: {
        start: string;
        host: string;
        id: number;
        acc?: string;
        user?: string;
    };
};
export type DiscoveredMicroservice = MicroserviceInfo & {
    firstFoundAt: Date;
    lastFoundAt: Date;
    connection: UserConnectEvent | undefined;
};
export type MonitorOptions = {
    discoveryTimeout: number;
};
export declare class Monitor {
    private readonly broker;
    private readonly systemBroker?;
    private readonly options;
    readonly services: DiscoveredMicroservice[];
    private discoveryInterval;
    private readonly connections;
    private readonly ee;
    constructor(broker: Broker, systemBroker?: Broker | undefined, options?: Partial<MonitorOptions>);
    private discoverConnections;
    private handleServiceRegistration;
    private handleAccountConnect;
    private handleAccountDisconnect;
    private emit;
    on(event: 'added' | 'removed', listener: (service: MicroserviceInfo) => void): void;
    on(event: 'change', listener: (services: MicroserviceInfo[]) => void): void;
    private getServiceClientId;
    private getServiceConnectionInfo;
    private saveService;
    private removeService;
    discover(timeout?: number, options?: Partial<MonitorDiscoveryOptions>): Promise<void>;
    startPeriodicDiscovery(interval: number, discoveryTimeout?: number): void;
    stopPeriodicDiscovery(): void;
}
export {};
