📄 src/web3/wallet/browsers.ts
D-OPEN SOVEREIGN
1export enum Browser {
2 chromium = 'chromium',
3 firefox = 'firefox',
4 safari = 'safari',
5 edge = 'edge',
6 opera = 'opera',
7 brave = 'brave',
8 vivaldi = 'vivaldi',
9 yandex = 'yandex',
10 palemoon = 'palemoon',
11}
12
13export enum Platform {
14 android = 'android',
15 ios = 'ios',
16 browsers = 'browsers',
17}
18
19export const parseUserAgent = (
20 userAgent: string = typeof navigator !== 'undefined' ? navigator.userAgent : ''
21): {
22 browser: Browser;
23 platform: Platform;
24} => {
25 const ua = userAgent.toLowerCase();
26
27 // Detect browser
28 let browser: Browser;
29
30 // Check for specific browsers first (most specific to least specific)
31 // Real Yandex Browser UAs self-identify via "YaBrowser/", not the word
32 // "yandex" — keep both checks since some environments (e.g. WebViews) have
33 // been observed reporting either form.
34 if (ua.includes('yabrowser') || ua.includes('yandex')) {
35 browser = Browser.yandex;
36 } else if (ua.includes('brave')) {
37 browser = Browser.brave;
38 } else if (ua.includes('vivaldi')) {
39 browser = Browser.vivaldi;
40 } else if (ua.includes('palemoon')) {
41 browser = Browser.palemoon;
42 } else if (ua.includes('edg/') || ua.includes('edge/')) {
43 browser = Browser.edge;
44 } else if (ua.includes('opr/') || ua.includes('opera/')) {
45 browser = Browser.opera;
46 } else if (ua.includes('firefox/')) {
47 browser = Browser.firefox;
48 } else if (ua.includes('safari/') && !ua.includes('chrome/')) {
49 browser = Browser.safari;
50 } else if (ua.includes('chrome/') || ua.includes('chromium/')) {
51 browser = Browser.chromium;
52 } else {
53 // Default fallback
54 browser = Browser.chromium;
55 }
56
57 // Detect platform
58 let platform: Platform;
59
60 if (ua.includes('android')) {
61 platform = Platform.android;
62 } else if (ua.includes('iphone') || ua.includes('ipad') || ua.includes('ipod')) {
63 platform = Platform.ios;
64 } else {
65 platform = Platform.browsers;
66 }
67
68 return {
69 browser,
70 platform,
71 };
72};
73