@amaui/utils
Version:
106 lines (90 loc) • 2.74 kB
JavaScript
import isBrowser from './isBrowser';
import isOS from './isOS';
import getCountry from './getCountry';
export const getUserIPandLocation = async () => {
let ip_address;
let country_code; // cloudflare
try {
let data = await fetch("https://www.cloudflare.com/cdn-cgi/trace");
data = await data.text();
const items = data.split('\n');
ip_address = items.find(item => item.indexOf('ip') === 0).slice(3);
country_code = items.find(item => item.indexOf('loc') === 0).slice(4);
} catch (error) {
console.log(error);
} // aws
if (!ip_address) {
try {
const dataAWS = await fetch('https://checkip.amazonaws.com');
ip_address = (await dataAWS.text()).split('\n')[0];
} catch (error) {
console.log(error);
}
}
return {
ip_address,
country_code
};
};
export const getUserOSandBrowser = () => {
var _result$version;
const result = {};
const meta = {
os: ['mac', 'ios', 'windows', 'linux'],
browser: ['chrome', 'opera', 'safari', 'firefox', 'edge-chromium', 'edge', 'ie']
};
meta.os.forEach(item => {
if (isOS(item)) result['os'] = item;
});
meta.browser.forEach(item => {
if (isBrowser(item)) result['browser'] = item;
});
switch (result.browser) {
case 'chrome':
result['version'] = navigator.userAgent.split('Chrome/')[1].split(' ')[0];
break;
case 'firefox':
result['version'] = navigator.userAgent.split('Firefox/')[1];
break;
case 'opera':
result['version'] = navigator.userAgent.split('OPR/')[1];
break;
case 'safari':
result['version'] = navigator.userAgent.split('Safari/')[1];
break;
case 'edge-chromium':
result['version'] = navigator.userAgent.split('Edg/')[1];
break;
case 'edge':
result['version'] = navigator.userAgent.split('Edg/')[1];
break;
case 'ie':
result['version'] = navigator.userAgent.indexOf('MSIE 10') > -1 && '10' || navigator.userAgent.indexOf('rv:11') > -1 && '11' || '1';
break;
default:
break;
}
return {
browser: {
name: result.browser,
version: result.version,
major_version: (_result$version = result.version) === null || _result$version === void 0 ? void 0 : _result$version.split('.')[0],
agent: navigator.userAgent,
language: navigator.language
},
os: {
platform: result.os
}
};
};
const getUserLocalInfo = async () => {
const IPandLocation = await getUserIPandLocation();
const country = getCountry(IPandLocation.country_code);
const osAndBrowser = getUserOSandBrowser();
return {
ip_address: IPandLocation.ip_address,
country,
...osAndBrowser
};
};
export default getUserLocalInfo;