@aws-amplify/core
Version:
Core category of aws-amplify
95 lines (76 loc) • 2.59 kB
text/typescript
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
import { ConsoleLogger } from '../../Logger';
const logger = new ConsoleLogger('getClientInfo');
export function getClientInfo() {
if (typeof window === 'undefined') {
return {};
}
return browserClientInfo();
}
function browserClientInfo() {
if (typeof window === 'undefined') {
logger.warn('No window object available to get browser client info');
return {};
}
const nav = window.navigator;
if (!nav) {
logger.warn('No navigator object available to get browser client info');
return {};
}
const { platform, product, vendor, userAgent, language } = nav;
const type = getBrowserType(userAgent);
const timezone = browserTimezone();
return {
platform,
make: product || vendor,
model: type.type,
version: type.version,
appVersion: [type.type, type.version].join('/'),
language,
timezone,
};
}
function browserTimezone() {
const tzMatch = /\(([A-Za-z\s].*)\)/.exec(new Date().toString());
return tzMatch ? tzMatch[1] || '' : '';
}
function getBrowserType(userAgent: string) {
// The latest user agents for Opera: https://www.whatismybrowser.com/guides/the-latest-user-agent/opera
const operaMatch = /.+(Opera[\s[A-Z]*|OPR[\sA-Z]*)\/([0-9.]+).*/i.exec(
userAgent,
);
if (operaMatch) {
return { type: operaMatch[1], version: operaMatch[2] };
}
// The latest user agents for Edge: https://www.whatismybrowser.com/guides/the-latest-user-agent/edge
const ieMatch = /.+(Trident|Edge|Edg|EdgA|EdgiOS)\/([0-9.]+).*/i.exec(
userAgent,
);
if (ieMatch) {
return { type: ieMatch[1], version: ieMatch[2] };
}
// The latest user agents for web browsers on Firefox and Chrome
// https://www.whatismybrowser.com/guides/the-latest-user-agent/firefox
// https://www.whatismybrowser.com/guides/the-latest-user-agent/chrome
const cfMatch = /.+(Chrome|CriOS|Firefox|FxiOS)\/([0-9.]+).*/i.exec(
userAgent,
);
if (cfMatch) {
return { type: cfMatch[1], version: cfMatch[2] };
}
// The latest user agents for Safari: https://www.whatismybrowser.com/guides/the-latest-user-agent/safari
const sMatch = /.+(Safari)\/([0-9.]+).*/i.exec(userAgent);
if (sMatch) {
return { type: sMatch[1], version: sMatch[2] };
}
const awkMatch = /.+(AppleWebKit)\/([0-9.]+).*/i.exec(userAgent);
if (awkMatch) {
return { type: awkMatch[1], version: awkMatch[2] };
}
const anyMatch = /.*([A-Z]+)\/([0-9.]+).*/i.exec(userAgent);
if (anyMatch) {
return { type: anyMatch[1], version: anyMatch[2] };
}
return { type: '', version: '' };
}