import type { Server as BunServer, ServerWebSocket } from 'bun'; // Core configuration export declare interface BroadcastConfig { verbose?: boolean driver?: 'bun' | 'reverb' | 'pusher' | 'ably' | 'log' | 'null' connections?: { [key: string]: ConnectionConfig } default?: string } // Connection configurations for different drivers export declare interface ConnectionConfig { driver: 'bun' | 'reverb' | 'pusher' | 'ably' | 'log' | 'null' host?: string port?: number scheme?: 'http' | 'https' | 'ws' | 'wss' key?: string secret?: string appId?: string cluster?: string encrypted?: boolean useTLS?: boolean options?: ConnectionOptions } export declare interface ConnectionOptions { idleTimeout?: number maxPayloadLength?: number backpressureLimit?: number closeOnBackpressureLimit?: boolean sendPings?: boolean publishToSelf?: boolean perMessageDeflate?: boolean | CompressionOptions } export declare interface CompressionOptions { compress?: boolean | Compressor decompress?: boolean | Compressor } // WebSocket server types // Note: BroadcastServer class is defined in server.ts with full implementation // This interface defines the minimal contract for type checking export declare interface BroadcastServerContract { server: BunServer start: () => Promise stop: () => Promise broadcast: (channel: string, event: string, data: unknown, exclude?: string | string[]) => void getConnectionCount: () => number getSubscriberCount: (channel: string) => number } export declare interface WebSocketData { id: string user?: User channels: Set socketId: string connectedAt: number data?: Record } export declare interface User { id: string | number [key: string]: unknown } export declare interface Channel { name: string type: ChannelType subscribers: Set } export declare interface PrivateChannel extends Channel { type: 'private' } export declare interface PresenceChannel extends Channel { type: 'presence' members: Map } export declare interface PresenceMember { id: string | number info: Record } // Authorization export declare interface ChannelAuthorizationCallback { (socket: ServerWebSocket, params?: Record): boolean | PresenceMember | Promise } export declare interface ChannelAuthorizationClass { join: (socket: ServerWebSocket, params?: Record) => boolean | PresenceMember | Promise } // Events export declare interface BroadcastEvent { shouldBroadcast: () => boolean broadcastOn: () => string | string[] broadcastAs?: () => string broadcastWith?: () => Record broadcastWhen?: () => boolean broadcastQueue?: () => string broadcastConnection?: () => string } export declare interface BroadcastMessage { event: string channel: string data: unknown socketId?: string | string[] } // Queue support export declare interface QueueConfig { connection?: string queue?: string delay?: number tries?: number timeout?: number } // Server handlers export declare interface WebSocketHandlers { message?: (ws: ServerWebSocket, message: string | ArrayBuffer | Uint8Array) => void | Promise open?: (ws: ServerWebSocket) => void | Promise close?: (ws: ServerWebSocket, code: number, reason: string) => void | Promise error?: (ws: ServerWebSocket, error: Error) => void | Promise drain?: (ws: ServerWebSocket) => void | Promise } // HTTP request types for upgrade export declare interface UpgradeOptions { headers?: Record | Headers data?: Partial } // Client messages export declare interface ClientMessage { event: string channel?: string data?: unknown auth?: string } export declare interface SubscribeMessage extends ClientMessage { event: 'subscribe' channel: string auth?: string channel_data?: unknown } export declare interface UnsubscribeMessage extends ClientMessage { event: 'unsubscribe' channel: string } export declare interface ClientEventMessage extends ClientMessage { event: string channel: string data: unknown } // Server responses export declare interface ServerMessage { event: string channel?: string data?: unknown } export declare interface SubscriptionSucceeded extends ServerMessage { event: 'subscription_succeeded' channel: string } export declare interface SubscriptionError extends ServerMessage { event: 'subscription_error' channel: string data: { type: string error: string status: number } } // Presence channel specific export declare interface PresenceChannelData { presence: { ids: Array hash: Record count: number } } export declare interface MemberAddedMessage extends ServerMessage { event: 'member_added' channel: string data: PresenceMember } export declare interface MemberRemovedMessage extends ServerMessage { event: 'member_removed' channel: string data: PresenceMember } export type Compressor = | 'disable' | 'shared' | 'dedicated' | '3KB' | '4KB' | '8KB' | '16KB' | '32KB' | '64KB' | '128KB' | '256KB'; // Channel types export type ChannelType = 'public' | 'private' | 'presence';