@braze/web-sdk
Version:
Braze SDK for web sites and other JS platforms.
96 lines (95 loc) • 2.99 kB
JavaScript
import ai from "./client-hints-parser.js";
import gi from "./user-agent-parser.js";
import { Browsers as di, OperatingSystems as so } from "./device-constants.js";
class Si {
constructor() {
let t;
(t =
navigator.userAgent.toLowerCase().includes(di.Sg.toLowerCase()) ||
!navigator.userAgentData
? gi
: ai),
(this.vg = new t()),
(this.userAgent = navigator.userAgent),
(this.browser = this.vg.ef()),
(this.version = this.vg.ff()),
(this.OS = null),
this.rc().then((t) => (this.OS = t));
const i = navigator;
(this.language = (
i.userLanguage ||
i.language ||
i.browserLanguage ||
i.systemLanguage ||
""
).toLowerCase()),
(this.Ja = Si.xg(this.userAgent));
}
fE() {
return this.browser === di.Bg;
}
nc() {
return this.OS || null;
}
rc() {
return this.OS
? Promise.resolve(this.OS)
: this.vg.rc(Si.Og).then((t) => ((this.OS = t), t));
}
static xg(t) {
t = t.toLowerCase();
const i = [
"bot",
"slurp",
"baiduspider",
"yandex",
"facebookexternalhit",
"sogou",
"ia_archiver",
"https://github.com/prerender/prerender",
"aolbuild",
"bingpreview",
"mediapartners-google",
"teoma",
"taiko",
"facebookexternalhit",
"facebookcatalog",
"meta-webindexer",
"meta-externalads",
"meta-externalagent",
"meta-externalfetcher",
];
for (let n = 0; n < i.length; n++) if (-1 !== t.indexOf(i[n])) return !0;
return !1;
}
}
Si.Og = [
{ string: navigator.platform, cf: "Win", identity: so.kg },
{ string: navigator.platform, cf: "Mac", identity: so.Pg },
{ string: navigator.platform, cf: "BlackBerry", identity: "BlackBerry" },
{ string: navigator.platform, cf: "FreeBSD", identity: "FreeBSD" },
{ string: navigator.platform, cf: "OpenBSD", identity: "OpenBSD" },
{ string: navigator.platform, cf: "Nintendo", identity: "Nintendo" },
{ string: navigator.platform, cf: "SunOS", identity: "SunOS" },
{ string: navigator.platform, cf: "PlayStation", identity: "PlayStation" },
{ string: navigator.platform, cf: "X11", identity: "X11" },
{
string: navigator.userAgent,
cf: ["iPhone", "iPad", "iPod"],
identity: so.co,
},
{ string: navigator.platform, cf: "Pike v", identity: so.co },
{ string: navigator.userAgent, cf: ["Web0S"], identity: "WebOS" },
{ string: navigator.userAgent, cf: "Tizen", identity: "Tizen" },
{ string: navigator.userAgent, cf: "Coolita", identity: "Other Smart TV" },
{ string: navigator.userAgent, cf: "WhaleTV", identity: "Other Smart TV" },
{
string: navigator.platform,
cf: ["Linux armv7l", "Android"],
identity: so.Dg,
},
{ string: navigator.userAgent, cf: ["Android"], identity: so.Dg },
{ string: navigator.platform, cf: "Linux", identity: "Linux" },
];
const ro = new Si();
export { ro as default, Si as BrowserDetector };