import { SyncAdapter, SyncResult, ConflictStrategy, ColumnDef } from './sync-adapter.js'; export interface SyncMeta { table: string; lastPushAt: string | null; lastPullAt: string | null; lastSyncCursor: string | null; } export interface SyncChange { id?: number; table: string; recordId: string; action: 'create' | 'update' | 'delete'; data: any; timestamp: string; synced: boolean; } export interface SyncOptions { strategy?: ConflictStrategy; batchSize?: number; onProgress?: (message: string) => void; /** * Explicit user-column schema. When provided, used as the source of truth * (merged with sync meta columns) and passed to adapter.ensureTable(). * If omitted, columns are inferred from pending records. */ columns?: ColumnDef[]; } export declare class SyncEngine { private db; private syncUser; setDatabase(db: IDBDatabase): void; setUser(userId: string): void; getUser(): string | null; private getSyncMeta; private setSyncMeta; private getPendingChanges; private getAllChanges; private markChangesSynced; private pruneSyncedChanges; sync(table: string, adapter: SyncAdapter, options?: SyncOptions): Promise; private deriveColumns; pushChanges(table: string, adapter: SyncAdapter): Promise; pullChanges(table: string, adapter: SyncAdapter): Promise; mergeChanges(table: string, remoteRecords: any[], adapter: SyncAdapter, strategy: ConflictStrategy): Promise; private mergeSingleRecord; getPendingCount(table: string): Promise; clearSyncData(table: string): Promise; } //# sourceMappingURL=sync-engine.d.ts.map