mirror of
https://git.mirrors.martin98.com/https://github.com/sub-store-org/Sub-Store.git
synced 2025-06-04 11:13:59 +08:00
59 lines
1.8 KiB
JavaScript
59 lines
1.8 KiB
JavaScript
export function getUserAgentFromHeaders(headers) {
|
|
const keys = Object.keys(headers);
|
|
let UA = '';
|
|
let ua = '';
|
|
let accept = '';
|
|
for (let k of keys) {
|
|
const lower = k.toLowerCase();
|
|
if (lower === 'user-agent') {
|
|
UA = headers[k];
|
|
ua = UA.toLowerCase();
|
|
} else if (lower === 'accept') {
|
|
accept = headers[k];
|
|
}
|
|
}
|
|
return { UA, ua, accept };
|
|
}
|
|
|
|
export function getPlatformFromUserAgent({ ua, UA, accept }) {
|
|
if (UA.indexOf('Quantumult%20X') !== -1) {
|
|
return 'QX';
|
|
} else if (ua.indexOf('egern') !== -1) {
|
|
return 'Egern';
|
|
} else if (UA.indexOf('Surfboard') !== -1) {
|
|
return 'Surfboard';
|
|
} else if (UA.indexOf('Surge Mac') !== -1) {
|
|
return 'SurgeMac';
|
|
} else if (UA.indexOf('Surge') !== -1) {
|
|
return 'Surge';
|
|
} else if (UA.indexOf('Decar') !== -1 || UA.indexOf('Loon') !== -1) {
|
|
return 'Loon';
|
|
} else if (UA.indexOf('Shadowrocket') !== -1) {
|
|
return 'Shadowrocket';
|
|
} else if (UA.indexOf('Stash') !== -1) {
|
|
return 'Stash';
|
|
} else if (
|
|
ua === 'meta' ||
|
|
(ua.indexOf('clash') !== -1 && ua.indexOf('meta') !== -1) ||
|
|
ua.indexOf('clash-verge') !== -1 ||
|
|
ua.indexOf('flclash') !== -1
|
|
) {
|
|
return 'ClashMeta';
|
|
} else if (ua.indexOf('clash') !== -1) {
|
|
return 'Clash';
|
|
} else if (ua.indexOf('v2ray') !== -1) {
|
|
return 'V2Ray';
|
|
} else if (ua.indexOf('sing-box') !== -1) {
|
|
return 'sing-box';
|
|
} else if (accept.indexOf('application/json') === 0) {
|
|
return 'JSON';
|
|
} else {
|
|
return 'V2Ray';
|
|
}
|
|
}
|
|
|
|
export function getPlatformFromHeaders(headers) {
|
|
const { UA, ua, accept } = getUserAgentFromHeaders(headers);
|
|
return getPlatformFromUserAgent({ ua, UA, accept });
|
|
}
|