solver-sdk
Version:
SDK для интеграции с Code Solver Backend API (совместимо с браузером и Node.js), с поддержкой функциональности мышления (Thinking Mode)
233 lines • 10 kB
TypeScript
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