fix and update
This commit is contained in:
81
apps/frontend/lib/device-client.ts
Normal file
81
apps/frontend/lib/device-client.ts
Normal file
@@ -0,0 +1,81 @@
|
||||
export function getDeviceFingerprint(): string {
|
||||
if (typeof window === 'undefined') return 'server';
|
||||
const key = 'lendry_device_fingerprint';
|
||||
const existing = window.localStorage.getItem(key);
|
||||
if (existing) return existing;
|
||||
const value = crypto.randomUUID();
|
||||
window.localStorage.setItem(key, value);
|
||||
return value;
|
||||
}
|
||||
|
||||
export function resolveDeviceType(): string {
|
||||
if (typeof navigator === 'undefined') return 'WEB';
|
||||
const ua = navigator.userAgent;
|
||||
if (/Android/i.test(ua)) return 'ANDROID';
|
||||
if (/iPhone|iPad|iPod/i.test(ua)) return 'IOS';
|
||||
if (/Windows/i.test(ua)) return 'DESKTOP';
|
||||
if (/Mac OS X/i.test(ua)) return 'DESKTOP';
|
||||
return 'WEB';
|
||||
}
|
||||
|
||||
export function resolveDeviceLabel(): string {
|
||||
if (typeof navigator === 'undefined') return 'Browser';
|
||||
const ua = navigator.userAgent;
|
||||
|
||||
const browser = (() => {
|
||||
if (/Edg\//i.test(ua)) return 'Microsoft Edge';
|
||||
if (/YaBrowser/i.test(ua)) return 'Яндекс Браузер';
|
||||
if (/Firefox\//i.test(ua)) return 'Firefox';
|
||||
if (/CriOS/i.test(ua)) return 'Chrome';
|
||||
if (/Chrome\//i.test(ua) && !/Edg\//i.test(ua)) return 'Chrome';
|
||||
if (/Safari/i.test(ua) && !/Chrome/i.test(ua)) return 'Safari';
|
||||
return 'Браузер';
|
||||
})();
|
||||
|
||||
const os = (() => {
|
||||
if (/Windows NT/i.test(ua)) return 'Windows';
|
||||
if (/Android/i.test(ua)) return 'Android';
|
||||
if (/iPhone/i.test(ua)) return 'iPhone';
|
||||
if (/iPad/i.test(ua)) return 'iPad';
|
||||
if (/Mac OS X/i.test(ua)) return 'macOS';
|
||||
if (/Linux/i.test(ua)) return 'Linux';
|
||||
return 'Устройство';
|
||||
})();
|
||||
|
||||
return `${browser} · ${os}`;
|
||||
}
|
||||
|
||||
export function buildAuthDevicePayload() {
|
||||
return {
|
||||
fingerprint: getDeviceFingerprint(),
|
||||
deviceName: resolveDeviceLabel(),
|
||||
deviceType: resolveDeviceType()
|
||||
};
|
||||
}
|
||||
|
||||
export function formatUserAgentLabel(userAgent?: string | null): string | null {
|
||||
if (!userAgent?.trim()) return null;
|
||||
const ua = userAgent.trim();
|
||||
|
||||
const browser = (() => {
|
||||
if (/Edg\//i.test(ua)) return 'Microsoft Edge';
|
||||
if (/YaBrowser/i.test(ua)) return 'Яндекс Браузер';
|
||||
if (/Firefox\//i.test(ua)) return 'Firefox';
|
||||
if (/Chrome\//i.test(ua) && !/Edg\//i.test(ua)) return 'Chrome';
|
||||
if (/Safari/i.test(ua) && !/Chrome/i.test(ua)) return 'Safari';
|
||||
return null;
|
||||
})();
|
||||
|
||||
const os = (() => {
|
||||
if (/Windows NT/i.test(ua)) return 'Windows';
|
||||
if (/Android/i.test(ua)) return 'Android';
|
||||
if (/iPhone/i.test(ua)) return 'iPhone';
|
||||
if (/iPad/i.test(ua)) return 'iPad';
|
||||
if (/Mac OS X/i.test(ua)) return 'macOS';
|
||||
if (/Linux/i.test(ua)) return 'Linux';
|
||||
return null;
|
||||
})();
|
||||
|
||||
if (browser && os) return `${browser} · ${os}`;
|
||||
return browser ?? os;
|
||||
}
|
||||
Reference in New Issue
Block a user