export interface Preset { key: string; format?: string; quality?: number | string; width?: number | string; height?: number | string; fit?: string; withoutEnlargement?: boolean; focal_point_x?: number | string | null; focal_point_y?: number | string | null; transforms?: unknown[]; [key: string]: unknown; } export interface WarmResultItem { key: string; format: string | null; ok: boolean; ms: number; cached?: boolean; error?: string; } export interface WarmSummary { requested: number; ok: number; failed: number; results: WarmResultItem[]; } export interface CompletedRecord { file_id: string; preset_key: string; format: string | null; ts: number; } export type FailureEventType = 'failed' | 'retry' | 'recovered'; export type FailureStatus = 'failed' | 'recovered' | 'retry'; export interface FailureEvent { type: FailureEventType; ts: number; file_id: string; preset_key: string; format: string | null; attempt: number; next_retry_at?: number | null; error?: string; ms?: number; } export interface FailureRecord { file_id: string; preset_key: string; format: string | null; attempts: number; status: FailureStatus; first_failed_at: number; last_failed_at: number; next_retry_at: number | null; error: string | null; ms: number | null; } export interface FailureListQuery { status?: FailureStatus | null; limit: number; offset: number; } export interface FailureListResult { records: FailureRecord[]; total: number; limit: number; offset: number; } export interface FailureFileMeta { filename_download?: string | null; type?: string | null; folder?: string | null; } export interface FailureEnrichedRecord extends FailureRecord { file: { filename_download: string | null; type: string | null; folder: string | null; }; first_failed_at_iso: string | null; first_failed_at_human: string; last_failed_at_iso: string | null; last_failed_at_human: string; next_retry_at_iso: string | null; next_retry_at_human: string | null; ms_human: string | null; } export interface RunState { running: boolean; startedAt: number | null; finishedAt: number | null; total: number; done: number; generated: number; hits: number; failed: number; rate: number; eta: number | null; cancelled: boolean; paused?: boolean; error?: string; }