import type { WebSocketHandler } from "bun";
import type { CloseHandler, MessageHandler, MessageSchemaType, OpenHandler, UpgradeOptions, WebSocketData } from "./types";
export interface ValidatorAdapter {
    getMessageType(schema: MessageSchemaType): string;
    safeParse(schema: MessageSchemaType, data: unknown): {
        success: boolean;
        data?: any;
        error?: any;
    };
    infer<T extends MessageSchemaType>(schema: T): any;
}
/**
 * WebSocket router for Bun that provides type-safe message routing with validation.
 * Routes incoming messages to handlers based on message type.
 *
 * @template T - Application-specific data to store with each WebSocket connection.
 *               Always includes a clientId property generated automatically.
 */
export declare class WebSocketRouter<T extends Record<string, unknown> = Record<string, never>> {
    private readonly connectionHandler;
    private readonly messageRouter;
    private readonly validator;
    constructor(validator: ValidatorAdapter);
    /**
     * Merges open, close, and message handlers from another WebSocketRouter instance.
     */
    addRoutes(router: WebSocketRouter<T>): this;
    /**
     * Upgrades an HTTP request to a WebSocket connection.
     */
    upgrade(req: Request, options: UpgradeOptions<WebSocketData<T>>): Response;
    onOpen(handler: OpenHandler<WebSocketData<T>>): this;
    onClose(handler: CloseHandler<WebSocketData<T>>): this;
    onMessage<Schema extends MessageSchemaType>(schema: Schema, handler: MessageHandler<Schema, WebSocketData<T>>): this;
    /**
     * Returns a WebSocket handler that can be used with `Bun.serve`.
     */
    get websocket(): WebSocketHandler<WebSocketData<T>>;
    private handleOpen;
    private handleClose;
    private handleMessage;
    /**
     * Creates a send function for a specific WebSocket connection.
     * This function allows handlers to send typed messages with proper validation.
     */
    private createSendFunction;
}
//# sourceMappingURL=router.d.ts.map