isdata-customer-sdk 0.1.79 → 0.1.81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.common.js +1497 -1
- package/dist/index.common.js.map +1 -1
- package/dist/index.umd.js +1497 -1
- package/dist/index.umd.js.map +1 -1
- package/dist/index.umd.min.js +4 -4
- package/dist/index.umd.min.js.map +1 -1
- package/package.json +7 -4
package/dist/index.umd.js
CHANGED
|
@@ -30722,6 +30722,1494 @@ const getIntegrateAppInfoByID = async appID => {
|
|
|
30722
30722
|
let appInfo = result.data.appInfo;
|
|
30723
30723
|
return appInfo;
|
|
30724
30724
|
};
|
|
30725
|
+
;// ./node_modules/ua-parser-js/src/main/ua-parser.mjs
|
|
30726
|
+
// Generated ESM version of ua-parser-js
|
|
30727
|
+
// DO NOT EDIT THIS FILE!
|
|
30728
|
+
// Source: /src/main/ua-parser.js
|
|
30729
|
+
|
|
30730
|
+
/////////////////////////////////////////////////////////////////////////////////
|
|
30731
|
+
/* UAParser.js v2.0.6
|
|
30732
|
+
Copyright © 2012-2025 Faisal Salman <f@faisalman.com>
|
|
30733
|
+
AGPLv3 License *//*
|
|
30734
|
+
Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.
|
|
30735
|
+
Supports browser & node.js environment.
|
|
30736
|
+
Demo : https://uaparser.dev
|
|
30737
|
+
Source : https://github.com/faisalman/ua-parser-js */
|
|
30738
|
+
/////////////////////////////////////////////////////////////////////////////////
|
|
30739
|
+
|
|
30740
|
+
/* jshint esversion: 6 */
|
|
30741
|
+
/* globals window */
|
|
30742
|
+
|
|
30743
|
+
|
|
30744
|
+
|
|
30745
|
+
//////////////
|
|
30746
|
+
// Constants
|
|
30747
|
+
/////////////
|
|
30748
|
+
|
|
30749
|
+
var LIBVERSION = '2.0.6',
|
|
30750
|
+
UA_MAX_LENGTH = 500,
|
|
30751
|
+
USER_AGENT = 'user-agent',
|
|
30752
|
+
EMPTY = '',
|
|
30753
|
+
UNKNOWN = '?',
|
|
30754
|
+
TYPEOF = {
|
|
30755
|
+
FUNCTION : 'function',
|
|
30756
|
+
OBJECT : 'object',
|
|
30757
|
+
STRING : 'string',
|
|
30758
|
+
UNDEFINED : 'undefined'
|
|
30759
|
+
},
|
|
30760
|
+
|
|
30761
|
+
// properties
|
|
30762
|
+
BROWSER = 'browser',
|
|
30763
|
+
CPU = 'cpu',
|
|
30764
|
+
DEVICE = 'device',
|
|
30765
|
+
ENGINE = 'engine',
|
|
30766
|
+
OS = 'os',
|
|
30767
|
+
RESULT = 'result',
|
|
30768
|
+
|
|
30769
|
+
NAME = 'name',
|
|
30770
|
+
TYPE = 'type',
|
|
30771
|
+
VENDOR = 'vendor',
|
|
30772
|
+
VERSION = 'version',
|
|
30773
|
+
ARCHITECTURE= 'architecture',
|
|
30774
|
+
MAJOR = 'major',
|
|
30775
|
+
MODEL = 'model',
|
|
30776
|
+
|
|
30777
|
+
// device types
|
|
30778
|
+
CONSOLE = 'console',
|
|
30779
|
+
MOBILE = 'mobile',
|
|
30780
|
+
TABLET = 'tablet',
|
|
30781
|
+
SMARTTV = 'smarttv',
|
|
30782
|
+
WEARABLE = 'wearable',
|
|
30783
|
+
XR = 'xr',
|
|
30784
|
+
EMBEDDED = 'embedded',
|
|
30785
|
+
|
|
30786
|
+
// browser types
|
|
30787
|
+
INAPP = 'inapp',
|
|
30788
|
+
|
|
30789
|
+
// client hints
|
|
30790
|
+
BRANDS = 'brands',
|
|
30791
|
+
FORMFACTORS = 'formFactors',
|
|
30792
|
+
FULLVERLIST = 'fullVersionList',
|
|
30793
|
+
PLATFORM = 'platform',
|
|
30794
|
+
PLATFORMVER = 'platformVersion',
|
|
30795
|
+
BITNESS = 'bitness',
|
|
30796
|
+
CH = 'sec-ch-ua',
|
|
30797
|
+
CH_FULL_VER_LIST= CH + '-full-version-list',
|
|
30798
|
+
CH_ARCH = CH + '-arch',
|
|
30799
|
+
CH_BITNESS = CH + '-' + BITNESS,
|
|
30800
|
+
CH_FORM_FACTORS = CH + '-form-factors',
|
|
30801
|
+
CH_MOBILE = CH + '-' + MOBILE,
|
|
30802
|
+
CH_MODEL = CH + '-' + MODEL,
|
|
30803
|
+
CH_PLATFORM = CH + '-' + PLATFORM,
|
|
30804
|
+
CH_PLATFORM_VER = CH_PLATFORM + '-version',
|
|
30805
|
+
CH_ALL_VALUES = [BRANDS, FULLVERLIST, MOBILE, MODEL, PLATFORM, PLATFORMVER, ARCHITECTURE, FORMFACTORS, BITNESS],
|
|
30806
|
+
|
|
30807
|
+
// device vendors
|
|
30808
|
+
AMAZON = 'Amazon',
|
|
30809
|
+
APPLE = 'Apple',
|
|
30810
|
+
ASUS = 'ASUS',
|
|
30811
|
+
BLACKBERRY = 'BlackBerry',
|
|
30812
|
+
GOOGLE = 'Google',
|
|
30813
|
+
HUAWEI = 'Huawei',
|
|
30814
|
+
LENOVO = 'Lenovo',
|
|
30815
|
+
HONOR = 'Honor',
|
|
30816
|
+
LG = 'LG',
|
|
30817
|
+
MICROSOFT = 'Microsoft',
|
|
30818
|
+
MOTOROLA = 'Motorola',
|
|
30819
|
+
NVIDIA = 'Nvidia',
|
|
30820
|
+
ONEPLUS = 'OnePlus',
|
|
30821
|
+
OPPO = 'OPPO',
|
|
30822
|
+
SAMSUNG = 'Samsung',
|
|
30823
|
+
SHARP = 'Sharp',
|
|
30824
|
+
SONY = 'Sony',
|
|
30825
|
+
XIAOMI = 'Xiaomi',
|
|
30826
|
+
ZEBRA = 'Zebra',
|
|
30827
|
+
|
|
30828
|
+
// browsers
|
|
30829
|
+
CHROME = 'Chrome',
|
|
30830
|
+
CHROMIUM = 'Chromium',
|
|
30831
|
+
CHROMECAST = 'Chromecast',
|
|
30832
|
+
EDGE = 'Edge',
|
|
30833
|
+
FIREFOX = 'Firefox',
|
|
30834
|
+
OPERA = 'Opera',
|
|
30835
|
+
FACEBOOK = 'Facebook',
|
|
30836
|
+
SOGOU = 'Sogou',
|
|
30837
|
+
|
|
30838
|
+
PREFIX_MOBILE = 'Mobile ',
|
|
30839
|
+
SUFFIX_BROWSER = ' Browser',
|
|
30840
|
+
|
|
30841
|
+
// os
|
|
30842
|
+
WINDOWS = 'Windows';
|
|
30843
|
+
|
|
30844
|
+
var isWindow = typeof window !== TYPEOF.UNDEFINED,
|
|
30845
|
+
NAVIGATOR = (isWindow && window.navigator) ?
|
|
30846
|
+
window.navigator :
|
|
30847
|
+
undefined,
|
|
30848
|
+
NAVIGATOR_UADATA = (NAVIGATOR && NAVIGATOR.userAgentData) ?
|
|
30849
|
+
NAVIGATOR.userAgentData :
|
|
30850
|
+
undefined;
|
|
30851
|
+
|
|
30852
|
+
///////////
|
|
30853
|
+
// Helper
|
|
30854
|
+
//////////
|
|
30855
|
+
|
|
30856
|
+
var extend = function (defaultRgx, extensions) {
|
|
30857
|
+
var mergedRgx = {};
|
|
30858
|
+
var extraRgx = extensions;
|
|
30859
|
+
if (!isExtensions(extensions)) {
|
|
30860
|
+
extraRgx = {};
|
|
30861
|
+
for (var i in extensions) {
|
|
30862
|
+
for (var j in extensions[i]) {
|
|
30863
|
+
extraRgx[j] = extensions[i][j].concat(extraRgx[j] ? extraRgx[j] : []);
|
|
30864
|
+
}
|
|
30865
|
+
}
|
|
30866
|
+
}
|
|
30867
|
+
for (var k in defaultRgx) {
|
|
30868
|
+
mergedRgx[k] = extraRgx[k] && extraRgx[k].length % 2 === 0 ? extraRgx[k].concat(defaultRgx[k]) : defaultRgx[k];
|
|
30869
|
+
}
|
|
30870
|
+
return mergedRgx;
|
|
30871
|
+
},
|
|
30872
|
+
enumerize = function (arr) {
|
|
30873
|
+
var enums = {};
|
|
30874
|
+
for (var i=0; i<arr.length; i++) {
|
|
30875
|
+
enums[arr[i].toUpperCase()] = arr[i];
|
|
30876
|
+
}
|
|
30877
|
+
return enums;
|
|
30878
|
+
},
|
|
30879
|
+
has = function (str1, str2) {
|
|
30880
|
+
if (typeof str1 === TYPEOF.OBJECT && str1.length > 0) {
|
|
30881
|
+
for (var i in str1) {
|
|
30882
|
+
if (lowerize(str2) == lowerize(str1[i])) return true;
|
|
30883
|
+
}
|
|
30884
|
+
return false;
|
|
30885
|
+
}
|
|
30886
|
+
return isString(str1) ? lowerize(str2) == lowerize(str1) : false;
|
|
30887
|
+
},
|
|
30888
|
+
isExtensions = function (obj, deep) {
|
|
30889
|
+
for (var prop in obj) {
|
|
30890
|
+
return /^(browser|cpu|device|engine|os)$/.test(prop) || (deep ? isExtensions(obj[prop]) : false);
|
|
30891
|
+
}
|
|
30892
|
+
},
|
|
30893
|
+
isString = function (val) {
|
|
30894
|
+
return typeof val === TYPEOF.STRING;
|
|
30895
|
+
},
|
|
30896
|
+
itemListToArray = function (header) {
|
|
30897
|
+
if (!header) return undefined;
|
|
30898
|
+
var arr = [];
|
|
30899
|
+
var tokens = strip(/\\?\"/g, header).split(',');
|
|
30900
|
+
for (var i = 0; i < tokens.length; i++) {
|
|
30901
|
+
if (tokens[i].indexOf(';') > -1) {
|
|
30902
|
+
var token = trim(tokens[i]).split(';v=');
|
|
30903
|
+
arr[i] = { brand : token[0], version : token[1] };
|
|
30904
|
+
} else {
|
|
30905
|
+
arr[i] = trim(tokens[i]);
|
|
30906
|
+
}
|
|
30907
|
+
}
|
|
30908
|
+
return arr;
|
|
30909
|
+
},
|
|
30910
|
+
lowerize = function (str) {
|
|
30911
|
+
return isString(str) ? str.toLowerCase() : str;
|
|
30912
|
+
},
|
|
30913
|
+
majorize = function (version) {
|
|
30914
|
+
return isString(version) ? strip(/[^\d\.]/g, version).split('.')[0] : undefined;
|
|
30915
|
+
},
|
|
30916
|
+
setProps = function (arr) {
|
|
30917
|
+
for (var i in arr) {
|
|
30918
|
+
if (!arr.hasOwnProperty(i)) continue;
|
|
30919
|
+
|
|
30920
|
+
var propName = arr[i];
|
|
30921
|
+
if (typeof propName == TYPEOF.OBJECT && propName.length == 2) {
|
|
30922
|
+
this[propName[0]] = propName[1];
|
|
30923
|
+
} else {
|
|
30924
|
+
this[propName] = undefined;
|
|
30925
|
+
}
|
|
30926
|
+
}
|
|
30927
|
+
return this;
|
|
30928
|
+
},
|
|
30929
|
+
strip = function (pattern, str) {
|
|
30930
|
+
return isString(str) ? str.replace(pattern, EMPTY) : str;
|
|
30931
|
+
},
|
|
30932
|
+
stripQuotes = function (str) {
|
|
30933
|
+
return strip(/\\?\"/g, str);
|
|
30934
|
+
},
|
|
30935
|
+
trim = function (str, len) {
|
|
30936
|
+
str = strip(/^\s\s*/, String(str));
|
|
30937
|
+
return typeof len === TYPEOF.UNDEFINED ? str : str.substring(0, len);
|
|
30938
|
+
};
|
|
30939
|
+
|
|
30940
|
+
///////////////
|
|
30941
|
+
// Map helper
|
|
30942
|
+
//////////////
|
|
30943
|
+
|
|
30944
|
+
var rgxMapper = function (ua, arrays) {
|
|
30945
|
+
|
|
30946
|
+
if(!ua || !arrays) return;
|
|
30947
|
+
|
|
30948
|
+
var i = 0, j, k, p, q, matches, match;
|
|
30949
|
+
|
|
30950
|
+
// loop through all regexes maps
|
|
30951
|
+
while (i < arrays.length && !matches) {
|
|
30952
|
+
|
|
30953
|
+
var regex = arrays[i], // even sequence (0,2,4,..)
|
|
30954
|
+
props = arrays[i + 1]; // odd sequence (1,3,5,..)
|
|
30955
|
+
j = k = 0;
|
|
30956
|
+
|
|
30957
|
+
// try matching uastring with regexes
|
|
30958
|
+
while (j < regex.length && !matches) {
|
|
30959
|
+
|
|
30960
|
+
if (!regex[j]) { break; }
|
|
30961
|
+
matches = regex[j++].exec(ua);
|
|
30962
|
+
|
|
30963
|
+
if (!!matches) {
|
|
30964
|
+
for (p = 0; p < props.length; p++) {
|
|
30965
|
+
match = matches[++k];
|
|
30966
|
+
q = props[p];
|
|
30967
|
+
// check if given property is actually array
|
|
30968
|
+
if (typeof q === TYPEOF.OBJECT && q.length > 0) {
|
|
30969
|
+
if (q.length === 2) {
|
|
30970
|
+
if (typeof q[1] == TYPEOF.FUNCTION) {
|
|
30971
|
+
// assign modified match
|
|
30972
|
+
this[q[0]] = q[1].call(this, match);
|
|
30973
|
+
} else {
|
|
30974
|
+
// assign given value, ignore regex match
|
|
30975
|
+
this[q[0]] = q[1];
|
|
30976
|
+
}
|
|
30977
|
+
} else if (q.length >= 3) {
|
|
30978
|
+
// Check whether q[1] FUNCTION or REGEX
|
|
30979
|
+
if (typeof q[1] === TYPEOF.FUNCTION && !(q[1].exec && q[1].test)) {
|
|
30980
|
+
if (q.length > 3) {
|
|
30981
|
+
this[q[0]] = match ? q[1].apply(this, q.slice(2)) : undefined;
|
|
30982
|
+
} else {
|
|
30983
|
+
// call function (usually string mapper)
|
|
30984
|
+
this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;
|
|
30985
|
+
}
|
|
30986
|
+
} else {
|
|
30987
|
+
if (q.length == 3) {
|
|
30988
|
+
// sanitize match using given regex
|
|
30989
|
+
this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;
|
|
30990
|
+
} else if (q.length == 4) {
|
|
30991
|
+
this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;
|
|
30992
|
+
} else if (q.length > 4) {
|
|
30993
|
+
this[q[0]] = match ? q[3].apply(this, [match.replace(q[1], q[2])].concat(q.slice(4))) : undefined;
|
|
30994
|
+
}
|
|
30995
|
+
}
|
|
30996
|
+
}
|
|
30997
|
+
} else {
|
|
30998
|
+
this[q] = match ? match : undefined;
|
|
30999
|
+
}
|
|
31000
|
+
}
|
|
31001
|
+
}
|
|
31002
|
+
}
|
|
31003
|
+
i += 2;
|
|
31004
|
+
}
|
|
31005
|
+
},
|
|
31006
|
+
|
|
31007
|
+
strMapper = function (str, map) {
|
|
31008
|
+
|
|
31009
|
+
for (var i in map) {
|
|
31010
|
+
// check if current value is array
|
|
31011
|
+
if (typeof map[i] === TYPEOF.OBJECT && map[i].length > 0) {
|
|
31012
|
+
for (var j = 0; j < map[i].length; j++) {
|
|
31013
|
+
if (has(map[i][j], str)) {
|
|
31014
|
+
return (i === UNKNOWN) ? undefined : i;
|
|
31015
|
+
}
|
|
31016
|
+
}
|
|
31017
|
+
} else if (has(map[i], str)) {
|
|
31018
|
+
return (i === UNKNOWN) ? undefined : i;
|
|
31019
|
+
}
|
|
31020
|
+
}
|
|
31021
|
+
return map.hasOwnProperty('*') ? map['*'] : str;
|
|
31022
|
+
};
|
|
31023
|
+
|
|
31024
|
+
///////////////
|
|
31025
|
+
// String map
|
|
31026
|
+
//////////////
|
|
31027
|
+
|
|
31028
|
+
var windowsVersionMap = {
|
|
31029
|
+
'ME' : '4.90',
|
|
31030
|
+
'NT 3.51': '3.51',
|
|
31031
|
+
'NT 4.0': '4.0',
|
|
31032
|
+
'2000' : ['5.0', '5.01'],
|
|
31033
|
+
'XP' : ['5.1', '5.2'],
|
|
31034
|
+
'Vista' : '6.0',
|
|
31035
|
+
'7' : '6.1',
|
|
31036
|
+
'8' : '6.2',
|
|
31037
|
+
'8.1' : '6.3',
|
|
31038
|
+
'10' : ['6.4', '10.0'],
|
|
31039
|
+
'NT' : ''
|
|
31040
|
+
},
|
|
31041
|
+
|
|
31042
|
+
formFactorsMap = {
|
|
31043
|
+
'embedded' : 'Automotive',
|
|
31044
|
+
'mobile' : 'Mobile',
|
|
31045
|
+
'tablet' : ['Tablet', 'EInk'],
|
|
31046
|
+
'smarttv' : 'TV',
|
|
31047
|
+
'wearable' : 'Watch',
|
|
31048
|
+
'xr' : ['VR', 'XR'],
|
|
31049
|
+
'?' : ['Desktop', 'Unknown'],
|
|
31050
|
+
'*' : undefined
|
|
31051
|
+
},
|
|
31052
|
+
|
|
31053
|
+
browserHintsMap = {
|
|
31054
|
+
'Chrome' : 'Google Chrome',
|
|
31055
|
+
'Edge' : 'Microsoft Edge',
|
|
31056
|
+
'Edge WebView2' : 'Microsoft Edge WebView2',
|
|
31057
|
+
'Chrome WebView': 'Android WebView',
|
|
31058
|
+
'Chrome Headless':'HeadlessChrome',
|
|
31059
|
+
'Huawei Browser': 'HuaweiBrowser',
|
|
31060
|
+
'MIUI Browser' : 'Miui Browser',
|
|
31061
|
+
'Opera Mobi' : 'OperaMobile',
|
|
31062
|
+
'Yandex' : 'YaBrowser'
|
|
31063
|
+
};
|
|
31064
|
+
|
|
31065
|
+
//////////////
|
|
31066
|
+
// Regex map
|
|
31067
|
+
/////////////
|
|
31068
|
+
|
|
31069
|
+
var defaultRegexes = {
|
|
31070
|
+
|
|
31071
|
+
browser : [[
|
|
31072
|
+
|
|
31073
|
+
// Most common regardless engine
|
|
31074
|
+
/\b(?:crmo|crios)\/([\w\.]+)/i // Chrome for Android/iOS
|
|
31075
|
+
], [VERSION, [NAME, PREFIX_MOBILE + 'Chrome']], [
|
|
31076
|
+
/webview.+edge\/([\w\.]+)/i // Microsoft Edge
|
|
31077
|
+
], [VERSION, [NAME, EDGE+' WebView']], [
|
|
31078
|
+
/edg(?:e|ios|a)?\/([\w\.]+)/i
|
|
31079
|
+
], [VERSION, [NAME, 'Edge']], [
|
|
31080
|
+
|
|
31081
|
+
// Presto based
|
|
31082
|
+
/(opera mini)\/([-\w\.]+)/i, // Opera Mini
|
|
31083
|
+
/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i, // Opera Mobi/Tablet
|
|
31084
|
+
/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i // Opera
|
|
31085
|
+
], [NAME, VERSION], [
|
|
31086
|
+
/opios[\/ ]+([\w\.]+)/i // Opera mini on iphone >= 8.0
|
|
31087
|
+
], [VERSION, [NAME, OPERA+' Mini']], [
|
|
31088
|
+
/\bop(?:rg)?x\/([\w\.]+)/i // Opera GX
|
|
31089
|
+
], [VERSION, [NAME, OPERA+' GX']], [
|
|
31090
|
+
/\bopr\/([\w\.]+)/i // Opera Webkit
|
|
31091
|
+
], [VERSION, [NAME, OPERA]], [
|
|
31092
|
+
|
|
31093
|
+
// Mixed
|
|
31094
|
+
/\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i // Baidu
|
|
31095
|
+
], [VERSION, [NAME, 'Baidu']], [
|
|
31096
|
+
/\b(?:mxbrowser|mxios|myie2)\/?([-\w\.]*)\b/i // Maxthon
|
|
31097
|
+
], [VERSION, [NAME, 'Maxthon']], [
|
|
31098
|
+
/(kindle)\/([\w\.]+)/i, // Kindle
|
|
31099
|
+
/(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\/ ]?([\w\.]*)/i,
|
|
31100
|
+
// Lunascape/Maxthon/Netfront/Jasmine/Blazer/Sleipnir
|
|
31101
|
+
// Trident based
|
|
31102
|
+
/(avant|iemobile|slim(?:browser|boat|jet))[\/ ]?([\d\.]*)/i, // Avant/IEMobile/SlimBrowser/SlimBoat/Slimjet
|
|
31103
|
+
/(?:ms|\()(ie) ([\w\.]+)/i, // Internet Explorer
|
|
31104
|
+
|
|
31105
|
+
// Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon/LG Browser/Otter/qutebrowser/Dooble/Palemoon
|
|
31106
|
+
/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon|otter|dooble|(?:lg |qute)browser|palemoon)\/([-\w\.]+)/i,
|
|
31107
|
+
// Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio/Dragon
|
|
31108
|
+
/(heytap|ovi|115|surf|qwant)browser\/([\d\.]+)/i, // HeyTap/Ovi/115/Surf
|
|
31109
|
+
/(qwant)(?:ios|mobile)\/([\d\.]+)/i, // Qwant
|
|
31110
|
+
/(ecosia|weibo)(?:__| \w+@)([\d\.]+)/i // Ecosia/Weibo
|
|
31111
|
+
], [NAME, VERSION], [
|
|
31112
|
+
/quark(?:pc)?\/([-\w\.]+)/i // Quark
|
|
31113
|
+
], [VERSION, [NAME, 'Quark']], [
|
|
31114
|
+
/\bddg\/([\w\.]+)/i // DuckDuckGo
|
|
31115
|
+
], [VERSION, [NAME, 'DuckDuckGo']], [
|
|
31116
|
+
/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i // UCBrowser
|
|
31117
|
+
], [VERSION, [NAME, 'UCBrowser']], [
|
|
31118
|
+
/microm.+\bqbcore\/([\w\.]+)/i, // WeChat Desktop for Windows Built-in Browser
|
|
31119
|
+
/\bqbcore\/([\w\.]+).+microm/i,
|
|
31120
|
+
/micromessenger\/([\w\.]+)/i // WeChat
|
|
31121
|
+
], [VERSION, [NAME, 'WeChat']], [
|
|
31122
|
+
/konqueror\/([\w\.]+)/i // Konqueror
|
|
31123
|
+
], [VERSION, [NAME, 'Konqueror']], [
|
|
31124
|
+
/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i // IE11
|
|
31125
|
+
], [VERSION, [NAME, 'IE']], [
|
|
31126
|
+
/ya(?:search)?browser\/([\w\.]+)/i // Yandex
|
|
31127
|
+
], [VERSION, [NAME, 'Yandex']], [
|
|
31128
|
+
/slbrowser\/([\w\.]+)/i // Smart Lenovo Browser
|
|
31129
|
+
], [VERSION, [NAME, 'Smart ' + LENOVO + SUFFIX_BROWSER]], [
|
|
31130
|
+
/(avast|avg)\/([\w\.]+)/i // Avast/AVG Secure Browser
|
|
31131
|
+
], [[NAME, /(.+)/, '$1 Secure' + SUFFIX_BROWSER], VERSION], [
|
|
31132
|
+
/\bfocus\/([\w\.]+)/i // Firefox Focus
|
|
31133
|
+
], [VERSION, [NAME, FIREFOX+' Focus']], [
|
|
31134
|
+
/\bopt\/([\w\.]+)/i // Opera Touch
|
|
31135
|
+
], [VERSION, [NAME, OPERA+' Touch']], [
|
|
31136
|
+
/coc_coc\w+\/([\w\.]+)/i // Coc Coc Browser
|
|
31137
|
+
], [VERSION, [NAME, 'Coc Coc']], [
|
|
31138
|
+
/dolfin\/([\w\.]+)/i // Dolphin
|
|
31139
|
+
], [VERSION, [NAME, 'Dolphin']], [
|
|
31140
|
+
/coast\/([\w\.]+)/i // Opera Coast
|
|
31141
|
+
], [VERSION, [NAME, OPERA+' Coast']], [
|
|
31142
|
+
/miuibrowser\/([\w\.]+)/i // MIUI Browser
|
|
31143
|
+
], [VERSION, [NAME, 'MIUI' + SUFFIX_BROWSER]], [
|
|
31144
|
+
/fxios\/([\w\.-]+)/i // Firefox for iOS
|
|
31145
|
+
], [VERSION, [NAME, PREFIX_MOBILE + FIREFOX]], [
|
|
31146
|
+
/\bqihoobrowser\/?([\w\.]*)/i // 360
|
|
31147
|
+
], [VERSION, [NAME, '360']], [
|
|
31148
|
+
/\b(qq)\/([\w\.]+)/i // QQ
|
|
31149
|
+
], [[NAME, /(.+)/, '$1Browser'], VERSION], [
|
|
31150
|
+
/(oculus|sailfish|huawei|vivo|pico)browser\/([\w\.]+)/i
|
|
31151
|
+
], [[NAME, /(.+)/, '$1' + SUFFIX_BROWSER], VERSION], [ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser/PicoBrowser
|
|
31152
|
+
/samsungbrowser\/([\w\.]+)/i // Samsung Internet
|
|
31153
|
+
], [VERSION, [NAME, SAMSUNG + ' Internet']], [
|
|
31154
|
+
/metasr[\/ ]?([\d\.]+)/i // Sogou Explorer
|
|
31155
|
+
], [VERSION, [NAME, SOGOU + ' Explorer']], [
|
|
31156
|
+
/(sogou)mo\w+\/([\d\.]+)/i // Sogou Mobile
|
|
31157
|
+
], [[NAME, SOGOU + ' Mobile'], VERSION], [
|
|
31158
|
+
/(electron)\/([\w\.]+) safari/i, // Electron-based App
|
|
31159
|
+
/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i, // Tesla
|
|
31160
|
+
/m?(qqbrowser|2345(?=browser|chrome|explorer))\w*[\/ ]?v?([\w\.]+)/i // QQ/2345
|
|
31161
|
+
], [NAME, VERSION], [
|
|
31162
|
+
/(lbbrowser|rekonq)/i // LieBao Browser/Rekonq
|
|
31163
|
+
], [NAME], [
|
|
31164
|
+
/ome\/([\w\.]+) \w* ?(iron) saf/i, // Iron
|
|
31165
|
+
/ome\/([\w\.]+).+qihu (360)[es]e/i // 360
|
|
31166
|
+
], [VERSION, NAME], [
|
|
31167
|
+
|
|
31168
|
+
// WebView
|
|
31169
|
+
/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i // Facebook App for iOS & Android
|
|
31170
|
+
], [[NAME, FACEBOOK], VERSION, [TYPE, INAPP]], [
|
|
31171
|
+
/(kakao(?:talk|story))[\/ ]([\w\.]+)/i, // Kakao App
|
|
31172
|
+
/(naver)\(.*?(\d+\.[\w\.]+).*\)/i, // Naver InApp
|
|
31173
|
+
/(daum)apps[\/ ]([\w\.]+)/i, // Daum App
|
|
31174
|
+
/safari (line)\/([\w\.]+)/i, // Line App for iOS
|
|
31175
|
+
/\b(line)\/([\w\.]+)\/iab/i, // Line App for Android
|
|
31176
|
+
/(alipay)client\/([\w\.]+)/i, // Alipay
|
|
31177
|
+
/(twitter)(?:and| f.+e\/([\w\.]+))/i, // Twitter
|
|
31178
|
+
/(bing)(?:web|sapphire)\/([\w\.]+)/i, // Bing
|
|
31179
|
+
/(instagram|snapchat|klarna)[\/ ]([-\w\.]+)/i // Instagram/Snapchat/Klarna
|
|
31180
|
+
], [NAME, VERSION, [TYPE, INAPP]], [
|
|
31181
|
+
/\bgsa\/([\w\.]+) .*safari\//i // Google Search Appliance on iOS
|
|
31182
|
+
], [VERSION, [NAME, 'GSA'], [TYPE, INAPP]], [
|
|
31183
|
+
/musical_ly(?:.+app_?version\/|_)([\w\.]+)/i // TikTok
|
|
31184
|
+
], [VERSION, [NAME, 'TikTok'], [TYPE, INAPP]], [
|
|
31185
|
+
/\[(linkedin)app\]/i // LinkedIn App for iOS & Android
|
|
31186
|
+
], [NAME, [TYPE, INAPP]], [
|
|
31187
|
+
/(zalo(?:app)?)[\/\sa-z]*([\w\.-]+)/i // Zalo
|
|
31188
|
+
], [[NAME, /(.+)/, 'Zalo'], VERSION, [TYPE, INAPP]], [
|
|
31189
|
+
|
|
31190
|
+
/(chromium)[\/ ]([-\w\.]+)/i // Chromium
|
|
31191
|
+
], [NAME, VERSION], [
|
|
31192
|
+
|
|
31193
|
+
/headlesschrome(?:\/([\w\.]+)| )/i // Chrome Headless
|
|
31194
|
+
], [VERSION, [NAME, CHROME+' Headless']], [
|
|
31195
|
+
|
|
31196
|
+
/wv\).+chrome\/([\w\.]+).+edgw\//i // Edge WebView2
|
|
31197
|
+
], [VERSION, [NAME, EDGE+' WebView2']], [
|
|
31198
|
+
|
|
31199
|
+
/ wv\).+(chrome)\/([\w\.]+)/i // Chrome WebView
|
|
31200
|
+
], [[NAME, CHROME+' WebView'], VERSION], [
|
|
31201
|
+
|
|
31202
|
+
/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i // Android Browser
|
|
31203
|
+
], [VERSION, [NAME, 'Android' + SUFFIX_BROWSER]], [
|
|
31204
|
+
|
|
31205
|
+
/chrome\/([\w\.]+) mobile/i // Chrome Mobile
|
|
31206
|
+
], [VERSION, [NAME, PREFIX_MOBILE + 'Chrome']], [
|
|
31207
|
+
|
|
31208
|
+
/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia
|
|
31209
|
+
], [NAME, VERSION], [
|
|
31210
|
+
|
|
31211
|
+
/version\/([\w\.\,]+) .*mobile(?:\/\w+ | ?)safari/i // Safari Mobile
|
|
31212
|
+
], [VERSION, [NAME, PREFIX_MOBILE + 'Safari']], [
|
|
31213
|
+
/iphone .*mobile(?:\/\w+ | ?)safari/i
|
|
31214
|
+
], [[NAME, PREFIX_MOBILE + 'Safari']], [
|
|
31215
|
+
/version\/([\w\.\,]+) .*(safari)/i // Safari
|
|
31216
|
+
], [VERSION, NAME], [
|
|
31217
|
+
/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i // Safari < 3.0
|
|
31218
|
+
], [NAME, [VERSION, '1']], [
|
|
31219
|
+
|
|
31220
|
+
/(webkit|khtml)\/([\w\.]+)/i
|
|
31221
|
+
], [NAME, VERSION], [
|
|
31222
|
+
|
|
31223
|
+
// Gecko based
|
|
31224
|
+
/(?:mobile|tablet);.*(firefox)\/([\w\.-]+)/i // Firefox Mobile
|
|
31225
|
+
], [[NAME, PREFIX_MOBILE + FIREFOX], VERSION], [
|
|
31226
|
+
/(navigator|netscape\d?)\/([-\w\.]+)/i // Netscape
|
|
31227
|
+
], [[NAME, 'Netscape'], VERSION], [
|
|
31228
|
+
/(wolvic|librewolf)\/([\w\.]+)/i // Wolvic/LibreWolf
|
|
31229
|
+
], [NAME, VERSION], [
|
|
31230
|
+
/mobile vr; rv:([\w\.]+)\).+firefox/i // Firefox Reality
|
|
31231
|
+
], [VERSION, [NAME, FIREFOX+' Reality']], [
|
|
31232
|
+
/ekiohf.+(flow)\/([\w\.]+)/i, // Flow
|
|
31233
|
+
/(swiftfox)/i, // Swiftfox
|
|
31234
|
+
/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\/ ]?([\w\.\+]+)/i,
|
|
31235
|
+
// IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
|
|
31236
|
+
/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|basilisk|waterfox)\/([-\w\.]+)$/i,
|
|
31237
|
+
// Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
|
|
31238
|
+
/(firefox)\/([\w\.]+)/i, // Other Firefox-based
|
|
31239
|
+
/(mozilla)\/([\w\.]+(?= .+rv\:.+gecko\/\d+)|[0-4][\w\.]+(?!.+compatible))/i, // Mozilla
|
|
31240
|
+
|
|
31241
|
+
// Other
|
|
31242
|
+
/(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
|
|
31243
|
+
// Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser/Ladybird
|
|
31244
|
+
/\b(links) \(([\w\.]+)/i // Links
|
|
31245
|
+
], [NAME, [VERSION, /_/g, '.']], [
|
|
31246
|
+
|
|
31247
|
+
/(cobalt)\/([\w\.]+)/i // Cobalt
|
|
31248
|
+
], [NAME, [VERSION, /[^\d\.]+./, EMPTY]]
|
|
31249
|
+
],
|
|
31250
|
+
|
|
31251
|
+
cpu : [[
|
|
31252
|
+
|
|
31253
|
+
/\b((amd|x|x86[-_]?|wow|win)64)\b/i // AMD64 (x64)
|
|
31254
|
+
], [[ARCHITECTURE, 'amd64']], [
|
|
31255
|
+
|
|
31256
|
+
/(ia32(?=;))/i, // IA32 (quicktime)
|
|
31257
|
+
/\b((i[346]|x)86)(pc)?\b/i // IA32 (x86)
|
|
31258
|
+
], [[ARCHITECTURE, 'ia32']], [
|
|
31259
|
+
|
|
31260
|
+
/\b(aarch64|arm(v?[89]e?l?|_?64))\b/i // ARM64
|
|
31261
|
+
], [[ARCHITECTURE, 'arm64']], [
|
|
31262
|
+
|
|
31263
|
+
/\b(arm(v[67])?ht?n?[fl]p?)\b/i // ARMHF
|
|
31264
|
+
], [[ARCHITECTURE, 'armhf']], [
|
|
31265
|
+
|
|
31266
|
+
// PocketPC mistakenly identified as PowerPC
|
|
31267
|
+
/( (ce|mobile); ppc;|\/[\w\.]+arm\b)/i
|
|
31268
|
+
], [[ARCHITECTURE, 'arm']], [
|
|
31269
|
+
|
|
31270
|
+
/ sun4\w[;\)]/i // SPARC
|
|
31271
|
+
], [[ARCHITECTURE, 'sparc']], [
|
|
31272
|
+
// IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
|
|
31273
|
+
/\b(avr32|ia64(?=;)|68k(?=\))|\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\b|pa-risc)/i,
|
|
31274
|
+
/((ppc|powerpc)(64)?)( mac|;|\))/i, // PowerPC
|
|
31275
|
+
/(?:osf1|[freopnt]{3,4}bsd) (alpha)/i // Alpha
|
|
31276
|
+
], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [
|
|
31277
|
+
/mc680.0/i
|
|
31278
|
+
], [[ARCHITECTURE, '68k']], [
|
|
31279
|
+
/winnt.+\[axp/i
|
|
31280
|
+
], [[ARCHITECTURE, 'alpha']]
|
|
31281
|
+
],
|
|
31282
|
+
|
|
31283
|
+
device : [[
|
|
31284
|
+
|
|
31285
|
+
//////////////////////////
|
|
31286
|
+
// MOBILES & TABLETS
|
|
31287
|
+
/////////////////////////
|
|
31288
|
+
|
|
31289
|
+
// Samsung
|
|
31290
|
+
/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i
|
|
31291
|
+
], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [
|
|
31292
|
+
/\b((?:s[cgp]h|gt|sm)-(?![lr])\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,
|
|
31293
|
+
/samsung[- ]((?!sm-[lr]|browser)[-\w]+)/i,
|
|
31294
|
+
/sec-(sgh\w+)/i
|
|
31295
|
+
], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [
|
|
31296
|
+
|
|
31297
|
+
// Apple
|
|
31298
|
+
/(?:\/|\()(ip(?:hone|od)[\w, ]*)[\/\);]/i // iPod/iPhone
|
|
31299
|
+
], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [
|
|
31300
|
+
/\b(?:ios|apple\w+)\/.+[\(\/](ipad)/i, // iPad
|
|
31301
|
+
/\b(ipad)[\d,]*[;\] ].+(mac |i(pad)?)os/i
|
|
31302
|
+
], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [
|
|
31303
|
+
/(macintosh);/i
|
|
31304
|
+
], [MODEL, [VENDOR, APPLE]], [
|
|
31305
|
+
|
|
31306
|
+
// Sharp
|
|
31307
|
+
/\b(sh-?[altvz]?\d\d[a-ekm]?)/i
|
|
31308
|
+
], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [
|
|
31309
|
+
|
|
31310
|
+
// Honor
|
|
31311
|
+
/\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\)|;)/i
|
|
31312
|
+
], [MODEL, [VENDOR, HONOR], [TYPE, TABLET]], [
|
|
31313
|
+
/honor([-\w ]+)[;\)]/i
|
|
31314
|
+
], [MODEL, [VENDOR, HONOR], [TYPE, MOBILE]], [
|
|
31315
|
+
|
|
31316
|
+
// Huawei
|
|
31317
|
+
/\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\w\. ]*(?= bui|\)))\b(?!.+d\/s)/i
|
|
31318
|
+
], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [
|
|
31319
|
+
/(?:huawei) ?([-\w ]+)[;\)]/i,
|
|
31320
|
+
/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][\dc][adnt]?)\b(?!.+d\/s)/i
|
|
31321
|
+
], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [
|
|
31322
|
+
|
|
31323
|
+
// Xiaomi
|
|
31324
|
+
/oid[^\)]+; (2[\dbc]{4}(182|283|rp\w{2})[cgl]|m2105k81a?c)(?: bui|\))/i,
|
|
31325
|
+
/\b(?:xiao)?((?:red)?mi[-_ ]?pad[\w- ]*)(?: bui|\))/i // Mi Pad tablets
|
|
31326
|
+
],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [
|
|
31327
|
+
|
|
31328
|
+
/\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i, // Xiaomi POCO
|
|
31329
|
+
/\b; (\w+) build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
|
31330
|
+
/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i, // Xiaomi Hongmi
|
|
31331
|
+
/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i, // Xiaomi Redmi
|
|
31332
|
+
/oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i, // Xiaomi Redmi 'numeric' models
|
|
31333
|
+
/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note|max|cc)?[_ ]?(?:\d{0,2}\w?)[_ ]?(?:plus|se|lite|pro)?( 5g|lte)?)(?: bui|\))/i, // Xiaomi Mi
|
|
31334
|
+
/ ([\w ]+) miui\/v?\d/i
|
|
31335
|
+
], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [
|
|
31336
|
+
|
|
31337
|
+
// OnePlus
|
|
31338
|
+
/droid.+; (cph2[3-6]\d[13579]|((gm|hd)19|(ac|be|in|kb)20|(d[en]|eb|le|mt)21|ne22)[0-2]\d|p[g-k]\w[1m]10)\b/i,
|
|
31339
|
+
/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i
|
|
31340
|
+
], [MODEL, [VENDOR, ONEPLUS], [TYPE, MOBILE]], [
|
|
31341
|
+
|
|
31342
|
+
// OPPO
|
|
31343
|
+
/; (\w+) bui.+ oppo/i,
|
|
31344
|
+
/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i
|
|
31345
|
+
], [MODEL, [VENDOR, OPPO], [TYPE, MOBILE]], [
|
|
31346
|
+
/\b(opd2(\d{3}a?))(?: bui|\))/i
|
|
31347
|
+
], [MODEL, [VENDOR, strMapper, { 'OnePlus' : ['203', '304', '403', '404', '413', '415'], '*' : OPPO }], [TYPE, TABLET]], [
|
|
31348
|
+
|
|
31349
|
+
// BLU
|
|
31350
|
+
/(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\w\+ ]*)(?: bui|\))/i // Vivo series
|
|
31351
|
+
], [MODEL, [VENDOR, 'BLU'], [TYPE, MOBILE]], [
|
|
31352
|
+
|
|
31353
|
+
// Vivo
|
|
31354
|
+
/; vivo (\w+)(?: bui|\))/i,
|
|
31355
|
+
/\b(v[12]\d{3}\w?[at])(?: bui|;)/i
|
|
31356
|
+
], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [
|
|
31357
|
+
|
|
31358
|
+
// Realme
|
|
31359
|
+
/\b(rmx[1-3]\d{3})(?: bui|;|\))/i
|
|
31360
|
+
], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [
|
|
31361
|
+
|
|
31362
|
+
// Lenovo
|
|
31363
|
+
/(ideatab[-\w ]+|602lv|d-42a|a101lv|a2109a|a3500-hv|s[56]000|pb-6505[my]|tb-?x?\d{3,4}(?:f[cu]|xu|[av])|yt\d?-[jx]?\d+[lfmx])( bui|;|\)|\/)/i,
|
|
31364
|
+
/lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\w- ]+?)|tb[\w-]{6,7})( bui|;|\)|\/)/i
|
|
31365
|
+
], [MODEL, [VENDOR, LENOVO], [TYPE, TABLET]], [
|
|
31366
|
+
/lenovo[-_ ]?([-\w ]+?)(?: bui|\)|\/)/i
|
|
31367
|
+
], [MODEL, [VENDOR, LENOVO], [TYPE, MOBILE]], [
|
|
31368
|
+
|
|
31369
|
+
// Motorola
|
|
31370
|
+
/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,
|
|
31371
|
+
/\bmot(?:orola)?[- ]([\w\s]+)(\)| bui)/i,
|
|
31372
|
+
/((?:moto(?! 360)[-\w\(\) ]+|xt\d{3,4}[cgkosw\+]?[-\d]*|nexus 6)(?= bui|\)))/i
|
|
31373
|
+
], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [
|
|
31374
|
+
/\b(mz60\d|xoom[2 ]{0,2}) build\//i
|
|
31375
|
+
], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [
|
|
31376
|
+
|
|
31377
|
+
// LG
|
|
31378
|
+
/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
|
|
31379
|
+
], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [
|
|
31380
|
+
/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
|
|
31381
|
+
/\blg[-e;\/ ]+(?!.*(?:browser|netcast|android tv|watch|webos))(\w+)/i,
|
|
31382
|
+
/\blg-?([\d\w]+) bui/i
|
|
31383
|
+
], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [
|
|
31384
|
+
|
|
31385
|
+
// Nokia
|
|
31386
|
+
/(nokia) (t[12][01])/i
|
|
31387
|
+
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
|
31388
|
+
/(?:maemo|nokia).*(n900|lumia \d+|rm-\d+)/i,
|
|
31389
|
+
/nokia[-_ ]?(([-\w\. ]*?))( bui|\)|;|\/)/i
|
|
31390
|
+
], [[MODEL, /_/g, ' '], [TYPE, MOBILE], [VENDOR, 'Nokia']], [
|
|
31391
|
+
|
|
31392
|
+
// Google
|
|
31393
|
+
/(pixel (c|tablet))\b/i // Google Pixel C/Tablet
|
|
31394
|
+
], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [
|
|
31395
|
+
// Google Pixel
|
|
31396
|
+
/droid.+;(?: google)? (g(01[13]a|020[aem]|025[jn]|1b60|1f8f|2ybb|4s1m|576d|5nz6|8hhn|8vou|a02099|c15s|d1yq|e2ae|ec77|gh2x|kv4x|p4bc|pj41|r83y|tt9q|ur25|wvk6)|pixel[\d ]*a?( pro)?( xl)?( fold)?( \(5g\))?)( bui|\))/i
|
|
31397
|
+
], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [
|
|
31398
|
+
/(google) (pixelbook( go)?)/i
|
|
31399
|
+
], [VENDOR, MODEL], [
|
|
31400
|
+
|
|
31401
|
+
// Sony
|
|
31402
|
+
/droid.+; (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-\w\w\d\d)(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i
|
|
31403
|
+
], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [
|
|
31404
|
+
/sony tablet [ps]/i,
|
|
31405
|
+
/\b(?:sony)?sgp\w+(?: bui|\))/i
|
|
31406
|
+
], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [
|
|
31407
|
+
|
|
31408
|
+
// Amazon
|
|
31409
|
+
/(alexa)webm/i,
|
|
31410
|
+
/(kf[a-z]{2}wi|aeo(?!bc)\w\w)( bui|\))/i, // Kindle Fire without Silk / Echo Show
|
|
31411
|
+
/(kf[a-z]+)( bui|\)).+silk\//i // Kindle Fire HD
|
|
31412
|
+
], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [
|
|
31413
|
+
/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i // Fire Phone
|
|
31414
|
+
], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [
|
|
31415
|
+
|
|
31416
|
+
// BlackBerry
|
|
31417
|
+
/(playbook);[-\w\),; ]+(rim)/i // BlackBerry PlayBook
|
|
31418
|
+
], [MODEL, VENDOR, [TYPE, TABLET]], [
|
|
31419
|
+
/\b((?:bb[a-f]|st[hv])100-\d)/i,
|
|
31420
|
+
/(?:blackberry|\(bb10;) (\w+)/i
|
|
31421
|
+
], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [
|
|
31422
|
+
|
|
31423
|
+
// Asus
|
|
31424
|
+
/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i
|
|
31425
|
+
], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [
|
|
31426
|
+
/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i
|
|
31427
|
+
], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [
|
|
31428
|
+
|
|
31429
|
+
// HTC
|
|
31430
|
+
/(nexus 9)/i // HTC Nexus 9
|
|
31431
|
+
], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [
|
|
31432
|
+
/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i, // HTC
|
|
31433
|
+
|
|
31434
|
+
// ZTE
|
|
31435
|
+
/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,
|
|
31436
|
+
/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
|
|
31437
|
+
], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
|
|
31438
|
+
|
|
31439
|
+
// TCL
|
|
31440
|
+
/tcl (xess p17aa)/i,
|
|
31441
|
+
/droid [\w\.]+; ((?:8[14]9[16]|9(?:0(?:48|60|8[01])|1(?:3[27]|66)|2(?:6[69]|9[56])|466))[gqswx])(_\w(\w|\w\w))?(\)| bui)/i
|
|
31442
|
+
], [MODEL, [VENDOR, 'TCL'], [TYPE, TABLET]], [
|
|
31443
|
+
/droid [\w\.]+; (418(?:7d|8v)|5087z|5102l|61(?:02[dh]|25[adfh]|27[ai]|56[dh]|59k|65[ah])|a509dl|t(?:43(?:0w|1[adepqu])|50(?:6d|7[adju])|6(?:09dl|10k|12b|71[efho]|76[hjk])|7(?:66[ahju]|67[hw]|7[045][bh]|71[hk]|73o|76[ho]|79w|81[hks]?|82h|90[bhsy]|99b)|810[hs]))(_\w(\w|\w\w))?(\)| bui)/i
|
|
31444
|
+
], [MODEL, [VENDOR, 'TCL'], [TYPE, MOBILE]], [
|
|
31445
|
+
|
|
31446
|
+
// itel
|
|
31447
|
+
/(itel) ((\w+))/i
|
|
31448
|
+
], [[VENDOR, lowerize], MODEL, [TYPE, strMapper, { 'tablet' : ['p10001l', 'w7001'], '*' : 'mobile' }]], [
|
|
31449
|
+
|
|
31450
|
+
// Acer
|
|
31451
|
+
/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i
|
|
31452
|
+
], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [
|
|
31453
|
+
|
|
31454
|
+
// Meizu
|
|
31455
|
+
/droid.+; (m[1-5] note) bui/i,
|
|
31456
|
+
/\bmz-([-\w]{2,})/i
|
|
31457
|
+
], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [
|
|
31458
|
+
|
|
31459
|
+
// Ulefone
|
|
31460
|
+
/; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i
|
|
31461
|
+
], [MODEL, [VENDOR, 'Ulefone'], [TYPE, MOBILE]], [
|
|
31462
|
+
|
|
31463
|
+
// Energizer
|
|
31464
|
+
/; (energy ?\w+)(?: bui|\))/i,
|
|
31465
|
+
/; energizer ([\w ]+)(?: bui|\))/i
|
|
31466
|
+
], [MODEL, [VENDOR, 'Energizer'], [TYPE, MOBILE]], [
|
|
31467
|
+
|
|
31468
|
+
// Cat
|
|
31469
|
+
/; cat (b35);/i,
|
|
31470
|
+
/; (b15q?|s22 flip|s48c|s62 pro)(?: bui|\))/i
|
|
31471
|
+
], [MODEL, [VENDOR, 'Cat'], [TYPE, MOBILE]], [
|
|
31472
|
+
|
|
31473
|
+
// Smartfren
|
|
31474
|
+
/((?:new )?andromax[\w- ]+)(?: bui|\))/i
|
|
31475
|
+
], [MODEL, [VENDOR, 'Smartfren'], [TYPE, MOBILE]], [
|
|
31476
|
+
|
|
31477
|
+
// Nothing
|
|
31478
|
+
/droid.+; (a(in)?(0(15|59|6[35])|142)p?)/i
|
|
31479
|
+
], [MODEL, [VENDOR, 'Nothing'], [TYPE, MOBILE]], [
|
|
31480
|
+
|
|
31481
|
+
// Archos
|
|
31482
|
+
/; (x67 5g|tikeasy \w+|ac[1789]\d\w+)( b|\))/i,
|
|
31483
|
+
/archos ?(5|gamepad2?|([\w ]*[t1789]|hello) ?\d+[\w ]*)( b|\))/i
|
|
31484
|
+
], [MODEL, [VENDOR, 'Archos'], [TYPE, TABLET]], [
|
|
31485
|
+
/archos ([\w ]+)( b|\))/i,
|
|
31486
|
+
/; (ac[3-6]\d\w{2,8})( b|\))/i
|
|
31487
|
+
], [MODEL, [VENDOR, 'Archos'], [TYPE, MOBILE]], [
|
|
31488
|
+
|
|
31489
|
+
// HMD
|
|
31490
|
+
/; (n159v)/i
|
|
31491
|
+
], [MODEL, [VENDOR, 'HMD'], [TYPE, MOBILE]], [
|
|
31492
|
+
|
|
31493
|
+
// MIXED
|
|
31494
|
+
/(imo) (tab \w+)/i, // IMO
|
|
31495
|
+
/(infinix|tecno) (x1101b?|p904|dp(7c|8d|10a)( pro)?|p70[1-3]a?|p904|t1101)/i // Infinix XPad / Tecno
|
|
31496
|
+
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
|
31497
|
+
|
|
31498
|
+
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|tecno|micromax|advan)[-_ ]?([-\w]*)/i,
|
|
31499
|
+
// BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Tecno/Micromax/Advan
|
|
31500
|
+
// BLU/HMD/IMO/Infinix/Lava/OnePlus/TCL/Wiko
|
|
31501
|
+
/; (blu|hmd|imo|infinix|lava|oneplus|tcl|wiko)[_ ]([\w\+ ]+?)(?: bui|\)|; r)/i,
|
|
31502
|
+
/(hp) ([\w ]+\w)/i, // HP iPAQ
|
|
31503
|
+
/(microsoft); (lumia[\w ]+)/i, // Microsoft Lumia
|
|
31504
|
+
/(oppo) ?([\w ]+) bui/i, // OPPO
|
|
31505
|
+
/(hisense) ([ehv][\w ]+)\)/i, // Hisense
|
|
31506
|
+
/droid[^;]+; (philips)[_ ]([sv-x][\d]{3,4}[xz]?)/i // Philips
|
|
31507
|
+
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
|
31508
|
+
|
|
31509
|
+
/(kobo)\s(ereader|touch)/i, // Kobo
|
|
31510
|
+
/(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad
|
|
31511
|
+
/(kindle)\/([\w\.]+)/i // Kindle
|
|
31512
|
+
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
|
31513
|
+
|
|
31514
|
+
/(surface duo)/i // Surface Duo
|
|
31515
|
+
], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [
|
|
31516
|
+
/droid [\d\.]+; (fp\du?)(?: b|\))/i // Fairphone
|
|
31517
|
+
], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [
|
|
31518
|
+
/((?:tegranote|shield t(?!.+d tv))[\w- ]*?)(?: b|\))/i // Nvidia Tablets
|
|
31519
|
+
], [MODEL, [VENDOR, NVIDIA], [TYPE, TABLET]], [
|
|
31520
|
+
/(sprint) (\w+)/i // Sprint Phones
|
|
31521
|
+
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
|
31522
|
+
/(kin\.[onetw]{3})/i // Microsoft Kin
|
|
31523
|
+
], [[MODEL, /\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [
|
|
31524
|
+
/droid.+; ([c6]+|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i // Zebra
|
|
31525
|
+
], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [
|
|
31526
|
+
/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i
|
|
31527
|
+
], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [
|
|
31528
|
+
|
|
31529
|
+
///////////////////
|
|
31530
|
+
// SMARTTVS
|
|
31531
|
+
///////////////////
|
|
31532
|
+
|
|
31533
|
+
/(philips)[\w ]+tv/i, // Philips
|
|
31534
|
+
/smart-tv.+(samsung)/i // Samsung
|
|
31535
|
+
], [VENDOR, [TYPE, SMARTTV]], [
|
|
31536
|
+
/hbbtv.+maple;(\d+)/i
|
|
31537
|
+
], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [
|
|
31538
|
+
/(vizio)(?: |.+model\/)(\w+-\w+)/i, // Vizio
|
|
31539
|
+
/tcast.+(lg)e?. ([-\w]+)/i // LG SmartTV
|
|
31540
|
+
], [VENDOR, MODEL, [TYPE, SMARTTV]], [
|
|
31541
|
+
/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i
|
|
31542
|
+
], [[VENDOR, LG], [TYPE, SMARTTV]], [
|
|
31543
|
+
/(apple) ?tv/i // Apple TV
|
|
31544
|
+
], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [
|
|
31545
|
+
/crkey.*devicetype\/chromecast/i // Google Chromecast Third Generation
|
|
31546
|
+
], [[MODEL, CHROMECAST+' Third Generation'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
|
|
31547
|
+
/crkey.*devicetype\/([^/]*)/i // Google Chromecast with specific device type
|
|
31548
|
+
], [[MODEL, /^/, 'Chromecast '], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
|
|
31549
|
+
/fuchsia.*crkey/i // Google Chromecast Nest Hub
|
|
31550
|
+
], [[MODEL, CHROMECAST+' Nest Hub'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
|
|
31551
|
+
/crkey/i // Google Chromecast, Linux-based or unknown
|
|
31552
|
+
], [[MODEL, CHROMECAST], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
|
|
31553
|
+
/(portaltv)/i // Facebook Portal TV
|
|
31554
|
+
], [MODEL, [VENDOR, FACEBOOK], [TYPE, SMARTTV]], [
|
|
31555
|
+
/droid.+aft(\w+)( bui|\))/i // Fire TV
|
|
31556
|
+
], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [
|
|
31557
|
+
/(shield \w+ tv)/i // Nvidia Shield TV
|
|
31558
|
+
], [MODEL, [VENDOR, NVIDIA], [TYPE, SMARTTV]], [
|
|
31559
|
+
/\(dtv[\);].+(aquos)/i,
|
|
31560
|
+
/(aquos-tv[\w ]+)\)/i // Sharp
|
|
31561
|
+
], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[
|
|
31562
|
+
/(bravia[\w ]+)( bui|\))/i // Sony
|
|
31563
|
+
], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [
|
|
31564
|
+
/(mi(tv|box)-?\w+) bui/i // Xiaomi
|
|
31565
|
+
], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [
|
|
31566
|
+
/Hbbtv.*(technisat) (.*);/i // TechniSAT
|
|
31567
|
+
], [VENDOR, MODEL, [TYPE, SMARTTV]], [
|
|
31568
|
+
/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, // Roku
|
|
31569
|
+
/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i // HbbTV devices
|
|
31570
|
+
], [[VENDOR, /.+\/(\w+)/, '$1', strMapper, {'LG':'lge'}], [MODEL, trim], [TYPE, SMARTTV]], [
|
|
31571
|
+
|
|
31572
|
+
///////////////////
|
|
31573
|
+
// CONSOLES
|
|
31574
|
+
///////////////////
|
|
31575
|
+
|
|
31576
|
+
/(playstation \w+)/i // Playstation
|
|
31577
|
+
], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [
|
|
31578
|
+
/\b(xbox(?: one)?(?!; xbox))[\); ]/i // Microsoft Xbox
|
|
31579
|
+
], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [
|
|
31580
|
+
/(ouya)/i, // Ouya
|
|
31581
|
+
/(nintendo) (\w+)/i, // Nintendo
|
|
31582
|
+
/(retroid) (pocket ([^\)]+))/i // Retroid Pocket
|
|
31583
|
+
], [VENDOR, MODEL, [TYPE, CONSOLE]], [
|
|
31584
|
+
/droid.+; (shield)( bui|\))/i // Nvidia Portable
|
|
31585
|
+
], [MODEL, [VENDOR, NVIDIA], [TYPE, CONSOLE]], [
|
|
31586
|
+
|
|
31587
|
+
///////////////////
|
|
31588
|
+
// WEARABLES
|
|
31589
|
+
///////////////////
|
|
31590
|
+
|
|
31591
|
+
/\b(sm-[lr]\d\d[0156][fnuw]?s?|gear live)\b/i // Samsung Galaxy Watch
|
|
31592
|
+
], [MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]], [
|
|
31593
|
+
/((pebble))app/i, // Pebble
|
|
31594
|
+
/(asus|google|lg|oppo) ((pixel |zen)?watch[\w ]*)( bui|\))/i // Asus ZenWatch / LG Watch / Pixel Watch
|
|
31595
|
+
], [VENDOR, MODEL, [TYPE, WEARABLE]], [
|
|
31596
|
+
/(ow(?:19|20)?we?[1-3]{1,3})/i // Oppo Watch
|
|
31597
|
+
], [MODEL, [VENDOR, OPPO], [TYPE, WEARABLE]], [
|
|
31598
|
+
/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i // Apple Watch
|
|
31599
|
+
], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [
|
|
31600
|
+
/(opwwe\d{3})/i // OnePlus Watch
|
|
31601
|
+
], [MODEL, [VENDOR, ONEPLUS], [TYPE, WEARABLE]], [
|
|
31602
|
+
/(moto 360)/i // Motorola 360
|
|
31603
|
+
], [MODEL, [VENDOR, MOTOROLA], [TYPE, WEARABLE]], [
|
|
31604
|
+
/(smartwatch 3)/i // Sony SmartWatch
|
|
31605
|
+
], [MODEL, [VENDOR, SONY], [TYPE, WEARABLE]], [
|
|
31606
|
+
/(g watch r)/i // LG G Watch R
|
|
31607
|
+
], [MODEL, [VENDOR, LG], [TYPE, WEARABLE]], [
|
|
31608
|
+
/droid.+; (wt63?0{2,3})\)/i
|
|
31609
|
+
], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [
|
|
31610
|
+
|
|
31611
|
+
///////////////////
|
|
31612
|
+
// XR
|
|
31613
|
+
///////////////////
|
|
31614
|
+
|
|
31615
|
+
/droid.+; (glass) \d/i // Google Glass
|
|
31616
|
+
], [MODEL, [VENDOR, GOOGLE], [TYPE, XR]], [
|
|
31617
|
+
/(pico) ([\w ]+) os\d/i // Pico
|
|
31618
|
+
], [VENDOR, MODEL, [TYPE, XR]], [
|
|
31619
|
+
/(quest( \d| pro)?s?).+vr/i // Meta Quest
|
|
31620
|
+
], [MODEL, [VENDOR, FACEBOOK], [TYPE, XR]], [
|
|
31621
|
+
/mobile vr; rv.+firefox/i // Unidentifiable VR device using Firefox Reality / Wolvic
|
|
31622
|
+
], [[TYPE, XR]], [
|
|
31623
|
+
|
|
31624
|
+
///////////////////
|
|
31625
|
+
// EMBEDDED
|
|
31626
|
+
///////////////////
|
|
31627
|
+
|
|
31628
|
+
/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i // Tesla
|
|
31629
|
+
], [VENDOR, [TYPE, EMBEDDED]], [
|
|
31630
|
+
/(aeobc)\b/i // Echo Dot
|
|
31631
|
+
], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [
|
|
31632
|
+
/(homepod).+mac os/i // Apple HomePod
|
|
31633
|
+
], [MODEL, [VENDOR, APPLE], [TYPE, EMBEDDED]], [
|
|
31634
|
+
/windows iot/i // Unidentifiable embedded device using Windows IoT
|
|
31635
|
+
], [[TYPE, EMBEDDED]], [
|
|
31636
|
+
|
|
31637
|
+
////////////////////
|
|
31638
|
+
// MIXED (GENERIC)
|
|
31639
|
+
///////////////////
|
|
31640
|
+
|
|
31641
|
+
/droid.+; ([\w- ]+) (4k|android|smart|google)[- ]?tv/i // Unidentifiable SmartTV
|
|
31642
|
+
], [MODEL, [TYPE, SMARTTV]], [
|
|
31643
|
+
/\b((4k|android|smart|opera)[- ]?tv|tv; rv:|large screen[\w ]+safari)\b/i
|
|
31644
|
+
], [[TYPE, SMARTTV]], [
|
|
31645
|
+
/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew|; hmsc).+?(mobile|vr|\d) safari/i
|
|
31646
|
+
], [MODEL, [TYPE, strMapper, { 'mobile' : 'Mobile', 'xr' : 'VR', '*' : TABLET }]], [
|
|
31647
|
+
/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i // Unidentifiable Tablet
|
|
31648
|
+
], [[TYPE, TABLET]], [
|
|
31649
|
+
/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile
|
|
31650
|
+
], [[TYPE, MOBILE]], [
|
|
31651
|
+
/droid .+?; ([\w\. -]+)( bui|\))/i // Generic Android Device
|
|
31652
|
+
], [MODEL, [VENDOR, 'Generic']]
|
|
31653
|
+
],
|
|
31654
|
+
|
|
31655
|
+
engine : [[
|
|
31656
|
+
|
|
31657
|
+
/windows.+ edge\/([\w\.]+)/i // EdgeHTML
|
|
31658
|
+
], [VERSION, [NAME, EDGE+'HTML']], [
|
|
31659
|
+
|
|
31660
|
+
/(arkweb)\/([\w\.]+)/i // ArkWeb
|
|
31661
|
+
], [NAME, VERSION], [
|
|
31662
|
+
|
|
31663
|
+
/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i // Blink
|
|
31664
|
+
], [VERSION, [NAME, 'Blink']], [
|
|
31665
|
+
|
|
31666
|
+
/(presto)\/([\w\.]+)/i, // Presto
|
|
31667
|
+
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\/([\w\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna/Servo
|
|
31668
|
+
/ekioh(flow)\/([\w\.]+)/i, // Flow
|
|
31669
|
+
/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i, // KHTML/Tasman/Links
|
|
31670
|
+
/(icab)[\/ ]([23]\.[\d\.]+)/i, // iCab
|
|
31671
|
+
|
|
31672
|
+
/\b(libweb)/i // LibWeb
|
|
31673
|
+
], [NAME, VERSION], [
|
|
31674
|
+
/ladybird\//i
|
|
31675
|
+
], [[NAME, 'LibWeb']], [
|
|
31676
|
+
|
|
31677
|
+
/rv\:([\w\.]{1,9})\b.+(gecko)/i // Gecko
|
|
31678
|
+
], [VERSION, NAME]
|
|
31679
|
+
],
|
|
31680
|
+
|
|
31681
|
+
os : [[
|
|
31682
|
+
|
|
31683
|
+
// Windows
|
|
31684
|
+
/(windows nt) (6\.[23]); arm/i // Windows RT
|
|
31685
|
+
], [[NAME, /N/, 'R'], [VERSION, strMapper, windowsVersionMap]], [
|
|
31686
|
+
/(windows (?:phone|mobile|iot))(?: os)?[\/ ]?([\d\.]*( se)?)/i, // Windows IoT/Mobile/Phone
|
|
31687
|
+
// Windows NT/3.1/95/98/ME/2000/XP/Vista/7/8/8.1/10/11
|
|
31688
|
+
/(windows)[\/ ](1[01]|2000|3\.1|7|8(\.1)?|9[58]|me|server 20\d\d( r2)?|vista|xp)/i
|
|
31689
|
+
], [NAME, VERSION], [
|
|
31690
|
+
/windows nt ?([\d\.\)]*)(?!.+xbox)/i,
|
|
31691
|
+
/\bwin(?=3| ?9|n)(?:nt| 9x )?([\d\.;]*)/i
|
|
31692
|
+
], [[VERSION, /(;|\))/g, '', strMapper, windowsVersionMap], [NAME, WINDOWS]], [
|
|
31693
|
+
/(windows ce)\/?([\d\.]*)/i // Windows CE
|
|
31694
|
+
], [NAME, VERSION], [
|
|
31695
|
+
|
|
31696
|
+
// iOS/macOS
|
|
31697
|
+
/[adehimnop]{4,7}\b(?:.*os ([\w]+) like mac|; opera)/i, // iOS
|
|
31698
|
+
/(?:ios;fbsv|ios(?=.+ip(?:ad|hone))|ip(?:ad|hone)(?: |.+i(?:pad)?)os)[\/ ]([\w\.]+)/i,
|
|
31699
|
+
/cfnetwork\/.+darwin/i
|
|
31700
|
+
], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
|
|
31701
|
+
/(mac os x) ?([\w\. ]*)/i,
|
|
31702
|
+
/(macintosh|mac_powerpc\b)(?!.+(haiku|morphos))/i // Mac OS
|
|
31703
|
+
], [[NAME, 'macOS'], [VERSION, /_/g, '.']], [
|
|
31704
|
+
|
|
31705
|
+
// Google Chromecast
|
|
31706
|
+
/android ([\d\.]+).*crkey/i // Google Chromecast, Android-based
|
|
31707
|
+
], [VERSION, [NAME, CHROMECAST + ' Android']], [
|
|
31708
|
+
/fuchsia.*crkey\/([\d\.]+)/i // Google Chromecast, Fuchsia-based
|
|
31709
|
+
], [VERSION, [NAME, CHROMECAST + ' Fuchsia']], [
|
|
31710
|
+
/crkey\/([\d\.]+).*devicetype\/smartspeaker/i // Google Chromecast, Linux-based Smart Speaker
|
|
31711
|
+
], [VERSION, [NAME, CHROMECAST + ' SmartSpeaker']], [
|
|
31712
|
+
/linux.*crkey\/([\d\.]+)/i // Google Chromecast, Legacy Linux-based
|
|
31713
|
+
], [VERSION, [NAME, CHROMECAST + ' Linux']], [
|
|
31714
|
+
/crkey\/([\d\.]+)/i // Google Chromecast, unknown
|
|
31715
|
+
], [VERSION, [NAME, CHROMECAST]], [
|
|
31716
|
+
|
|
31717
|
+
// Mobile OSes
|
|
31718
|
+
/droid ([\w\.]+)\b.+(android[- ]x86)/i // Android-x86
|
|
31719
|
+
], [VERSION, NAME], [
|
|
31720
|
+
/(ubuntu) ([\w\.]+) like android/i // Ubuntu Touch
|
|
31721
|
+
], [[NAME, /(.+)/, '$1 Touch'], VERSION], [
|
|
31722
|
+
/(harmonyos)[\/ ]?([\d\.]*)/i, // HarmonyOS
|
|
31723
|
+
// Android/Blackberry/WebOS/QNX/Bada/RIM/KaiOS/Maemo/MeeGo/S40/Sailfish OS/OpenHarmony/Tizen
|
|
31724
|
+
/(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen)\w*[-\/\.; ]?([\d\.]*)/i
|
|
31725
|
+
], [NAME, VERSION], [
|
|
31726
|
+
/\(bb(10);/i // BlackBerry 10
|
|
31727
|
+
], [VERSION, [NAME, BLACKBERRY]], [
|
|
31728
|
+
/(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\/ ]?([\w\.]*)/i // Symbian
|
|
31729
|
+
], [VERSION, [NAME, 'Symbian']], [
|
|
31730
|
+
/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i // Firefox OS
|
|
31731
|
+
], [VERSION, [NAME, FIREFOX+' OS']], [
|
|
31732
|
+
/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i, // WebOS
|
|
31733
|
+
/webos(?:[ \/]?|\.tv-20(?=2[2-9]))(\d[\d\.]*)/i
|
|
31734
|
+
], [VERSION, [NAME, 'webOS']], [
|
|
31735
|
+
/web0s;.+?(?:chr[o0]me|safari)\/(\d+)/i
|
|
31736
|
+
// https://webostv.developer.lge.com/develop/specifications/web-api-and-web-engine
|
|
31737
|
+
], [[VERSION, strMapper, {'25':'120','24':'108','23':'94','22':'87','6':'79','5':'68','4':'53','3':'38','2':'538','1':'537','*':'TV'}], [NAME, 'webOS']], [
|
|
31738
|
+
/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i // watchOS
|
|
31739
|
+
], [VERSION, [NAME, 'watchOS']], [
|
|
31740
|
+
|
|
31741
|
+
// Google ChromeOS
|
|
31742
|
+
/(cros) [\w]+(?:\)| ([\w\.]+)\b)/i // Chromium OS
|
|
31743
|
+
], [[NAME, "Chrome OS"], VERSION],[
|
|
31744
|
+
|
|
31745
|
+
// Smart TVs
|
|
31746
|
+
/panasonic;(viera)/i, // Panasonic Viera
|
|
31747
|
+
/(netrange)mmh/i, // Netrange
|
|
31748
|
+
/(nettv)\/(\d+\.[\w\.]+)/i, // NetTV
|
|
31749
|
+
|
|
31750
|
+
// Console
|
|
31751
|
+
/(nintendo|playstation) (\w+)/i, // Nintendo/Playstation
|
|
31752
|
+
/(xbox); +xbox ([^\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)
|
|
31753
|
+
/(pico) .+os([\w\.]+)/i, // Pico
|
|
31754
|
+
|
|
31755
|
+
// Other
|
|
31756
|
+
/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i, // Joli/Palm
|
|
31757
|
+
/linux.+(mint)[\/\(\) ]?([\w\.]*)/i, // Mint
|
|
31758
|
+
/(mageia|vectorlinux|fuchsia|arcaos|arch(?= ?linux))[;l ]([\d\.]*)/i, // Mageia/VectorLinux/Fuchsia/ArcaOS/Arch
|
|
31759
|
+
/([kxln]?ubuntu|debian|suse|opensuse|gentoo|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire|knoppix)(?: gnu[\/ ]linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,
|
|
31760
|
+
// Ubuntu/Debian/SUSE/Gentoo/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire/Knoppix
|
|
31761
|
+
/((?:open)?solaris)[-\/ ]?([\w\.]*)/i, // Solaris
|
|
31762
|
+
/\b(aix)[; ]([1-9\.]{0,4})/i, // AIX
|
|
31763
|
+
/(hurd|linux|morphos)(?: (?:arm|x86|ppc)\w*| ?)([\w\.]*)/i, // Hurd/Linux/MorphOS
|
|
31764
|
+
/(gnu) ?([\w\.]*)/i, // GNU
|
|
31765
|
+
/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly
|
|
31766
|
+
/(haiku) ?(r\d)?/i // Haiku
|
|
31767
|
+
], [NAME, VERSION], [
|
|
31768
|
+
/(sunos) ?([\d\.]*)/i // Solaris
|
|
31769
|
+
], [[NAME, 'Solaris'], VERSION], [
|
|
31770
|
+
/\b(beos|os\/2|amigaos|openvms|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/OpenVMS/HP-UX/SerenityOS
|
|
31771
|
+
/(unix) ?([\w\.]*)/i // UNIX
|
|
31772
|
+
], [NAME, VERSION]
|
|
31773
|
+
]
|
|
31774
|
+
};
|
|
31775
|
+
|
|
31776
|
+
/////////////////
|
|
31777
|
+
// Factories
|
|
31778
|
+
////////////////
|
|
31779
|
+
|
|
31780
|
+
var defaultProps = (function () {
|
|
31781
|
+
var props = { init : {}, isIgnore : {}, isIgnoreRgx : {}, toString : {}};
|
|
31782
|
+
setProps.call(props.init, [
|
|
31783
|
+
[BROWSER, [NAME, VERSION, MAJOR, TYPE]],
|
|
31784
|
+
[CPU, [ARCHITECTURE]],
|
|
31785
|
+
[DEVICE, [TYPE, MODEL, VENDOR]],
|
|
31786
|
+
[ENGINE, [NAME, VERSION]],
|
|
31787
|
+
[OS, [NAME, VERSION]]
|
|
31788
|
+
]);
|
|
31789
|
+
setProps.call(props.isIgnore, [
|
|
31790
|
+
[BROWSER, [VERSION, MAJOR]],
|
|
31791
|
+
[ENGINE, [VERSION]],
|
|
31792
|
+
[OS, [VERSION]]
|
|
31793
|
+
]);
|
|
31794
|
+
setProps.call(props.isIgnoreRgx, [
|
|
31795
|
+
[BROWSER, / ?browser$/i],
|
|
31796
|
+
[OS, / ?os$/i]
|
|
31797
|
+
]);
|
|
31798
|
+
setProps.call(props.toString, [
|
|
31799
|
+
[BROWSER, [NAME, VERSION]],
|
|
31800
|
+
[CPU, [ARCHITECTURE]],
|
|
31801
|
+
[DEVICE, [VENDOR, MODEL]],
|
|
31802
|
+
[ENGINE, [NAME, VERSION]],
|
|
31803
|
+
[OS, [NAME, VERSION]]
|
|
31804
|
+
]);
|
|
31805
|
+
return props;
|
|
31806
|
+
})();
|
|
31807
|
+
|
|
31808
|
+
var createIData = function (item, itemType) {
|
|
31809
|
+
|
|
31810
|
+
var init_props = defaultProps.init[itemType],
|
|
31811
|
+
is_ignoreProps = defaultProps.isIgnore[itemType] || 0,
|
|
31812
|
+
is_ignoreRgx = defaultProps.isIgnoreRgx[itemType] || 0,
|
|
31813
|
+
toString_props = defaultProps.toString[itemType] || 0;
|
|
31814
|
+
|
|
31815
|
+
function IData () {
|
|
31816
|
+
setProps.call(this, init_props);
|
|
31817
|
+
}
|
|
31818
|
+
|
|
31819
|
+
IData.prototype.getItem = function () {
|
|
31820
|
+
return item;
|
|
31821
|
+
};
|
|
31822
|
+
|
|
31823
|
+
IData.prototype.withClientHints = function () {
|
|
31824
|
+
|
|
31825
|
+
// nodejs / non-client-hints browsers
|
|
31826
|
+
if (!NAVIGATOR_UADATA) {
|
|
31827
|
+
return item
|
|
31828
|
+
.parseCH()
|
|
31829
|
+
.get();
|
|
31830
|
+
}
|
|
31831
|
+
|
|
31832
|
+
// browsers based on chromium 85+
|
|
31833
|
+
return NAVIGATOR_UADATA
|
|
31834
|
+
.getHighEntropyValues(CH_ALL_VALUES)
|
|
31835
|
+
.then(function (res) {
|
|
31836
|
+
return item
|
|
31837
|
+
.setCH(new UACHData(res, false))
|
|
31838
|
+
.parseCH()
|
|
31839
|
+
.get();
|
|
31840
|
+
});
|
|
31841
|
+
};
|
|
31842
|
+
|
|
31843
|
+
IData.prototype.withFeatureCheck = function () {
|
|
31844
|
+
return item.detectFeature().get();
|
|
31845
|
+
};
|
|
31846
|
+
|
|
31847
|
+
if (itemType != RESULT) {
|
|
31848
|
+
IData.prototype.is = function (strToCheck) {
|
|
31849
|
+
var is = false;
|
|
31850
|
+
for (var i in this) {
|
|
31851
|
+
if (this.hasOwnProperty(i) && !has(is_ignoreProps, i) && lowerize(is_ignoreRgx ? strip(is_ignoreRgx, this[i]) : this[i]) == lowerize(is_ignoreRgx ? strip(is_ignoreRgx, strToCheck) : strToCheck)) {
|
|
31852
|
+
is = true;
|
|
31853
|
+
if (strToCheck != TYPEOF.UNDEFINED) break;
|
|
31854
|
+
} else if (strToCheck == TYPEOF.UNDEFINED && is) {
|
|
31855
|
+
is = !is;
|
|
31856
|
+
break;
|
|
31857
|
+
}
|
|
31858
|
+
}
|
|
31859
|
+
return is;
|
|
31860
|
+
};
|
|
31861
|
+
IData.prototype.toString = function () {
|
|
31862
|
+
var str = EMPTY;
|
|
31863
|
+
for (var i in toString_props) {
|
|
31864
|
+
if (typeof(this[toString_props[i]]) !== TYPEOF.UNDEFINED) {
|
|
31865
|
+
str += (str ? ' ' : EMPTY) + this[toString_props[i]];
|
|
31866
|
+
}
|
|
31867
|
+
}
|
|
31868
|
+
return str || TYPEOF.UNDEFINED;
|
|
31869
|
+
};
|
|
31870
|
+
}
|
|
31871
|
+
|
|
31872
|
+
if (!NAVIGATOR_UADATA) {
|
|
31873
|
+
IData.prototype.then = function (cb) {
|
|
31874
|
+
var that = this;
|
|
31875
|
+
var IDataResolve = function () {
|
|
31876
|
+
for (var prop in that) {
|
|
31877
|
+
if (that.hasOwnProperty(prop)) {
|
|
31878
|
+
this[prop] = that[prop];
|
|
31879
|
+
}
|
|
31880
|
+
}
|
|
31881
|
+
};
|
|
31882
|
+
IDataResolve.prototype = {
|
|
31883
|
+
is : IData.prototype.is,
|
|
31884
|
+
toString : IData.prototype.toString
|
|
31885
|
+
};
|
|
31886
|
+
var resolveData = new IDataResolve();
|
|
31887
|
+
cb(resolveData);
|
|
31888
|
+
return resolveData;
|
|
31889
|
+
};
|
|
31890
|
+
}
|
|
31891
|
+
|
|
31892
|
+
return new IData();
|
|
31893
|
+
};
|
|
31894
|
+
|
|
31895
|
+
/////////////////
|
|
31896
|
+
// Constructor
|
|
31897
|
+
////////////////
|
|
31898
|
+
|
|
31899
|
+
function UACHData (uach, isHttpUACH) {
|
|
31900
|
+
uach = uach || {};
|
|
31901
|
+
setProps.call(this, CH_ALL_VALUES);
|
|
31902
|
+
if (isHttpUACH) {
|
|
31903
|
+
setProps.call(this, [
|
|
31904
|
+
[BRANDS, itemListToArray(uach[CH])],
|
|
31905
|
+
[FULLVERLIST, itemListToArray(uach[CH_FULL_VER_LIST])],
|
|
31906
|
+
[MOBILE, /\?1/.test(uach[CH_MOBILE])],
|
|
31907
|
+
[MODEL, stripQuotes(uach[CH_MODEL])],
|
|
31908
|
+
[PLATFORM, stripQuotes(uach[CH_PLATFORM])],
|
|
31909
|
+
[PLATFORMVER, stripQuotes(uach[CH_PLATFORM_VER])],
|
|
31910
|
+
[ARCHITECTURE, stripQuotes(uach[CH_ARCH])],
|
|
31911
|
+
[FORMFACTORS, itemListToArray(uach[CH_FORM_FACTORS])],
|
|
31912
|
+
[BITNESS, stripQuotes(uach[CH_BITNESS])]
|
|
31913
|
+
]);
|
|
31914
|
+
} else {
|
|
31915
|
+
for (var prop in uach) {
|
|
31916
|
+
if(this.hasOwnProperty(prop) && typeof uach[prop] !== TYPEOF.UNDEFINED) this[prop] = uach[prop];
|
|
31917
|
+
}
|
|
31918
|
+
}
|
|
31919
|
+
}
|
|
31920
|
+
|
|
31921
|
+
function UAItem (itemType, ua, rgxMap, uaCH) {
|
|
31922
|
+
|
|
31923
|
+
this.get = function (prop) {
|
|
31924
|
+
if (!prop) return this.data;
|
|
31925
|
+
return this.data.hasOwnProperty(prop) ? this.data[prop] : undefined;
|
|
31926
|
+
};
|
|
31927
|
+
|
|
31928
|
+
this.set = function (prop, val) {
|
|
31929
|
+
this.data[prop] = val;
|
|
31930
|
+
return this;
|
|
31931
|
+
};
|
|
31932
|
+
|
|
31933
|
+
this.setCH = function (ch) {
|
|
31934
|
+
this.uaCH = ch;
|
|
31935
|
+
return this;
|
|
31936
|
+
};
|
|
31937
|
+
|
|
31938
|
+
this.detectFeature = function () {
|
|
31939
|
+
if (NAVIGATOR && NAVIGATOR.userAgent == this.ua) {
|
|
31940
|
+
switch (this.itemType) {
|
|
31941
|
+
case BROWSER:
|
|
31942
|
+
// Brave-specific detection
|
|
31943
|
+
if (NAVIGATOR.brave && typeof NAVIGATOR.brave.isBrave == TYPEOF.FUNCTION) {
|
|
31944
|
+
this.set(NAME, 'Brave');
|
|
31945
|
+
}
|
|
31946
|
+
break;
|
|
31947
|
+
case DEVICE:
|
|
31948
|
+
// Chrome-specific detection: check for 'mobile' value of navigator.userAgentData
|
|
31949
|
+
if (!this.get(TYPE) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[MOBILE]) {
|
|
31950
|
+
this.set(TYPE, MOBILE);
|
|
31951
|
+
}
|
|
31952
|
+
// iPadOS-specific detection: identified as Mac, but has some iOS-only properties
|
|
31953
|
+
if (this.get(MODEL) == 'Macintosh' && NAVIGATOR && typeof NAVIGATOR.standalone !== TYPEOF.UNDEFINED && NAVIGATOR.maxTouchPoints && NAVIGATOR.maxTouchPoints > 2) {
|
|
31954
|
+
this.set(MODEL, 'iPad')
|
|
31955
|
+
.set(TYPE, TABLET);
|
|
31956
|
+
}
|
|
31957
|
+
break;
|
|
31958
|
+
case OS:
|
|
31959
|
+
// Chrome-specific detection: check for 'platform' value of navigator.userAgentData
|
|
31960
|
+
if (!this.get(NAME) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[PLATFORM]) {
|
|
31961
|
+
this.set(NAME, NAVIGATOR_UADATA[PLATFORM]);
|
|
31962
|
+
}
|
|
31963
|
+
break;
|
|
31964
|
+
case RESULT:
|
|
31965
|
+
var data = this.data;
|
|
31966
|
+
var detect = function (itemType) {
|
|
31967
|
+
return data[itemType]
|
|
31968
|
+
.getItem()
|
|
31969
|
+
.detectFeature()
|
|
31970
|
+
.get();
|
|
31971
|
+
};
|
|
31972
|
+
this.set(BROWSER, detect(BROWSER))
|
|
31973
|
+
.set(CPU, detect(CPU))
|
|
31974
|
+
.set(DEVICE, detect(DEVICE))
|
|
31975
|
+
.set(ENGINE, detect(ENGINE))
|
|
31976
|
+
.set(OS, detect(OS));
|
|
31977
|
+
}
|
|
31978
|
+
}
|
|
31979
|
+
return this;
|
|
31980
|
+
};
|
|
31981
|
+
|
|
31982
|
+
this.parseUA = function () {
|
|
31983
|
+
if (this.itemType != RESULT) {
|
|
31984
|
+
rgxMapper.call(this.data, this.ua, this.rgxMap);
|
|
31985
|
+
}
|
|
31986
|
+
switch (this.itemType) {
|
|
31987
|
+
case BROWSER:
|
|
31988
|
+
this.set(MAJOR, majorize(this.get(VERSION)));
|
|
31989
|
+
break;
|
|
31990
|
+
case OS:
|
|
31991
|
+
if (this.get(NAME) == 'iOS' && this.get(VERSION) == '18.6') {
|
|
31992
|
+
// Based on the assumption that iOS version is tightly coupled with Safari version
|
|
31993
|
+
var realVersion = /\) Version\/([\d\.]+)/.exec(this.ua); // Get Safari version
|
|
31994
|
+
if (realVersion && parseInt(realVersion[1].substring(0,2), 10) >= 26) {
|
|
31995
|
+
this.set(VERSION, realVersion[1]); // Set as iOS version
|
|
31996
|
+
}
|
|
31997
|
+
}
|
|
31998
|
+
break;
|
|
31999
|
+
}
|
|
32000
|
+
return this;
|
|
32001
|
+
};
|
|
32002
|
+
|
|
32003
|
+
this.parseCH = function () {
|
|
32004
|
+
var uaCH = this.uaCH,
|
|
32005
|
+
rgxMap = this.rgxMap;
|
|
32006
|
+
|
|
32007
|
+
switch (this.itemType) {
|
|
32008
|
+
case BROWSER:
|
|
32009
|
+
case ENGINE:
|
|
32010
|
+
var brands = uaCH[FULLVERLIST] || uaCH[BRANDS], prevName;
|
|
32011
|
+
if (brands) {
|
|
32012
|
+
for (var i=0; i<brands.length; i++) {
|
|
32013
|
+
var brandName = brands[i].brand || brands[i],
|
|
32014
|
+
brandVersion = brands[i].version;
|
|
32015
|
+
if (this.itemType == BROWSER &&
|
|
32016
|
+
!/not.a.brand/i.test(brandName) &&
|
|
32017
|
+
(!prevName ||
|
|
32018
|
+
(/Chrom/.test(prevName) && brandName != CHROMIUM) ||
|
|
32019
|
+
(prevName == EDGE && /WebView2/.test(brandName))
|
|
32020
|
+
)) {
|
|
32021
|
+
brandName = strMapper(brandName, browserHintsMap);
|
|
32022
|
+
prevName = this.get(NAME);
|
|
32023
|
+
if (!(prevName && !/Chrom/.test(prevName) && /Chrom/.test(brandName))) {
|
|
32024
|
+
this.set(NAME, brandName)
|
|
32025
|
+
.set(VERSION, brandVersion)
|
|
32026
|
+
.set(MAJOR, majorize(brandVersion));
|
|
32027
|
+
}
|
|
32028
|
+
prevName = brandName;
|
|
32029
|
+
}
|
|
32030
|
+
if (this.itemType == ENGINE && brandName == CHROMIUM) {
|
|
32031
|
+
this.set(VERSION, brandVersion);
|
|
32032
|
+
}
|
|
32033
|
+
}
|
|
32034
|
+
}
|
|
32035
|
+
break;
|
|
32036
|
+
case CPU:
|
|
32037
|
+
var archName = uaCH[ARCHITECTURE];
|
|
32038
|
+
if (archName) {
|
|
32039
|
+
if (archName && uaCH[BITNESS] == '64') archName += '64';
|
|
32040
|
+
rgxMapper.call(this.data, archName + ';', rgxMap);
|
|
32041
|
+
}
|
|
32042
|
+
break;
|
|
32043
|
+
case DEVICE:
|
|
32044
|
+
if (uaCH[MOBILE]) {
|
|
32045
|
+
this.set(TYPE, MOBILE);
|
|
32046
|
+
}
|
|
32047
|
+
if (uaCH[MODEL]) {
|
|
32048
|
+
this.set(MODEL, uaCH[MODEL]);
|
|
32049
|
+
if (!this.get(TYPE) || !this.get(VENDOR)) {
|
|
32050
|
+
var reParse = {};
|
|
32051
|
+
rgxMapper.call(reParse, 'droid 9; ' + uaCH[MODEL] + ')', rgxMap);
|
|
32052
|
+
if (!this.get(TYPE) && !!reParse.type) {
|
|
32053
|
+
this.set(TYPE, reParse.type);
|
|
32054
|
+
}
|
|
32055
|
+
if (!this.get(VENDOR) && !!reParse.vendor) {
|
|
32056
|
+
this.set(VENDOR, reParse.vendor);
|
|
32057
|
+
}
|
|
32058
|
+
}
|
|
32059
|
+
}
|
|
32060
|
+
if (uaCH[FORMFACTORS]) {
|
|
32061
|
+
var ff;
|
|
32062
|
+
if (typeof uaCH[FORMFACTORS] !== 'string') {
|
|
32063
|
+
var idx = 0;
|
|
32064
|
+
while (!ff && idx < uaCH[FORMFACTORS].length) {
|
|
32065
|
+
ff = strMapper(uaCH[FORMFACTORS][idx++], formFactorsMap);
|
|
32066
|
+
}
|
|
32067
|
+
} else {
|
|
32068
|
+
ff = strMapper(uaCH[FORMFACTORS], formFactorsMap);
|
|
32069
|
+
}
|
|
32070
|
+
this.set(TYPE, ff);
|
|
32071
|
+
}
|
|
32072
|
+
break;
|
|
32073
|
+
case OS:
|
|
32074
|
+
var osName = uaCH[PLATFORM];
|
|
32075
|
+
if(osName) {
|
|
32076
|
+
var osVersion = uaCH[PLATFORMVER];
|
|
32077
|
+
if (osName == WINDOWS) osVersion = (parseInt(majorize(osVersion), 10) >= 13 ? '11' : '10');
|
|
32078
|
+
this.set(NAME, osName)
|
|
32079
|
+
.set(VERSION, osVersion);
|
|
32080
|
+
}
|
|
32081
|
+
// Xbox-Specific Detection
|
|
32082
|
+
if (this.get(NAME) == WINDOWS && uaCH[MODEL] == 'Xbox') {
|
|
32083
|
+
this.set(NAME, 'Xbox')
|
|
32084
|
+
.set(VERSION, undefined);
|
|
32085
|
+
}
|
|
32086
|
+
break;
|
|
32087
|
+
case RESULT:
|
|
32088
|
+
var data = this.data;
|
|
32089
|
+
var parse = function (itemType) {
|
|
32090
|
+
return data[itemType]
|
|
32091
|
+
.getItem()
|
|
32092
|
+
.setCH(uaCH)
|
|
32093
|
+
.parseCH()
|
|
32094
|
+
.get();
|
|
32095
|
+
};
|
|
32096
|
+
this.set(BROWSER, parse(BROWSER))
|
|
32097
|
+
.set(CPU, parse(CPU))
|
|
32098
|
+
.set(DEVICE, parse(DEVICE))
|
|
32099
|
+
.set(ENGINE, parse(ENGINE))
|
|
32100
|
+
.set(OS, parse(OS));
|
|
32101
|
+
}
|
|
32102
|
+
return this;
|
|
32103
|
+
};
|
|
32104
|
+
|
|
32105
|
+
setProps.call(this, [
|
|
32106
|
+
['itemType', itemType],
|
|
32107
|
+
['ua', ua],
|
|
32108
|
+
['uaCH', uaCH],
|
|
32109
|
+
['rgxMap', rgxMap],
|
|
32110
|
+
['data', createIData(this, itemType)]
|
|
32111
|
+
]);
|
|
32112
|
+
|
|
32113
|
+
return this;
|
|
32114
|
+
}
|
|
32115
|
+
|
|
32116
|
+
function UAParser (ua, extensions, headers) {
|
|
32117
|
+
|
|
32118
|
+
if (typeof ua === TYPEOF.OBJECT) {
|
|
32119
|
+
if (isExtensions(ua, true)) {
|
|
32120
|
+
if (typeof extensions === TYPEOF.OBJECT) {
|
|
32121
|
+
headers = extensions; // case UAParser(extensions, headers)
|
|
32122
|
+
}
|
|
32123
|
+
extensions = ua; // case UAParser(extensions)
|
|
32124
|
+
} else {
|
|
32125
|
+
headers = ua; // case UAParser(headers)
|
|
32126
|
+
extensions = undefined;
|
|
32127
|
+
}
|
|
32128
|
+
ua = undefined;
|
|
32129
|
+
} else if (typeof ua === TYPEOF.STRING && !isExtensions(extensions, true)) {
|
|
32130
|
+
headers = extensions; // case UAParser(ua, headers)
|
|
32131
|
+
extensions = undefined;
|
|
32132
|
+
}
|
|
32133
|
+
|
|
32134
|
+
if (headers) {
|
|
32135
|
+
if (typeof headers.append === TYPEOF.FUNCTION) {
|
|
32136
|
+
// Convert Headers object into a plain object
|
|
32137
|
+
var kv = {};
|
|
32138
|
+
headers.forEach(function (v, k) { kv[String(k).toLowerCase()] = v; });
|
|
32139
|
+
headers = kv;
|
|
32140
|
+
} else {
|
|
32141
|
+
// Normalize headers field name into lowercase
|
|
32142
|
+
var normalized = {};
|
|
32143
|
+
for (var header in headers) {
|
|
32144
|
+
if (headers.hasOwnProperty(header)) {
|
|
32145
|
+
normalized[String(header).toLowerCase()] = headers[header];
|
|
32146
|
+
}
|
|
32147
|
+
}
|
|
32148
|
+
headers = normalized;
|
|
32149
|
+
}
|
|
32150
|
+
}
|
|
32151
|
+
|
|
32152
|
+
if (!(this instanceof UAParser)) {
|
|
32153
|
+
return new UAParser(ua, extensions, headers).getResult();
|
|
32154
|
+
}
|
|
32155
|
+
|
|
32156
|
+
var userAgent = typeof ua === TYPEOF.STRING ? ua : // Passed user-agent string
|
|
32157
|
+
(headers && headers[USER_AGENT] ? headers[USER_AGENT] : // User-Agent from passed headers
|
|
32158
|
+
((NAVIGATOR && NAVIGATOR.userAgent) ? NAVIGATOR.userAgent : // navigator.userAgent
|
|
32159
|
+
EMPTY)), // empty string
|
|
32160
|
+
|
|
32161
|
+
httpUACH = new UACHData(headers, true),
|
|
32162
|
+
regexMap = extensions ?
|
|
32163
|
+
extend(defaultRegexes, extensions) :
|
|
32164
|
+
defaultRegexes,
|
|
32165
|
+
|
|
32166
|
+
createItemFunc = function (itemType) {
|
|
32167
|
+
if (itemType == RESULT) {
|
|
32168
|
+
return function () {
|
|
32169
|
+
return new UAItem(itemType, userAgent, regexMap, httpUACH)
|
|
32170
|
+
.set('ua', userAgent)
|
|
32171
|
+
.set(BROWSER, this.getBrowser())
|
|
32172
|
+
.set(CPU, this.getCPU())
|
|
32173
|
+
.set(DEVICE, this.getDevice())
|
|
32174
|
+
.set(ENGINE, this.getEngine())
|
|
32175
|
+
.set(OS, this.getOS())
|
|
32176
|
+
.get();
|
|
32177
|
+
};
|
|
32178
|
+
} else {
|
|
32179
|
+
return function () {
|
|
32180
|
+
return new UAItem(itemType, userAgent, regexMap[itemType], httpUACH)
|
|
32181
|
+
.parseUA()
|
|
32182
|
+
.get();
|
|
32183
|
+
};
|
|
32184
|
+
}
|
|
32185
|
+
};
|
|
32186
|
+
|
|
32187
|
+
// public methods
|
|
32188
|
+
setProps.call(this, [
|
|
32189
|
+
['getBrowser', createItemFunc(BROWSER)],
|
|
32190
|
+
['getCPU', createItemFunc(CPU)],
|
|
32191
|
+
['getDevice', createItemFunc(DEVICE)],
|
|
32192
|
+
['getEngine', createItemFunc(ENGINE)],
|
|
32193
|
+
['getOS', createItemFunc(OS)],
|
|
32194
|
+
['getResult', createItemFunc(RESULT)],
|
|
32195
|
+
['getUA', function () { return userAgent; }],
|
|
32196
|
+
['setUA', function (ua) {
|
|
32197
|
+
if (isString(ua)) userAgent = trim(ua, UA_MAX_LENGTH);
|
|
32198
|
+
return this;
|
|
32199
|
+
}]
|
|
32200
|
+
])
|
|
32201
|
+
.setUA(userAgent);
|
|
32202
|
+
|
|
32203
|
+
return this;
|
|
32204
|
+
}
|
|
32205
|
+
|
|
32206
|
+
UAParser.VERSION = LIBVERSION;
|
|
32207
|
+
UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR, TYPE]);
|
|
32208
|
+
UAParser.CPU = enumerize([ARCHITECTURE]);
|
|
32209
|
+
UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);
|
|
32210
|
+
UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);
|
|
32211
|
+
|
|
32212
|
+
|
|
30725
32213
|
// EXTERNAL MODULE: ./node_modules/crypto-js/index.js
|
|
30726
32214
|
var crypto_js = __webpack_require__(1396);
|
|
30727
32215
|
var crypto_js_default = /*#__PURE__*/__webpack_require__.n(crypto_js);
|
|
@@ -30729,6 +32217,7 @@ var crypto_js_default = /*#__PURE__*/__webpack_require__.n(crypto_js);
|
|
|
30729
32217
|
|
|
30730
32218
|
|
|
30731
32219
|
|
|
32220
|
+
|
|
30732
32221
|
/**
|
|
30733
32222
|
*
|
|
30734
32223
|
* @returns 获取登录验证码图片
|
|
@@ -30834,9 +32323,16 @@ const loginAccount = async (data, appid) => {
|
|
|
30834
32323
|
//登录平台成功
|
|
30835
32324
|
if (code == 10110004) {
|
|
30836
32325
|
let id = response.id;
|
|
32326
|
+
// 初始化解析器
|
|
32327
|
+
const parser = new UAParser();
|
|
32328
|
+
// 获取浏览器信息
|
|
32329
|
+
const browser = parser.getBrowser();
|
|
32330
|
+
let timestamp = new Date().getTime();
|
|
32331
|
+
let clientID = browser.name + "_" + browser.version + "_" + timestamp;
|
|
30837
32332
|
window.sessionStorage.setItem("iportal_login_user_id", id);
|
|
30838
32333
|
window.sessionStorage.setItem("iportal_group_id", data.groupid);
|
|
30839
32334
|
window.sessionStorage.setItem("iportal_login_user_key", old_key);
|
|
32335
|
+
window.sessionStorage.setItem("iportal_client_id", clientID);
|
|
30840
32336
|
return {
|
|
30841
32337
|
code: code
|
|
30842
32338
|
};
|
|
@@ -31070,7 +32566,7 @@ class ChatClientMgr {
|
|
|
31070
32566
|
this.singleChatID = params.singleChatID || "";
|
|
31071
32567
|
this.customParams = params.customParams || {};
|
|
31072
32568
|
this.chartOrigin = params.chartOrigin;
|
|
31073
|
-
console.log("ChatClientMgr init:", this.actionKey);
|
|
32569
|
+
// console.log("ChatClientMgr init:", this.actionKey);
|
|
31074
32570
|
}
|
|
31075
32571
|
makeKey(key) {
|
|
31076
32572
|
return `${key}-${this.actionKey}`;
|