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