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