UNPKG

bun-ws-router

Version:

Lightweight client/server WebSocket router for Bun with type-safe Zod/Valibot validation.

64 lines 2.28 kB
/** * 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