delta-sync
Version:
A lightweight framework for bi-directional database synchronization with automatic version tracking and conflict resolution.
69 lines (68 loc) • 2.68 kB
TypeScript
import { DeltaModel, DatabaseAdapter, Attachment, DataChange, QueryOptions } from './types';
import { LocalCoordinator } from './LocalCoordinator';
import { EncryptionConfig } from './SyncConfig';
export declare enum SyncStatus {
Error = -2,// Error or offline status
Offline = -1,// Error or offline status
Idle = 0,// Idle status
Uploading = 1,// Upload synchronization in progress
Downloading = 2,// Download synchronization in progress
Operating = 3,// Operation in progress (clearing notes and other special operations)
Maintaining = 4
}
export interface SyncClientInitOptions {
localAdapter: DatabaseAdapter;
encryptionConfig?: EncryptionConfig;
syncOption?: SyncOptions;
}
export interface SyncOptions {
autoSync?: {
enabled?: boolean;
interval?: number;
retryDelay?: number;
};
onStatusUpdate?: (status: SyncStatus) => void;
onVersionUpdate?: (version: number) => void;
onChangePulled?: (changes: DataChange[]) => void;
onChangePushed?: (changes: DataChange[]) => void;
encryption?: EncryptionConfig;
maxRetries?: number;
timeout?: number;
maxFileSize?: number;
batchSize?: number;
payloadSize?: number;
fileChunkSize?: number;
}
export declare class SyncClient {
private localAdapter;
private localCoordinator;
private cloudCoordinator?;
private syncManager?;
private syncOptions;
private autoSyncTimer?;
private syncStatus;
private currentVersion;
private cloudConfigured;
constructor(options: SyncClientInitOptions);
private initialize;
enableAutoSync(interval?: number): void;
disableAutoSync(): void;
private scheduleNextSync;
updateSyncOptions(options: Partial<SyncOptions>): void;
setCloudAdapter(cloudAdapter: DatabaseAdapter): Promise<void>;
private updateSyncStatus;
query<T extends DeltaModel>(storeName: string, options?: QueryOptions): Promise<T[]>;
save<T extends DeltaModel>(storeName: string, data: T | T[]): Promise<T[]>;
delete(storeName: string, ids: string | string[]): Promise<void>;
readFile(fileId: string): Promise<Blob | ArrayBuffer | null>;
attach(storeId: string, modelId: string, file: File | Blob | ArrayBuffer, filename: string, mimeType: string, metadata?: any): Promise<Attachment>;
detach(storeName: string, modelId: string, attachmentId: string): Promise<DeltaModel>;
sync(): Promise<boolean>;
push(): Promise<boolean>;
pull(): Promise<boolean>;
getlocalCoordinator(): LocalCoordinator;
getlocalAdapter(): DatabaseAdapter;
getSyncOptions(): SyncOptions;
dispose(): void;
disconnectCloud(): void;
}