import { ChannelState } from "@synet/patterns/realtime";
import type { RealtimeChannel, RealtimeProviderOptions, RealtimeEvent, EventSelector } from "@synet/patterns/realtime/client";
import type { NatsOptions } from "./nats-types";
/**
 * NATS implementation of RealtimeChannel
 */
export declare class NatsRealtimeChannel<TIn extends RealtimeEvent = RealtimeEvent, TOut extends RealtimeEvent = RealtimeEvent> implements RealtimeChannel<TIn, TOut> {
    private url;
    private options;
    readonly id: `${string}-${string}-${string}-${string}-${string}`;
    private natsConnection;
    private state;
    private eventHandlers;
    private reconnectTimer;
    private reconnectAttempts;
    private connectionPromise;
    private subscription;
    private stringCodec;
    private clientInbox;
    private topic;
    constructor(url: string, options?: RealtimeProviderOptions<NatsOptions>);
    /**
     * Connect to the NATS channel
     */
    connect(): Promise<void>;
    /**
     * Monitor NATS connection status changes
     */
    private monitorConnectionStatus;
    private setupSubscriptions;
    private sendConnectionMessage;
    /**
     * Subscribe to events
     */
    on<T extends TIn = TIn>(selector: EventSelector, handler: (event: T) => void): () => void;
    /**
     * Send an event to the channel
     */
    emit(event: TOut): Promise<void>;
    /**
     * Close the channel
     */
    close(): Promise<void>;
    getState(): ChannelState;
    private processIncomingEvent;
    manualReconnect(): Promise<void>;
}
