/** * Document operation types */ export enum DocumentOperation { CREATE = 'create', UPDATE = 'update', UPSERT = 'upsert', DELETE = 'delete', } /** * Document with metadata */ export interface DocumentWithMeta { /** Document ID */ _id: string; /** Document source */ _source: T; /** Document version (for optimistic locking) */ _version?: number; /** Sequence number (for optimistic locking) */ _seq_no?: number; /** Primary term (for optimistic locking) */ _primary_term?: number; /** Document index */ _index?: string; /** Document score (from search) */ _score?: number; } /** * Batch operation for bulk requests */ export interface BatchOperation { operation: DocumentOperation; documentId: string; document?: T; version?: number; seqNo?: number; primaryTerm?: number; } /** * Batch result */ export interface BatchResult { successful: number; failed: number; errors: Array<{ documentId: string; operation: DocumentOperation; error: string; statusCode: number; }>; took: number; // Time in milliseconds } /** * Session configuration */ export interface SessionConfig { /** Only process documents newer than a timestamp */ onlyNew?: boolean; /** Start from a specific point in time */ fromTimestamp?: Date; /** Delete documents not seen in session */ cleanupStale?: boolean; /** Batch size for operations */ batchSize?: number; } /** * Snapshot processor function */ export type SnapshotProcessor = ( iterator: AsyncIterableIterator>, previousSnapshot: R | null ) => Promise; /** * Snapshot metadata */ export interface SnapshotMeta { date: Date; data: T; documentCount: number; processingTime: number; } /** * Document iterator options */ export interface IteratorOptions { /** Batch size for scrolling */ batchSize?: number; /** Filter by timestamp */ fromTimestamp?: Date; /** Sort order */ sort?: Array<{ [key: string]: 'asc' | 'desc' }>; /** Query filter */ query?: unknown; } /** * Point-in-time ID for pagination */ export interface PitId { id: string; keepAlive: string; }