import type WebSocket from 'ws';
/** Function handler that should be triggered when the respective socket connects */
export type OnConnect = (c: Socket) => void;
/**
 * A generic server interface that allows us to mock the server's behavior in tests.
 */
export interface Server {
    /**
     * Register a function to be called when a new socket connects.
     * This should be only called once per server.
     */
    onConnect(handler: OnConnect): void;
    start(port: number): void;
}
export declare class WebSocketServerWrapper implements Server {
    private server;
    private connectHandler;
    onConnect(handler: OnConnect): void;
    start(port: number): void;
}
/**
 * The socket abstraction of *flowR*.
 * Essentially a subset of what the default `net.Socket` of `node` provides.
 */
export interface Socket {
    remoteAddress?: string;
    remotePort?: number;
    on(event: 'error', listener: (e: unknown) => void): void;
    on(event: 'close', listener: () => void): void;
    on(event: 'data', listener: (data: Buffer) => void): void;
    write(data: string): void;
    end(): void;
}
export declare class WebSocketWrapper implements Socket {
    private readonly socket;
    remoteAddress?: string;
    remotePort?: number;
    constructor(socket: WebSocket);
    write(data: string): void;
    end(): void;
    on(event: 'data' | 'close' | 'error', listener: (data: Buffer) => void): void;
}
export declare class NetServer implements Server {
    private readonly server;
    constructor();
    onConnect(handler: OnConnect): void;
    start(port: number): void;
}
