bun-ws-router
Version:
Lightweight client/server WebSocket router for Bun with type-safe Zod/Valibot validation.
64 lines • 2.28 kB
TypeScript
/**
* TypeScript types for browser WebSocket client.
* See @specs/client.md for full API documentation.
*/
export type ClientState = "closed" | "connecting" | "open" | "closing" | "reconnecting";
export interface ClientOptions {
url: string | URL;
protocols?: string | string[];
reconnect?: {
enabled?: boolean;
maxAttempts?: number;
initialDelayMs?: number;
maxDelayMs?: number;
jitter?: "full" | "none";
};
queue?: "drop-oldest" | "drop-newest" | "off";
queueSize?: number;
autoConnect?: boolean;
pendingRequestsLimit?: number;
auth?: {
getToken?: () => string | null | undefined | Promise<string | null | undefined>;
attach?: "query" | "protocol";
queryParam?: string;
protocolPrefix?: string;
protocolPosition?: "append" | "prepend";
};
wsFactory?: (url: string | URL, protocols?: string | string[]) => WebSocket;
}
export type AnyMessageSchema = any;
export interface AnyInboundMessage {
type: string;
meta?: Record<string, unknown>;
payload?: unknown;
}
export type MessageHandler = (msg: unknown) => void;
export interface WebSocketClient {
readonly state: ClientState;
readonly isConnected: boolean;
readonly protocol: string;
connect(): Promise<void>;
close(opts?: {
code?: number;
reason?: string;
}): Promise<void>;
onState(cb: (state: ClientState) => void): () => void;
onceOpen(): Promise<void>;
on<S extends AnyMessageSchema>(schema: S, handler: MessageHandler): () => void;
send<S extends AnyMessageSchema>(schema: S, payload: unknown, opts?: {
meta?: Record<string, unknown>;
correlationId?: string;
}): boolean;
request<S extends AnyMessageSchema, R extends AnyMessageSchema>(schema: S, payload: unknown, reply: R, opts?: {
timeoutMs?: number;
meta?: Record<string, unknown>;
correlationId?: string;
signal?: AbortSignal;
}): Promise<unknown>;
onUnhandled(cb: (msg: AnyInboundMessage) => void): () => void;
onError(cb: (error: Error, context: {
type: "parse" | "validation" | "overflow" | "unknown";
details?: unknown;
}) => void): () => void;
}
//# sourceMappingURL=types.d.ts.map