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.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}`;