UNPKG

@amaui/utils

Version:
106 lines (90 loc) 2.74 kB
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;