UNPKG

rauth-client

Version:

A lightweight, framework-agnostic JavaScript/TypeScript library for adding reverse authentication via WhatsApp on the client side.

65 lines (64 loc) 2.3 kB
// Device info utility for rauth-client // Detects browser, platform, and session_source function getBrowserInfo(ua) { ua = ua.toLowerCase(); if (ua.includes('edg/')) return 'edge'; if (ua.includes('chrome') && !ua.includes('edg/')) return 'chrome'; if (ua.includes('firefox')) return 'firefox'; if (ua.includes('safari') && !ua.includes('chrome')) return 'safari'; if (ua.includes('opera') || ua.includes('opr/')) return 'opera'; return 'unknown'; } function getPlatformInfo(ua) { ua = ua.toLowerCase(); if (ua.includes('windows nt 10.0')) return 'windows 10'; if (ua.includes('windows nt 11.0')) return 'windows 11'; if (ua.includes('android')) return 'android'; if (ua.includes('iphone') || ua.includes('ipad')) return 'ios'; if (ua.includes('mac os x')) return 'macos'; if (ua.includes('linux')) return 'linux'; return 'unknown'; } function getBrowserFromBrands(brands) { const knownBrowsers = ['brave', 'edge', 'chrome', 'firefox', 'safari', 'opera']; for (const b of brands) { const name = b.brand.toLowerCase(); for (const browserName of knownBrowsers) { if (name.includes(browserName)) { return browserName; } } } return ''; } export async function getDeviceInfo() { const nav = typeof navigator !== 'undefined' ? navigator : undefined; if (nav && nav.userAgentData && Array.isArray(nav.userAgentData.brands)) { const browser = getBrowserFromBrands(nav.userAgentData.brands); if (browser) { let platform = nav.userAgentData.platform ? nav.userAgentData.platform.toLowerCase() : ''; if (platform === 'windows' || nav.userAgentData.platform === 'Windows') { platform = 'windows 10'; } const session_source = 'website'; return { browser, platform, session_source }; } } // fallback to userAgent parsing const ua = typeof navigator !== 'undefined' ? navigator.userAgent : ''; const browser = getBrowserInfo(ua); const platform = getPlatformInfo(ua); const session_source = 'website'; return { browser, platform, session_source }; }