bun-ws-router
Version:
A simple and efficient WebSocket router for Bun with Zod/Valibot message validation.
48 lines • 2.03 kB
TypeScript
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