export interface ParsedUA { device: "Desktop" | "Mobile" | "Tablet"; browser: string; os: string; } export function parseUserAgent(ua: string): ParsedUA { if (!ua) return { device: "Desktop", browser: "Inconnu", os: "Inconnu" }; // Device type const isTablet = /iPad|Tablet|PlayBook/i.test(ua) || (/Android/i.test(ua) && !/Mobile/i.test(ua)); const isMobile = !isTablet && /Mobile|Android|iPhone|iPod|BlackBerry|IEMobile|Opera Mini|Windows Phone/i.test(ua); const device: ParsedUA["device"] = isTablet ? "Tablet" : isMobile ? "Mobile" : "Desktop"; // Browser let browser = "Inconnu"; if (/Edg\//i.test(ua)) browser = "Edge"; else if (/OPR\//i.test(ua) || /Opera/i.test(ua)) browser = "Opera"; else if (/SamsungBrowser/i.test(ua)) browser = "Samsung Browser"; else if (/Firefox/i.test(ua)) browser = "Firefox"; else if (/Chrome/i.test(ua)) browser = "Chrome"; else if (/Safari/i.test(ua)) browser = "Safari"; else if (/MSIE|Trident/i.test(ua)) browser = "Internet Explorer"; else if (/curl/i.test(ua)) browser = "cURL"; // OS let os = "Inconnu"; if (/Windows NT 10/i.test(ua)) os = "Windows 10/11"; else if (/Windows NT 6\.3/i.test(ua)) os = "Windows 8.1"; else if (/Windows NT 6\.1/i.test(ua)) os = "Windows 7"; else if (/Windows/i.test(ua)) os = "Windows"; else if (/iPhone OS ([\d_]+)/i.test(ua)) { const m = ua.match(/iPhone OS ([\d_]+)/i); os = `iOS ${m ? m[1].replace(/_/g, ".") : ""}`; } else if (/iPad.*OS ([\d_]+)/i.test(ua)) { const m = ua.match(/OS ([\d_]+)/i); os = `iPadOS ${m ? m[1].replace(/_/g, ".") : ""}`; } else if (/Android ([\d.]+)/i.test(ua)) { const m = ua.match(/Android ([\d.]+)/i); os = `Android ${m ? m[1] : ""}`; } else if (/Mac OS X ([\d_]+)/i.test(ua)) { const m = ua.match(/Mac OS X ([\d_]+)/i); os = `macOS ${m ? m[1].replace(/_/g, ".") : ""}`; } else if (/Linux/i.test(ua)) os = "Linux"; return { device, browser, os }; }