import { Peer, WSError } from 'crossws';
import { Context, type AnyElysia } from 'elysia';
import { ElysiaTypeCheck } from 'elysia/schema';
import { ElysiaWS } from 'elysia/ws';
import type { ServerWebSocket } from 'elysia/ws/bun';
import type { AnyWSLocalHook } from 'elysia/ws/types';
export interface NodeWebSocketContext {
    data: Context;
    validateResponse: ElysiaTypeCheck<any> | undefined;
    ping: ElysiaWS['ping'];
    pong: ElysiaWS['pong'];
    open(ws: Peer): Promise<void>;
    message(ws: ServerWebSocket<any>, message: string): Promise<void>;
    drain(ws: ServerWebSocket<any>): Promise<void>;
    close(ws: ServerWebSocket<any>, code: number, reason: string): Promise<void>;
    error(ws: ServerWebSocket<any>, error: WSError): void;
}
export interface NodeWebSocketPeer extends Omit<Peer, 'context'> {
    context: NodeWebSocketContext;
}
export declare function createWebSocketAdapter(): {
    handler: (app: AnyElysia, path: string, options: AnyWSLocalHook) => void;
    createConfig: (app: AnyElysia) => {
        upgrade(request: Request & {
            readonly context?: Record<string, unknown>;
        }): Promise<Response | {
            context: any;
            headers: any;
        }>;
        open(ws: Peer<import("crossws").AdapterInternal>): void;
        message(ws: Peer<import("crossws").AdapterInternal>, message: import("crossws").Message): void;
        close(ws: Peer<import("crossws").AdapterInternal>, detail: {
            code?: number;
            reason?: string;
        }): void;
        error(ws: Peer<import("crossws").AdapterInternal>, error: WSError): void;
    };
    context: Record<string, NodeWebSocketContext>;
};
