UNPKG

solver-sdk

Version:

SDK для интеграции с Code Solver Backend API (совместимо с браузером и Node.js), с поддержкой функциональности мышления (Thinking Mode)

233 lines 10 kB
import { Socket as SocketIOClient } from 'socket.io-client'; /** * Опции для WebSocket клиента */ export interface WebSocketClientOptions { /** * HTTP заголовки для WebSocket соединения */ headers?: Record<string, string>; /** * Таймаут подключения в миллисекундах */ connectionTimeout?: number; /** * Протоколы WebSocket */ protocols?: string | string[]; /** * Максимальное количество попыток переподключения */ maxRetries?: number; /** * Задержка перед попыткой переподключения в миллисекундах */ retryDelay?: number; /** * Максимальная задержка перед попыткой переподключения */ maxRetryDelay?: number; /** * Автоматически переподключаться при потере соединения */ autoReconnect?: boolean; /** * Отклонять неавторизованные соединения */ rejectUnauthorized?: boolean; /** * API ключ для аутентификации */ apiKey?: string; /** * Пространство имен Socket.IO для подключения */ namespace?: string; /** * Функция для логирования сообщений */ logger?: (level: string, message: string, data?: any) => void; /** * Интервал для отправки ping-сообщений (мс) */ pingInterval?: number; /** * Таймаут ожидания pong-ответа (мс) */ pingTimeout?: number; /** * Включить расширенную отладку */ debug?: boolean; } /** * Интерфейс для обработчика события WebSocket */ export interface WebSocketEventHandler { (event: any): void; } /** * Базовый класс для WebSocket клиентов, реализованный на базе Socket.IO */ export declare class WebSocketClient { /** URL для подключения */ protected readonly url: string; /** Опции клиента */ protected readonly options: WebSocketClientOptions; /** Экземпляр Socket.IO */ protected socket: SocketIOClient | null; /** Счетчик попыток переподключения */ protected retryCount: number; /** Флаг, указывающий, что соединение было закрыто намеренно */ protected intentionallyClosed: boolean; /** Таймер переподключения */ protected reconnectTimer: any; /** Таймер таймаута соединения */ protected connectionTimeoutTimer: any; /** Обработчики событий */ protected eventHandlers: Record<string, WebSocketEventHandler[]>; /** Очередь сообщений для отправки после подключения */ protected messageQueue: Array<any>; /** Состояние соединения */ protected connected: boolean; /** Среда выполнения */ protected readonly isBrowser: boolean; /** Аутентифицировано ли соединение */ protected authenticated: boolean; /** Пространство имен Socket.IO */ protected namespace: string; /** Функция логирования */ protected logger: (level: string, message: string, data?: any) => void; /** ID сокета */ protected socketId: string | null; /** Хранилище ожидающих callback-функций */ protected _pendingCallbacks: Map<string, (response: any) => void>; /** Таймер проверки состояния соединения */ protected healthCheckTimer: any; /** Время последнего полученного pong */ protected lastPongTimestamp: number; /** Интервал проверки здоровья соединения */ protected healthCheckInterval: number; /** * Тип для хранения отложенных обработчиков событий * @private */ protected _pendingCallbackHandlers: Map<string, WebSocketEventHandler>; /** * Создает новый WebSocket клиент * @param {string} url URL для подключения * @param {WebSocketClientOptions} [options] Опции клиента */ constructor(url: string, options?: WebSocketClientOptions); /** * Получает WebSocket URL из HTTP URL * @returns {string} WebSocket URL * @private */ private getWebSocketURL; /** * Подключается к WebSocket серверу используя Socket.IO клиент * @returns {Promise<void>} */ connect(): Promise<void>; /** * Получает код закрытия WebSocket из строки причины Socket.IO * @param {string} reason Причина закрытия Socket.IO * @returns {number} Код закрытия WebSocket * @private */ private getCloseCodeFromReason; /** * Настраивает проверку состояния соединения для обнаружения "зависших" подключений * @private */ protected setupConnectionHealthCheck(): void; /** * Останавливает проверку состояния соединения * @private */ protected stopConnectionHealthCheck(): void; /** * Закрывает соединение WebSocket * @param {number} code Код закрытия * @param {string} reason Причина закрытия */ close(code?: number, reason?: string): void; /** * Отправляет сообщение в WebSocket * @param {any} data Данные для отправки * @returns {boolean} Успешно ли отправлено сообщение */ send(data: any): boolean; /** * Отправляет событие с данными и ожидает ответа с помощью Promise * @param {string} event Название события * @param {any} data Данные события * @param {number} [timeout=5000] Таймаут ожидания ответа в мс * @returns {Promise<any>} Promise с ответом */ emitWithAck(event: string, data: any, timeout?: number): Promise<any>; /** * Добавляет обработчик события * @param {string} eventType Тип события * @param {WebSocketEventHandler} handler Обработчик события */ on(eventType: string, handler: WebSocketEventHandler): void; /** * Удаляет обработчик события * @param {string} eventType Тип события * @param {WebSocketEventHandler} [handler] Обработчик события (если не указан, удаляются все обработчики) */ off(eventType: string, handler?: WebSocketEventHandler): void; /** * Отправляет событие в обработчики * @param {string} eventType Тип события * @param {any} data Данные события * @private */ protected dispatchEvent(eventType: string, data: any): void; /** * Возвращает текущий статус соединения * @returns {boolean} Подключен ли клиент */ isConnected(): boolean; /** * Выполняет принудительное переподключение * @returns {Promise<void>} Promise без результата */ reconnect(): Promise<void>; /** * Отправляет событие (алиас для более удобного использования) * @param {string} eventName Название события * @param {any} data Данные события * @returns {boolean} Успешно ли отправлено событие */ emit(eventName: string, data: any): boolean; /** * Возвращает ID сокета, если соединение установлено * @returns {string|null} ID сокета или null, если соединение не установлено */ getSocketId(): string | null; /** * Устанавливает функцию логирования * @param {Function} loggerFn Функция для логирования */ setLogger(loggerFn: (level: string, message: string, data?: any) => void): void; /** * Регистрирует обработчик события, который будет вызван один раз и удален * @param {string} event Название события * @param {WebSocketEventHandler} handler Обработчик события * @returns {void} */ once(event: string, handler: WebSocketEventHandler): void; /** * Отправляет событие Socket.IO через WebSocket соединение * @param {string} event Имя события * @param {any} data Данные события * @param {(response: any) => void} [callback] Функция обратного вызова для получения ответа * @param {string} [namespace=''] Namespace для Socket.IO * @returns {boolean} Успешно ли отправлено сообщение */ sendSocketIOEvent(event: string, data: any, callback?: (response: any) => void, namespace?: string): boolean; } //# sourceMappingURL=websocket-client.d.ts.map