/** * Effect.websocket() helper functions. * * This module provides declarative effect helpers for WebSocket operations: * - connect(): Connect to WebSocket with event subscription * - disconnect(): Disconnect from WebSocket * - send(): Send a message through WebSocket * - subscribe(): Subscribe to incoming messages * - subscribeToEvents(): Subscribe to connection events */ import type { Effect as EffectType } from '../types.js'; import type { WebSocketClient, WebSocketEvent, WebSocketMessage } from './types.js'; import { WebSocketError } from './types.js'; /** * Connect to a WebSocket server with automatic event subscription. * * **Cleanup**: Automatically disconnects when effect is cancelled. * * @param client - WebSocket client instance * @param subscriptionId - Unique ID for subscription cleanup * @param url - WebSocket URL * @param protocols - Optional WebSocket protocols * @param onEvent - Optional callback to transform events into actions * * @example * ```typescript * case 'connect': * return [ * { ...state, connection: { ...state.connection, status: 'connecting' } }, * Effect.websocket.connect( * deps.websocket, * 'websocket-connection', * 'wss://chat.example.com', * undefined, * (event) => ({ type: 'websocketEvent', event }) * ) * ]; * ``` */ export declare function connect(client: WebSocketClient, subscriptionId: string, url: string, protocols?: string[], onEvent?: (event: WebSocketEvent) => Action): EffectType; /** * Disconnect from a WebSocket server. * * @param client - WebSocket client instance * @param code - Optional close code * @param reason - Optional close reason * * @example * ```typescript * case 'disconnect': * return [ * state, * Effect.websocket.disconnect(deps.websocket) * ]; * ``` */ export declare function disconnect(client: WebSocketClient, code?: number, reason?: string): EffectType; /** * Send a message through WebSocket. * * @param client - WebSocket client instance * @param message - Message to send * @param onSuccess - Optional success callback * @param onFailure - Optional failure callback * * @example * ```typescript * case 'sendMessage': * return [ * state, * Effect.websocket.send( * deps.websocket, * { type: 'chat', text: state.draft }, * () => ({ type: 'messageSent' }), * (error) => ({ type: 'messageFailed', error }) * ) * ]; * ``` */ export declare function send(client: WebSocketClient, message: T, onSuccess?: () => Action, onFailure?: (error: WebSocketError) => Action): EffectType; /** * Subscribe to messages from WebSocket. * * **Cleanup**: Automatically unsubscribes when effect is cancelled. * * @param client - WebSocket client instance * @param subscriptionId - Unique ID for subscription cleanup * @param onMessage - Callback to transform messages into actions * * @example * ```typescript * case 'subscribeToMessages': * return [ * state, * Effect.websocket.subscribe( * deps.websocket, * 'websocket-messages', * (message) => ({ type: 'messageReceived', message: message.data }) * ) * ]; * ``` */ export declare function subscribe(client: WebSocketClient, subscriptionId: string, onMessage: (message: WebSocketMessage) => Action): EffectType; /** * Subscribe to connection events from WebSocket. * * **Cleanup**: Automatically unsubscribes when effect is cancelled. * * @param client - WebSocket client instance * @param subscriptionId - Unique ID for subscription cleanup * @param onEvent - Callback to transform events into actions * * @example * ```typescript * case 'subscribeToEvents': * return [ * state, * Effect.websocket.subscribeToEvents( * deps.websocket, * 'websocket-events', * (event) => ({ type: 'websocketEvent', event }) * ) * ]; * ``` */ export declare function subscribeToEvents(client: WebSocketClient, subscriptionId: string, onEvent: (event: WebSocketEvent) => Action): EffectType; declare module '../effect.js' { interface EffectNamespace { websocket: { connect: typeof connect; disconnect: typeof disconnect; send: typeof send; subscribe: typeof subscribe; subscribeToEvents: typeof subscribeToEvents; }; } } //# sourceMappingURL=effect-websocket.d.ts.map