UNPKG

solver-sdk

Version:

SDK for WorkAI API - AI-powered code analysis with WorkCoins billing system

220 lines 8.02 kB
/** * 🔌 Project Sync WebSocket Client * * Клиент для работы с real-time уведомлениями о статусе синхронизации проектов. * Интегрируется с backend ProjectSyncGateway через Socket.io. * * @features * - Real-time push notifications о статусе индексации * - Auto-reconnection при разрыве соединения * - Graceful fallback к REST polling * - TypeScript поддержка для всех событий */ export interface JoinProjectSyncDto { projectId: string; userId?: string; } export interface SyncStatusUpdate { projectId: string; sessionId: string; status: 'initializing' | 'processing' | 'completed' | 'failed' | 'cancelled'; progress?: number; message?: string; timestamp: Date; chunksProcessed?: number; totalChunks?: number; embeddingsCreated?: number; } export interface SyncProgressEvent { projectId: string; sessionId: string; stage: 'receiving_chunks' | 'processing_chunks' | 'creating_embeddings' | 'updating_tree' | 'finalizing'; progress: number; currentChunk?: number; totalChunks?: number; processedFiles?: number; totalFiles?: number; estimatedTimeRemaining?: number; details?: string; } export interface SyncCompletedEvent { projectId: string; sessionId: string; status: 'success' | 'failed' | 'cancelled'; totalProcessed: number; duration: number; errors?: string[]; warnings?: string[]; statistics?: { filesIndexed: number; embeddingsCreated: number; chunksProcessed: number; totalSize: number; totalFiles?: number; }; } export interface ErrorEvent { projectId: string; sessionId?: string; error: string; code: string; timestamp: Date; recoverable: boolean; } export type SyncEventHandler<T> = (data: T) => void; /** * Типы событий WebSocket (синхронизированы с backend ProjectSyncGateway) * * Backend → Client: * - 'connected' - успешное подключение к gateway * - 'disconnected' - отключение от gateway (SDK-only, внутреннее) * - 'project-sync-joined' - успешная подписка на проект * - 'project-sync-left' - успешная отписка от проекта * - 'sync-status-update' - обновление статуса синхронизации * - 'sync-progress' - прогресс синхронизации * - 'sync-completed' - завершение синхронизации * - 'error' - ошибки (IP_CONNECTIONS_EXCEEDED, INVALID_PROJECT_ID, etc.) * - 'disconnect-idle' - принудительное отключение по idle timeout * - 'reconnect_exhausted' - SDK-only: исчерпаны попытки reconnect */ export type EventType = 'sync-status-update' | 'sync-progress' | 'sync-completed' | 'error' | 'connected' | 'disconnected' | 'project-sync-joined' | 'project-sync-left' | 'disconnect-idle' | 'reconnect_exhausted'; /** Событие при успешном join на проект (от backend) */ export interface ProjectSyncJoinedEvent { projectId: string; message: string; connectedClients: number; timestamp: Date; } /** Событие при leave проекта (от backend) */ export interface ProjectSyncLeftEvent { projectId: string; message: string; timestamp: Date; } /** Событие при принудительном отключении по idle timeout */ export interface DisconnectIdleEvent { reason: string; idleTime: number; maxIdleTime: number; timestamp: Date; } /** Событие при исчерпании попыток reconnect (SDK-only) */ export interface ReconnectExhaustedEvent { attempts: number; maxAttempts: number; lastError?: string; timestamp: Date; } /** * Опции для ProjectSyncClient */ export interface ProjectSyncClientOptions { /** Базовый URL backend сервера */ baseURL: string; /** Заголовки аутентификации (статические) */ headers?: Record<string, string>; /** Динамическое получение токена авторизации */ getAuthToken?: () => Promise<string | null>; /** Таймаут подключения (мс) */ connectionTimeout?: number; /** Максимальное количество попыток переподключения */ maxRetries?: number; /** Задержка между попытками переподключения (мс) */ retryDelay?: number; /** Включить отладочные логи (deprecated: используйте logLevel) */ debug?: boolean; /** * 🔄 Полностью отключить auto-reconnect в SDK * Рекомендуется при использовании собственного координатора reconnect на клиенте */ disableAutoReconnect?: boolean; /** * 📝 Уровень логирования для WebSocket * - 'silent' - полностью отключает логирование * - 'error' - только ошибки (по умолчанию) * - 'warn' - предупреждения и ошибки * - 'info' - информация, предупреждения и ошибки * - 'debug' - полная отладочная информация */ logLevel?: 'silent' | 'error' | 'warn' | 'info' | 'debug'; } /** * 🔌 WebSocket клиент для project sync уведомлений */ export declare class ProjectSyncClient { private socket; private readonly baseURL; private readonly options; private connected; private retryCount; private reconnectTimer; private subscribedProjects; private idleWarningTimer; private readonly IDLE_WARNING_DELAY; private errorDebounce; private readonly ERROR_DEBOUNCE_MS; private lastConnectionError; private eventHandlers; /** * Logger для отладки с поддержкой logLevel и debounce */ private logger; constructor(options: ProjectSyncClientOptions); /** * 📝 Проверка уровня логирования */ private shouldLog; /** * 🔄 Логирование ошибок с debounce для снижения спама */ private logErrorWithDebounce; /** * 🔌 Подключение к WebSocket */ connect(): Promise<void>; /** * ❌ Отключение от WebSocket */ disconnect(): void; /** * 📡 Подписка на проект для получения уведомлений */ subscribeToProject(projectId: string, userId?: string): void; /** * 📡 Отписка от проекта */ unsubscribeFromProject(projectId: string): void; /** * 👂 Подписка на события */ on<T>(event: EventType, handler: SyncEventHandler<T>): void; /** * 👂 Отписка от событий */ off<T>(event: EventType, handler: SyncEventHandler<T>): void; /** * 📢 Эмиссия событий */ private emit; /** * 🔧 Настройка обработчиков событий от backend */ private setupEventHandlers; /** * ⚠️ Планирование idle предупреждения */ private scheduleIdleWarning; /** * 🔄 Планирование переподключения */ private scheduleReconnect; /** * 🔍 Проверка статуса подключения */ get isConnected(): boolean; /** * 📋 Список подписанных проектов */ get subscribedProjectIds(): string[]; } //# sourceMappingURL=project-sync-client.d.ts.map