import type { SignedGrant, AuthorizationContext, AuthorizationResource, AuthorizationSubject } from './authorization.js'; export type SyncStatus = 'offline' | 'connecting' | 'syncing' | 'synced' | 'degraded'; export interface SyncScope { resources?: string[]; collections?: string[]; fields?: Record; } export interface SyncCursor { contract_version: 1; tenant_id: string; application_id: string; subject: AuthorizationSubject; scope_hash: string; position: number; } export interface SyncOperation { contract_version: 1; operation_id: string; tenant_id: string; application_id: string; subject: AuthorizationSubject; device_id: string; resource: AuthorizationResource; operation: { kind: 'insert' | 'update' | 'delete'; collection: string; id: string; value?: unknown; if_version?: number; }; causal_context: Record; schema_version: number; authorization_context: AuthorizationContext; offline_grant: SignedGrant; application_revision: string; created_at: number; } export interface SyncResult { acknowledgements: Array<{ operation_id: string; outcome: string; server_position?: number; }>; rejections: Array<{ operation_id: string; code: string; message: string; retryable: boolean; }>; conflicts: Array<{ operation_id: string; reason: string; }>; cursor: SyncCursor; } export interface SyncConfig { endpoint?: string; scope: SyncScope; device: { device_id: string; tenant_id: string; application_id: string; subject: AuthorizationSubject; }; offlineGrant: SignedGrant; fetcher?: typeof fetch; } declare class StatusSignal { private value; private listeners; constructor(value?: SyncStatus); subscribe(listener: (status: SyncStatus) => void): () => boolean; set(value: SyncStatus): void; get(): SyncStatus; } export declare class SyncController { private config; readonly status: StatusSignal; private readonly fetcher; private sessionId?; private cursor?; private error?; private timer?; constructor(config: SyncConfig); private key; private restore; private persist; private readOutbox; private writeOutbox; private request; start(): Promise; stop(): Promise; enqueue(operation: SyncOperation): string; flush(): Promise; pending(): SyncOperation[]; conflicts(): SyncOperation[]; lastCursor(): SyncCursor | undefined; lastError(): string | undefined; } export {}; //# sourceMappingURL=sync-contract.d.ts.map