import { type AddressInfo, type Socket } from 'node:net'; import type { P2PDataPlaneHandler, P2PDataPlaneTransport } from './P2PDataPlane'; export interface TcpP2PDataPlaneTransportOptions { remoteHost: string; remotePort: number; socket?: Socket; timeoutMs?: number; randomId?: () => string; } export interface TcpP2PDataPlaneTransport extends P2PDataPlaneTransport { close(): void; } export interface TcpP2PDataPlaneServerOptions { handler: P2PDataPlaneHandler; host?: string; } export interface TcpP2PDataPlaneServer { listen(port?: number): Promise; address(): AddressInfo; close(): Promise; } export interface TcpP2PDataPlaneSocketOptions { socket: Socket; handler: P2PDataPlaneHandler; } export interface TcpP2PDataPlaneSocketHandle { close(): void; } export interface TcpHolePunchPlanOptions { nowSeconds?: number; windowSeconds?: number; maxClockErrorSeconds?: number; minRunWindowSeconds?: number; numPorts?: number; basePort?: number; portRange?: number; } export interface TcpHolePunchPlan { bucket: number; boundary: number; rendezvousTimeSeconds: number; ports: number[]; } export declare function createTcpP2PDataPlaneTransport(options: TcpP2PDataPlaneTransportOptions): TcpP2PDataPlaneTransport; export declare function createTcpP2PDataPlaneServer(options: TcpP2PDataPlaneServerOptions): TcpP2PDataPlaneServer; export declare function attachTcpP2PDataPlaneSocket(options: TcpP2PDataPlaneSocketOptions): TcpP2PDataPlaneSocketHandle; export declare function computeTcpHolePunchPlan(options?: TcpHolePunchPlanOptions): TcpHolePunchPlan;