import type {WebSocket} from 'ws';
import type {ReadonlyHttpHeaders, HttpCookie} from './http';
import type {Principal} from '../auth';
import type {AddressInfo} from 'node:net';

type WebSocketHandshakeInfo = {
    readonly url: URL;
    readonly protocol?: string;

    // request headers for server and response headers for client
    readonly headers: ReadonlyHttpHeaders;
    readonly cookies: ReadonlyArray<HttpCookie>;
    principal<P extends Principal>(): Promise<P | undefined>;
    readonly remoteAddress?: AddressInfo;
    readonly logPrefix?: string;
}
type WebSocketSession = {
    socket: WebSocket;
    handshake: WebSocketHandshakeInfo;
};
type WebSocketHandler = (session: WebSocketSession) => Promise<void>
