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
JavaScript
// 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 };
}