fix and update

This commit is contained in:
lendry
2026-06-29 22:51:25 +03:00
parent 885b07d76b
commit 57cb58347b
30 changed files with 799 additions and 187 deletions

View 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;
}