UNPKG

solver-sdk

Version:

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

103 lines 4.24 kB
import { WebSocketClient } from './websocket-client.js'; /** * События индексации */ export var IndexingEvent; (function (IndexingEvent) { /** Начало индексации */ IndexingEvent["START"] = "indexing_start"; /** Прогресс индексации */ IndexingEvent["PROGRESS"] = "indexing_progress"; /** Завершение индексации */ IndexingEvent["COMPLETE"] = "indexing_complete"; /** Ошибка индексации */ IndexingEvent["ERROR"] = "indexing_error"; })(IndexingEvent || (IndexingEvent = {})); /** * WebSocket клиент для работы с индексацией */ export class IndexingWebSocketClient extends WebSocketClient { /** * Создает новый WebSocket клиент для индексации * @param {string} url URL для подключения * @param {IndexingWebSocketOptions} [options] Опции клиента */ constructor(url, options = {}) { // Сохраняем базовый URL const baseUrl = url; // Формируем URL с параметрами для проекта если он указан let targetUrl = url; if (options.projectId) { const urlWithParams = new URL(url); urlWithParams.searchParams.append('projectId', options.projectId); urlWithParams.searchParams.append('type', 'indexing'); targetUrl = urlWithParams.toString(); } super(targetUrl, { ...options, headers: { ...(options.headers || {}), ...(options.apiKey ? { 'Authorization': `Bearer ${options.apiKey}` } : {}) } }); /** Идентификатор проекта */ this.projectId = null; this.baseUrl = baseUrl; this.projectId = options.projectId || null; } /** * Устанавливает идентификатор проекта * @param {string} projectId Идентификатор проекта */ setProjectId(projectId) { this.projectId = projectId; } /** * Подключается к WebSocket для отслеживания индексации * @param {string} [projectId] Идентификатор проекта (если не был указан в конструкторе) * @returns {Promise<void>} */ async connect(projectId) { const targetProjectId = projectId || this.projectId; if (!targetProjectId) { throw new Error('Project ID is required for indexing WebSocket connection'); } // Сохраняем ID проекта this.projectId = targetProjectId; // Если проект изменился и клиент уже подключен, отключаемся if (projectId && this.isConnected()) { this.close(); } // Выполняем соединение await super.connect(); } /** * Подписывается на события начала индексации * @param {(data: {projectId: string}) => void} handler Обработчик события */ onStart(handler) { this.on(IndexingEvent.START, handler); } /** * Подписывается на события прогресса индексации * @param {(data: IndexingProgressData) => void} handler Обработчик события */ onProgress(handler) { this.on(IndexingEvent.PROGRESS, handler); } /** * Подписывается на события завершения индексации * @param {(data: IndexingCompleteData) => void} handler Обработчик события */ onComplete(handler) { this.on(IndexingEvent.COMPLETE, handler); } /** * Подписывается на события ошибок индексации * @param {(data: IndexingErrorData) => void} handler Обработчик события */ onError(handler) { this.on(IndexingEvent.ERROR, handler); } } //# sourceMappingURL=indexing-websocket-client.js.map