import type { Logger } from "@synet/logger";
import type { RealtimeServer, RealtimeServerOptions, RealtimeServerStats, ServerEventType, RealtimeEvent, Topic } from "@synet/patterns/realtime";
/**
 * NATS-specific options
 */
export interface NatsServerOptions {
    url?: string;
    user?: string;
    password?: string;
    token?: string;
    reconnect?: {
        enabled: boolean;
        maxAttempts: number;
        delayMs: number;
    };
}
export interface ControlConnectMessage {
    clientId?: string;
    topic?: string;
    clientInbox?: string;
    timestamp: Date | string;
    replyTo?: string;
    metadata?: Record<string, unknown>;
}
export interface ControlDisconnectMessage {
    clientId: string;
    timestamp: Date | string;
    topics: Topic[];
}
export interface ControlSubscribeMessage {
    clientId: string;
    topic: string;
}
export interface ControlUnsubscribeMessage {
    clientId: string;
    topic: string;
}
export type ControlMessage = ControlConnectMessage | ControlDisconnectMessage | ControlSubscribeMessage | ControlUnsubscribeMessage;
export declare class NatsRealtimeServer implements RealtimeServer {
    private options;
    private logger?;
    private natsConnection?;
    private clients;
    private subscriptions;
    private stats;
    private startTime;
    private eventHandlers;
    private natsSubscriptions;
    private stringCodec;
    constructor(options?: RealtimeServerOptions<NatsServerOptions>, logger?: Logger | undefined);
    start(): Promise<void>;
    stop(): Promise<void>;
    broadcast(topic: Topic, event: RealtimeEvent): Promise<void>;
    sendToClient(clientId: string, event: RealtimeEvent): Promise<void>;
    getStats(): RealtimeServerStats;
    on<T extends ServerEventType>(event: T, handler: (data: unknown) => void): void;
    /**
     * Set up subscriptions for client control messages
     */
    private setupControlSubscriptions;
    /**
     * Handle a new client connection
     */
    private handleClientConnection;
    /**
     * Subscribe a client to a topic
     */
    private subscribeClientToTopic;
    /**
     * Unsubscribe a client from a topic
     */
    private unsubscribeClientFromTopic;
    /**
     * Handle client disconnection
     */
    private handleClientDisconnection;
    /**
     * Create a NATS subscription for a topic
     */
    private createTopicSubscription;
    /**
     * Remove a NATS subscription for a topic
     */
    private removeTopicSubscription;
    /**
     * Forward a message to all clients subscribed to a topic
     */
    private forwardMessageToSubscribers;
    /**
     * Start periodic cleanup of stale clients
     */
    private startStaleClientCleanup;
    /**
     * Emit an event to all registered handlers
     */
    private emit;
}
