export interface AccessLog { id: number; ip: string; method: string; path: string; status_code: number; latency_ms: number; country: string; city: string; latitude: number | null; longitude: number | null; created_at: string; } export interface Stats { uptime_seconds: number; total_hits: number; active_ips: number; avg_latency_ms: number; } export interface GeoDistributionItem { country: string; count: number; percentage: number; } export interface GeoPoint { latitude: number; longitude: number; country: string; city: string; hit_count: number; } export interface ScrapeJob { job_id: string; status: 'pending' | 'running' | 'done' | 'failed'; error?: string; created_at: string; } export interface ScrapeResult { url: string; model_name: string; prices: Record; model_info?: { model_code?: string; display_tags?: string[]; description?: string; input_modalities?: string[]; output_modalities?: string[]; features?: Record; error?: string; }; rate_limits?: Record; tool_prices?: Array<{ label: string; price: number | string; unit?: string; note?: string }>; scraped_at: string; } export interface ScrapeJobDetail extends ScrapeJob { results?: ScrapeResult[]; } export interface Discount { id: number; domain: string; discount: number; note: string | null; created_at: string; updated_at: string; }