@amaui/utils
Version:
103 lines (102 loc) • 3.58 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getUserOSandBrowser = exports.getUserIPandLocation = void 0;
const isBrowser_1 = __importDefault(require("./isBrowser"));
const isOS_1 = __importDefault(require("./isOS"));
const getCountry_1 = __importDefault(require("./getCountry"));
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,
};
};
exports.getUserIPandLocation = getUserIPandLocation;
const getUserOSandBrowser = () => {
var _a;
const result = {};
const meta = {
os: ['mac', 'ios', 'windows', 'linux'],
browser: ['chrome', 'opera', 'safari', 'firefox', 'edge-chromium', 'edge', 'ie'],
};
meta.os.forEach(item => {
if ((0, isOS_1.default)(item))
result['os'] = item;
});
meta.browser.forEach(item => {
if ((0, isBrowser_1.default)(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: (_a = result.version) === null || _a === void 0 ? void 0 : _a.split('.')[0],
agent: navigator.userAgent,
language: navigator.language
},
os: {
platform: result.os
}
};
};
exports.getUserOSandBrowser = getUserOSandBrowser;
const getUserLocalInfo = async () => {
const IPandLocation = await (0, exports.getUserIPandLocation)();
const country = (0, getCountry_1.default)(IPandLocation.country_code);
const osAndBrowser = (0, exports.getUserOSandBrowser)();
return Object.assign({ ip_address: IPandLocation.ip_address, country }, osAndBrowser);
};
exports.default = getUserLocalInfo;