solver-sdk
Version:
SDK для интеграции с Code Solver Backend API
119 lines • 5.81 kB
TypeScript
import { WebSocketClient, WebSocketClientOptions } from '../utils/websocket-client.js';
import { WebSocketNamespace } from '../constants/websocket-namespaces.constants.js';
import { Logger, LogFunction } from '../utils/logger.js';
import { SessionManager } from '../utils/session-manager.js';
import { PingPongManager } from '../utils/ping-pong-manager.js';
import { ConnectionStateManager } from '../utils/connection-state-manager.js';
/**
* Опции базового WebSocket клиента
*/
export interface BaseWebSocketClientOptions extends Omit<WebSocketClientOptions, 'logger'> {
/** Логгер (объект или функция) */
logger?: Logger | LogFunction;
/** API ключ для аутентификации */
apiKey?: string;
/** Включить автоматическое ping/pong */
enableAutoPing?: boolean;
/** Интервал ping в миллисекундах */
pingInterval?: number;
/** Таймаут ожидания pong в миллисекундах */
pingTimeoutThreshold?: number;
/** Включить сохранение сессий */
enableSessionPersistence?: boolean;
/** Стратегия переподключения */
reconnectStrategy?: 'linear' | 'exponential' | 'fibonacci';
/** Задержка перед повторной попыткой подключения в миллисекундах */
retryDelay?: number;
/** Максимальная задержка перед повторной попыткой подключения в миллисекундах */
maxRetryDelay?: number;
}
/**
* Базовый абстрактный класс для всех WebSocket клиентов
*/
export declare abstract class BaseWebSocketClient {
/** Базовый URL API */
protected readonly baseURL: string;
/** Опции клиента */
protected readonly options: BaseWebSocketClientOptions;
/** Пространство имен WebSocket */
protected readonly namespace: WebSocketNamespace;
/** WebSocket клиент */
protected client: WebSocketClient | null;
/** Логгер */
protected readonly logger: Logger;
/** Менеджер сессий */
protected readonly sessionManager: SessionManager;
/** Менеджер ping/pong */
protected readonly pingPongManager: PingPongManager;
/** Менеджер состояния подключения */
protected readonly connectionStateManager: ConnectionStateManager;
/**
* Создает новый базовый WebSocket клиент
* @param {WebSocketNamespace} namespace Пространство имен WebSocket
* @param {string} baseURL Базовый URL API
* @param {BaseWebSocketClientOptions} options Опции клиента
*/
constructor(namespace: WebSocketNamespace, baseURL: string, options?: BaseWebSocketClientOptions);
/**
* Подключается к серверу WebSocket
* @param {Record<string, any>} [params={}] Дополнительные параметры для подключения
* @returns {Promise<boolean>} Успешность подключения
*/
connect(params?: Record<string, any>): Promise<boolean>;
/**
* Формирует URL для подключения
* @param {Record<string, any>} params Параметры для подключения
* @returns {string} URL для подключения
*/
protected buildConnectionUrl(params: Record<string, any>): string;
/**
* Устанавливает обработчики событий для WebSocket клиента
*/
protected setupEventHandlers(): void;
/**
* Отправляет аутентификационные данные на сервер
*/
protected authenticate(): void;
/**
* Отключается от сервера WebSocket
*/
disconnect(): void;
/**
* Проверяет, подключен ли клиент к серверу
* @returns {boolean} true, если клиент подключен
*/
isConnected(): boolean;
/**
* Получает ID сокета
* @returns {string | null} ID сокета или null, если не подключен
*/
getSocketId(): string | null;
/**
* Отправляет событие на сервер
* @param {string} eventType Тип события
* @param {any} [data] Данные события
* @returns {boolean} Успешность отправки
*/
send(eventType: string, data?: any): boolean;
/**
* Отправляет событие и ожидает ответа
* @param {string} eventType Тип события
* @param {any} data Данные события
* @param {number} [timeout=5000] Таймаут ожидания ответа в миллисекундах
* @returns {Promise<any>} Ответ сервера
*/
emitWithAck(eventType: string, data: any, timeout?: number): Promise<any>;
/**
* Добавляет обработчик события
* @param {string} eventType Тип события
* @param {(data: any) => void} handler Обработчик события
*/
on(eventType: string, handler: (data: any) => void): void;
/**
* Удаляет обработчик события
* @param {string} eventType Тип события
* @param {(data: any) => void} [handler] Обработчик события (если не указан, удаляются все обработчики)
*/
off(eventType: string, handler?: (data: any) => void): void;
}
//# sourceMappingURL=base-ws-client.d.ts.map