UNPKG

solver-sdk

Version:

SDK для интеграции с Code Solver Backend API

123 lines 4.91 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FilesystemApi = void 0; const code_solver_websocket_client_js_1 = require("../utils/code-solver-websocket-client.js"); /** * API для работы с файловой системой через WebSocket */ class FilesystemApi { /** * Создает новый API для работы с файловой системой * @param httpClient HTTP клиент */ constructor(httpClient) { /** WebSocket клиент */ this.wsClient = null; /** Родительский SDK */ this.parentSdk = null; /** Активный ID проекта */ this.activeProjectId = null; this.httpClient = httpClient; } /** * Устанавливает родительский SDK * @param sdk Родительский SDK */ setParent(sdk) { this.parentSdk = sdk; } /** * Подключается к WebSocket для файловой системы * @param {string} projectId ID проекта * @returns {Promise<boolean>} Результат подключения */ async connectWebSocket(projectId) { if (!projectId) { console.error('[FilesystemApi] Не указан projectId при подключении к WebSocket'); return false; } try { if (!this.parentSdk || typeof this.parentSdk.getWebSocketClient !== 'function') { throw new Error('Родительский SDK не настроен или не поддерживает WebSocket'); } this.wsClient = this.parentSdk.getWebSocketClient(); // Используем метод getFileSystemClient из SDK для подключения const fileSystemClient = this.parentSdk.getFileSystemClient(); if (!fileSystemClient) { throw new Error('Клиент файловой системы не доступен'); } // Подключаемся с projectId const connected = await fileSystemClient.connectToProject(projectId); if (!connected) { console.warn('[FilesystemApi] Не удалось подключиться к WebSocket для файловой системы'); } else { // Сохраняем активный ID проекта this.activeProjectId = projectId; } return connected; } catch (error) { console.error('[FilesystemApi] Ошибка при подключении к WebSocket:', error.message); return false; } } /** * Подключается к проекту через WebSocket (альтернативный синтаксис) * @param projectId ID проекта * @returns Результат подключения */ async connectToProject(projectId) { return this.connectWebSocket(projectId); } /** * Отключается от WebSocket * @returns {Promise<void>} */ async disconnectWebSocket() { if (this.wsClient) { await this.wsClient.disconnect(code_solver_websocket_client_js_1.WebSocketNamespace.FILESYSTEM); this.activeProjectId = null; } } /** * Проверяет, подключен ли WebSocket * @returns {boolean} Состояние подключения */ isWebSocketConnected() { return this.wsClient ? this.wsClient.isConnected(code_solver_websocket_client_js_1.WebSocketNamespace.FILESYSTEM) : false; } /** * Получает активный ID проекта * @returns ID проекта или null */ getActiveProjectId() { return this.activeProjectId; } /** * Подписывается на событие через WebSocket * @param event Название события * @param callback Функция обратного вызова */ on(event, callback) { if (!this.wsClient) { console.warn('[FilesystemApi] WebSocket не подключен'); return; } this.wsClient.on(event, callback); } /** * Отправляет событие через WebSocket * @param event Название события * @param data Данные для отправки */ emitSocketEvent(event, data) { if (!this.wsClient) { console.warn('[FilesystemApi] WebSocket не подключен'); return; } this.wsClient.send(code_solver_websocket_client_js_1.WebSocketNamespace.FILESYSTEM, event, data); } } exports.FilesystemApi = FilesystemApi; //# sourceMappingURL=filesystem-api.js.map