recoder-shared
Version:
Shared types, utilities, and configurations for Recoder
81 lines • 2.65 kB
TypeScript
/**
* Data Synchronization Client for Recoder.xyz
* Handles cross-platform data sync with conflict resolution
*/
import { EventEmitter } from 'events';
import { AuthClient } from './auth-client';
import { WebSocketClient } from './websocket-client';
export interface SyncState {
dataType: string;
lastSyncAt: string;
syncVersion: number;
syncStatus: 'synced' | 'pending' | 'conflicted' | 'failed';
conflictData?: any;
deviceSyncMap: Record<string, number>;
}
export interface SyncConfig {
authClient: AuthClient;
webSocketClient?: WebSocketClient;
baseURL?: string;
syncInterval?: number;
enableRealTimeSync?: boolean;
}
export interface ProjectData {
id: string;
name: string;
type: string;
description?: string;
status: string;
config: any;
updatedAt: string;
}
export interface SettingsData {
name?: string;
organization?: string;
preferences?: any;
aiProviders?: any;
}
export interface SyncResult<T = any> {
success: boolean;
data?: T;
version?: number;
syncStatus: 'updated' | 'synced' | 'conflicted' | 'up_to_date';
conflicted: boolean;
conflicts?: any[];
}
export type SyncDataType = 'projects' | 'settings' | 'history' | 'preferences';
export declare class SyncClient extends EventEmitter {
private authClient;
private webSocketClient?;
private api;
private syncInterval?;
private config;
private localVersions;
private syncInProgress;
constructor(config: SyncConfig);
private setupAPIInterceptors;
private setupWebSocketListeners;
startAutoSync(): Promise<void>;
stopAutoSync(): void;
syncAll(): Promise<void>;
sync<T = any>(dataType: SyncDataType): Promise<SyncResult<T>>;
syncProjects(): Promise<SyncResult<ProjectData[]>>;
syncSettings(): Promise<SyncResult<SettingsData>>;
updateProjects(projects: ProjectData[]): Promise<SyncResult<ProjectData[]>>;
updateSettings(settings: SettingsData): Promise<SyncResult<SettingsData>>;
resolveConflict(dataType: SyncDataType, resolution: 'server_wins' | 'client_wins' | 'merge', resolvedData?: any): Promise<SyncResult>;
forceSync(): Promise<any>;
getSyncStatus(): Promise<SyncState[]>;
private performSync;
private handleSyncRequest;
private handleSyncUpdate;
private handleSyncError;
private loadLocalVersions;
private saveLocalVersions;
get isSyncing(): boolean;
get autoSyncEnabled(): boolean;
getLocalVersion(dataType: SyncDataType): number;
getSyncingDataTypes(): SyncDataType[];
}
export default SyncClient;
//# sourceMappingURL=sync-client.d.ts.map