///
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;
sockets: Map;
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;
}>;
export declare type RegistryStateApi = ReturnType;