/// <reference types="node" />
import { Socket } from 'net';
import { Subscription } from 'rxjs';
import { SocketWithInfo, MessageWithInfo } from './types';
import { AnySocketEpic } from '../kit';
import { BasicLogger } from '../logging';
export declare type WaitForCompletionFn = () => Promise<'completed' | 'timed-out'>;
export declare type WatchModeDetachBehavior = 'unsubscribe' | 'disconnect';
export interface IConnectedSocket {
    id: string;
    pathname: string;
    ws: SocketWithInfo;
    socket: Socket;
    request: MessageWithInfo;
    subscription?: Subscription;
    waitForCompletion?: WaitForCompletionFn;
    onDetach: WatchModeDetachBehavior;
}
export interface ISocketRegistryState {
    epicsByPath: Map<string, AnySocketEpic>;
    sockets: Map<string, IConnectedSocket>;
    logger: BasicLogger;
}
export declare const buildRegistryStateApi: (state: ISocketRegistryState) => Readonly<{
    addSocket: (socketState: IConnectedSocket) => void;
    closeSocket: (id: string, code?: number | undefined) => void;
    detachFromSocketInWatchMode: (id: string) => void;
    attachToSocket: (id: string, subscription: Subscription, waitForCompletion: WaitForCompletionFn, onDetach: WatchModeDetachBehavior) => void;
    onServerClose: () => Promise<void>;
}>;
export declare type RegistryStateApi = ReturnType<typeof buildRegistryStateApi>;
