import type * as ws from "ws" import type * as http from "node:http" import {Rtt} from "../../tools/pingponger.js" import {Remote} from "../../core/remote-proxy.js" import {LoggerTap} from "../../core/taps/logger.js" import {Fns, HttpMeta, Tap} from "../../core/types.js" export type Connector = ( (connection: Connection) => Promise> ) export const asConnector = ( connector: Connector ) => connector export type Accepter = ( (connection: Connection & HttpMeta) => Promise> ) export const asAccepter = ( accepter: Accepter ) => accepter export type WsConnectOptions = { socket: WebSocket | ws.WebSocket connector: Connector disconnected?: (error?: any) => void tap?: Tap timeout?: number } export type Connection = { rtt: Rtt socket: WebSocket | ws.WebSocket remote: Remote tap?: Tap detach: () => void close: () => void } export type Connret = { fns: LocalFns disconnected: (error?: any) => void } export type WsIntegrationOptions = { accepter: Accepter tap?: LoggerTap timeout?: number maxRequestBytes?: number } export type WsHandlerOptions = { accepter: Accepter timeout?: number tap?: LoggerTap } export type WsHandler = (socket: ws.WebSocket, request: http.IncomingMessage) => void