bw-frontend-sdk 1.2.3 → 1.2.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/axios/index.js","../axios-config.js","../node_modules/ua-parser-js/src/main/ua-parser.mjs","../utils.js","../reporter.js","../errorTracker.js","../eventTracker.js","../performanceTracker.js","../userBehaviorTracker.js","../exposureTracker.js","../thirdPartyIntegrator.js","../configManager.js","../index.js"],"sourcesContent":["'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n \n try {\n return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)){\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n utils.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype;\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request, fetchOptions);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.11.0\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n} = axios;\n\nexport {\n axios as default,\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n}\n","/* eslint-disable */\n// 简化的axios配置,避免Node.js模块依赖问题\nimport axios from 'axios'\n\n// 创建axios实例,使用浏览器兼容的配置\nconst axiosInstance = axios.create({\n timeout: 10000,\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n})\n\n// 请求拦截器\naxiosInstance.interceptors.request.use(\n (config) => {\n return config\n },\n (error) => {\n return Promise.reject(error)\n }\n)\n\n// 响应拦截器\naxiosInstance.interceptors.response.use(\n (response) => {\n return response\n },\n (error) => {\n return Promise.reject(error)\n }\n)\n\nexport default axiosInstance ","// Generated ESM version of ua-parser-js\n// DO NOT EDIT THIS FILE!\n// Source: /src/main/ua-parser.js\n\n/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v2.0.6\n Copyright © 2012-2025 Faisal Salman <f@faisalman.com>\n AGPLv3 License *//*\n Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n Supports browser & node.js environment. \n Demo : https://uaparser.dev\n Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n/* jshint esversion: 6 */ \n/* globals window */\n\n\n \n //////////////\n // Constants\n /////////////\n\n var LIBVERSION = '2.0.6',\n UA_MAX_LENGTH = 500,\n USER_AGENT = 'user-agent',\n EMPTY = '',\n UNKNOWN = '?',\n TYPEOF = {\n FUNCTION : 'function',\n OBJECT : 'object',\n STRING : 'string',\n UNDEFINED : 'undefined'\n },\n\n // properties\n BROWSER = 'browser',\n CPU = 'cpu',\n DEVICE = 'device',\n ENGINE = 'engine',\n OS = 'os',\n RESULT = 'result',\n\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n MAJOR = 'major',\n MODEL = 'model',\n\n // device types\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n XR = 'xr',\n EMBEDDED = 'embedded',\n\n // browser types\n INAPP = 'inapp',\n\n // client hints\n BRANDS = 'brands',\n FORMFACTORS = 'formFactors',\n FULLVERLIST = 'fullVersionList',\n PLATFORM = 'platform',\n PLATFORMVER = 'platformVersion',\n BITNESS = 'bitness',\n CH = 'sec-ch-ua',\n CH_FULL_VER_LIST= CH + '-full-version-list',\n CH_ARCH = CH + '-arch',\n CH_BITNESS = CH + '-' + BITNESS,\n CH_FORM_FACTORS = CH + '-form-factors',\n CH_MOBILE = CH + '-' + MOBILE,\n CH_MODEL = CH + '-' + MODEL,\n CH_PLATFORM = CH + '-' + PLATFORM,\n CH_PLATFORM_VER = CH_PLATFORM + '-version',\n CH_ALL_VALUES = [BRANDS, FULLVERLIST, MOBILE, MODEL, PLATFORM, PLATFORMVER, ARCHITECTURE, FORMFACTORS, BITNESS],\n\n // device vendors\n AMAZON = 'Amazon',\n APPLE = 'Apple',\n ASUS = 'ASUS',\n BLACKBERRY = 'BlackBerry',\n GOOGLE = 'Google',\n HUAWEI = 'Huawei',\n LENOVO = 'Lenovo',\n HONOR = 'Honor',\n LG = 'LG',\n MICROSOFT = 'Microsoft',\n MOTOROLA = 'Motorola',\n NVIDIA = 'Nvidia',\n ONEPLUS = 'OnePlus',\n OPPO = 'OPPO',\n SAMSUNG = 'Samsung',\n SHARP = 'Sharp',\n SONY = 'Sony',\n XIAOMI = 'Xiaomi',\n ZEBRA = 'Zebra',\n\n // browsers\n CHROME = 'Chrome',\n CHROMIUM = 'Chromium',\n CHROMECAST = 'Chromecast',\n EDGE = 'Edge',\n FIREFOX = 'Firefox',\n OPERA = 'Opera',\n FACEBOOK = 'Facebook',\n SOGOU = 'Sogou',\n\n PREFIX_MOBILE = 'Mobile ',\n SUFFIX_BROWSER = ' Browser',\n\n // os\n WINDOWS = 'Windows';\n \n var isWindow = typeof window !== TYPEOF.UNDEFINED,\n NAVIGATOR = (isWindow && window.navigator) ? \n window.navigator : \n undefined,\n NAVIGATOR_UADATA = (NAVIGATOR && NAVIGATOR.userAgentData) ? \n NAVIGATOR.userAgentData : \n undefined;\n\n ///////////\n // Helper\n //////////\n\n var extend = function (defaultRgx, extensions) {\n var mergedRgx = {};\n var extraRgx = extensions;\n if (!isExtensions(extensions)) {\n extraRgx = {};\n for (var i in extensions) {\n for (var j in extensions[i]) {\n extraRgx[j] = extensions[i][j].concat(extraRgx[j] ? extraRgx[j] : []);\n }\n }\n }\n for (var k in defaultRgx) {\n mergedRgx[k] = extraRgx[k] && extraRgx[k].length % 2 === 0 ? extraRgx[k].concat(defaultRgx[k]) : defaultRgx[k];\n }\n return mergedRgx;\n },\n enumerize = function (arr) {\n var enums = {};\n for (var i=0; i<arr.length; i++) {\n enums[arr[i].toUpperCase()] = arr[i];\n }\n return enums;\n },\n has = function (str1, str2) {\n if (typeof str1 === TYPEOF.OBJECT && str1.length > 0) {\n for (var i in str1) {\n if (lowerize(str2) == lowerize(str1[i])) return true;\n }\n return false;\n }\n return isString(str1) ? lowerize(str2) == lowerize(str1) : false;\n },\n isExtensions = function (obj, deep) {\n for (var prop in obj) {\n return /^(browser|cpu|device|engine|os)$/.test(prop) || (deep ? isExtensions(obj[prop]) : false);\n }\n },\n isString = function (val) {\n return typeof val === TYPEOF.STRING;\n },\n itemListToArray = function (header) {\n if (!header) return undefined;\n var arr = [];\n var tokens = strip(/\\\\?\\\"/g, header).split(',');\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].indexOf(';') > -1) {\n var token = trim(tokens[i]).split(';v=');\n arr[i] = { brand : token[0], version : token[1] };\n } else {\n arr[i] = trim(tokens[i]);\n }\n }\n return arr;\n },\n lowerize = function (str) {\n return isString(str) ? str.toLowerCase() : str;\n },\n majorize = function (version) {\n return isString(version) ? strip(/[^\\d\\.]/g, version).split('.')[0] : undefined;\n },\n setProps = function (arr) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n var propName = arr[i];\n if (typeof propName == TYPEOF.OBJECT && propName.length == 2) {\n this[propName[0]] = propName[1];\n } else {\n this[propName] = undefined;\n }\n }\n return this;\n },\n strip = function (pattern, str) {\n return isString(str) ? str.replace(pattern, EMPTY) : str;\n },\n stripQuotes = function (str) {\n return strip(/\\\\?\\\"/g, str); \n },\n trim = function (str, len) {\n str = strip(/^\\s\\s*/, String(str));\n return typeof len === TYPEOF.UNDEFINED ? str : str.substring(0, len);\n };\n\n ///////////////\n // Map helper\n //////////////\n\n var rgxMapper = function (ua, arrays) {\n\n if(!ua || !arrays) return;\n\n var i = 0, j, k, p, q, matches, match;\n\n // loop through all regexes maps\n while (i < arrays.length && !matches) {\n\n var regex = arrays[i], // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n j = k = 0;\n\n // try matching uastring with regexes\n while (j < regex.length && !matches) {\n\n if (!regex[j]) { break; }\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n // check if given property is actually array\n if (typeof q === TYPEOF.OBJECT && q.length > 0) {\n if (q.length === 2) {\n if (typeof q[1] == TYPEOF.FUNCTION) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length >= 3) {\n // Check whether q[1] FUNCTION or REGEX\n if (typeof q[1] === TYPEOF.FUNCTION && !(q[1].exec && q[1].test)) {\n if (q.length > 3) {\n this[q[0]] = match ? q[1].apply(this, q.slice(2)) : undefined;\n } else {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n }\n } else {\n if (q.length == 3) {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n } else if (q.length == 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n } else if (q.length > 4) {\n this[q[0]] = match ? q[3].apply(this, [match.replace(q[1], q[2])].concat(q.slice(4))) : undefined;\n }\n }\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n strMapper = function (str, map) {\n\n for (var i in map) {\n // check if current value is array\n if (typeof map[i] === TYPEOF.OBJECT && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return map.hasOwnProperty('*') ? map['*'] : str;\n };\n\n ///////////////\n // String map\n //////////////\n\n var windowsVersionMap = {\n 'ME' : '4.90',\n 'NT 3.51': '3.51',\n 'NT 4.0': '4.0',\n '2000' : ['5.0', '5.01'],\n 'XP' : ['5.1', '5.2'],\n 'Vista' : '6.0',\n '7' : '6.1',\n '8' : '6.2',\n '8.1' : '6.3',\n '10' : ['6.4', '10.0'],\n 'NT' : ''\n },\n \n formFactorsMap = {\n 'embedded' : 'Automotive',\n 'mobile' : 'Mobile',\n 'tablet' : ['Tablet', 'EInk'],\n 'smarttv' : 'TV',\n 'wearable' : 'Watch',\n 'xr' : ['VR', 'XR'],\n '?' : ['Desktop', 'Unknown'],\n '*' : undefined\n },\n\n browserHintsMap = {\n 'Chrome' : 'Google Chrome',\n 'Edge' : 'Microsoft Edge',\n 'Edge WebView2' : 'Microsoft Edge WebView2',\n 'Chrome WebView': 'Android WebView',\n 'Chrome Headless':'HeadlessChrome',\n 'Huawei Browser': 'HuaweiBrowser',\n 'MIUI Browser' : 'Miui Browser',\n 'Opera Mobi' : 'OperaMobile',\n 'Yandex' : 'YaBrowser'\n };\n\n //////////////\n // Regex map\n /////////////\n\n var defaultRegexes = {\n\n browser : [[\n\n // Most common regardless engine\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, PREFIX_MOBILE + 'Chrome']], [\n /webview.+edge\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, EDGE+' WebView']], [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i \n ], [VERSION, [NAME, 'Edge']], [\n\n // Presto based\n /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n ], [NAME, VERSION], [\n /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, OPERA+' Mini']], [\n /\\bop(?:rg)?x\\/([\\w\\.]+)/i // Opera GX\n ], [VERSION, [NAME, OPERA+' GX']], [\n /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, OPERA]], [\n\n // Mixed\n /\\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\\/ ]?([\\w\\.]+)/i // Baidu\n ], [VERSION, [NAME, 'Baidu']], [\n /\\b(?:mxbrowser|mxios|myie2)\\/?([-\\w\\.]*)\\b/i // Maxthon\n ], [VERSION, [NAME, 'Maxthon']], [\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\\/ ]?([\\w\\.]*)/i, \n // Lunascape/Maxthon/Netfront/Jasmine/Blazer/Sleipnir\n // Trident based\n /(avant|iemobile|slim(?:browser|boat|jet))[\\/ ]?([\\d\\.]*)/i, // Avant/IEMobile/SlimBrowser/SlimBoat/Slimjet\n /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n // Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon/LG Browser/Otter/qutebrowser/Dooble/Palemoon\n /(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,\n // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio/Dragon\n /(heytap|ovi|115|surf|qwant)browser\\/([\\d\\.]+)/i, // HeyTap/Ovi/115/Surf\n /(qwant)(?:ios|mobile)\\/([\\d\\.]+)/i, // Qwant\n /(ecosia|weibo)(?:__| \\w+@)([\\d\\.]+)/i // Ecosia/Weibo\n ], [NAME, VERSION], [\n /quark(?:pc)?\\/([-\\w\\.]+)/i // Quark\n ], [VERSION, [NAME, 'Quark']], [\n /\\bddg\\/([\\w\\.]+)/i // DuckDuckGo\n ], [VERSION, [NAME, 'DuckDuckGo']], [\n /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UCBrowser']], [\n /microm.+\\bqbcore\\/([\\w\\.]+)/i, // WeChat Desktop for Windows Built-in Browser\n /\\bqbcore\\/([\\w\\.]+).+microm/i,\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [\n /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [\n /ya(?:search)?browser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [\n /slbrowser\\/([\\w\\.]+)/i // Smart Lenovo Browser\n ], [VERSION, [NAME, 'Smart ' + LENOVO + SUFFIX_BROWSER]], [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure' + SUFFIX_BROWSER], VERSION], [\n /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, FIREFOX+' Focus']], [\n /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, OPERA+' Touch']], [\n /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, OPERA+' Coast']], [\n /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI' + SUFFIX_BROWSER]], [\n /fxios\\/([\\w\\.-]+)/i // Firefox for iOS\n ], [VERSION, [NAME, PREFIX_MOBILE + FIREFOX]], [\n /\\bqihoobrowser\\/?([\\w\\.]*)/i // 360\n ], [VERSION, [NAME, '360']], [\n /\\b(qq)\\/([\\w\\.]+)/i // QQ\n ], [[NAME, /(.+)/, '$1Browser'], VERSION], [\n /(oculus|sailfish|huawei|vivo|pico)browser\\/([\\w\\.]+)/i\n ], [[NAME, /(.+)/, '$1' + SUFFIX_BROWSER], VERSION], [ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser/PicoBrowser\n /samsungbrowser\\/([\\w\\.]+)/i // Samsung Internet\n ], [VERSION, [NAME, SAMSUNG + ' Internet']], [\n /metasr[\\/ ]?([\\d\\.]+)/i // Sogou Explorer\n ], [VERSION, [NAME, SOGOU + ' Explorer']], [\n /(sogou)mo\\w+\\/([\\d\\.]+)/i // Sogou Mobile\n ], [[NAME, SOGOU + ' Mobile'], VERSION], [\n /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n /m?(qqbrowser|2345(?=browser|chrome|explorer))\\w*[\\/ ]?v?([\\w\\.]+)/i // QQ/2345\n ], [NAME, VERSION], [\n /(lbbrowser|rekonq)/i // LieBao Browser/Rekonq\n ], [NAME], [\n /ome\\/([\\w\\.]+) \\w* ?(iron) saf/i, // Iron\n /ome\\/([\\w\\.]+).+qihu (360)[es]e/i // 360\n ], [VERSION, NAME], [\n\n // WebView\n /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n ], [[NAME, FACEBOOK], VERSION, [TYPE, INAPP]], [\n /(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i, // Kakao App\n /(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i, // Naver InApp\n /(daum)apps[\\/ ]([\\w\\.]+)/i, // Daum App\n /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(alipay)client\\/([\\w\\.]+)/i, // Alipay\n /(twitter)(?:and| f.+e\\/([\\w\\.]+))/i, // Twitter\n /(bing)(?:web|sapphire)\\/([\\w\\.]+)/i, // Bing\n /(instagram|snapchat|klarna)[\\/ ]([-\\w\\.]+)/i // Instagram/Snapchat/Klarna\n ], [NAME, VERSION, [TYPE, INAPP]], [\n /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA'], [TYPE, INAPP]], [\n /musical_ly(?:.+app_?version\\/|_)([\\w\\.]+)/i // TikTok\n ], [VERSION, [NAME, 'TikTok'], [TYPE, INAPP]], [\n /\\[(linkedin)app\\]/i // LinkedIn App for iOS & Android\n ], [NAME, [TYPE, INAPP]], [\n /(zalo(?:app)?)[\\/\\sa-z]*([\\w\\.-]+)/i // Zalo \n ], [[NAME, /(.+)/, 'Zalo'], VERSION, [TYPE, INAPP]], [\n\n /(chromium)[\\/ ]([-\\w\\.]+)/i // Chromium\n ], [NAME, VERSION], [\n\n /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n ], [VERSION, [NAME, CHROME+' Headless']], [\n\n /wv\\).+chrome\\/([\\w\\.]+).+edgw\\//i // Edge WebView2\n ], [VERSION, [NAME, EDGE+' WebView2']], [\n\n / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, CHROME+' WebView'], VERSION], [\n\n /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android' + SUFFIX_BROWSER]], [\n\n /chrome\\/([\\w\\.]+) mobile/i // Chrome Mobile\n ], [VERSION, [NAME, PREFIX_MOBILE + 'Chrome']], [\n\n /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /version\\/([\\w\\.\\,]+) .*mobile(?:\\/\\w+ | ?)safari/i // Safari Mobile\n ], [VERSION, [NAME, PREFIX_MOBILE + 'Safari']], [\n /iphone .*mobile(?:\\/\\w+ | ?)safari/i\n ], [[NAME, PREFIX_MOBILE + 'Safari']], [\n /version\\/([\\w\\.\\,]+) .*(safari)/i // Safari\n ], [VERSION, NAME], [\n /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, '1']], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(?:mobile|tablet);.*(firefox)\\/([\\w\\.-]+)/i // Firefox Mobile\n ], [[NAME, PREFIX_MOBILE + FIREFOX], VERSION], [\n /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /(wolvic|librewolf)\\/([\\w\\.]+)/i // Wolvic/LibreWolf\n ], [NAME, VERSION], [\n /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, FIREFOX+' Reality']], [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\\/ ]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror\n /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+(?= .+rv\\:.+gecko\\/\\d+)|[0-4][\\w\\.]+(?!.+compatible))/i, // Mozilla\n\n // Other\n /(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser/Ladybird\n /\\b(links) \\(([\\w\\.]+)/i // Links\n ], [NAME, [VERSION, /_/g, '.']], [\n \n /(cobalt)\\/([\\w\\.]+)/i // Cobalt\n ], [NAME, [VERSION, /[^\\d\\.]+./, EMPTY]]\n ],\n\n cpu : [[\n\n /\\b((amd|x|x86[-_]?|wow|win)64)\\b/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i, // IA32 (quicktime)\n /\\b((i[346]|x)86)(pc)?\\b/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [\n\n /\\b(aarch64|arm(v?[89]e?l?|_?64))\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [\n\n /\\b(arm(v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [\n\n // PocketPC mistakenly identified as PowerPC\n /( (ce|mobile); ppc;|\\/[\\w\\.]+arm\\b)/i\n ], [[ARCHITECTURE, 'arm']], [\n\n / sun4\\w[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n /\\b(avr32|ia64(?=;)|68k(?=\\))|\\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\\b|pa-risc)/i,\n /((ppc|powerpc)(64)?)( mac|;|\\))/i, // PowerPC\n /(?:osf1|[freopnt]{3,4}bsd) (alpha)/i // Alpha\n ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n /mc680.0/i\n ], [[ARCHITECTURE, '68k']], [\n /winnt.+\\[axp/i\n ], [[ARCHITECTURE, 'alpha']]\n ],\n\n device : [[\n\n //////////////////////////\n // MOBILES & TABLETS\n /////////////////////////\n\n // Samsung\n /\\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\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n /\\b((?:s[cgp]h|gt|sm)-(?![lr])\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,\n /samsung[- ]((?!sm-[lr]|browser)[-\\w]+)/i,\n /sec-(sgh\\w+)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n // Apple\n /(?:\\/|\\()(ip(?:hone|od)[\\w, ]*)[\\/\\);]/i // iPod/iPhone\n ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n /\\b(?:ios|apple\\w+)\\/.+[\\(\\/](ipad)/i, // iPad\n /\\b(ipad)[\\d,]*[;\\] ].+(mac |i(pad)?)os/i\n ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n /(macintosh);/i\n ], [MODEL, [VENDOR, APPLE]], [\n\n // Sharp\n /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [\n\n // Honor\n /\\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\\)|;)/i\n ], [MODEL, [VENDOR, HONOR], [TYPE, TABLET]], [\n /honor([-\\w ]+)[;\\)]/i\n ], [MODEL, [VENDOR, HONOR], [TYPE, MOBILE]], [\n\n // Huawei\n /\\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\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n /(?:huawei) ?([-\\w ]+)[;\\)]/i,\n /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][\\dc][adnt]?)\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n // Xiaomi\n /oid[^\\)]+; (2[\\dbc]{4}(182|283|rp\\w{2})[cgl]|m2105k81a?c)(?: bui|\\))/i,\n /\\b(?:xiao)?((?:red)?mi[-_ ]?pad[\\w- ]*)(?: bui|\\))/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n /\\b(poco[\\w ]+|m2\\d{3}j\\d\\d[a-z]{2})(?: bui|\\))/i, // Xiaomi POCO\n /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n /oid[^\\)]+; (m?[12][0-389][01]\\w{3,6}[c-y])( bui|; wv|\\))/i, // Xiaomi Redmi 'numeric' models\n /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note|max|cc)?[_ ]?(?:\\d{0,2}\\w?)[_ ]?(?:plus|se|lite|pro)?( 5g|lte)?)(?: bui|\\))/i, // Xiaomi Mi\n / ([\\w ]+) miui\\/v?\\d/i\n ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n\n // OnePlus\n /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,\n /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n ], [MODEL, [VENDOR, ONEPLUS], [TYPE, MOBILE]], [\n\n // OPPO\n /; (\\w+) bui.+ oppo/i,\n /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n ], [MODEL, [VENDOR, OPPO], [TYPE, MOBILE]], [\n /\\b(opd2(\\d{3}a?))(?: bui|\\))/i\n ], [MODEL, [VENDOR, strMapper, { 'OnePlus' : ['203', '304', '403', '404', '413', '415'], '*' : OPPO }], [TYPE, TABLET]], [\n\n // BLU\n /(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\\w\\+ ]*)(?: bui|\\))/i // Vivo series\n ], [MODEL, [VENDOR, 'BLU'], [TYPE, MOBILE]], [ \n\n // Vivo\n /; vivo (\\w+)(?: bui|\\))/i,\n /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n // Realme\n /\\b(rmx[1-3]\\d{3})(?: bui|;|\\))/i\n ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n // Lenovo\n /(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,\n /lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\\w- ]+?)|tb[\\w-]{6,7})( bui|;|\\)|\\/)/i\n ], [MODEL, [VENDOR, LENOVO], [TYPE, TABLET]], [ \n /lenovo[-_ ]?([-\\w ]+?)(?: bui|\\)|\\/)/i\n ], [MODEL, [VENDOR, LENOVO], [TYPE, MOBILE]], [\n\n // Motorola\n /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n /\\bmot(?:orola)?[- ]([\\w\\s]+)(\\)| bui)/i,\n /((?:moto(?! 360)[-\\w\\(\\) ]+|xt\\d{3,4}[cgkosw\\+]?[-\\d]*|nexus 6)(?= bui|\\)))/i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n // LG\n /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n /\\blg[-e;\\/ ]+(?!.*(?:browser|netcast|android tv|watch|webos))(\\w+)/i,\n /\\blg-?([\\d\\w]+) bui/i\n ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n // Nokia\n /(nokia) (t[12][01])/i\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n /(?:maemo|nokia).*(n900|lumia \\d+|rm-\\d+)/i,\n /nokia[-_ ]?(([-\\w\\. ]*?))( bui|\\)|;|\\/)/i\n ], [[MODEL, /_/g, ' '], [TYPE, MOBILE], [VENDOR, 'Nokia']], [\n\n // Google\n /(pixel (c|tablet))\\b/i // Google Pixel C/Tablet\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n // Google Pixel\n /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\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n /(google) (pixelbook( go)?)/i\n ], [VENDOR, MODEL], [\n\n // Sony\n /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\n ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n /sony tablet [ps]/i,\n /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi|aeo(?!bc)\\w\\w)( bui|\\))/i, // Kindle Fire without Silk / Echo Show\n /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n // BlackBerry\n /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n /(?:blackberry|\\(bb10;) (\\w+)/i\n ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n // Asus\n /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n // HTC\n /(nexus 9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n // TCL\n /tcl (xess p17aa)/i,\n /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\n ], [MODEL, [VENDOR, 'TCL'], [TYPE, TABLET]], [\n /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\n ], [MODEL, [VENDOR, 'TCL'], [TYPE, MOBILE]], [\n\n // itel\n /(itel) ((\\w+))/i\n ], [[VENDOR, lowerize], MODEL, [TYPE, strMapper, { 'tablet' : ['p10001l', 'w7001'], '*' : 'mobile' }]], [\n\n // Acer\n /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n // Meizu\n /droid.+; (m[1-5] note) bui/i,\n /\\bmz-([-\\w]{2,})/i\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n \n // Ulefone\n /; ((?:power )?armor(?:[\\w ]{0,8}))(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Ulefone'], [TYPE, MOBILE]], [\n\n // Energizer\n /; (energy ?\\w+)(?: bui|\\))/i,\n /; energizer ([\\w ]+)(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Energizer'], [TYPE, MOBILE]], [\n\n // Cat\n /; cat (b35);/i,\n /; (b15q?|s22 flip|s48c|s62 pro)(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Cat'], [TYPE, MOBILE]], [\n\n // Smartfren\n /((?:new )?andromax[\\w- ]+)(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Smartfren'], [TYPE, MOBILE]], [\n\n // Nothing\n /droid.+; (a(in)?(0(15|59|6[35])|142)p?)/i\n ], [MODEL, [VENDOR, 'Nothing'], [TYPE, MOBILE]], [\n\n // Archos\n /; (x67 5g|tikeasy \\w+|ac[1789]\\d\\w+)( b|\\))/i,\n /archos ?(5|gamepad2?|([\\w ]*[t1789]|hello) ?\\d+[\\w ]*)( b|\\))/i\n ], [MODEL, [VENDOR, 'Archos'], [TYPE, TABLET]], [\n /archos ([\\w ]+)( b|\\))/i,\n /; (ac[3-6]\\d\\w{2,8})( b|\\))/i \n ], [MODEL, [VENDOR, 'Archos'], [TYPE, MOBILE]], [\n\n // HMD\n /; (n159v)/i\n ], [MODEL, [VENDOR, 'HMD'], [TYPE, MOBILE]], [\n\n // MIXED\n /(imo) (tab \\w+)/i, // IMO\n /(infinix|tecno) (x1101b?|p904|dp(7c|8d|10a)( pro)?|p70[1-3]a?|p904|t1101)/i // Infinix XPad / Tecno\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|tecno|micromax|advan)[-_ ]?([-\\w]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Tecno/Micromax/Advan\n // BLU/HMD/IMO/Infinix/Lava/OnePlus/TCL/Wiko\n /; (blu|hmd|imo|infinix|lava|oneplus|tcl|wiko)[_ ]([\\w\\+ ]+?)(?: bui|\\)|; r)/i,\n /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n /(oppo) ?([\\w ]+) bui/i, // OPPO\n /(hisense) ([ehv][\\w ]+)\\)/i, // Hisense\n /droid[^;]+; (philips)[_ ]([sv-x][\\d]{3,4}[xz]?)/i // Philips\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /(kobo)\\s(ereader|touch)/i, // Kobo\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i // Kindle\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(surface duo)/i // Surface Duo\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n /((?:tegranote|shield t(?!.+d tv))[\\w- ]*?)(?: b|\\))/i // Nvidia Tablets\n ], [MODEL, [VENDOR, NVIDIA], [TYPE, TABLET]], [\n /(sprint) (\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n /droid.+; ([c6]+|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /(philips)[\\w ]+tv/i, // Philips\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n /(vizio)(?: |.+model\\/)(\\w+-\\w+)/i, // Vizio\n /tcast.+(lg)e?. ([-\\w]+)/i // LG SmartTV\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i\n ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n /(apple) ?tv/i // Apple TV\n ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n /crkey.*devicetype\\/chromecast/i // Google Chromecast Third Generation\n ], [[MODEL, CHROMECAST+' Third Generation'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /crkey.*devicetype\\/([^/]*)/i // Google Chromecast with specific device type\n ], [[MODEL, /^/, 'Chromecast '], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /fuchsia.*crkey/i // Google Chromecast Nest Hub\n ], [[MODEL, CHROMECAST+' Nest Hub'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /crkey/i // Google Chromecast, Linux-based or unknown\n ], [[MODEL, CHROMECAST], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /(portaltv)/i // Facebook Portal TV\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, SMARTTV]], [\n /droid.+aft(\\w+)( bui|\\))/i // Fire TV\n ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n /(shield \\w+ tv)/i // Nvidia Shield TV\n ], [MODEL, [VENDOR, NVIDIA], [TYPE, SMARTTV]], [\n /\\(dtv[\\);].+(aquos)/i,\n /(aquos-tv[\\w ]+)\\)/i // Sharp\n ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[\n /(bravia[\\w ]+)( bui|\\))/i // Sony\n ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [\n /(mi(tv|box)-?\\w+) bui/i // Xiaomi\n ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [\n /Hbbtv.*(technisat) (.*);/i // TechniSAT\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, /.+\\/(\\w+)/, '$1', strMapper, {'LG':'lge'}], [MODEL, trim], [TYPE, SMARTTV]], [\n\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /(playstation \\w+)/i // Playstation\n ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n /(ouya)/i, // Ouya\n /(nintendo) (\\w+)/i, // Nintendo\n /(retroid) (pocket ([^\\)]+))/i // Retroid Pocket\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n /droid.+; (shield)( bui|\\))/i // Nvidia Portable\n ], [MODEL, [VENDOR, NVIDIA], [TYPE, CONSOLE]], [\n\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /\\b(sm-[lr]\\d\\d[0156][fnuw]?s?|gear live)\\b/i // Samsung Galaxy Watch\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]], [\n /((pebble))app/i, // Pebble\n /(asus|google|lg|oppo) ((pixel |zen)?watch[\\w ]*)( bui|\\))/i // Asus ZenWatch / LG Watch / Pixel Watch\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /(ow(?:19|20)?we?[1-3]{1,3})/i // Oppo Watch\n ], [MODEL, [VENDOR, OPPO], [TYPE, WEARABLE]], [\n /(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i // Apple Watch\n ], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [\n /(opwwe\\d{3})/i // OnePlus Watch\n ], [MODEL, [VENDOR, ONEPLUS], [TYPE, WEARABLE]], [\n /(moto 360)/i // Motorola 360\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, WEARABLE]], [\n /(smartwatch 3)/i // Sony SmartWatch\n ], [MODEL, [VENDOR, SONY], [TYPE, WEARABLE]], [\n /(g watch r)/i // LG G Watch R\n ], [MODEL, [VENDOR, LG], [TYPE, WEARABLE]], [\n /droid.+; (wt63?0{2,3})\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n\n ///////////////////\n // XR\n ///////////////////\n\n /droid.+; (glass) \\d/i // Google Glass\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, XR]], [\n /(pico) ([\\w ]+) os\\d/i // Pico\n ], [VENDOR, MODEL, [TYPE, XR]], [\n /(quest( \\d| pro)?s?).+vr/i // Meta Quest\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, XR]], [\n /mobile vr; rv.+firefox/i // Unidentifiable VR device using Firefox Reality / Wolvic\n ], [[TYPE, XR]], [\n\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [\n /(aeobc)\\b/i // Echo Dot\n ], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [\n /(homepod).+mac os/i // Apple HomePod\n ], [MODEL, [VENDOR, APPLE], [TYPE, EMBEDDED]], [\n /windows iot/i // Unidentifiable embedded device using Windows IoT\n ], [[TYPE, EMBEDDED]], [\n\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid.+; ([\\w- ]+) (4k|android|smart|google)[- ]?tv/i // Unidentifiable SmartTV\n ], [MODEL, [TYPE, SMARTTV]], [\n /\\b((4k|android|smart|opera)[- ]?tv|tv; rv:|large screen[\\w ]+safari)\\b/i\n ], [[TYPE, SMARTTV]], [\n /droid .+?; ([^;]+?)(?: bui|; wv\\)|\\) applew|; hmsc).+?(mobile|vr|\\d) safari/i\n ], [MODEL, [TYPE, strMapper, { 'mobile' : 'Mobile', 'xr' : 'VR', '*' : TABLET }]], [\n /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n ], [[TYPE, TABLET]], [\n /(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n ], [[TYPE, MOBILE]], [\n /droid .+?; ([\\w\\. -]+)( bui|\\))/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, EDGE+'HTML']], [\n\n /(arkweb)\\/([\\w\\.]+)/i // ArkWeb\n ], [NAME, VERSION], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna/Servo\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i, // iCab\n\n /\\b(libweb)/i // LibWeb\n ], [NAME, VERSION], [\n /ladybird\\//i\n ], [[NAME, 'LibWeb']], [\n\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows\n /(windows nt) (6\\.[23]); arm/i // Windows RT\n ], [[NAME, /N/, 'R'], [VERSION, strMapper, windowsVersionMap]], [\n /(windows (?:phone|mobile|iot))(?: os)?[\\/ ]?([\\d\\.]*( se)?)/i, // Windows IoT/Mobile/Phone\n // Windows NT/3.1/95/98/ME/2000/XP/Vista/7/8/8.1/10/11\n /(windows)[\\/ ](1[01]|2000|3\\.1|7|8(\\.1)?|9[58]|me|server 20\\d\\d( r2)?|vista|xp)/i\n ], [NAME, VERSION], [\n /windows nt ?([\\d\\.\\)]*)(?!.+xbox)/i,\n /\\bwin(?=3| ?9|n)(?:nt| 9x )?([\\d\\.;]*)/i\n ], [[VERSION, /(;|\\))/g, '', strMapper, windowsVersionMap], [NAME, WINDOWS]], [\n /(windows ce)\\/?([\\d\\.]*)/i // Windows CE\n ], [NAME, VERSION], [\n\n // iOS/macOS\n /[adehimnop]{4,7}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n /(?:ios;fbsv|ios(?=.+ip(?:ad|hone))|ip(?:ad|hone)(?: |.+i(?:pad)?)os)[\\/ ]([\\w\\.]+)/i,\n /cfnetwork\\/.+darwin/i\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n /(mac os x) ?([\\w\\. ]*)/i,\n /(macintosh|mac_powerpc\\b)(?!.+(haiku|morphos))/i // Mac OS\n ], [[NAME, 'macOS'], [VERSION, /_/g, '.']], [\n\n // Google Chromecast\n /android ([\\d\\.]+).*crkey/i // Google Chromecast, Android-based\n ], [VERSION, [NAME, CHROMECAST + ' Android']], [\n /fuchsia.*crkey\\/([\\d\\.]+)/i // Google Chromecast, Fuchsia-based\n ], [VERSION, [NAME, CHROMECAST + ' Fuchsia']], [\n /crkey\\/([\\d\\.]+).*devicetype\\/smartspeaker/i // Google Chromecast, Linux-based Smart Speaker\n ], [VERSION, [NAME, CHROMECAST + ' SmartSpeaker']], [\n /linux.*crkey\\/([\\d\\.]+)/i // Google Chromecast, Legacy Linux-based\n ], [VERSION, [NAME, CHROMECAST + ' Linux']], [\n /crkey\\/([\\d\\.]+)/i // Google Chromecast, unknown\n ], [VERSION, [NAME, CHROMECAST]], [\n\n // Mobile OSes\n /droid ([\\w\\.]+)\\b.+(android[- ]x86)/i // Android-x86\n ], [VERSION, NAME], [ \n /(ubuntu) ([\\w\\.]+) like android/i // Ubuntu Touch\n ], [[NAME, /(.+)/, '$1 Touch'], VERSION], [\n /(harmonyos)[\\/ ]?([\\d\\.]*)/i, // HarmonyOS\n // Android/Blackberry/WebOS/QNX/Bada/RIM/KaiOS/Maemo/MeeGo/S40/Sailfish OS/OpenHarmony/Tizen\n /(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen)\\w*[-\\/\\.; ]?([\\d\\.]*)/i\n ], [NAME, VERSION], [\n /\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, BLACKBERRY]], [\n /(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [\n /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n ], [VERSION, [NAME, FIREFOX+' OS']], [\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i, // WebOS\n /webos(?:[ \\/]?|\\.tv-20(?=2[2-9]))(\\d[\\d\\.]*)/i\n ], [VERSION, [NAME, 'webOS']], [\n /web0s;.+?(?:chr[o0]me|safari)\\/(\\d+)/i\n // https://webostv.developer.lge.com/develop/specifications/web-api-and-web-engine\n ], [[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']], [ \n /watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i // watchOS\n ], [VERSION, [NAME, 'watchOS']], [\n\n // Google ChromeOS\n /(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i // Chromium OS\n ], [[NAME, \"Chrome OS\"], VERSION],[\n\n // Smart TVs\n /panasonic;(viera)/i, // Panasonic Viera\n /(netrange)mmh/i, // Netrange\n /(nettv)\\/(\\d+\\.[\\w\\.]+)/i, // NetTV\n\n // Console\n /(nintendo|playstation) (\\w+)/i, // Nintendo/Playstation\n /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n /(pico) .+os([\\w\\.]+)/i, // Pico\n\n // Other\n /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n /linux.+(mint)[\\/\\(\\) ]?([\\w\\.]*)/i, // Mint\n /(mageia|vectorlinux|fuchsia|arcaos|arch(?= ?linux))[;l ]([\\d\\.]*)/i, // Mageia/VectorLinux/Fuchsia/ArcaOS/Arch\n /([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,\n // Ubuntu/Debian/SUSE/Gentoo/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire/Knoppix\n /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n /\\b(aix)[; ]([1-9\\.]{0,4})/i, // AIX\n /(hurd|linux|morphos)(?: (?:arm|x86|ppc)\\w*| ?)([\\w\\.]*)/i, // Hurd/Linux/MorphOS\n /(gnu) ?([\\w\\.]*)/i, // GNU\n /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n /(haiku) ?(r\\d)?/i // Haiku\n ], [NAME, VERSION], [\n /(sunos) ?([\\d\\.]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n /\\b(beos|os\\/2|amigaos|openvms|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/OpenVMS/HP-UX/SerenityOS\n /(unix) ?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n /////////////////\n // Factories\n ////////////////\n\n var defaultProps = (function () {\n var props = { init : {}, isIgnore : {}, isIgnoreRgx : {}, toString : {}};\n setProps.call(props.init, [\n [BROWSER, [NAME, VERSION, MAJOR, TYPE]],\n [CPU, [ARCHITECTURE]],\n [DEVICE, [TYPE, MODEL, VENDOR]],\n [ENGINE, [NAME, VERSION]],\n [OS, [NAME, VERSION]]\n ]);\n setProps.call(props.isIgnore, [\n [BROWSER, [VERSION, MAJOR]],\n [ENGINE, [VERSION]],\n [OS, [VERSION]]\n ]);\n setProps.call(props.isIgnoreRgx, [\n [BROWSER, / ?browser$/i],\n [OS, / ?os$/i]\n ]);\n setProps.call(props.toString, [\n [BROWSER, [NAME, VERSION]],\n [CPU, [ARCHITECTURE]],\n [DEVICE, [VENDOR, MODEL]],\n [ENGINE, [NAME, VERSION]],\n [OS, [NAME, VERSION]]\n ]);\n return props;\n })();\n\n var createIData = function (item, itemType) {\n\n var init_props = defaultProps.init[itemType],\n is_ignoreProps = defaultProps.isIgnore[itemType] || 0,\n is_ignoreRgx = defaultProps.isIgnoreRgx[itemType] || 0,\n toString_props = defaultProps.toString[itemType] || 0;\n\n function IData () {\n setProps.call(this, init_props);\n }\n\n IData.prototype.getItem = function () {\n return item;\n };\n\n IData.prototype.withClientHints = function () {\n\n // nodejs / non-client-hints browsers\n if (!NAVIGATOR_UADATA) {\n return item\n .parseCH()\n .get();\n }\n\n // browsers based on chromium 85+\n return NAVIGATOR_UADATA\n .getHighEntropyValues(CH_ALL_VALUES)\n .then(function (res) {\n return item\n .setCH(new UACHData(res, false))\n .parseCH()\n .get();\n });\n };\n\n IData.prototype.withFeatureCheck = function () {\n return item.detectFeature().get();\n };\n\n if (itemType != RESULT) {\n IData.prototype.is = function (strToCheck) {\n var is = false;\n for (var i in this) {\n 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)) {\n is = true;\n if (strToCheck != TYPEOF.UNDEFINED) break;\n } else if (strToCheck == TYPEOF.UNDEFINED && is) {\n is = !is;\n break;\n }\n }\n return is;\n };\n IData.prototype.toString = function () {\n var str = EMPTY;\n for (var i in toString_props) {\n if (typeof(this[toString_props[i]]) !== TYPEOF.UNDEFINED) {\n str += (str ? ' ' : EMPTY) + this[toString_props[i]];\n }\n }\n return str || TYPEOF.UNDEFINED;\n };\n }\n\n if (!NAVIGATOR_UADATA) {\n IData.prototype.then = function (cb) { \n var that = this;\n var IDataResolve = function () {\n for (var prop in that) {\n if (that.hasOwnProperty(prop)) {\n this[prop] = that[prop];\n }\n }\n };\n IDataResolve.prototype = {\n is : IData.prototype.is,\n toString : IData.prototype.toString\n };\n var resolveData = new IDataResolve();\n cb(resolveData);\n return resolveData;\n };\n }\n\n return new IData();\n };\n\n /////////////////\n // Constructor\n ////////////////\n\n function UACHData (uach, isHttpUACH) {\n uach = uach || {};\n setProps.call(this, CH_ALL_VALUES);\n if (isHttpUACH) {\n setProps.call(this, [\n [BRANDS, itemListToArray(uach[CH])],\n [FULLVERLIST, itemListToArray(uach[CH_FULL_VER_LIST])],\n [MOBILE, /\\?1/.test(uach[CH_MOBILE])],\n [MODEL, stripQuotes(uach[CH_MODEL])],\n [PLATFORM, stripQuotes(uach[CH_PLATFORM])],\n [PLATFORMVER, stripQuotes(uach[CH_PLATFORM_VER])],\n [ARCHITECTURE, stripQuotes(uach[CH_ARCH])],\n [FORMFACTORS, itemListToArray(uach[CH_FORM_FACTORS])],\n [BITNESS, stripQuotes(uach[CH_BITNESS])]\n ]);\n } else {\n for (var prop in uach) {\n if(this.hasOwnProperty(prop) && typeof uach[prop] !== TYPEOF.UNDEFINED) this[prop] = uach[prop];\n }\n }\n }\n\n function UAItem (itemType, ua, rgxMap, uaCH) {\n\n this.get = function (prop) {\n if (!prop) return this.data;\n return this.data.hasOwnProperty(prop) ? this.data[prop] : undefined;\n };\n\n this.set = function (prop, val) {\n this.data[prop] = val;\n return this;\n };\n\n this.setCH = function (ch) {\n this.uaCH = ch;\n return this;\n };\n\n this.detectFeature = function () {\n if (NAVIGATOR && NAVIGATOR.userAgent == this.ua) {\n switch (this.itemType) {\n case BROWSER:\n // Brave-specific detection\n if (NAVIGATOR.brave && typeof NAVIGATOR.brave.isBrave == TYPEOF.FUNCTION) {\n this.set(NAME, 'Brave');\n }\n break;\n case DEVICE:\n // Chrome-specific detection: check for 'mobile' value of navigator.userAgentData\n if (!this.get(TYPE) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[MOBILE]) {\n this.set(TYPE, MOBILE);\n }\n // iPadOS-specific detection: identified as Mac, but has some iOS-only properties\n if (this.get(MODEL) == 'Macintosh' && NAVIGATOR && typeof NAVIGATOR.standalone !== TYPEOF.UNDEFINED && NAVIGATOR.maxTouchPoints && NAVIGATOR.maxTouchPoints > 2) {\n this.set(MODEL, 'iPad')\n .set(TYPE, TABLET);\n }\n break;\n case OS:\n // Chrome-specific detection: check for 'platform' value of navigator.userAgentData\n if (!this.get(NAME) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[PLATFORM]) {\n this.set(NAME, NAVIGATOR_UADATA[PLATFORM]);\n }\n break;\n case RESULT:\n var data = this.data;\n var detect = function (itemType) {\n return data[itemType]\n .getItem()\n .detectFeature()\n .get();\n };\n this.set(BROWSER, detect(BROWSER))\n .set(CPU, detect(CPU))\n .set(DEVICE, detect(DEVICE))\n .set(ENGINE, detect(ENGINE))\n .set(OS, detect(OS));\n }\n }\n return this;\n };\n\n this.parseUA = function () {\n if (this.itemType != RESULT) {\n rgxMapper.call(this.data, this.ua, this.rgxMap);\n }\n switch (this.itemType) {\n case BROWSER:\n this.set(MAJOR, majorize(this.get(VERSION)));\n break;\n case OS:\n if (this.get(NAME) == 'iOS' && this.get(VERSION) == '18.6') {\n // Based on the assumption that iOS version is tightly coupled with Safari version\n var realVersion = /\\) Version\\/([\\d\\.]+)/.exec(this.ua); // Get Safari version\n if (realVersion && parseInt(realVersion[1].substring(0,2), 10) >= 26) {\n this.set(VERSION, realVersion[1]); // Set as iOS version\n }\n }\n break;\n }\n return this;\n };\n\n this.parseCH = function () {\n var uaCH = this.uaCH,\n rgxMap = this.rgxMap;\n \n switch (this.itemType) {\n case BROWSER:\n case ENGINE:\n var brands = uaCH[FULLVERLIST] || uaCH[BRANDS], prevName;\n if (brands) {\n for (var i=0; i<brands.length; i++) {\n var brandName = brands[i].brand || brands[i],\n brandVersion = brands[i].version;\n if (this.itemType == BROWSER && \n !/not.a.brand/i.test(brandName) && \n (!prevName || \n (/Chrom/.test(prevName) && brandName != CHROMIUM) || \n (prevName == EDGE && /WebView2/.test(brandName))\n )) {\n brandName = strMapper(brandName, browserHintsMap);\n prevName = this.get(NAME);\n if (!(prevName && !/Chrom/.test(prevName) && /Chrom/.test(brandName))) {\n this.set(NAME, brandName)\n .set(VERSION, brandVersion)\n .set(MAJOR, majorize(brandVersion));\n }\n prevName = brandName;\n }\n if (this.itemType == ENGINE && brandName == CHROMIUM) {\n this.set(VERSION, brandVersion);\n }\n }\n }\n break;\n case CPU:\n var archName = uaCH[ARCHITECTURE];\n if (archName) {\n if (archName && uaCH[BITNESS] == '64') archName += '64';\n rgxMapper.call(this.data, archName + ';', rgxMap);\n }\n break;\n case DEVICE:\n if (uaCH[MOBILE]) {\n this.set(TYPE, MOBILE);\n }\n if (uaCH[MODEL]) {\n this.set(MODEL, uaCH[MODEL]);\n if (!this.get(TYPE) || !this.get(VENDOR)) {\n var reParse = {};\n rgxMapper.call(reParse, 'droid 9; ' + uaCH[MODEL] + ')', rgxMap);\n if (!this.get(TYPE) && !!reParse.type) {\n this.set(TYPE, reParse.type);\n }\n if (!this.get(VENDOR) && !!reParse.vendor) {\n this.set(VENDOR, reParse.vendor);\n }\n }\n }\n if (uaCH[FORMFACTORS]) {\n var ff;\n if (typeof uaCH[FORMFACTORS] !== 'string') {\n var idx = 0;\n while (!ff && idx < uaCH[FORMFACTORS].length) {\n ff = strMapper(uaCH[FORMFACTORS][idx++], formFactorsMap);\n }\n } else {\n ff = strMapper(uaCH[FORMFACTORS], formFactorsMap);\n }\n this.set(TYPE, ff);\n }\n break;\n case OS:\n var osName = uaCH[PLATFORM];\n if(osName) {\n var osVersion = uaCH[PLATFORMVER];\n if (osName == WINDOWS) osVersion = (parseInt(majorize(osVersion), 10) >= 13 ? '11' : '10');\n this.set(NAME, osName)\n .set(VERSION, osVersion);\n }\n // Xbox-Specific Detection\n if (this.get(NAME) == WINDOWS && uaCH[MODEL] == 'Xbox') {\n this.set(NAME, 'Xbox')\n .set(VERSION, undefined);\n } \n break;\n case RESULT:\n var data = this.data;\n var parse = function (itemType) {\n return data[itemType]\n .getItem()\n .setCH(uaCH)\n .parseCH()\n .get();\n };\n this.set(BROWSER, parse(BROWSER))\n .set(CPU, parse(CPU))\n .set(DEVICE, parse(DEVICE))\n .set(ENGINE, parse(ENGINE))\n .set(OS, parse(OS));\n }\n return this;\n };\n\n setProps.call(this, [\n ['itemType', itemType],\n ['ua', ua],\n ['uaCH', uaCH],\n ['rgxMap', rgxMap],\n ['data', createIData(this, itemType)]\n ]);\n\n return this;\n }\n\n function UAParser (ua, extensions, headers) {\n\n if (typeof ua === TYPEOF.OBJECT) {\n if (isExtensions(ua, true)) {\n if (typeof extensions === TYPEOF.OBJECT) {\n headers = extensions; // case UAParser(extensions, headers) \n }\n extensions = ua; // case UAParser(extensions)\n } else {\n headers = ua; // case UAParser(headers)\n extensions = undefined;\n }\n ua = undefined;\n } else if (typeof ua === TYPEOF.STRING && !isExtensions(extensions, true)) {\n headers = extensions; // case UAParser(ua, headers)\n extensions = undefined;\n }\n\n if (headers) {\n if (typeof headers.append === TYPEOF.FUNCTION) {\n // Convert Headers object into a plain object\n var kv = {};\n headers.forEach(function (v, k) { kv[String(k).toLowerCase()] = v; });\n headers = kv;\n } else {\n // Normalize headers field name into lowercase\n var normalized = {};\n for (var header in headers) {\n if (headers.hasOwnProperty(header)) {\n normalized[String(header).toLowerCase()] = headers[header];\n }\n }\n headers = normalized;\n }\n }\n \n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions, headers).getResult();\n }\n\n var userAgent = typeof ua === TYPEOF.STRING ? ua : // Passed user-agent string\n (headers && headers[USER_AGENT] ? headers[USER_AGENT] : // User-Agent from passed headers\n ((NAVIGATOR && NAVIGATOR.userAgent) ? NAVIGATOR.userAgent : // navigator.userAgent\n EMPTY)), // empty string\n\n httpUACH = new UACHData(headers, true),\n regexMap = extensions ? \n extend(defaultRegexes, extensions) : \n defaultRegexes,\n\n createItemFunc = function (itemType) {\n if (itemType == RESULT) {\n return function () {\n return new UAItem(itemType, userAgent, regexMap, httpUACH)\n .set('ua', userAgent)\n .set(BROWSER, this.getBrowser())\n .set(CPU, this.getCPU())\n .set(DEVICE, this.getDevice())\n .set(ENGINE, this.getEngine())\n .set(OS, this.getOS())\n .get();\n };\n } else {\n return function () {\n return new UAItem(itemType, userAgent, regexMap[itemType], httpUACH)\n .parseUA()\n .get();\n };\n }\n };\n \n // public methods\n setProps.call(this, [\n ['getBrowser', createItemFunc(BROWSER)],\n ['getCPU', createItemFunc(CPU)],\n ['getDevice', createItemFunc(DEVICE)],\n ['getEngine', createItemFunc(ENGINE)],\n ['getOS', createItemFunc(OS)],\n ['getResult', createItemFunc(RESULT)],\n ['getUA', function () { return userAgent; }],\n ['setUA', function (ua) {\n if (isString(ua)) userAgent = trim(ua, UA_MAX_LENGTH);\n return this;\n }]\n ])\n .setUA(userAgent);\n\n return this;\n }\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR, TYPE]);\n UAParser.CPU = enumerize([ARCHITECTURE]);\n UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n export {UAParser};","/* eslint-disable */\n// SDK 工具函数\nimport { UAParser } from 'ua-parser-js'\n\n\nconst isNull = val => val === null\nconst isUndefined = val => typeof val === 'undefined'\nexport const isEmpty = val => {\n if (isNull(val) || isUndefined(val) || val === '') {\n return true\n }\n return false\n}\n\n/**\n * performance.now() 兼容性处理\n * 优先使用 performance.now(),降级使用 Date.now()\n * @returns {Function} 返回当前时间戳的函数(毫秒)\n */\nexport const performanceNow = (() => {\n // 检查是否支持 performance.now\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n return () => performance.now()\n }\n // 降级方案:使用 Date.now()\n // 注意:Date.now() 的精度较低,且可能受系统时间调整影响\n return () => Date.now()\n})()\n\nexport function pad(num, len, placeholder = '0') {\n const str = String(num)\n if (str.length < len) {\n let result = str\n for (let i = 0; i < len - str.length; i += 1) {\n result = placeholder + result\n }\n return result\n }\n return str\n}\n\n// export function getSessionId() {\n// const date = new Date()\n\n// // yyyy-MM-dd的16进制表示,7位数字\n// const hexDate = parseInt(\n// `${date.getFullYear()}${pad(date.getMonth() + 1, 2)}${pad(\n// date.getDate(),\n// 2\n// )}`,\n// 10\n// ).toString(16)\n\n// // hh-mm-ss-ms的16进制表示,最大也是7位\n// const hexTime = parseInt(\n// `${pad(date.getHours(), 2)}${pad(date.getMinutes(), 2)}${pad(\n// date.getSeconds(),\n// 2\n// )}${pad(date.getMilliseconds(), 3)}`,\n// 10\n// ).toString(16)\n\n// // 第8位数字表示后面的time字符串的长度\n// let guid = hexDate + hexTime.length + hexTime\n\n// // 补充随机数,补足32位的16进制数\n// while (guid.length < 32) {\n// guid += Math.floor(Math.random() * 16).toString(16)\n// }\n\n// // 分为三段,前两段包含时间戳信息 第一段 和第二段去掉最后一数字 16进制转10进制 获取年月日 时分秒\n// return `${guid.slice(0, 8)}-${guid.slice(8, 16)}-${guid.slice(16)}`\n// }\n\n// 序列号,用于同一毫秒内的递增\nlet sequenceCounter = 0\nlet lastTimestamp = 0\n// 实例唯一标识(每个浏览器实例生成一次,用于区分不同实例)\n// 使用时间戳 + 随机数生成,确保不同实例有不同的标识\nconst instanceId = (() => {\n const randomPart = Math.floor(Math.random() * 0xFFFF) // 16位随机数\n const timePart = Date.now() % 0xFFFF // 16位时间戳低位\n return (randomPart << 16) | timePart // 组合成32位,取低16位作为实例ID\n})()\n\nexport const getSessionId = () => {\n const now = Date.now()\n\n // 如果时间戳相同,使用序列号递增\n if (now === lastTimestamp) {\n sequenceCounter++\n } else {\n sequenceCounter = 0\n lastTimestamp = now\n }\n\n // 将时间戳转为16进制(13位时间戳转为11位16进制)\n const hexTimestamp = pad(now.toString(16), 11, '0')\n\n // 序列号转为16进制(最多4位,支持65535个序列)\n const hexSequence = pad(sequenceCounter.toString(16), 4, '0')\n\n // 实例ID(4位16进制,用于区分不同浏览器实例)\n // 这样即使1000个客户在同一毫秒打开,实例ID也不同,避免重复\n const hexInstanceId = pad((instanceId & 0xFFFF).toString(16), 4, '0')\n\n // 时间戳的扩展部分(17位16进制),用于保证唯一性和排序性\n // 方案:直接使用时间戳的低68位(17位16进制 = 68位二进制)\n // 时间戳是13位数字(约43位二进制),我们需要17位16进制(68位二进制)\n //\n // 策略:将时间戳转换为16进制,然后扩展到17位\n // 如果时间戳的16进制表示不足17位,用0填充(这样保证单调性)\n // 如果超过17位,取低17位(这样保证唯一性)\n //\n // 但这样会有问题:时间戳只有11位16进制,不足17位\n //\n // 更好的方案:使用时间戳的不同连续位段,按从高到低的顺序组合\n // 这样当时间戳增加时,高位部分先变化,确保扩展部分也增大\n //\n // 具体实现:将时间戳的连续位段按重要性从高到低排列\n // 1. 时间戳的高位部分(最重要,放在最前面)\n // 2. 时间戳的中间部分\n // 3. 时间戳的低位部分\n // 4. 时间戳的重复/扩展部分(用于填充到17位)\n\n // 提取时间戳的不同连续位段(使用位运算,不使用取模,保证单调性)\n // 第24-43位(右移24位,取低20位)- 最高有效位部分,5位16进制\n const timestampHigh20 = (now >> 24) & 0xFFFFF\n\n // 第12-23位(右移12位,取低12位)- 中间高位部分,3位16进制\n const timestampMid12 = (now >> 12) & 0xFFF\n\n // 第0-11位(取低12位)- 最低位部分,3位16进制\n const timestampLow12 = now & 0xFFF\n\n // 第36-43位(右移36位,取低8位)- 更高位部分,2位16进制\n const timestampTop8 = (now >> 36) & 0xFF\n\n // 第44-51位(右移44位,取低8位)- 最高位部分,2位16进制(如果时间戳超过43位)\n const timestampTop8Ext = (now >> 44) & 0xFF\n\n // 第52-55位(右移52位,取低4位)- 最高位剩余部分,1位16进制\n const timestampTop4 = (now >> 52) & 0xF\n\n // 第56-59位(右移56位,取低4位)- 最高位扩展部分,1位16进制\n const timestampTop4Ext = (now >> 56) & 0xF\n\n // 组合时间戳扩展部分(13位16进制,因为实例ID占了4位)\n // 按从高到低的顺序排列,确保时间戳越大,扩展部分也越大\n // 5位 + 2位 + 3位 + 3位 = 13位\n const hexTimestampExt = pad(timestampHigh20.toString(16), 5, '0') + // 5位:第24-43位(最重要,优先变化)\n pad(timestampTop8.toString(16), 2, '0') + // 2位:第36-43位\n pad(timestampMid12.toString(16), 3, '0') + // 3位:第12-23位\n pad(timestampLow12.toString(16), 3, '0') // 3位:第0-11位\n\n // 组合:时间戳(11位) + 序列号(4位) + 实例ID(4位) + 时间戳扩展(13位) = 32位\n // 这样的组合可以保证跨项目/实例的唯一性和排序性:\n // 1. 时间戳不同时,时间戳大的ID一定更大(时间戳在最前面,11位,字符串比较时优先)\n // 2. 时间戳相同时,序列号大的ID一定更大(序列号在中间,4位)\n // 3. 时间戳和序列号都相同时,实例ID不同(4位),确保不同浏览器实例生成的ID不同\n // 4. 时间戳扩展部分保证唯一性和排序性(13位)\n //\n // 关键改进:加入实例ID后,即使1000个客户在同一毫秒打开各自的公众号,\n // 每个实例的instanceId都不同(随机生成),可以避免ID重复\n let guid = hexTimestamp + hexSequence + hexInstanceId + hexTimestampExt\n\n // 确保正好32位\n guid = guid.slice(0, 32)\n // 如果不足32位,用0补齐(理论上不会发生)\n guid = pad(guid, 32, '0')\n\n // 分为三段,保持原有格式\n return `${guid.slice(0, 8)}${guid.slice(8, 16)}${guid.slice(16)}`\n}\n\n/**\n * 生成一个短唯一识别码\n * 格式:时间戳(36进制,8位)+ 随机数(36进制,4位)= 12位字符串\n * 优点:短、唯一、高性能\n * @returns {string} 12位的唯一识别码,例如:'k2j3h4g5f1a'\n */\nlet uniqueIdCounter = 0\nexport function generateUniqueId() {\n // 获取当前时间戳(毫秒)\n const timestamp = Date.now()\n \n // 时间戳转为36进制(0-9a-z),取后8位\n const timestamp36 = timestamp.toString(36).slice(-8).padStart(8, '0')\n \n // 递增计数器(用于同一毫秒内的多次调用)\n uniqueIdCounter = (uniqueIdCounter + 1) % 46656 // 36^3,确保3位足够\n \n // 随机数 + 计数器,转为36进制,取4位\n const random = Math.floor(Math.random() * 36)\n const counter36 = uniqueIdCounter.toString(36).padStart(2, '0')\n const random36 = random.toString(36)\n const suffix = (counter36 + random36).padStart(4, '0').slice(-4)\n \n return timestamp36 + suffix\n}\n\n/**\n * 生成一个更短的唯一识别码(8位)\n * 格式:时间戳(36进制,6位)+ 随机数(36进制,2位)= 8位字符串\n * 适用于需要更短ID的场景\n * @returns {string} 8位的唯一识别码\n */\nlet shortIdCounter = 0\nexport function generateShortId() {\n // 获取当前时间戳(毫秒)\n const timestamp = Date.now()\n \n // 时间戳转为36进制,取后6位\n const timestamp36 = timestamp.toString(36).slice(-6).padStart(6, '0')\n \n // 递增计数器 + 随机数\n shortIdCounter = (shortIdCounter + 1) % 1296 // 36^2,确保2位足够\n const random = Math.floor(Math.random() * 36)\n const suffix = (shortIdCounter.toString(36) + random.toString(36)).padStart(2, '0').slice(-2)\n \n return timestamp36 + suffix\n}\n\n/**\n * 检测当前环境是否为微信浏览器\n * @returns {boolean} 如果是微信浏览器返回true,否则返回false\n */\nexport const isWeinxin = () => {\n // 首先检查是否存在WeixinJSBridge对象,这是微信内置的JavaScript对象\n if (typeof WeixinJSBridge !== 'undefined') {\n return true\n }\n // 获取浏览器的userAgent信息并转换为小写\n var ua = navigator.userAgent.toLowerCase()\n // eslint-disable-next-line\n var isWeixin = ua.indexOf('micromessenger') !== -1 || ua.match(/MicroMessenger/i) == 'micromessenger'\n if (isWeixin) {\n return true\n } else {\n return false\n }\n}\n\n\n/**\n * 判断当前用户代理是否为支付宝客户端\n * @returns {boolean} - 如果是支付宝客户端返回true,否则返回false\n */\nexport const isAlipayAgent = () => {\n // 以下是另一种判断方式,已被注释掉\n // return searchInfo?.userAgent === 'AlipayClient'\n // 获取用户代理字符串并转换为小写\n const ua = navigator.userAgent.toLowerCase()\n // eslint-disable-next-line - 禁用下一行的ESLint规则检查\n // 判断用户代理中是否包含'alipay'字符串,或者通过正则匹配'alipay'(不区分大小写)\n const isAlipay = ua.indexOf('alipay') !== -1 || ua.match(/Alipay/i) == 'alipay'\n // 如果检测到支付宝用户代理,返回true,否则返回false\n if (isAlipay) {\n return true\n } else {\n return false\n }\n}\n\nexport const validateUseragent = () => {\n if (isWeinxin()) {\n return 'WECHAT'\n }\n if (isAlipayAgent()) {\n return 'ALIPAY'\n }\n return 'OTHER'\n}\n\nexport const extractHashPath = (urlString) => {\n const hashIndex = urlString.indexOf('#')\n if (hashIndex === -1) return '' // 没有 hash\n\n const hashPart = urlString.slice(hashIndex + 1) // \"/buyPkgListNew/aaa?... \"\n const pathWithoutQuery = hashPart.replace(/^\\//, '').split('?')[0] // \"buyPkgListNew/aaa\"\n \n // 如果路径包含斜杠,只返回第一个路径段(基础页面名)\n // 例如:buyPkgListNew/aaa -> buyPkgListNew\n if (pathWithoutQuery.includes('/')) {\n return pathWithoutQuery.split('/')[0]\n }\n \n return pathWithoutQuery // \"buyPkgListNew\"\n}\n\nexport const getPageKey = (page, uiVersion) => {\n const ob = { login: 'LOGIN', buyPkgListNew: 'BUY_LIST', cardDetailInfo: 'CARD_DETAIL', flowSettle: 'SETTLEMENT', chargeMoney: 'WALLET', payOrderDetail: 'ORDER_DETAIL', alipayOrderDetail: 'ORDER_DETAIL' }\n \n // 处理带有路径的情况,例如 LOGIN/qwewqe 或 login/qwewqe\n // 提取基础页面名称(第一个路径段)\n let basePage = page\n if (page && typeof page === 'string') {\n // 如果包含斜杠,提取第一部分\n const parts = page.split('/')\n if (parts.length > 1) {\n basePage = parts[0]\n }\n }\n \n // 转换为小写以便匹配映射对象\n const basePageLower = basePage.toLowerCase()\n \n if (['HONGSHUN','IOP-V2', 'XIAOCHENG-V2', 'BLACKGOLD'].includes(uiVersion)) {\n if (basePageLower === 'chargemoney') {\n if ((window.location.href.indexOf('showMoney=false') > -1)) {\n return 'EQUITY'\n }\n }\n }\n \n // 如果不在映射对象中,返回基础页面名(保持原始大小写,如果没有路径则返回原始值)\n // 如果原始 page 包含路径,返回基础页面名的大写形式\n if (page && typeof page === 'string' && page.includes('/')) {\n return basePage\n }\n \n // 如果没有路径,保持原有逻辑\n return ob[page] || page\n}\n\nexport const uniqueArr = (arr) => {\n return Array.from(new Set(arr))\n}\n\nexport const detectPlatform = () => {\n const ua = navigator.userAgent.toLowerCase()\n if (/android|adr/.test(ua)) return 'Android'\n if (/iphone|ipad|ipod|ios/.test(ua)) return 'iOS'\n return '其他'\n}\n\n/**\n * 使用 ua-parser-js 解析 User-Agent 信息\n * @param {string} [userAgent] 可选,默认取当前浏览器 UA\n * @returns {import('ua-parser-js').UAParser.IResult} 解析结果\n */\nexport const parseUserAgent = (userAgent) => {\n try {\n // ua-parser-js 需要先实例化\n const parser = new UAParser(userAgent || (typeof navigator !== 'undefined' ? navigator.userAgent : ''))\n return parser.getResult()\n } catch (e) {\n console.warn('UAParser 解析失败:', e)\n return {\n ua: typeof navigator !== 'undefined' ? navigator.userAgent : '',\n browser: {},\n engine: {},\n os: {\n name: detectPlatform()\n },\n device: {},\n cpu: {}\n }\n }\n}\n\nexport const getOsType = () => {\n const result = parseUserAgent()\n if (isEmpty(result?.os)) {\n return detectPlatform()\n }\n // os?.version 也可以加版本 但不一定获取的到\n if (['iOS', 'Android'].includes(result?.os?.name)) {\n console.log('parseagernt--', result?.os)\n return result?.os?.name\n }\n return '其他'\n}\n\n/**\n * 通过 userAgent 获取系统版本\n * @param {string} [userAgent] 可选,默认取当前浏览器 UA\n * @returns {string|null} 系统版本号,如果无法获取则返回 null\n * @example\n * getOsVersion() // '15.0' (iOS) 或 '12.0' (Android)\n * getOsVersion('Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X)') // '15.0'\n */\nexport const getOsVersion = (userAgent) => {\n try {\n const result = parseUserAgent(userAgent)\n // ua-parser-js 解析结果中,os.version 包含系统版本\n if (result?.os?.version) {\n return result.os.version\n }\n \n // 如果 ua-parser-js 无法解析,尝试手动解析\n const ua = userAgent || (typeof navigator !== 'undefined' ? navigator.userAgent : '')\n \n // iOS 版本解析:OS 15_0 like Mac OS X -> 15.0\n const iosMatch = ua.match(/OS\\s+(\\d+)[_.](\\d+)/i)\n if (iosMatch) {\n return `${iosMatch[1]}.${iosMatch[2]}`\n }\n \n // Android 版本解析:Android 12.0 -> 12.0\n const androidMatch = ua.match(/Android\\s+([\\d.]+)/i)\n if (androidMatch) {\n return androidMatch[1]\n }\n \n return null\n } catch (e) {\n console.warn('获取系统版本失败:', e)\n return null\n }\n}\n\n\n\n","/* eslint-disable */\n// 上报器\nimport axiosInstance from './axios-config.js'\nimport { validateUseragent, getOsType, getOsVersion, isEmpty, getSessionId } from './utils.js'\n\nexport class Reporter {\n constructor(config) {\n this.config = config\n this.isReporting = false\n // 缓存 sessionId(仅当成功从 sessionStorage 读取后缓存)\n // 如果 sessionStorage 没有值,下次还要继续尝试读取\n this._cachedSessionId = null\n // 标记是否已成功从 sessionStorage 读取过(成功读取后才标记为 true)\n // 如果为 false,下次还要继续尝试从 sessionStorage 读取\n this._sessionIdFromStorage = false\n }\n \n // 上报数据\n async report(type, data) {\n // if (this.config.getConfig().debugSwitch) {\n // console.log('report----------', type, data)\n // }\n \n // 移除 isReporting 检查,允许多个上报并发执行\n // 这样可以确保 tab 切换时的曝光事件能立即上报\n \n try {\n const reportData = this.formatReportData(type, data)\n \n // 优先使用自定义上报函数\n if (this.config.getConfig().customReport) {\n await this.config.getConfig().customReport(type, reportData)\n } else {\n // 使用默认上报方式\n await this.defaultReport(type, reportData)\n }\n } catch (error) {\n console.error('上报失败:', error)\n // 上报失败时也记录日志,方便调试\n if (this.config.getConfig().debugSwitch) {\n console.error('上报失败详情:', {\n type,\n error: error.message,\n stack: error.stack\n })\n }\n }\n }\n // 设备基本信息\n getDeviceInfo() {\n return {\n screen: {\n width: screen.width,\n height: screen.height,\n availWidth: screen.availWidth,\n availHeight: screen.availHeight,\n colorDepth: screen.colorDepth,\n pixelDepth: screen.pixelDepth\n },\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight\n },\n connection: navigator.connection ? {\n effectiveType: navigator.connection.effectiveType,\n downlink: navigator.connection.downlink,\n rtt: navigator.connection.rtt\n } : null,\n memory: navigator.memory ? {\n usedJSHeapSize: navigator.memory.usedJSHeapSize,\n totalJSHeapSize: navigator.memory.totalJSHeapSize,\n jsHeapSizeLimit: navigator.memory.jsHeapSizeLimit\n } : null\n }\n }\n \n // 获取或初始化 sessionId\n // 优化:如果 sessionStorage 没拿到值,下次还要优先从 sessionStorage 取,一直判断\n getSessionId() {\n // 如果已成功从 sessionStorage 读取过且缓存存在,直接返回缓存\n if (this._sessionIdFromStorage && this._cachedSessionId) {\n return this._cachedSessionId\n }\n \n let sessionId = this.config.getConfig().sessionId || ''\n \n // 优先从 sessionStorage 读取(如果之前没成功读取过,每次都要尝试)\n if (!this._sessionIdFromStorage && typeof sessionStorage !== 'undefined') {\n try {\n const traceSdkInfoStr = sessionStorage.getItem('SS_TRACESDK_INFO')\n if (traceSdkInfoStr) {\n const traceSdkInfo = JSON.parse(traceSdkInfoStr)\n if (traceSdkInfo && !isEmpty(traceSdkInfo.sessionId)) {\n // 成功从 sessionStorage 读取到值\n sessionId = traceSdkInfo.sessionId\n // 同步更新配置中的 sessionId,保持一致性\n this.config.updateConfig({ sessionId: sessionId })\n // 更新缓存\n this._cachedSessionId = sessionId\n // 标记已成功从 sessionStorage 读取,后续直接使用缓存\n this._sessionIdFromStorage = true\n \n if (this.config.getConfig().debugSwitch) {\n console.log('从 sessionStorage 成功读取 sessionId:', sessionId)\n }\n \n return sessionId\n }\n }\n // 如果 sessionStorage 中没有值或值为空,不标记为已读取\n // 下次调用时还会继续尝试从 sessionStorage 读取\n if (this.config.getConfig().debugSwitch) {\n console.log('sessionStorage 中未找到有效的 sessionId,下次继续尝试读取')\n }\n } catch (error) {\n // 读取失败,不标记为已读取,下次继续尝试\n if (this.config.getConfig().debugSwitch) {\n console.warn('读取 SS_TRACESDK_INFO 失败,下次继续尝试:', error)\n }\n }\n }\n \n // 如果 sessionId 仍为空,生成新的\n if (isEmpty(sessionId)) {\n sessionId = getSessionId()\n this.config.updateConfig({ sessionId: sessionId })\n // 注意:这里不更新 _sessionIdFromStorage,下次还要继续尝试从 sessionStorage 读取\n // 也不缓存,因为可能 sessionStorage 中会有新值\n }\n \n return sessionId\n }\n \n // 格式化上报数据\n formatReportData(type, data) {\n // 使用优化后的 getSessionId 方法\n const sessionId = this.getSessionId()\n const baseData = {\n sessionId: sessionId || '',\n channel: validateUseragent(),\n uiVer: this.config.getConfig().uiVersion,\n osType: getOsType(),\n osVersion: getOsVersion(),\n screenWidth: screen.width,\n screenHeight: screen.height,\n windowInnerWidth: window.innerWidth,\n windowInnerHeight: window.innerHeight,\n netType: navigator.connection ? navigator.connection.effectiveType : '',\n\n tags: {\n customerId: this.config.getConfig().customerId,\n deviceId: this.config.getConfig().deviceId,\n deviceNo: this.config.getConfig().deviceNo,\n userId: this.config.getConfig().userId,\n // device: this.getDeviceInfo()\n }\n }\n\n const temp = Array.isArray(data) ? data : [data]\n temp.forEach(item => {\n const mergedTags = Object.assign(\n {},\n baseData.tags || {},\n (item && item.tags) || {}\n )\n Object.assign(item, baseData)\n if (Object.keys(mergedTags).length > 0) {\n item.tags = mergedTags\n }\n })\n // return {\n // // ...baseData,\n // // data: Array.isArray(data) ? data : [data]\n // temp\n // }\n return temp\n }\n \n // 默认上报方式\n async defaultReport(type, reportData) {\n const reportUrl = this.config.getReportUrl()\n const thirdPartyConfig = this.config.getThirdPartyConfig()\n\n // 上报到后端接口\n if (reportUrl) {\n await this.reportToBackend(reportUrl, reportData)\n }\n \n // 上报到第三方埋点\n if (thirdPartyConfig && Object.keys(thirdPartyConfig).length > 0) {\n await this.reportToThirdParty(thirdPartyConfig, reportData)\n }\n }\n \n // 上报到后端接口\n async reportToBackend(url, data) {\n // 优先使用 sendBeacon (适用于页面卸载等场景,性能更好)\n // 小于64kb\n if (navigator.sendBeacon && !this.isObjectOverSizeLimit(data, 60)) {\n // 创建 Blob 对象发送 JSON 数据\n // const blob = new Blob([JSON.stringify(data)], { // 会触发CORS预检请求\n // type: 'application/json'\n // })\n const formData = new FormData();\n formData.append('events', JSON.stringify(data));\n const success = navigator.sendBeacon(url, formData)\n if (this.config.getConfig().debugSwitch) {\n console.log('上报数据:', url,data)\n }\n if (!success) {\n return await this.reportViaAxios(url, formData)\n }\n } else {\n // 不支持 sendBeacon,使用 axios\n if (this.config.getConfig().debugSwitch) {\n console.warn('浏览器不支持 sendBeacon,使用 axios')\n }\n return await this.reportViaAxios(url, data)\n }\n }\n \n // 使用 axios 上报(降级方案)\n async reportViaAxios(url, data) {\n try {\n const response = await axiosInstance.post(url, data)\n return response.data\n } catch (error) {\n console.error('后端上报失败:', error)\n }\n }\n \n // 上报到第三方埋点\n async reportToThirdParty(config, data) {\n const promises = []\n \n // 百度统计\n if (config.baidu && window._hmt) {\n promises.push(this.reportToBaidu(config.baidu, data))\n }\n \n // 友盟统计\n if (config.umeng && window._um) {\n promises.push(this.reportToUmeng(config.umeng, data))\n }\n \n // 神策数据\n if (config.sensors && window.sensors) {\n promises.push(this.reportToSensors(config.sensors, data))\n }\n \n // 腾讯云分析\n if (config.tencent && window.MTA) {\n promises.push(this.reportToTencent(config.tencent, data))\n }\n \n // 自定义第三方\n if (config.custom) {\n promises.push(this.reportToCustom(config.custom, data))\n }\n \n try {\n await Promise.allSettled(promises)\n } catch (error) {\n console.error('第三方上报失败:', error)\n }\n }\n \n // 上报到百度统计\n async reportToBaidu(config, data) {\n if (window._hmt) {\n window._hmt.push(['_trackEvent', data.type, JSON.stringify(data.data)])\n }\n }\n \n // 上报到友盟统计\n async reportToUmeng(config, data) {\n if (window._um) {\n window._um.push(['track', data.type, data.data])\n }\n }\n \n // 上报到神策数据\n async reportToSensors(config, data) {\n if (window.sensors) {\n window.sensors.track(data.type, data.data[0] || {})\n }\n }\n \n // 上报到腾讯云分析\n async reportToTencent(config, data) {\n if (window.MTA) {\n window.MTA.Event.stat(data.type, data.data[0] || {})\n }\n }\n \n // 上报到自定义第三方\n async reportToCustom(config, data) {\n if (typeof config.report === 'function') {\n await config.report(data)\n }\n }\n // 判断数据大小\n isObjectOverSizeLimit(object,limitInKB) {\n const serializedObject = JSON.stringify(object)\n const sizeInBytes = new TextEncoder().encode(serializedObject).length\n const sizeInKB = sizeInBytes / 1024\n return sizeInKB > limitInKB\n }\n}\n","/* eslint-disable */\n// 错误追踪器\nimport { Reporter } from './reporter'\n\nexport class ErrorTracker {\n constructor(config) {\n this.config = config\n this.reporter = new Reporter(config)\n this.errorQueue = []\n this.isInitialized = false\n this.reportTimer = null\n \n // 防重复触发的机制\n this.errorCache = new Map() // 缓存已处理的错误\n this.errorCacheTimeout = 5000 // 5秒内的相同错误将被忽略\n this.maxCacheSize = 100 // 最大缓存错误数量\n \n // 错误指纹生成器\n this.errorFingerprint = this.createErrorFingerprint.bind(this)\n \n // 防抖定时器\n this.errorTimeout = null\n this.resourceErrorTimeout = null\n this.lastResourceError = null\n }\n \n // 创建错误指纹(用于识别重复错误)\n createErrorFingerprint(error, context) {\n const message = error?.message || error?.toString() || error\n const stack = error?.stack || context.stack\n const type = context.type || 'unknown'\n const url = window.location.href\n \n // 生成错误指纹\n return `${type}:${message}:${url}:${stack ? stack.split('\\n')[0] : ''}`\n }\n \n // 检查是否为重复错误\n isDuplicateError(error, context) {\n const fingerprint = this.errorFingerprint(error, context)\n const now = Date.now()\n \n // 清理过期的缓存\n this.cleanupErrorCache(now)\n \n // 检查是否已存在相同指纹的错误\n if (this.errorCache.has(fingerprint)) {\n const lastTime = this.errorCache.get(fingerprint)\n if (now - lastTime < this.errorCacheTimeout) {\n return true // 是重复错误\n }\n }\n \n // 添加到缓存\n this.errorCache.set(fingerprint, now)\n \n // 限制缓存大小\n if (this.errorCache.size > this.maxCacheSize) {\n const firstKey = this.errorCache.keys().next().value\n this.errorCache.delete(firstKey)\n }\n \n return false\n }\n \n // 清理过期的错误缓存\n cleanupErrorCache(now) {\n for (const [fingerprint, timestamp] of this.errorCache.entries()) {\n if (now - timestamp > this.errorCacheTimeout) {\n this.errorCache.delete(fingerprint)\n }\n }\n }\n \n init() {\n if (this.isInitialized) return\n \n const config = this.config.getConfig()\n \n // 监听 JavaScript 错误和资源加载错误(统一处理)\n if (config.enableErrorTracking || config.enableResourceError) {\n this.setupErrorListener()\n }\n \n // 监听未处理的 Promise 拒绝\n if (config.enableUnhandledRejection) {\n this.setupUnhandledRejectionListener()\n }\n \n // 设置定时上报\n if (config.reportInterval > 0) {\n this.setupPeriodicReport()\n }\n \n this.isInitialized = true\n }\n \n // 设置定时上报\n setupPeriodicReport() {\n const interval = this.config.getConfig().reportInterval\n if (interval > 0) {\n // 清除之前的定时器(如果存在)\n if (this.reportTimer) {\n clearInterval(this.reportTimer)\n }\n // 保存定时器ID,以便后续清理\n this.reportTimer = setInterval(() => {\n this.flushErrorQueue()\n }, interval)\n }\n }\n \n // 设置错误监听器(统一处理 JavaScript 错误和资源错误)\n setupErrorListener() {\n window.addEventListener('error', (event) => {\n // 判断错误类型\n if (event.target && event.target !== window) {\n // 资源加载错误(JS 文件、CSS 文件、图片、视频等)\n this.handleResourceError(event)\n } else {\n // JavaScript 运行时错误\n this.handleJavaScriptError(event)\n }\n }, true)\n }\n \n // 处理 JavaScript 运行时错误\n handleJavaScriptError(event) {\n // 清除之前的定时器\n if (this.errorTimeout) {\n clearTimeout(this.errorTimeout)\n }\n \n // 延迟处理,避免重复触发\n this.errorTimeout = setTimeout(() => {\n this.handleError(event.error || event.message, {\n type: 'javascript',\n filename: event.filename,\n lineno: event.lineno,\n colno: event.colno,\n stack: event.error?.stack\n })\n }, 100)\n }\n \n // 处理资源加载错误\n handleResourceError(event) {\n const resourceKey = `${event.target.tagName}:${event.target.src || event.target.href}`\n \n // 检查是否为重复的资源错误\n if (this.lastResourceError === resourceKey) {\n if (this.config.getConfig().debugSwitch) {\n console.log('忽略重复的资源加载错误:', resourceKey)\n }\n return\n }\n \n this.lastResourceError = resourceKey\n \n // 清除之前的定时器\n if (this.resourceErrorTimeout) {\n clearTimeout(this.resourceErrorTimeout)\n }\n \n // 延迟处理,避免重复触发\n this.resourceErrorTimeout = setTimeout(() => {\n this.handleError(`Resource load failed: ${event.target.src || event.target.href}`, {\n type: 'resource',\n tagName: event.target.tagName,\n src: event.target.src,\n href: event.target.href\n })\n \n // 清理资源错误记录\n setTimeout(() => {\n this.lastResourceError = null\n }, 2000)\n }, 100)\n }\n \n // 设置未处理 Promise 拒绝监听器\n setupUnhandledRejectionListener() {\n // 使用防抖机制避免重复触发\n let rejectionTimeout = null\n let lastRejection = null\n // 只有这个错误看见错误数 行数\n window.addEventListener('unhandledrejection', (event) => {\n // 检查是否为重复的拒绝\n const rejectionKey = `${event.reason?.message || event.reason}:${event.reason?.stack || ''}`\n \n if (lastRejection === rejectionKey) {\n if (this.config.getConfig().debugSwitch) {\n console.log('忽略重复的 Promise 拒绝:', event.reason)\n }\n return\n }\n \n lastRejection = rejectionKey\n \n // 清除之前的定时器\n if (rejectionTimeout) {\n clearTimeout(rejectionTimeout)\n }\n \n // 延迟处理,避免重复触发\n rejectionTimeout = setTimeout(() => {\n this.handleError(event.reason, {\n type: 'unhandledrejection',\n stack: event.reason?.stack\n })\n \n // 清理拒绝记录\n setTimeout(() => {\n lastRejection = null\n }, 1000)\n }, 100)\n })\n }\n \n // 处理错误\n handleError(error, context = {}) {\n // 检查是否为重复错误\n if (this.isDuplicateError(error, context)) {\n if (this.config.getConfig().debugSwitch) {\n console.log('忽略重复错误:', error?.message || error)\n }\n return\n }\n\n // 解析错误堆栈,提取关键信息\n const parsedStackInfo = this.parseStack(error)\n\n const errorInfo = {\n message: error?.message || error?.toString() || error,\n stack: error?.stack || context.stack,\n type: context.type || 'unknown',\n timestamp: Date.now(),\n url: window.location.href,\n userAgent: navigator.userAgent,\n // 添加解析后的堆栈信息\n fileName: parsedStackInfo.fileName,\n lineNumber: parsedStackInfo.lineNumber,\n columnNumber: parsedStackInfo.columnNumber,\n functionName: parsedStackInfo.functionName,\n stackFrames: parsedStackInfo.stackFrames,\n ...context\n }\n \n // 添加到队列\n this.errorQueue.push(errorInfo)\n\n // if (this.config.getConfig().debugSwitch) { \n // console.log('errorInfo-----', errorInfo)\n // }\n // 立即上报或延迟上报\n if (this.config.getConfig().reportInterval === 0) {\n this.reporter.report('error', [errorInfo])\n } else if (this.errorQueue.length >= this.config.getConfig().maxQueueSize) { // 检查队列大小\n this.flushErrorQueue()\n }\n }\n\n // 解析错误堆栈,提取关键信息\n parseStack(error) {\n const stack = error?.stack || ''\n const message = error?.message || error?.toString() || ''\n \n const result = { \n errMessage: message, \n errStack: stack,\n fileName: '',\n lineNumber: '',\n columnNumber: '',\n functionName: '',\n stackFrames: []\n }\n\n if (!stack) {\n return result\n }\n\n try {\n // Chrome/Edge 堆栈格式: at functionName (file:line:col) 或 at file:line:col\n const rChromeCallStack1 = /^\\s*at\\s+([^(]+?)\\s+\\((.+?):(\\d+):(\\d+)\\)$/\n const rChromeCallStack2 = /^\\s*at\\s+(.+?):(\\d+):(\\d+)$/\n // Firefox/Safari 堆栈格式: functionName@file:line:col\n const rMozillaCallStack = /^\\s*([^@]*)@(.+?):(\\d+):(\\d+)$/\n \n // 移除 Chrome 中的错误消息行\n let callStackStr = stack\n if (message && stack.startsWith(message)) {\n callStackStr = stack.substring(message.length).replace(/^\\n+/, '')\n } else if (stack.includes('\\n')) {\n const lines = stack.split('\\n')\n // 如果第一行包含错误消息,移除它\n if (lines[0] && !lines[0].trim().startsWith('at') && !lines[0].includes('@')) {\n callStackStr = lines.slice(1).join('\\n')\n }\n }\n \n // 解析每一行堆栈\n const stackLines = callStackStr.split('\\n').filter(line => line.trim())\n const stackFrames = []\n \n for (const line of stackLines) {\n let frameInfo = null\n \n // 尝试匹配 Chrome 格式1: at functionName (file:line:col)\n let match = line.match(rChromeCallStack1)\n if (match) {\n frameInfo = {\n functionName: match[1].trim(),\n fileName: match[2],\n lineNumber: parseInt(match[3]),\n columnNumber: parseInt(match[4])\n }\n } else {\n // 尝试匹配 Chrome 格式2: at file:line:col\n match = line.match(rChromeCallStack2)\n if (match) {\n frameInfo = {\n functionName: '',\n fileName: match[1],\n lineNumber: parseInt(match[2]),\n columnNumber: parseInt(match[3])\n }\n } else {\n // 尝试匹配 Firefox/Safari 格式: functionName@file:line:col\n match = line.match(rMozillaCallStack)\n if (match) {\n frameInfo = {\n functionName: match[1].trim(),\n fileName: match[2],\n lineNumber: parseInt(match[3]),\n columnNumber: parseInt(match[4])\n }\n }\n }\n }\n \n if (frameInfo) {\n stackFrames.push(frameInfo)\n }\n }\n \n // 获取第一个堆栈帧的信息(最顶层的错误位置)\n if (stackFrames.length > 0) {\n const firstFrame = stackFrames[0]\n result.fileName = firstFrame.fileName\n result.lineNumber = firstFrame.lineNumber\n result.columnNumber = firstFrame.columnNumber\n result.functionName = firstFrame.functionName\n }\n \n result.stackFrames = stackFrames\n \n } catch (parseError) {\n if (this.config?.getConfig()?.debugSwitch) {\n console.warn('解析堆栈失败:', parseError)\n }\n }\n \n return result\n }\n\n \n // 手动上报错误\n reportError(error, context = {}) {\n this.handleError(error, context)\n }\n \n // 刷新错误队列\n flushErrorQueue() {\n if (this.errorQueue.length > 0) {\n this.reporter.report('error', [...this.errorQueue])\n this.errorQueue = []\n }\n }\n \n // 销毁\n destroy() {\n if (this.config.getConfig().reportInterval > 0) {\n this.flushErrorQueue()\n }\n \n // 清除定时器,防止内存泄漏\n if (this.reportTimer) {\n clearInterval(this.reportTimer)\n this.reportTimer = null\n }\n \n this.isInitialized = false\n }\n} ","/* eslint-disable */\n// 事件追踪器\nimport { Reporter } from './reporter'\nimport { generateUniqueId, extractHashPath, getPageKey } from './utils'\n\nexport class EventTracker {\n constructor(config) {\n this.config = config\n this.reporter = new Reporter(config)\n this.eventQueue = []\n this.isInitialized = false\n this.clickListener = null\n this.pageViewListener = null\n this.reportTimer = null\n this.originalPushState = null\n this.originalReplaceState = null\n \n // 页面历史追踪\n this.pageHistory = [] // 页面历史记录\n this.currentPage = null // 当前页面信息\n this.currentPageStartTime = Date.now() // 当前页面开始时间\n this.previousPage = null // 上一个页面信息\n this.previousPageStayTime = 0 // 上一个页面停留时间\n \n // 路由停留时间相关\n this.currentRoute = null\n this.routeStartTime = Date.now()\n this.vueRouter = null\n }\n \n init() {\n if (this.isInitialized) return\n \n const config = this.config.getConfig()\n \n // 初始化当前页面信息(首次加载)\n this.currentPage = {\n url: window.location.href,\n title: document.title,\n enterTime: Date.now(),\n referrer: document.referrer\n }\n this.currentPageStartTime = Date.now()\n \n // 监听点击事件\n if (config.enableClickTracking) {\n this.setupClickTracking()\n }\n \n // 监听页面浏览\n if (config.enablePageViewTracking) {\n this.setupPageViewTracking()\n }\n \n // // 监听页面卸载,记录当前页面停留时间\n // window.addEventListener('beforeunload', () => {\n // this.handlePageUnload()\n // })\n \n // 监听页面可见性变化\n document.addEventListener('visibilitychange', () => {\n if (document.hidden) {\n // 页面隐藏时记录停留时间(如果用户切换标签页)\n // 这里可以选择是否记录,因为用户可能还会回来\n }\n })\n \n // 设置定时上报\n if (this.config.getConfig().reportInterval > 0) { \n this.setupPeriodicReport()\n }\n this.isInitialized = true\n }\n \n // 处理页面卸载\n // handlePageUnload() {\n // if (this.currentPage) {\n // const stayTime = Date.now() - this.currentPageStartTime\n // this.previousPage = {\n // ...this.currentPage,\n // stayTime: stayTime,\n // leaveTime: Date.now()\n // }\n // this.previousPageStayTime = stayTime\n // }\n // }\n \n // 设置点击追踪\n setupClickTracking() {\n this.clickListener = (event) => {\n const target = event.target\n const clickData = {\n type: 'click',\n timestamp: Date.now(),\n url: window.location.href,\n element: {\n tagName: target.tagName,\n className: target.className,\n id: target.id,\n text: target.textContent?.substring(0, 50)\n },\n position: {\n x: event.clientX,\n y: event.clientY\n }\n }\n \n this.handleEvent('click', clickData)\n }\n \n document.addEventListener('click', this.clickListener, true)\n }\n \n // 设置页面浏览追踪\n setupPageViewTracking() {\n const config = this.config.getConfig()\n const pageViewConfig = config.pageViewTracking || {}\n \n // 初始页面浏览\n // this.handleEvent('pageview', {\n // type: 'pageview',\n // timestamp: Date.now(),\n // url: window.location.href,\n // title: document.title,\n // referrer: document.referrer\n // })\n \n // 防重复触发的机制\n let lastPageViewUrl = window.location.href\n let lastPageViewTime = Date.now()\n const PAGEVIEW_DEBOUNCE = pageViewConfig.debounce || 100 // 可配置的防抖时间\n \n // 监听路由变化(适用于 SPA)\n this.pageViewListener = () => {\n const currentUrl = window.location.href\n const currentTime = Date.now()\n \n // 防重复触发:相同URL且时间间隔太短则忽略\n if (currentUrl === lastPageViewUrl && \n (currentTime - lastPageViewTime) < PAGEVIEW_DEBOUNCE && (this.config.getConfig().debugSwitch)) {\n console.log('忽略重复的页面浏览事件:', currentUrl)\n return\n }\n \n // 处理页面切换:记录上一个页面的停留时间\n this.handlePageChange(currentUrl, currentTime)\n lastPageViewUrl = currentUrl\n lastPageViewTime = currentTime\n // 更新最后触发的信息\n this.handleEvent('pageview', {\n uuid: generateUniqueId(),\n timestamp: currentTime,\n pageKey: getPageKey(extractHashPath(currentUrl), this.config.getConfig().uiVersion),\n pageUri: extractHashPath(currentUrl),\n eventType: 'VIEW'\n })\n }\n \n // 根据配置决定监听方式\n if (pageViewConfig.listenPopstate !== false) {\n // 监听 popstate 事件(浏览器前进后退)\n window.addEventListener('popstate', this.pageViewListener)\n }\n \n if (pageViewConfig.listenHistoryAPI !== false) {\n // 重写 history 方法,监听编程式路由跳转\n // 保存原始方法,以便销毁时恢复\n this.originalPushState = history.pushState\n this.originalReplaceState = history.replaceState\n \n history.pushState = function(...args) {\n this.originalPushState.apply(history, args)\n // 使用 setTimeout 确保 URL 已更新\n setTimeout(() => {\n this.pageViewListener()\n }, 0)\n }.bind(this)\n \n history.replaceState = function(...args) {\n this.originalReplaceState.apply(history, args)\n // 使用 setTimeout 确保 URL 已更新\n setTimeout(() => {\n this.pageViewListener()\n }, 0)\n }.bind(this)\n }\n \n // 如果使用 Vue Router,可以选择只监听一种方式\n if (pageViewConfig.vueRouterMode) {\n if (this.config.getConfig().debugSwitch) {\n console.log('Vue Router 模式:页面浏览追踪已优化')\n }\n this.pageViewListener()\n }\n }\n \n // 设置定时上报\n setupPeriodicReport() {\n const interval = this.config.getConfig().reportInterval\n if (interval > 0) {\n // 清除之前的定时器(如果存在)\n if (this.reportTimer) {\n clearInterval(this.reportTimer)\n }\n // 保存定时器ID,以便后续清理\n this.reportTimer = setInterval(() => {\n this.flushEventQueue()\n }, interval)\n }\n }\n \n // 处理页面切换\n handlePageChange(newUrl, currentTime) {\n // 如果有上一个页面,计算停留时间\n if (this.currentPage) {\n // const stayTime = currentTime - this.currentPageStartTime\n \n // 保存上一个页面信息\n this.previousPage = {\n ...this.currentPage,\n // stayTime: stayTime,\n // leaveTime: currentTime\n }\n // this.previousPageStayTime = stayTime\n \n // 添加到页面历史\n this.pageHistory.push({\n ...this.previousPage\n })\n \n // 限制历史记录数量(最多保留20条)\n if (this.pageHistory.length > 20) {\n this.pageHistory.shift()\n }\n \n // if (this.config.getConfig().debugSwitch) {\n // console.log(`页面切换: ${this.currentPage.url} → ${newUrl},停留时间: ${stayTime}ms`)\n // }\n }\n \n // 设置当前页面信息\n this.currentPage = {\n url: newUrl,\n title: document.title,\n enterTime: currentTime,\n referrer: document.referrer\n }\n this.currentPageStartTime = currentTime\n }\n \n // 设置Vue Router监控\n setupVueRouterMonitoring(router) {\n if (!router || this.vueRouter) return\n \n this.vueRouter = router\n this.currentRoute = router.currentRoute.value\n \n // 路由前置守卫 - 记录路由离开时间\n router.beforeEach((to, from, next) => {\n if (from.name) {\n this.handleRouteLeave(from, to)\n }\n next()\n })\n \n // 路由后置守卫 - 记录路由进入时间\n router.afterEach((to, from) => {\n this.handleRouteEnter(to, from)\n })\n \n // 监听路由变化\n router.beforeResolve((to, from, next) => {\n if (from.name) {\n this.calculateRouteStayTime(from)\n }\n next()\n })\n \n if (this.config?.getConfig()?.debugSwitch) {\n console.log('Vue Router 监控已设置')\n }\n }\n \n // 处理路由离开\n handleRouteLeave(from, to) {\n const stayTime = Date.now() - this.routeStartTime\n \n // 记录路由停留时间\n this.recordRouteStayTime(from, stayTime)\n \n // 更新当前路由信息\n this.currentRoute = from\n this.routeStartTime = Date.now()\n }\n \n // 处理路由进入\n handleRouteEnter(to, from) {\n // 设置新路由的开始时间\n this.routeStartTime = Date.now()\n this.currentRoute = to\n \n // 记录路由进入\n this.recordRouteEnter(to, from)\n }\n \n // 记录路由停留时间\n recordRouteStayTime(route, stayTime) {\n // 更新 previousPage 对象\n // this.previousPage = {\n // name: route.name || 'unknown',\n // path: route.path,\n // fullPath: route.fullPath,\n // stayTime: stayTime,\n // enterTime: this.routeStartTime,\n // leaveTime: Date.now(),\n // params: route.params,\n // query: route.query,\n // meta: route.meta,\n // // 兼容原有的 url 和 title\n // url: route.fullPath || route.path,\n // title: route.meta?.title || route.name || 'unknown'\n // }\n this.previousPage.stayTime = stayTime\n this.previousPageStayTime = stayTime\n \n if (this.config?.getConfig()?.debugSwitch) {\n console.log('路由停留时间数据', this.previousPage)\n }\n }\n \n // 记录路由进入\n recordRouteEnter(to, from) {\n if (this.config?.getConfig()?.debugSwitch) {\n console.log(`进入路由: ${to.name || to.path}`)\n }\n }\n \n // 计算路由停留时间\n calculateRouteStayTime(route) {\n if (!this.routeStartTime) return 0\n \n const stayTime = Date.now() - this.routeStartTime\n return stayTime\n }\n \n // 获取当前路由信息\n getCurrentRoute() {\n return this.currentRoute\n }\n \n // 获取上一个页面信息\n getPreviousPageInfo() {\n return {\n previousPage: this.previousPage ? {\n url: this.previousPage.url,\n title: this.previousPage.title,\n stayTime: this.previousPageStayTime\n } : null,\n previousPageStayTime: this.previousPageStayTime\n }\n }\n \n // 获取当前页面停留时间\n getCurrentPageStayTime() {\n if (!this.currentPageStartTime) return 0\n return Date.now() - this.currentPageStartTime\n }\n \n // 获取当前路由停留时间\n getCurrentRouteStayTime() {\n if (!this.routeStartTime) return 0\n return Date.now() - this.routeStartTime\n }\n \n // 处理事件\n handleEvent(eventName, data) {\n // 获取上一个页面信息(作为基本信息)\n const previousPageInfo = this.getPreviousPageInfo()\n const eventInfo = {\n // eventName,\n ...data,\n tags: {\n ...data.tags,\n // 添加页面基本信息\n refer: extractHashPath(previousPageInfo?.previousPage?.url),\n duration: previousPageInfo?.previousPageStayTime\n }\n }\n // 添加到队列\n this.eventQueue.push(eventInfo)\n\n // if (this.config.getConfig().debugSwitch) { \n // console.log('eventInfo----', eventInfo)\n // }\n // 立即上报或延迟上报\n if (this.config.getConfig().reportInterval === 0) {\n this.reporter.report('event', [eventInfo])\n } else if (this.eventQueue.length >= this.config.getConfig().maxQueueSize) { // 检查队列大小\n this.flushEventQueue()\n }\n }\n \n // 手动上报事件\n reportEvent(eventName, data = {}) {\n const eventInfo = {\n uuid: generateUniqueId(),\n timestamp: Date.now(),\n // actionKey: eventName,\n pageKey: getPageKey(extractHashPath(window.location.href), this.config.getConfig().uiVersion),\n pageUri: extractHashPath(window.location.href),\n eventType: 'CLICK',\n tags: {\n actionKey: eventName,\n ...data,\n }\n }\n \n // CREATE_ORDER 事件立即上报,其他事件走队列\n if (eventName === 'CREATE_ORDER') {\n // 立即上报,不进入队列\n this.reporter.report('event', [eventInfo]).catch(error => {\n console.error('CREATE_ORDER 事件上报失败:', error)\n if (this.config.getConfig().debugSwitch) {\n console.error('CREATE_ORDER 事件上报失败详情:', error)\n }\n })\n } else {\n // 其他事件走队列\n this.handleEvent(eventName, eventInfo)\n }\n }\n\n // 手动上报页面浏览事件\n reportCustomEvent(eventName, data = {}) {\n const eventInfo = {\n uuid: generateUniqueId(),\n timestamp: Date.now(),\n // actionKey: eventName,\n pageKey: data?.pageKey || getPageKey(extractHashPath(window.location.href), this.config.getConfig().uiVersion),\n pageUri: data?.pageUri || extractHashPath(window.location.href),\n eventType: data.eventType || 'VIEW',\n tags: {\n ...data.tags,\n // 添加页面基本信息\n refer: data.refer,\n duration: 0\n }\n }\n // 添加到队列\n this.eventQueue.push(eventInfo)\n }\n \n // 刷新事件队列\n flushEventQueue() {\n if (this.eventQueue.length > 0) {\n this.reporter.report('event', [...this.eventQueue])\n this.eventQueue = []\n }\n }\n \n // 销毁\n destroy() {\n this.flushEventQueue()\n \n // 清除定时器,防止内存泄漏\n if (this.reportTimer) {\n clearInterval(this.reportTimer)\n this.reportTimer = null\n }\n \n // 移除点击事件监听器\n if (this.clickListener) {\n document.removeEventListener('click', this.clickListener, true)\n this.clickListener = null\n }\n \n // 移除页面浏览事件监听器\n if (this.pageViewListener) {\n window.removeEventListener('popstate', this.pageViewListener)\n this.pageViewListener = null\n }\n \n // 恢复原始的 history 方法,防止内存泄漏\n if (this.originalPushState) {\n history.pushState = this.originalPushState\n this.originalPushState = null\n }\n \n if (this.originalReplaceState) {\n history.replaceState = this.originalReplaceState\n this.originalReplaceState = null\n }\n \n this.isInitialized = false\n }\n} ","/* eslint-disable */\n// 性能监控器\nimport { Reporter } from './reporter'\nimport { performanceNow, generateUniqueId, extractHashPath, getPageKey, uniqueArr } from './utils'\n\nexport class PerformanceTracker {\n constructor(config, eventTracker = null) {\n this.config = config\n this.reporter = new Reporter(config)\n this.eventTracker = eventTracker // 事件追踪器引用,用于获取页面信息\n this.isInitialized = false\n this.pageStartTime = Date.now()\n this.performanceQueue = []\n this.thirdPartySDKs = {}\n this.reportTimer = null\n \n // 页面浏览时间相关\n this.currentRoute = null\n this.routeStartTime = Date.now()\n this.routeHistory = []\n this.vueRouter = null\n \n // 性能指标\n this.metrics = {\n fcp: 0, // First Contentful Paint\n lcp: 0, // Largest Contentful Paint\n fid: 0, // First Input Delay\n cls: 0, // Cumulative Layout Shift\n ttfb: 0, // Time to First Byte\n domLoad: 0, // DOM加载时间\n windowLoad: 0, // 页面完全加载时间\n resourceLoad: [], // 资源加载时间\n apiRequests: [], // API请求时间\n pageStayTime: 0, // 页面停留时间\n previousPageUrl: '', // 上一个页面地址\n currentPageUrl: '' // 当前页面地址\n }\n }\n \n init() {\n if (this.isInitialized) return\n \n const config = this.config.getConfig()\n \n // 监控页面性能\n if (config.enablePerformanceTracking) {\n this.setupPerformanceMonitoring()\n }\n \n // 监控资源加载 有问题需要优化 有需要时\n if (config.enableResourceTracking) {\n this.setupResourceMonitoring()\n }\n \n // 监控API请求\n if (config.enableApiTracking) {\n this.setupApiMonitoring()\n }\n \n // 监控用户交互性能\n if (config.enableInteractionTracking) {\n this.setupInteractionMonitoring()\n }\n \n // 初始化第三方SDK\n this.initThirdPartySDKs()\n \n // 设置定时上报\n if (config.reportInterval > 0) {\n this.setupPeriodicReport()\n }\n \n this.isInitialized = true\n }\n \n // 设置定时上报\n setupPeriodicReport() {\n const interval = this.config.getConfig().reportInterval\n if (interval > 0) {\n // 清除之前的定时器(如果存在)\n if (this.reportTimer) {\n clearInterval(this.reportTimer)\n }\n // 保存定时器ID,以便后续清理\n this.reportTimer = setInterval(() => {\n this.flushPerformanceQueue()\n }, interval)\n }\n }\n \n // 设置Vue Router监控\n setupVueRouterMonitoring(router) {\n if (!router || this.vueRouter) return\n \n this.vueRouter = router\n this.currentRoute = router.currentRoute.value\n \n // 路由前置守卫 - 记录路由离开时间\n router.beforeEach((to, from, next) => {\n if (from.name) {\n this.handleRouteLeave(from, to)\n }\n next()\n })\n \n // 路由后置守卫 - 记录路由进入时间\n router.afterEach((to, from) => {\n this.handleRouteEnter(to, from)\n })\n \n // 监听路由变化\n router.beforeResolve((to, from, next) => {\n if (from.name) {\n this.calculateRouteStayTime(from)\n }\n next()\n })\n // if (this.config?.config?.debugSwitch) {\n // console.log('Vue Router 监控已设置')\n // }\n }\n \n // 处理路由离开\n handleRouteLeave(from, to) {\n const stayTime = Date.now() - this.routeStartTime\n \n // 记录路由停留时间\n this.recordRouteStayTime(from, stayTime)\n \n // 更新当前路由信息\n this.currentRoute = from\n this.routeStartTime = Date.now()\n }\n \n // 处理路由进入\n handleRouteEnter(to, from) {\n // 设置新路由的开始时间\n this.routeStartTime = Date.now()\n this.currentRoute = to\n \n // 记录路由进入\n this.recordRouteEnter(to, from)\n }\n \n // 记录路由停留时间\n recordRouteStayTime(route, stayTime) {\n const routeInfo = {\n name: route.name || 'unknown',\n path: route.path,\n fullPath: route.fullPath,\n stayTime,\n enterTime: this.routeStartTime,\n leaveTime: Date.now(),\n params: route.params,\n query: route.query,\n meta: route.meta\n }\n \n this.routeHistory.push(routeInfo)\n \n // 更新性能指标\n this.metrics.pageStayTime = stayTime\n // 更新上一个页面地址(当前离开的页面\n this.metrics.previousPageUrl = route.name\n \n // 上报路由停留时间\n this.reportRouteStayTime(routeInfo)\n if (this.config?.config?.debugSwitch) {\n console.log('路由数据', routeInfo)\n }\n }\n \n // 记录路由进入\n recordRouteEnter(to, from) {\n const routeInfo = {\n name: to.name || 'unknown',\n path: to.path,\n fullPath: to.fullPath,\n enterTime: Date.now(),\n params: to.params,\n query: to.query,\n meta: to.meta,\n fromRoute: from ? {\n name: from.name,\n path: from.path\n } : null\n }\n \n // 更新当前页面地址\n this.metrics.currentPageUrl = to.name\n \n if (this.config?.config?.debugSwitch) {\n console.log(`进入路由: ${to.name || to.path}`)\n }\n }\n \n // 计算路由停留时间\n calculateRouteStayTime(route) {\n if (!this.routeStartTime) return 0\n \n const stayTime = Date.now() - this.routeStartTime\n return stayTime\n }\n \n // 上报路由停留时间\n reportRouteStayTime(routeInfo) {\n const routeData = {\n type: 'route_stay_time',\n timestamp: Date.now(),\n route: routeInfo,\n user: this.config.getUser(),\n device: this.getDeviceInfo()\n }\n \n this.reporter.report('route_performance', [routeData])\n }\n \n // 获取当前路由信息\n getCurrentRoute() {\n return this.currentRoute\n }\n \n // 获取路由历史\n getRouteHistory() {\n return [...this.routeHistory]\n }\n \n // 获取当前页面停留时间\n getCurrentPageStayTime() {\n if (!this.routeStartTime) return 0\n return Date.now() - this.routeStartTime\n }\n \n // 获取路由性能统计\n getRoutePerformanceStats() {\n const stats = {\n totalRoutes: this.routeHistory.length,\n averageStayTime: 0,\n routesByPath: new Map(),\n totalStayTime: 0\n }\n \n if (this.routeHistory.length > 0) {\n this.routeHistory.forEach(route => {\n stats.totalStayTime += route.stayTime\n \n // 按路径分组统计\n if (!stats.routesByPath.has(route.path)) {\n stats.routesByPath.set(route.path, {\n count: 0,\n totalStayTime: 0,\n averageStayTime: 0\n })\n }\n \n const pathStats = stats.routesByPath.get(route.path)\n pathStats.count++\n pathStats.totalStayTime += route.stayTime\n pathStats.averageStayTime = pathStats.totalStayTime / pathStats.count\n })\n \n stats.averageStayTime = stats.totalStayTime / stats.totalRoutes\n }\n \n return stats\n }\n \n // 设置性能监控\n setupPerformanceMonitoring() {\n // 等待页面加载完成\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n this.captureDOMLoadTime()\n })\n } else {\n this.captureDOMLoadTime()\n }\n \n window.addEventListener('load', () => {\n this.captureWindowLoadTime()\n this.captureWebVitals()\n this.reportPerformanceMetrics()\n })\n // 监控页面可见性变化 tab切换时使用\n // document.addEventListener('visibilitychange', () => {\n // if (document.hidden) {\n // this.handlePageHidden()\n // } else {\n // this.handlePageVisible()\n // }\n // })\n }\n \n // 设置资源监控\n setupResourceMonitoring() {\n // 监控资源加载\n if (typeof window !== 'undefined' && 'PerformanceObserver' in window) {\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (entry.entryType === 'resource') {\n this.handleResourceLoad(entry)\n }\n }\n })\n \n try {\n observer.observe({ entryTypes: ['resource'] })\n } catch (e) {\n // 降级方案:手动监控\n // this.setupResourceFallback()\n }\n }\n }\n \n // 设置API监控\n setupApiMonitoring() {\n // 拦截axios请求\n if (typeof window.axios !== 'undefined') {\n // 请求拦截器\n window.axios.interceptors.request.use((config) => {\n config._startTime = performanceNow()\n return config\n })\n \n // 响应拦截器\n window.axios.interceptors.response.use(\n (response) => {\n const endTime = performanceNow()\n const duration = endTime - response.config._startTime\n // if (this.config?.config?.debugSwitch) {\n // console.log('duration----', response.config.url, duration, response.status)\n // }\n this.handleApiRequest(response.config.url, duration, response.status)\n return response\n },\n (error) => {\n if (error.config) {\n const endTime = performanceNow()\n const duration = endTime - error.config._startTime\n // if (this.config?.config?.debugSwitch) { \n // console.log('duration----', error.config.url, duration, 'error')\n // }\n this.handleApiRequest(error.config.url, duration, 'error')\n }\n throw error\n }\n )\n }\n }\n \n // 设置交互监控\n setupInteractionMonitoring() {\n // 监控用户交互延迟\n let firstInputTime = 0\n let firstInputDelay = 0\n \n const handleFirstInput = (event) => {\n if (firstInputTime === 0) {\n firstInputTime = performanceNow()\n firstInputDelay = firstInputTime - this.metrics.fcp\n \n this.metrics.fid = firstInputDelay\n \n // 移除事件监听器\n document.removeEventListener('click', handleFirstInput, true)\n document.removeEventListener('keydown', handleFirstInput, true)\n document.removeEventListener('touchstart', handleFirstInput, true)\n }\n }\n \n document.addEventListener('click', handleFirstInput, true)\n document.addEventListener('keydown', handleFirstInput, true)\n document.addEventListener('touchstart', handleFirstInput, true)\n }\n \n // 捕获DOM加载时间\n captureDOMLoadTime() {\n this.metrics.domLoad = performanceNow()\n }\n \n // 捕获页面完全加载时间\n captureWindowLoadTime() {\n this.metrics.windowLoad = performanceNow()\n }\n \n // 捕获Web Vitals指标\n captureWebVitals() {\n // First Contentful Paint\n if (typeof window !== 'undefined' && 'PerformanceObserver' in window) {\n try {\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n // first-paint 从页面加载开始到第一个像素绘制到屏幕上的时间,也可以把 FP 理解成白屏时间\n // first-contentful-paint 从页面加载开始到所有页面内容在屏幕上完成渲染的时间\n if (entry.name === 'first-contentful-paint') {\n this.metrics.fcp = entry.startTime\n if (this.config?.config?.debugSwitch) {\n console.log('FCP:', entry.startTime)\n }\n }\n }\n })\n observer.observe({ type: \"paint\", buffered: true })\n } catch (e) {\n console.warn('FCP监控失败:', e)\n }\n }\n \n // Largest Contentful Paint 从页面加载开始到最大文本块或图像元素在屏幕上完成渲染的时间\n if (typeof window !== 'undefined' && 'PerformanceObserver' in window) {\n try {\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n this.metrics.lcp = entry.startTime\n }\n })\n observer.observe({ entryTypes: ['largest-contentful-paint'] })\n } catch (e) {\n console.warn('LCP监控失败:', e)\n }\n }\n \n // Cumulative Layout Shift 页面加载开始和其生命周期状态变为隐藏期间发生的所有意外布局偏移的累积分数\n if (typeof window !== 'undefined' && 'PerformanceObserver' in window) {\n try {\n let clsValue = 0\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (!entry.hadRecentInput) {\n clsValue += entry.value\n }\n }\n this.metrics.cls = clsValue\n })\n observer.observe({ entryTypes: ['layout-shift'] })\n } catch (e) {\n console.warn('CLS监控失败:', e)\n }\n }\n }\n \n // 处理资源加载\n handleResourceLoad(entry) {\n const resourceInfo = {\n name: entry.name,\n type: entry.initiatorType,\n duration: entry.duration,\n size: entry.transferSize,\n timestamp: Date.now()\n }\n \n this.metrics.resourceLoad.push(resourceInfo)\n \n // 检查资源加载性能\n if (entry.duration > 3000) { // 超过3秒的资源\n this.reportSlowResource(resourceInfo)\n }\n }\n \n // 处理API请求\n handleApiRequest(url, duration, status) {\n let previousPageInfo = {}\n if (this.eventTracker && typeof this.eventTracker.getPreviousPageInfo === 'function') {\n previousPageInfo = this.eventTracker.getPreviousPageInfo()\n }\n const apiInfo = {\n interfaceUrl: typeof url === 'string' ? url : url.toString(),\n interfaceDuration: duration,\n status,\n uuid: generateUniqueId(),\n timestamp: Date.now(),\n pageKey: getPageKey(extractHashPath(window.location.href), this.config.getConfig().uiVersion),\n pageUri: extractHashPath(window.location.href),\n eventType: 'INTERFACEDURATION',\n refer: extractHashPath(previousPageInfo?.previousPage?.url || ''),\n duration: previousPageInfo?.previousPageStayTime || 0,\n tags: {\n actionKey: ''\n }\n }\n \n // this.metrics.apiRequests.push(apiInfo)\n \n // 检查API性能\n if (duration > 5000) { // 超过5秒的API\n // this.reportSlowApi(apiInfo)\n } else {\n // // 接口时间 自己加的 根据最终情况判断\n this.performanceQueue.push(apiInfo)\n }\n }\n \n // 处理页面隐藏\n handlePageHidden() {\n this.calculatePageStayTime()\n }\n \n // 处理页面显示\n handlePageVisible() {\n this.pageStartTime = Date.now()\n }\n \n // 计算页面停留时间\n calculatePageStayTime() {\n const stayTime = Date.now() - this.pageStartTime\n this.reportPageStayTime(stayTime)\n }\n \n // 上报性能指标\n reportPerformanceMetrics() {\n // 延迟获取上一个页面信息,确保 eventTracker 已经初始化并记录页面信息\n // 使用 Promise.resolve().then() 确保在下一个事件循环中执行,此时 eventTracker 应该已经初始化完成\n setTimeout(() => {\n // 获取上一个页面信息(如果 eventTracker 可用)\n let previousPageInfo = {}\n if (this.eventTracker && typeof this.eventTracker.getPreviousPageInfo === 'function') {\n previousPageInfo = this.eventTracker.getPreviousPageInfo()\n }\n \n // 更新 metrics 中的页面地址信息\n // const currentPageUrl = extractHashPath(window.location.href)\n // this.metrics.currentPageUrl = currentPageUrl\n // this.metrics.previousPageUrl = extractHashPath(previousPageInfo?.previousPage?.url || '') || this.metrics.previousPageUrl\n \n const performanceData = {\n eventType: 'PERFORMANCE',\n uuid: generateUniqueId(),\n timestamp: Date.now(),\n pageKey: getPageKey(extractHashPath(window.location.href), this.config.getConfig().uiVersion),\n pageUri: extractHashPath(window.location.href),\n refer: extractHashPath(previousPageInfo?.previousPage?.url || ''),\n duration: previousPageInfo?.previousPageStayTime || 0,\n metrics: this.metrics\n }\n \n this.performanceQueue.push(performanceData)\n if (this.config.getConfig().debugSwitch) { \n console.log('Performance Data:', performanceData)\n }\n \n // 立即上报或延迟上报\n if (this.config.getConfig().reportInterval === 0) {\n this.reporter.report('performance', [performanceData])\n } else if (this.performanceQueue.length >= this.config.getConfig().maxQueueSize) {// 检查队列大小\n this.flushPerformanceQueue()\n }\n }, 100)\n }\n \n // 上报慢资源\n reportSlowResource(resourceInfo) {\n this.reporter.report('slow_resource', [resourceInfo])\n }\n \n // 上报慢API\n reportSlowApi(apiInfo) {\n this.reporter.report('slow_api', [apiInfo])\n }\n \n // 上报页面停留时间\n reportPageStayTime(stayTime) {\n const stayData = {\n type: 'page_stay',\n url: window.location.href,\n stayTime,\n timestamp: Date.now()\n }\n \n this.reporter.report('page_stay', [stayData])\n }\n \n // 获取设备信息\n getDeviceInfo() {\n return {\n screen: {\n width: screen.width,\n height: screen.height,\n availWidth: screen.availWidth,\n availHeight: screen.availHeight,\n colorDepth: screen.colorDepth,\n pixelDepth: screen.pixelDepth\n },\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight\n },\n connection: navigator.connection ? {\n effectiveType: navigator.connection.effectiveType,\n downlink: navigator.connection.downlink,\n rtt: navigator.connection.rtt\n } : null,\n memory: navigator.memory ? {\n usedJSHeapSize: navigator.memory.usedJSHeapSize,\n totalJSHeapSize: navigator.memory.totalJSHeapSize,\n jsHeapSizeLimit: navigator.memory.jsHeapSizeLimit\n } : null\n }\n }\n \n // 初始化第三方SDK\n initThirdPartySDKs() {\n const config = this.config.getThirdPartyConfig()\n \n // 百度统计\n if (config.baidu && window._hmt) {\n this.thirdPartySDKs.baidu = window._hmt\n }\n \n // 友盟统计\n if (config.umeng && window._um) {\n this.thirdPartySDKs.umeng = window._um\n }\n \n // 神策数据\n if (config.sensors && window.sensors) {\n this.thirdPartySDKs.sensors = window.sensors\n }\n \n // 腾讯云分析\n if (config.tencent && window.MTA) {\n this.thirdPartySDKs.tencent = window.MTA\n }\n }\n \n // 刷新性能队列\n flushPerformanceQueue() {\n if (this.performanceQueue.length > 0) {\n this.reporter.report('performance', [...this.performanceQueue])\n this.performanceQueue = []\n }\n }\n \n // 手动上报性能指标\n reportPerformance(metrics = {}) {\n const performanceData = {\n type: 'custom_performance',\n timestamp: Date.now(),\n url: window.location.href,\n metrics,\n user: this.config.getUser()\n }\n \n this.reporter.report('performance', [performanceData])\n }\n \n // 获取当前性能指标\n getCurrentMetrics() {\n return { ...this.metrics }\n }\n \n // 销毁\n destroy() {\n if (this.config.getConfig().reportInterval > 0) { \n this.flushPerformanceQueue()\n }\n \n // 清除定时器,防止内存泄漏\n if (this.reportTimer) {\n clearInterval(this.reportTimer)\n this.reportTimer = null\n }\n \n this.isInitialized = false\n }\n} ","/* eslint-disable */\n// 用户行为追踪器\nimport { Reporter } from './reporter'\n\nexport class UserBehaviorTracker {\n constructor(config) {\n this.config = config\n this.reporter = new Reporter(config)\n this.isInitialized = false\n this.behaviorQueue = []\n this.sessionId = this.generateSessionId()\n this.pageStartTime = Date.now()\n this.scrollDepth = 0\n this.mouseMovements = []\n this.keyStrokes = []\n this.formInteractions = []\n this.timeTracker = null\n this.reportTimer = null\n this.originalPushState = null\n this.originalReplaceState = null\n \n // 行为数据\n this.behaviors = {\n pageViews: [],\n clicks: [],\n scrolls: [],\n formSubmissions: [],\n navigation: [],\n timeOnPage: 0\n }\n }\n \n init() {\n if (this.isInitialized) return\n \n const config = this.config.getConfig()\n \n // 追踪页面浏览\n // if (config.enablePageViewTracking) {\n // this.setupPageViewTracking()\n // }\n \n // 追踪用户交互\n if (config.enableUserInteractionTracking) {\n this.setupUserInteractionTracking()\n }\n \n // 追踪表单行为\n if (config.enableFormTracking) {\n this.setupFormTracking()\n }\n \n // 追踪滚动行为\n if (config.enableScrollTracking) {\n this.setupScrollTracking()\n }\n \n // 追踪鼠标移动\n if (config.enableMouseTracking) {\n this.setupMouseTracking()\n }\n \n // 追踪键盘输入\n if (config.enableKeyboardTracking) {\n this.setupKeyboardTracking()\n }\n \n // 追踪页面停留时间\n this.setupTimeTracking()\n \n // 追踪访问来源\n // this.trackReferrer()\n \n // 设置定时上报\n if (config.reportInterval > 0) {\n this.setupPeriodicReport()\n }\n \n this.isInitialized = true\n }\n \n // 设置定时上报\n setupPeriodicReport() {\n const interval = this.config.getConfig().reportInterval\n if (interval > 0) {\n // 清除之前的定时器(如果存在)\n if (this.reportTimer) {\n clearInterval(this.reportTimer)\n }\n // 保存定时器ID,以便后续清理\n this.reportTimer = setInterval(() => {\n this.flushBehaviorQueue()\n }, interval)\n }\n }\n \n // 设置页面浏览追踪\n // setupPageViewTracking() {\n // // 初始页面浏览\n // this.trackPageView()\n \n // // 监听路由变化\n // this.setupRouteChangeTracking()\n \n // // 监听页面可见性变化\n // document.addEventListener('visibilitychange', () => {\n // if (document.hidden) {\n // this.handlePageHidden()\n // } else {\n // this.handlePageVisible()\n // }\n // })\n // }\n \n // 设置路由变化追踪\n // setupRouteChangeTracking() {\n // // 监听 popstate 事件\n // window.addEventListener('popstate', () => {\n // this.trackPageView()\n // })\n \n // // 监听 pushstate 和 replacestate\n // // 保存原始方法,以便销毁时恢复\n // this.originalPushState = history.pushState\n // this.originalReplaceState = history.replaceState\n \n // history.pushState = function(...args) {\n // this.originalPushState.apply(history, args)\n // setTimeout(() => {\n // this.trackPageView()\n // }, 0)\n // }.bind(this)\n \n // history.replaceState = function(...args) {\n // this.originalReplaceState.apply(history, args)\n // setTimeout(() => {\n // this.trackPageView()\n // }, 0)\n // }.bind(this)\n // }\n \n // 设置用户交互追踪\n setupUserInteractionTracking() {\n // 点击追踪\n document.addEventListener('click', (event) => {\n this.trackClick(event)\n }, true)\n \n // 双击追踪\n document.addEventListener('dblclick', (event) => {\n this.trackDoubleClick(event)\n }, true)\n \n // 右键点击追踪\n document.addEventListener('contextmenu', (event) => {\n this.trackRightClick(event)\n }, true)\n \n // 触摸事件追踪\n if ('ontouchstart' in window) {\n document.addEventListener('touchstart', (event) => {\n this.trackTouch(event)\n }, true)\n }\n }\n \n // 设置表单追踪\n setupFormTracking() {\n // 表单提交\n document.addEventListener('submit', (event) => {\n this.trackFormSubmission(event)\n }, true)\n \n // 表单字段变化\n document.addEventListener('change', (event) => {\n if (event.target.tagName === 'INPUT' || event.target.tagName === 'SELECT' || event.target.tagName === 'TEXTAREA') {\n this.trackFormFieldChange(event)\n }\n }, true)\n \n // 表单字段聚焦\n document.addEventListener('focus', (event) => {\n if (event.target.tagName === 'INPUT' || event.target.tagName === 'SELECT' || event.target.tagName === 'TEXTAREA') {\n this.trackFormFieldFocus(event)\n }\n }, true)\n \n // 表单字段失焦\n document.addEventListener('blur', (event) => {\n if (event.target.tagName === 'INPUT' || event.target.tagName === 'SELECT' || event.target.tagName === 'TEXTAREA') {\n this.trackFormFieldBlur(event)\n }\n }, true)\n }\n \n // 设置滚动追踪\n setupScrollTracking() {\n let scrollTimeout\n let lastScrollTop = 0\n \n document.addEventListener('scroll', () => {\n clearTimeout(scrollTimeout)\n scrollTimeout = setTimeout(() => {\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop\n const scrollHeight = document.documentElement.scrollHeight\n const clientHeight = document.documentElement.clientHeight\n \n // 计算滚动深度百分比\n const scrollDepth = Math.round((scrollTop / (scrollHeight - clientHeight)) * 100)\n \n if (scrollDepth > this.scrollDepth) {\n this.scrollDepth = scrollDepth\n this.trackScroll(scrollDepth, scrollTop)\n }\n }, 100)\n }, { passive: true })\n }\n \n // 设置鼠标移动追踪\n setupMouseTracking() {\n let mouseTimeout\n let mouseMovements = []\n \n document.addEventListener('mousemove', (event) => {\n clearTimeout(mouseTimeout)\n \n mouseMovements.push({\n x: event.clientX,\n y: event.clientY,\n timestamp: Date.now()\n })\n \n // 限制鼠标移动记录数量\n if (mouseMovements.length > 100) {\n mouseMovements.shift()\n }\n \n mouseTimeout = setTimeout(() => {\n if (mouseMovements.length > 10) {\n this.trackMouseMovement(mouseMovements)\n mouseMovements = []\n }\n }, 1000)\n }, { passive: true })\n }\n \n // 设置键盘追踪\n setupKeyboardTracking() {\n document.addEventListener('keydown', (event) => {\n // 不追踪密码字段\n if (event.target.type === 'password') return\n \n this.trackKeyStroke(event)\n }, true)\n }\n \n // 设置时间追踪\n setupTimeTracking() {\n // 清除之前的定时器(如果存在)\n if (this.timeTracker) {\n clearInterval(this.timeTracker)\n }\n \n // 每秒更新页面停留时间,保存定时器ID以便后续清理\n this.timeTracker = setInterval(() => {\n this.behaviors.timeOnPage += 1\n }, 1000)\n \n // 页面卸载时上报停留时间\n window.addEventListener('beforeunload', () => {\n this.reportTimeOnPage()\n })\n }\n \n // 追踪访问来源\n trackReferrer() {\n const referrer = document.referrer\n if (referrer) {\n const referrerData = {\n type: 'referrer',\n url: referrer,\n domain: this.extractDomain(referrer),\n timestamp: Date.now()\n }\n if (this.config.getConfig().debugSwitch) { \n console.log('referrerData----', referrerData)\n }\n this.behaviors.navigation.push(referrerData)\n this.reportBehavior('referrer', referrerData)\n }\n }\n \n // 追踪页面浏览\n trackPageView() {\n const pageViewData = {\n type: 'pageview',\n url: window.location.href,\n title: document.title,\n timestamp: Date.now(),\n sessionId: this.sessionId,\n referrer: document.referrer\n }\n \n this.behaviors.pageViews.push(pageViewData)\n this.reportBehavior('pageview', pageViewData)\n \n // 重置页面相关数据\n this.pageStartTime = Date.now()\n this.scrollDepth = 0\n }\n \n // 追踪点击\n trackClick(event) {\n const clickData = {\n type: 'click',\n element: {\n tagName: event.target.tagName,\n className: event.target.className,\n id: event.target.id,\n text: event.target.textContent?.substring(0, 50),\n href: event.target.href\n },\n position: {\n x: event.clientX,\n y: event.clientY,\n pageX: event.pageX,\n pageY: event.pageY\n },\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n \n this.behaviors.clicks.push(clickData)\n this.reportBehavior('click', clickData)\n }\n \n // 追踪双击\n trackDoubleClick(event) {\n const doubleClickData = {\n type: 'doubleclick',\n element: {\n tagName: event.target.tagName,\n className: event.target.className,\n id: event.target.id\n },\n position: {\n x: event.clientX,\n y: event.clientY\n },\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n \n this.reportBehavior('doubleclick', doubleClickData)\n }\n \n // 追踪右键点击\n trackRightClick(event) {\n const rightClickData = {\n type: 'rightclick',\n element: {\n tagName: event.target.tagName,\n className: event.target.className,\n id: event.target.id\n },\n position: {\n x: event.clientX,\n y: event.clientY\n },\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n \n this.reportBehavior('rightclick', rightClickData)\n }\n \n // 追踪触摸\n trackTouch(event) {\n const touchData = {\n type: 'touch',\n touches: Array.from(event.touches).map(touch => ({\n x: touch.clientX,\n y: touch.clientY,\n identifier: touch.identifier\n })),\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n \n this.reportBehavior('touch', touchData)\n }\n \n // 追踪表单提交\n trackFormSubmission(event) {\n const formData = {\n type: 'form_submission',\n form: {\n action: event.target.action,\n method: event.target.method,\n id: event.target.id,\n className: event.target.className\n },\n fields: this.getFormFields(event.target),\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n \n this.behaviors.formSubmissions.push(formData)\n this.reportBehavior('form_submission', formData)\n }\n \n // 追踪表单字段变化\n trackFormFieldChange(event) {\n const fieldData = {\n type: 'form_field_change',\n field: {\n name: event.target.name,\n type: event.target.type,\n value: event.target.type === 'password' ? '***' : event.target.value,\n id: event.target.id\n },\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n \n this.reportBehavior('form_field_change', fieldData)\n }\n \n // 追踪表单字段聚焦\n trackFormFieldFocus(event) {\n const focusData = {\n type: 'form_field_focus',\n field: {\n name: event.target.name,\n type: event.target.type,\n id: event.target.id\n },\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n \n this.reportBehavior('form_field_focus', focusData)\n }\n \n // 追踪表单字段失焦\n trackFormFieldBlur(event) {\n const blurData = {\n type: 'form_field_blur',\n field: {\n name: event.target.name,\n type: event.target.type,\n id: event.target.id\n },\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n \n this.reportBehavior('form_field_blur', blurData)\n }\n \n // 追踪滚动\n trackScroll(depth, scrollTop) {\n const scrollData = {\n type: 'scroll',\n depth: depth,\n scrollTop: scrollTop,\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n if (this.config.getConfig().debugSwitch) { \n console.log('scrollData---', scrollData)\n }\n this.reportBehavior('scroll', scrollData)\n }\n \n // 追踪鼠标移动\n trackMouseMovement(movements) {\n const mouseData = {\n type: 'mouse_movement',\n movements: movements,\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n if (this.config.getConfig().debugSwitch) { \n console.log('mouse_movement---', mouseData)\n }\n this.reportBehavior('mouse_movement', mouseData)\n }\n \n // 追踪键盘输入\n trackKeyStroke(event) {\n const keyData = {\n type: 'keystroke',\n key: event.key,\n code: event.code,\n ctrlKey: event.ctrlKey,\n shiftKey: event.shiftKey,\n altKey: event.altKey,\n metaKey: event.metaKey,\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n if (this.config.getConfig().debugSwitch) { \n console.log('keystroke---', keyData)\n }\n this.reportBehavior('keystroke', keyData)\n }\n \n // // 处理页面隐藏\n // handlePageHidden() {\n // this.reportTimeOnPage()\n // }\n \n // // 处理页面显示\n // handlePageVisible() {\n // this.pageStartTime = Date.now()\n // }\n \n // 上报页面停留时间\n // reportTimeOnPage() {\n // const timeData = {\n // type: 'time_on_page',\n // time: this.behaviors.timeOnPage,\n // url: window.location.href,\n // timestamp: Date.now(),\n // sessionId: this.sessionId\n // }\n // this.reportBehavior('time_on_page', timeData)\n // }\n \n // 上报行为数据\n reportBehavior(type, data) {\n const behaviorData = {\n type,\n data,\n user: this.config.getUser(),\n config: {\n appId: this.config.getConfig().appId,\n appVersion: this.config.getConfig().appVersion,\n // environment: this.config.getConfig().environment\n }\n }\n \n // 添加到队列\n this.behaviorQueue.push(behaviorData)\n // 立即上报或延迟上报\n if (this.config.getConfig().reportInterval === 0) {\n this.reporter.report('behavior', [behaviorData])\n } else if (this.behaviorQueue.length >= this.config.getConfig().maxQueueSize) { // 检查队列大小\n this.flushBehaviorQueue()\n }\n }\n \n // 手动上报行为\n reportCustomBehavior(eventName, data = {}) {\n const customData = {\n type: 'custom_behavior',\n eventName,\n ...data,\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n \n this.reportBehavior('custom_behavior', customData)\n }\n \n // 刷新行为队列\n flushBehaviorQueue() {\n if (this.behaviorQueue.length > 0) {\n this.reporter.report('behavior', [...this.behaviorQueue])\n this.behaviorQueue = []\n }\n }\n \n // 获取表单字段信息\n getFormFields(form) {\n const fields = []\n const formElements = form.elements\n \n for (let i = 0; i < formElements.length; i++) {\n const element = formElements[i]\n if (element.name) {\n fields.push({\n name: element.name,\n type: element.type,\n value: element.type === 'password' ? '***' : element.value\n })\n }\n }\n \n return fields\n }\n \n // 提取域名\n extractDomain(url) {\n try {\n return new URL(url).hostname\n } catch (e) {\n return url\n }\n }\n \n // 生成会话ID\n generateSessionId() {\n return 'session_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9)\n }\n \n // 获取当前行为数据\n getCurrentBehaviors() {\n return { ...this.behaviors }\n }\n \n // 获取会话ID\n getSessionId() {\n return this.sessionId\n }\n \n // 销毁\n destroy() {\n if (this.config.getConfig().reportInterval > 0) {\n this.flushBehaviorQueue()\n }\n this.reportTimeOnPage()\n \n // 清除上报定时器,防止内存泄漏\n if (this.reportTimer) {\n clearInterval(this.reportTimer)\n this.reportTimer = null\n }\n \n // 清除时间追踪定时器,防止内存泄漏\n if (this.timeTracker) {\n clearInterval(this.timeTracker)\n this.timeTracker = null\n }\n \n // 恢复原始的 history 方法,防止内存泄漏\n if (this.originalPushState) {\n history.pushState = this.originalPushState\n this.originalPushState = null\n }\n \n if (this.originalReplaceState) {\n history.replaceState = this.originalReplaceState\n this.originalReplaceState = null\n }\n \n this.isInitialized = false\n }\n} ","/* eslint-disable */\n// 商品曝光追踪器\n// 统计规则:商品元素50%以上面积进入可视区域,立即定义为1次曝光(不需要停留时间)\nimport { Reporter } from './reporter'\nimport { generateUniqueId, extractHashPath, getPageKey, uniqueArr } from './utils'\n\nexport class ExposureTracker {\n constructor(config, eventTracker = null) {\n this.config = config\n this.reporter = new Reporter(config)\n this.eventTracker = eventTracker // 事件追踪器引用,用于获取页面信息\n this.isInitialized = false\n this.observer = null\n this.trackedElements = new Map() // 存储被追踪的元素及其状态\n this.exposureQueue = [] // 曝光事件队列\n this.reportTimer = null\n this.scrollTimer = null // 滚动事件节流定时器\n this.useFallback = false // 是否使用降级方案\n this.lastReportTime = new Map() // 记录每个元素的上报时间,用于去重(key: elementId, value: timestamp)\n this.debounceTime = 500 // 去重时间间隔(毫秒),同一元素在500ms内只上报一次\n \n // 默认配置\n this.defaultOptions = {\n threshold: 0.5, // 可见面积阈值:50%\n rootMargin: '0px', // 根边距\n scrollThrottle: 100 // 滚动事件节流时间(毫秒),降级方案使用\n }\n }\n \n init() {\n if (this.isInitialized) return\n \n // 检查浏览器是否支持 Intersection Observer\n if (this.isIntersectionObserverSupported()) {\n // 使用 Intersection Observer API(推荐方案)\n this.createObserver()\n this.useFallback = false\n \n if (this.config.getConfig().debugSwitch) {\n console.log('曝光追踪器初始化完成(使用 Intersection Observer API)')\n }\n } else {\n // 使用降级方案(滚动事件 + getBoundingClientRect)\n this.setupFallbackTracking()\n this.useFallback = true\n \n if (this.config.getConfig().debugSwitch) {\n console.warn('浏览器不支持 Intersection Observer,使用降级方案(滚动事件追踪)')\n }\n }\n \n // 设置定时上报\n const config = this.config.getConfig()\n if (config.reportInterval > 0) {\n this.setupPeriodicReport()\n }\n \n this.isInitialized = true\n \n if (config.debugSwitch) {\n console.log('曝光追踪器初始化完成')\n }\n }\n \n // 检查浏览器是否支持 Intersection Observer\n isIntersectionObserverSupported() {\n return (\n typeof window !== 'undefined' &&\n 'IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype\n )\n }\n \n // 创建 Intersection Observer\n createObserver() {\n const options = {\n root: null, // 使用视口作为根\n rootMargin: this.defaultOptions.rootMargin,\n threshold: [0, 0.5, 1] // 监听0%、50%、100%的可见性变化\n }\n \n this.observer = new IntersectionObserver((entries) => {\n entries.forEach(entry => {\n this.handleIntersection(entry)\n })\n }, options)\n }\n \n // 处理元素交叉状态变化\n handleIntersection(entry) {\n const element = entry.target\n const elementId = this.getElementId(element)\n \n // 获取元素的曝光配置\n const config = this.getElementConfig(element)\n const threshold = config.threshold || this.defaultOptions.threshold\n \n // 计算可见面积比例\n const visibleRatio = entry.intersectionRatio\n \n // 判断元素是否达到曝光阈值(50%以上可见)\n const isThresholdMet = visibleRatio >= threshold\n \n // if (this.config.getConfig().debugSwitch) {\n // console.log(`元素 ${elementId} 可见性检查:`, {\n // visibleRatio: (visibleRatio * 100).toFixed(2) + '%',\n // threshold: (threshold * 100).toFixed(2) + '%',\n // isThresholdMet\n // })\n // }\n \n // 只要达到阈值就立即上报,但需要去重(避免短时间内重复上报)\n if (isThresholdMet) {\n // 获取元素状态(如果不存在则创建)\n if (!this.trackedElements.has(elementId)) {\n this.trackedElements.set(elementId, {\n element,\n config\n })\n }\n \n const elementState = this.trackedElements.get(elementId)\n \n // 检查是否需要去重\n const now = Date.now()\n const lastReportTime = this.lastReportTime.get(elementId) || 0\n const timeSinceLastReport = now - lastReportTime\n \n if (timeSinceLastReport >= this.debounceTime) {\n // 距离上次上报时间超过去重间隔,可以上报\n this.lastReportTime.set(elementId, now)\n \n // 立即触发曝光\n this.triggerExposure(element, elementId, elementState, visibleRatio, 0)\n \n // if (this.config.getConfig().debugSwitch) {\n // console.log(`元素 ${elementId} 进入可视区域,可见比例: ${(visibleRatio * 100).toFixed(2)}%,立即触发曝光`)\n // }\n } else {\n // 距离上次上报时间太短,跳过本次上报\n if (this.config.getConfig().debugSwitch) {\n console.log(`元素 ${elementId} 跳过上报(去重),距离上次上报 ${timeSinceLastReport}ms,需要间隔 ${this.debounceTime}ms`)\n }\n }\n }\n }\n \n // 触发曝光事件\n triggerExposure(element, elementId, elementState, visibleRatio, duration) {\n // 获取商品信息(从元素属性或data属性中获取)\n const productInfo = this.extractProductInfo(element, elementState.config)\n let previousPageInfo = {}\n // 获取上一个页面信息(如果 eventTracker 可用)\n if (this.eventTracker && typeof this.eventTracker.getPreviousPageInfo === 'function') {\n previousPageInfo = this.eventTracker.getPreviousPageInfo()\n }\n const config = this.getElementConfig(element)\n const exposureData = {\n uuid: generateUniqueId(),\n timestamp: Date.now(),\n pageKey: getPageKey(extractHashPath(window.location.href), this.config.getConfig().uiVersion),\n pageUri: extractHashPath(window.location.href),\n eventType: 'EXPOSE',\n viewParam: { ...productInfo },\n tags: { actionKey: '', ...config, refer: extractHashPath(previousPageInfo?.previousPage?.url), duration: previousPageInfo?.previousPageStayTime, }\n // pageInfo: Object.keys(pageInfo).length > 0 ? pageInfo : {\n // currentUrl: window.location.href,\n // currentTitle: document.title\n // }\n\n\n // type: 'exposure',\n // eventName: 'product_exposure',\n // timestamp: Date.now(),\n // url: window.location.href,\n // element: {\n // id: elementId,\n // tagName: element.tagName,\n // className: element.className,\n // ...productInfo\n // },\n // exposure: {\n // visibleRatio: Math.round(visibleRatio * 100) / 100, // 保留两位小数\n // duration: duration, // 停留时间(毫秒),当前为0(立即曝光)\n // threshold: this.defaultOptions.threshold\n // },\n // 添加页面基本信息\n // pageInfo: Object.keys(pageInfo).length > 0 ? pageInfo : {\n // currentUrl: window.location.href,\n // currentTitle: document.title\n // }\n }\n \n // 添加到队列\n this.exposureQueue.push(exposureData)\n \n // if (this.config.getConfig().debugSwitch) {\n // console.log('商品曝光事件:', exposureData)\n // }\n \n // 根据配置决定立即上报还是延迟上报\n const reportInterval = this.config.getConfig().reportInterval\n if (reportInterval === 0) {\n // 立即上报(使用 Promise 确保上报不阻塞,适合 tab 切换场景)\n Promise.resolve().then(() => {\n this.reporter.report('exposure', this.getReportData([exposureData])).catch(error => {\n console.error('曝光上报失败:', error)\n if (this.config.getConfig().debugSwitch) {\n console.error('曝光上报失败详情:', error)\n }\n })\n })\n } else if (this.exposureQueue.length >= this.config.getConfig().maxQueueSize) {\n // 队列达到最大长度,立即上报\n this.flushExposureQueue()\n }\n }\n \n // 设置降级方案(滚动事件追踪)\n setupFallbackTracking() {\n // 创建虚拟 observer 对象,保持 API 一致性\n this.observer = {\n observe: (element) => {\n // 在降级方案中,observe 方法只是记录元素\n // 实际的检测通过滚动事件触发\n const elementId = this.getElementId(element)\n if (!this.trackedElements.has(elementId)) {\n // 元素会在 trackProduct 中被添加到 trackedElements\n // 这里不需要额外操作\n }\n },\n unobserve: (element) => {\n // 在降级方案中,取消追踪\n const elementId = this.getElementId(element)\n this.trackedElements.delete(elementId)\n },\n disconnect: () => {\n // 清理所有追踪\n this.trackedElements.clear()\n this.removeScrollListener()\n }\n }\n \n // 添加滚动事件监听(使用节流优化性能)\n this.addScrollListener()\n \n // 初始检查一次(处理页面加载时已可见的元素)\n setTimeout(() => {\n this.checkAllElementsVisibility()\n }, 100)\n }\n \n // 添加滚动事件监听器\n addScrollListener() {\n if (this.scrollHandler) return\n \n let lastScrollTime = 0\n const throttleTime = this.defaultOptions.scrollThrottle\n \n this.scrollHandler = () => {\n const now = Date.now()\n if (now - lastScrollTime >= throttleTime) {\n lastScrollTime = now\n this.checkAllElementsVisibility()\n }\n }\n \n // 监听滚动事件(支持移动端)\n window.addEventListener('scroll', this.scrollHandler, { passive: true })\n // 监听触摸移动事件(移动端优化)\n window.addEventListener('touchmove', this.scrollHandler, { passive: true })\n // 监听 resize 事件(窗口大小变化时重新计算)\n window.addEventListener('resize', this.scrollHandler, { passive: true })\n }\n \n // 移除滚动事件监听器\n removeScrollListener() {\n if (this.scrollHandler) {\n window.removeEventListener('scroll', this.scrollHandler)\n window.removeEventListener('touchmove', this.scrollHandler)\n window.removeEventListener('resize', this.scrollHandler)\n this.scrollHandler = null\n }\n }\n \n // 检查所有元素的可见性(降级方案)\n checkAllElementsVisibility() {\n if (!this.useFallback) return\n \n const viewportTop = 0\n const viewportBottom = window.innerHeight\n const viewportLeft = 0\n const viewportRight = window.innerWidth\n \n this.trackedElements.forEach((elementState, elementId) => {\n const element = elementState.element\n if (!element || !document.contains(element)) {\n // 元素已被移除,清理\n this.trackedElements.delete(elementId)\n return\n }\n \n const config = elementState.config\n const threshold = config.threshold || this.defaultOptions.threshold\n \n // 计算元素可见面积比例\n const visibleRatio = this.calculateVisibleRatio(\n element,\n viewportTop,\n viewportBottom,\n viewportLeft,\n viewportRight\n )\n \n // 判断元素是否达到曝光阈值(50%以上可见)\n const isThresholdMet = visibleRatio >= threshold\n \n // 只要达到阈值就立即上报,但需要去重(避免短时间内重复上报)\n if (isThresholdMet) {\n // 检查是否需要去重\n const now = Date.now()\n const lastReportTime = this.lastReportTime.get(elementId) || 0\n const timeSinceLastReport = now - lastReportTime\n \n if (timeSinceLastReport >= this.debounceTime) {\n // 距离上次上报时间超过去重间隔,可以上报\n this.lastReportTime.set(elementId, now)\n \n this.triggerExposure(element, elementId, elementState, visibleRatio, 0)\n \n if (this.config.getConfig().debugSwitch) {\n console.log(`元素 ${elementId} 进入可视区域,可见比例: ${(visibleRatio * 100).toFixed(2)}%,立即触发曝光`)\n }\n } else {\n // 距离上次上报时间太短,跳过本次上报\n if (this.config.getConfig().debugSwitch) {\n console.log(`元素 ${elementId} 跳过上报(去重),距离上次上报 ${timeSinceLastReport}ms,需要间隔 ${this.debounceTime}ms`)\n }\n }\n }\n })\n }\n \n // 计算元素可见面积比例(降级方案)\n calculateVisibleRatio(element, viewportTop, viewportBottom, viewportLeft, viewportRight) {\n const rect = element.getBoundingClientRect()\n \n // 元素完全不可见\n if (rect.bottom < viewportTop || rect.top > viewportBottom ||\n rect.right < viewportLeft || rect.left > viewportRight) {\n return 0\n }\n \n // 计算可见区域\n const visibleTop = Math.max(rect.top, viewportTop)\n const visibleBottom = Math.min(rect.bottom, viewportBottom)\n const visibleLeft = Math.max(rect.left, viewportLeft)\n const visibleRight = Math.min(rect.right, viewportRight)\n \n // 计算可见面积\n const visibleWidth = Math.max(0, visibleRight - visibleLeft)\n const visibleHeight = Math.max(0, visibleBottom - visibleTop)\n const visibleArea = visibleWidth * visibleHeight\n \n // 计算元素总面积\n const elementWidth = rect.width\n const elementHeight = rect.height\n const elementArea = elementWidth * elementHeight\n \n // 如果元素面积为0,返回0\n if (elementArea === 0) {\n return 0\n }\n \n // 返回可见比例\n return visibleArea / elementArea\n }\n \n // 追踪商品元素\n // 使用方式:\n // tracker.trackProduct(element, { productId: '123', productName: '商品名称' })\n trackProduct(element, options = {}) {\n if (!this.isInitialized) {\n console.warn('曝光追踪器未初始化')\n return\n }\n \n if (!element || typeof element !== 'object' || !element.nodeType) {\n console.warn('无效的元素,无法追踪')\n return\n }\n \n // 获取元素唯一标识\n const elementId = this.getElementId(element)\n // 存储元素配置信息\n const config = {\n ...options\n // threshold: options.threshold || this.defaultOptions.threshold\n }\n \n // 如果元素已经被追踪,先取消追踪\n if (this.trackedElements.has(elementId)) {\n this.untrackProduct(element)\n }\n \n // 设置元素的自定义属性,用于存储配置\n element.setAttribute('data-exposure-tracked', 'true')\n element.setAttribute('data-exposure-config', JSON.stringify(config))\n \n // 记录追踪状态\n this.trackedElements.set(elementId, {\n element,\n config\n })\n \n // 开始观察元素\n if (this.observer) {\n this.observer.observe(element)\n }\n \n // 如果是降级方案,立即检查一次\n if (this.useFallback) {\n setTimeout(() => {\n this.checkAllElementsVisibility()\n }, 0)\n }\n \n if (this.config.getConfig().debugSwitch) {\n // console.log(`开始追踪商品元素: ${elementId}`, config)\n }\n }\n \n // 批量追踪商品元素\n // 使用方式:\n // tracker.trackProducts([element1, element2, ...], { productId: '123' })\n // 或者\n // tracker.trackProducts('.product-item', { productId: '123' })\n trackProducts(selectorOrElements, options = {}) {\n if (!this.isInitialized || !this.observer) {\n console.warn('曝光追踪器未初始化')\n return\n }\n \n let elements = []\n \n // 如果是选择器字符串,查找元素\n if (typeof selectorOrElements === 'string') {\n elements = Array.from(document.querySelectorAll(selectorOrElements))\n } else if (Array.isArray(selectorOrElements)) {\n elements = selectorOrElements\n } else {\n console.warn('无效的选择器或元素列表')\n return\n }\n \n // 批量追踪\n elements.forEach((element, index) => {\n // 如果options是数组,使用对应索引的配置;否则使用统一配置\n const elementOptions = Array.isArray(options) \n ? options[index] || {} \n : options\n \n this.trackProduct(element, elementOptions)\n })\n \n if (this.config.getConfig().debugSwitch) {\n // console.log(`批量追踪了 ${elements.length} 个商品元素`)\n }\n }\n \n // 取消追踪商品元素\n untrackProduct(element) {\n if (!this.observer) return\n \n const elementId = this.getElementId(element)\n \n // 停止观察元素\n if (this.observer.unobserve) {\n this.observer.unobserve(element)\n }\n \n // 移除追踪状态\n this.trackedElements.delete(elementId)\n \n // 清除上报时间记录\n this.lastReportTime.delete(elementId)\n \n // 移除自定义属性\n if (element && element.removeAttribute) {\n element.removeAttribute('data-exposure-tracked')\n element.removeAttribute('data-exposure-config')\n }\n \n if (this.config.getConfig().debugSwitch) {\n console.log(`取消追踪商品元素: ${elementId}`)\n }\n }\n \n // 取消追踪所有商品元素\n untrackAll() {\n if (!this.observer) return\n \n // 如果是使用 Intersection Observer,逐个取消观察\n if (!this.useFallback) {\n this.trackedElements.forEach((state, elementId) => {\n if (state.element && this.observer.unobserve) {\n this.observer.unobserve(state.element)\n }\n })\n }\n \n this.trackedElements.clear()\n \n // if (this.config.getConfig().debugSwitch) {\n // console.log('已取消追踪所有商品元素')\n // }\n }\n \n // 获取元素唯一标识\n getElementId(element) {\n // 优先使用data-exposure-id属性\n if (element.getAttribute('data-exposure-id')) {\n return element.getAttribute('data-exposure-id')\n }\n \n // 如果元素已经有生成的唯一ID,直接返回\n if (element._exposureUniqueId) {\n return element._exposureUniqueId\n }\n \n // 其次使用id属性\n if (element.id) {\n return `id_${element.id}`\n }\n \n // 使用data-product-id属性\n if (element.getAttribute('data-product-id')) {\n return `product_${element.getAttribute('data-product-id')}`\n }\n \n // 最后生成一个短唯一识别码并保存到元素上\n const uniqueId = generateUniqueId()\n element._exposureUniqueId = uniqueId\n return uniqueId\n }\n \n // 获取元素配置\n getElementConfig(element) {\n const configAttr = element.getAttribute('data-exposure-config')\n if (configAttr) {\n try {\n return JSON.parse(configAttr)\n } catch (e) {\n return {}\n }\n }\n return {}\n }\n \n // 提取商品信息\n extractProductInfo(element, config = {}) {\n const productInfo = {\n productId: config.productId || element.getAttribute('data-product-id') || null,\n productName: config.productName || element.getAttribute('data-product-name') || null,\n productPrice: config.productPrice || element.getAttribute('data-product-price') || null,\n productCategory: config.productCategory || element.getAttribute('data-product-category') || null,\n productImage: config.productImage || element.getAttribute('data-product-image') || null\n }\n \n // 移除空值\n Object.keys(productInfo).forEach(key => {\n if (productInfo[key] === null) {\n delete productInfo[key]\n }\n })\n \n return productInfo\n }\n \n // 设置定时上报\n setupPeriodicReport() {\n const interval = this.config.getConfig().reportInterval\n if (interval > 0) {\n // 清除之前的定时器(如果存在)\n if (this.reportTimer) {\n clearInterval(this.reportTimer)\n }\n // 保存定时器ID,以便后续清理\n this.reportTimer = setInterval(() => {\n this.flushExposureQueue()\n }, interval)\n }\n }\n\n getReportData(queueToReport) {\n if (queueToReport.length > 0) {\n const reportData = queueToReport[0]\n if (reportData.tags) {\n const arr = uniqueArr(queueToReport.map(item => item.viewParam?.productId).filter(Boolean))\n reportData.tags.exposeContent = arr?.length > 0 ? arr.join(',') : ''\n }\n delete reportData.viewParam\n return reportData\n }\n return null\n }\n \n // 刷新曝光队列\n flushExposureQueue() {\n if (this.exposureQueue.length > 0) {\n const queueToReport = [...this.exposureQueue]\n this.exposureQueue = []\n // 使用 Promise 确保上报不阻塞\n Promise.resolve().then(() => {\n this.reporter.report('exposure', this.getReportData(queueToReport)).catch(error => {\n console.error('批量曝光上报失败:', error)\n if (this.config.getConfig().debugSwitch) {\n console.error('批量曝光上报失败详情:', error)\n }\n })\n })\n }\n }\n \n // 手动上报曝光事件\n reportExposure(productInfo = {}) {\n // 获取上一个页面信息(如果 eventTracker 可用)\n let pageInfo = {}\n let previousPageInfo = {}\n if (this.eventTracker && typeof this.eventTracker.getPreviousPageInfo === 'function') {\n previousPageInfo = this.eventTracker.getPreviousPageInfo()\n // pageInfo = {\n // currentUrl: window.location.href,\n // currentTitle: document.title,\n // previousPage: previousPageInfo.previousPage,\n // previousPageStayTime: previousPageInfo.previousPageStayTime,\n // currentPageStayTime: this.eventTracker.getCurrentPageStayTime ? this.eventTracker.getCurrentPageStayTime() : 0\n // }\n }\n\n const exposureData = {\n uuid: generateUniqueId(),\n timestamp: Date.now(),\n pageKey: getPageKey(extractHashPath(window.location.href), this.config.getConfig().uiVersion),\n pageUri: extractHashPath(window.location.href),\n eventType: 'EXPOSE',\n viewParam: { ...productInfo },\n tags: { \n ...config, \n actionKey: '',\n refer: extractHashPath(previousPageInfo?.previousPage?.url),\n duration: previousPageInfo?.previousPageStayTime\n }\n }\n \n // 使用 Promise 确保上报不阻塞\n Promise.resolve().then(() => {\n this.reporter.report('exposure', this.getReportData(exposureData)).catch(error => {\n console.error('手动曝光上报失败:', error)\n if (this.config.getConfig().debugSwitch) {\n console.error('手动曝光上报失败详情:', error)\n }\n })\n })\n }\n \n // 获取已追踪的元素列表\n getTrackedElements() {\n return Array.from(this.trackedElements.keys())\n }\n \n // 获取曝光队列\n getExposureQueue() {\n return [...this.exposureQueue]\n }\n \n // 销毁\n destroy() {\n // 刷新曝光队列\n this.flushExposureQueue()\n \n // 清除上报定时器\n if (this.reportTimer) {\n clearInterval(this.reportTimer)\n this.reportTimer = null\n }\n \n // 取消所有追踪\n this.untrackAll()\n \n // 断开观察器\n if (this.observer) {\n if (this.observer.disconnect) {\n this.observer.disconnect()\n }\n this.observer = null\n }\n \n // 移除滚动事件监听器(降级方案)\n this.removeScrollListener()\n \n // 清空状态\n this.trackedElements.clear()\n this.exposureQueue = []\n this.lastReportTime.clear()\n this.useFallback = false\n \n this.isInitialized = false\n \n if (this.config.getConfig().debugSwitch) {\n console.log('曝光追踪器已销毁')\n }\n }\n}\n\n","/* eslint-disable */\n// 第三方SDK集成器\nexport class ThirdPartyIntegrator {\n constructor(config) {\n this.config = config\n this.integratedSDKs = {}\n this.isInitialized = false\n }\n \n init() {\n if (this.isInitialized) return\n \n const config = this.config.getThirdPartyConfig()\n \n // 初始化百度统计\n if (config.baidu && config.baidu.enabled) {\n this.initBaiduAnalytics(config.baidu)\n }\n \n // 初始化友盟统计\n if (config.umeng && config.umeng.enabled) {\n this.initUmengAnalytics(config.umeng)\n }\n \n // 初始化神策数据\n if (config.sensors && config.sensors.enabled) {\n this.initSensorsAnalytics(config.sensors)\n }\n \n // 初始化腾讯云分析\n if (config.tencent && config.tencent.enabled) {\n this.initTencentAnalytics(config.tencent)\n }\n \n // 初始化Google Analytics\n if (config.google && config.google.enabled) {\n this.initGoogleAnalytics(config.google)\n }\n \n // 初始化自定义第三方\n if (config.custom && config.custom.enabled) {\n this.initCustomAnalytics(config.custom)\n }\n \n this.isInitialized = true\n }\n \n // 初始化百度统计\n initBaiduAnalytics(config) {\n try {\n if (window._hmt) {\n this.integratedSDKs.baidu = {\n name: 'baidu',\n instance: window._hmt,\n config: config\n }\n \n // 设置百度统计配置\n if (config.siteId) {\n window._hmt.push(['_setAccount', config.siteId])\n }\n \n if (config.autoPageview !== false) {\n window._hmt.push(['_trackPageview'])\n }\n \n console.log('百度统计集成成功')\n } else {\n console.warn('百度统计未加载,请检查脚本是否正确引入')\n }\n } catch (error) {\n console.error('百度统计集成失败:', error)\n }\n }\n \n // 初始化友盟统计\n initUmengAnalytics(config) {\n try {\n if (window._um) {\n this.integratedSDKs.umeng = {\n name: 'umeng',\n instance: window._um,\n config: config\n }\n \n // 设置友盟统计配置\n if (config.siteId) {\n window._um.push(['setAccount', config.siteId])\n }\n \n if (config.autoPageview !== false) {\n window._um.push(['trackPageview'])\n }\n \n console.log('友盟统计集成成功')\n } else {\n console.warn('友盟统计未加载,请检查脚本是否正确引入')\n }\n } catch (error) {\n console.error('友盟统计集成失败:', error)\n }\n }\n \n // 初始化神策数据\n initSensorsAnalytics(config) {\n try {\n if (window.sensors) {\n this.integratedSDKs.sensors = {\n name: 'sensors',\n instance: window.sensors,\n config: config\n }\n \n // 设置神策数据配置\n if (config.serverUrl) {\n window.sensors.setServerUrl(config.serverUrl)\n }\n \n if (config.siteId) {\n window.sensors.setSiteId(config.siteId)\n }\n \n if (config.autoPageview !== false) {\n window.sensors.trackPageview()\n }\n \n console.log('神策数据集成成功')\n } else {\n console.warn('神策数据未加载,请检查脚本是否正确引入')\n }\n } catch (error) {\n console.error('神策数据集成失败:', error)\n }\n }\n \n // 初始化腾讯云分析\n initTencentAnalytics(config) {\n try {\n if (window.MTA) {\n this.integratedSDKs.tencent = {\n name: 'tencent',\n instance: window.MTA,\n config: config\n }\n \n // 设置腾讯云分析配置\n if (config.appId) {\n window.MTA.setAppId(config.appId)\n }\n \n if (config.autoPageview !== false) {\n window.MTA.trackPageview()\n }\n \n console.log('腾讯云分析集成成功')\n } else {\n console.warn('腾讯云分析未加载,请检查脚本是否正确引入')\n }\n } catch (error) {\n console.error('腾讯云分析集成失败:', error)\n }\n }\n \n // 初始化Google Analytics\n initGoogleAnalytics(config) {\n try {\n if (window.gtag) {\n this.integratedSDKs.google = {\n name: 'google',\n instance: window.gtag,\n config: config\n }\n \n // 设置Google Analytics配置\n if (config.measurementId) {\n window.gtag('config', config.measurementId, {\n page_title: document.title,\n page_location: window.location.href\n })\n }\n \n console.log('Google Analytics集成成功')\n } else {\n console.warn('Google Analytics未加载,请检查脚本是否正确引入')\n }\n } catch (error) {\n console.error('Google Analytics集成失败:', error)\n }\n }\n \n // 初始化自定义第三方\n initCustomAnalytics(config) {\n try {\n if (typeof config.init === 'function') {\n const instance = config.init(config)\n this.integratedSDKs.custom = {\n name: 'custom',\n instance: instance,\n config: config\n }\n \n console.log('自定义第三方集成成功')\n } else {\n console.warn('自定义第三方配置缺少init函数')\n }\n } catch (error) {\n console.error('自定义第三方集成失败:', error)\n }\n }\n \n // 上报事件到所有集成的第三方SDK\n reportEvent(eventName, eventData = {}) {\n Object.values(this.integratedSDKs).forEach(sdk => {\n try {\n this.reportToSDK(sdk, eventName, eventData)\n } catch (error) {\n console.error(`上报事件到${sdk.name}失败:`, error)\n }\n })\n }\n \n // 上报页面浏览到所有集成的第三方SDK\n reportPageView(pageData = {}) {\n Object.values(this.integratedSDKs).forEach(sdk => {\n try {\n this.reportPageViewToSDK(sdk, pageData)\n } catch (error) {\n console.error(`上报页面浏览到${sdk.name}失败:`, error)\n }\n })\n }\n \n // 上报用户信息到所有集成的第三方SDK\n reportUser(userData = {}) {\n Object.values(this.integratedSDKs).forEach(sdk => {\n try {\n this.reportUserToSDK(sdk, userData)\n } catch (error) {\n console.error(`上报用户信息到${sdk.name}失败:`, error)\n }\n })\n }\n \n // 上报性能指标到所有集成的第三方SDK\n reportPerformance(performanceData = {}) {\n Object.values(this.integratedSDKs).forEach(sdk => {\n try {\n this.reportPerformanceToSDK(sdk, performanceData)\n } catch (error) {\n console.error(`上报性能指标到${sdk.name}失败:`, error)\n }\n })\n }\n \n // 上报事件到特定SDK\n reportToSDK(sdk, eventName, eventData) {\n switch (sdk.name) {\n case 'baidu':\n if (sdk.instance && sdk.instance.push) {\n sdk.instance.push(['_trackEvent', eventName, JSON.stringify(eventData)])\n }\n break\n \n case 'umeng':\n if (sdk.instance && sdk.instance.push) {\n sdk.instance.push(['track', eventName, eventData])\n }\n break\n \n case 'sensors':\n if (sdk.instance && sdk.instance.track) {\n sdk.instance.track(eventName, eventData)\n }\n break\n \n case 'tencent':\n if (sdk.instance && sdk.instance.Event && sdk.instance.Event.stat) {\n sdk.instance.Event.stat(eventName, eventData)\n }\n break\n \n case 'google':\n if (sdk.instance && typeof sdk.instance === 'function') {\n sdk.instance('event', eventName, eventData)\n }\n break\n \n case 'custom':\n if (sdk.instance && typeof sdk.instance.track === 'function') {\n sdk.instance.track(eventName, eventData)\n }\n break\n \n default:\n console.warn(`未知的SDK类型: ${sdk.name}`)\n }\n }\n \n // 上报页面浏览到特定SDK\n reportPageViewToSDK(sdk, pageData) {\n switch (sdk.name) {\n case 'baidu':\n if (sdk.instance && sdk.instance.push) {\n sdk.instance.push(['_trackPageview', pageData.url || window.location.href])\n }\n break\n \n case 'umeng':\n if (sdk.instance && sdk.instance.push) {\n sdk.instance.push(['trackPageview', pageData.url || window.location.href])\n }\n break\n \n case 'sensors':\n if (sdk.instance && sdk.instance.trackPageview) {\n sdk.instance.trackPageview(pageData)\n }\n break\n \n case 'tencent':\n if (sdk.instance && sdk.instance.trackPageview) {\n sdk.instance.trackPageview(pageData.url || window.location.href)\n }\n break\n \n case 'google':\n if (sdk.instance && typeof sdk.instance === 'function') {\n sdk.instance('config', sdk.config.measurementId, {\n page_title: pageData.title || document.title,\n page_location: pageData.url || window.location.href\n })\n }\n break\n \n case 'custom':\n if (sdk.instance && typeof sdk.instance.trackPageview === 'function') {\n sdk.instance.trackPageview(pageData)\n }\n break\n \n default:\n console.warn(`未知的SDK类型: ${sdk.name}`)\n }\n }\n \n // 上报用户信息到特定SDK\n reportUserToSDK(sdk, userData) {\n switch (sdk.name) {\n case 'baidu':\n if (sdk.instance && sdk.instance.push) {\n sdk.instance.push(['_setUserTag', 'userId', userData.userId])\n sdk.instance.push(['_setUserTag', 'userType', userData.userType])\n }\n break\n \n case 'umeng':\n if (sdk.instance && sdk.instance.push) {\n sdk.instance.push(['setUserTag', 'userId', userData.userId])\n sdk.instance.push(['setUserTag', 'userType', userData.userType])\n }\n break\n \n case 'sensors':\n if (sdk.instance && sdk.instance.setProfile) {\n sdk.instance.setProfile(userData)\n }\n break\n \n case 'tencent':\n if (sdk.instance && sdk.instance.setUserInfo) {\n sdk.instance.setUserInfo(userData)\n }\n break\n \n case 'google':\n if (sdk.instance && typeof sdk.instance === 'function') {\n sdk.instance('set', 'user_id', userData.userId)\n }\n break\n \n case 'custom':\n if (sdk.instance && typeof sdk.instance.setUser === 'function') {\n sdk.instance.setUser(userData)\n }\n break\n \n default:\n console.warn(`未知的SDK类型: ${sdk.name}`)\n }\n }\n \n // 上报性能指标到特定SDK\n reportPerformanceToSDK(sdk, performanceData) {\n switch (sdk.name) {\n case 'baidu':\n if (sdk.instance && sdk.instance.push) {\n sdk.instance.push(['_trackEvent', 'performance', JSON.stringify(performanceData)])\n }\n break\n \n case 'umeng':\n if (sdk.instance && sdk.instance.push) {\n sdk.instance.push(['track', 'performance', performanceData])\n }\n break\n \n case 'sensors':\n if (sdk.instance && sdk.instance.track) {\n sdk.instance.track('performance', performanceData)\n }\n break\n \n case 'tencent':\n if (sdk.instance && sdk.instance.Event && sdk.instance.Event.stat) {\n sdk.instance.Event.stat('performance', performanceData)\n }\n break\n \n case 'google':\n if (sdk.instance && typeof sdk.instance === 'function') {\n sdk.instance('event', 'performance', performanceData)\n }\n break\n \n case 'custom':\n if (sdk.instance && typeof sdk.instance.trackPerformance === 'function') {\n sdk.instance.trackPerformance(performanceData)\n }\n break\n \n default:\n console.warn(`未知的SDK类型: ${sdk.name}`)\n }\n }\n \n // 检查SDK是否已集成\n isSDKIntegrated(sdkName) {\n return !!this.integratedSDKs[sdkName]\n }\n \n // 获取已集成的SDK列表\n getIntegratedSDKs() {\n return Object.keys(this.integratedSDKs)\n }\n \n // 获取特定SDK的实例\n getSDKInstance(sdkName) {\n return this.integratedSDKs[sdkName]?.instance || null\n }\n \n // 销毁所有集成的SDK\n destroy() {\n Object.values(this.integratedSDKs).forEach(sdk => {\n try {\n if (sdk.instance && typeof sdk.instance.destroy === 'function') {\n sdk.instance.destroy()\n }\n } catch (error) {\n console.error(`销毁${sdk.name}失败:`, error)\n }\n })\n \n this.integratedSDKs = {}\n this.isInitialized = false\n }\n} ","/* eslint-disable */\n// 配置管理器\nimport { getSessionId } from \"./utils\"\nexport class ConfigManager {\n constructor(options = {}) {\n this.config = {\n // 基础配置\n appId: options.appId || '',\n appVersion: options.appVersion || '1.0.0',\n environment: options.environment || 'production',\n debugSwitch: options.debugSwitch === true,\n customerId: options.customerId || '',\n userId: options.userId || '',\n deviceNo: options.deviceNo || '',\n deviceId: options.userId || '',\n uiVersion: options.uiVersion || '',\n sessionId: getSessionId(),\n \n // 上报配置\n reportUrl: options.reportUrl || '',\n reportInterval: options.reportInterval || 5000, // 批量上报间隔\n maxQueueSize: options.maxQueueSize || 100, // 最大队列大小\n \n // 错误追踪配置\n enableErrorTracking: options.enableErrorTracking !== false,\n enableUnhandledRejection: options.enableUnhandledRejection !== false,\n enableResourceError: options.enableResourceError !== false,\n \n // 事件追踪配置\n enableEventTracking: options.enableEventTracking !== false, // 暂时没用到\n enableClickTracking: options.enableClickTracking !== false, // 自动事件追踪\n enablePageViewTracking: options.enablePageViewTracking !== false, // 页面浏览追踪\n \n // 性能监控配置\n enablePerformanceTracking: options.enablePerformanceTracking !== false,\n enableResourceTracking: options.enableResourceTracking !== false,\n enableApiTracking: options.enableApiTracking !== false,\n enableInteractionTracking: options.enableInteractionTracking !== false,\n enableRouteTracking: options.enableRouteTracking !== false, // 路由追踪\n \n // 用户行为追踪配置\n enableUserInteractionTracking: options.enableUserInteractionTracking !== false,\n enableFormTracking: options.enableFormTracking !== false,\n enableScrollTracking: options.enableScrollTracking !== false,\n enableMouseTracking: options.enableMouseTracking !== false,\n enableKeyboardTracking: options.enableKeyboardTracking !== false,\n \n // 第三方埋点配置\n thirdPartyConfig: options.thirdPartyConfig || {},\n \n // 用户信息\n user: options.user || null,\n \n // 自定义上报函数\n customReport: options.customReport || null\n }\n\n this.user = null\n }\n \n // 更新配置\n updateConfig(newConfig) {\n this.config = { ...this.config, ...newConfig }\n }\n \n // 设置用户信息\n setUser(userInfo) {\n this.user = userInfo\n }\n \n // 获取配置\n getConfig() {\n return this.config\n }\n \n // 获取用户信息\n getUser() {\n return this.user\n }\n \n // 获取上报URL\n getReportUrl() {\n return this.config.reportUrl\n }\n \n // 获取第三方配置\n getThirdPartyConfig() {\n return this.config.thirdPartyConfig\n }\n \n // 检查是否启用错误追踪\n isErrorTrackingEnabled() {\n return this.config.enableErrorTracking\n }\n \n // 检查是否启用事件追踪\n isEventTrackingEnabled() {\n return this.config.enableEventTracking\n }\n} ","/* eslint-disable */\n// 前端 SDK 主入口\nimport { ErrorTracker } from './errorTracker'\nimport { EventTracker } from './eventTracker'\nimport { PerformanceTracker } from './performanceTracker'\nimport { UserBehaviorTracker } from './userBehaviorTracker'\nimport { ExposureTracker } from './exposureTracker'\nimport { ThirdPartyIntegrator } from './thirdPartyIntegrator'\nimport { ConfigManager } from './configManager'\nimport axiosInstance from './axios-config.js'\nimport { performanceNow } from './utils'\n\n// 导出工具函数供外部使用\nexport { performanceNow }\n\n// 将axios挂载到全局,确保性能监控能正常工作\nif (typeof window !== 'undefined' && !window?.axios) {\n window.axios = axiosInstance\n}\n\nclass FrontendSDK {\n constructor(options = {}) {\n this.config = new ConfigManager(options)\n this.errorTracker = new ErrorTracker(this.config)\n this.eventTracker = new EventTracker(this.config)\n this.performanceTracker = new PerformanceTracker(this.config, this.eventTracker)\n this.userBehaviorTracker = new UserBehaviorTracker(this.config)\n // 将 eventTracker 传递给 exposureTracker,以便获取页面信息\n this.exposureTracker = new ExposureTracker(this.config, this.eventTracker)\n this.thirdPartyIntegrator = new ThirdPartyIntegrator(this.config)\n \n this.init()\n }\n \n init() {\n // 初始化错误追踪\n // this.errorTracker.init() // 第一期先不做\n \n // 初始化事件追踪\n this.eventTracker.init()\n \n // 初始化性能监控\n // this.performanceTracker.init() 第一期先不做\n \n // 初始化用户行为追踪\n // this.userBehaviorTracker.init() 第一期先不做\n \n // 初始化曝光追踪\n this.exposureTracker.init()\n \n // 初始化第三方SDK集成\n this.thirdPartyIntegrator.init()\n \n // 设置页面卸载监听,确保在浏览器退出时上报所有待上报的数据\n this.setupPageUnloadHandler()\n \n console.log('Frontend SDK 初始化完成')\n }\n \n // 设置页面卸载处理器\n // 确保在浏览器退出时,所有待上报的数据都能通过 sendBeacon 发送\n setupPageUnloadHandler() {\n // 标记是否已经处理过卸载,避免重复上报\n let isUnloading = false\n \n // 统一的页面卸载处理方法\n const handlePageUnload = () => {\n // 避免重复处理\n if (isUnloading) return\n isUnloading = true\n \n // 刷新所有待上报的队列\n // 这些方法会调用 reporter.report,而 reporter 会优先使用 sendBeacon\n // sendBeacon 的优势就是在页面卸载时仍能可靠发送数据\n try {\n // 刷新事件队列\n if (this.eventTracker && typeof this.eventTracker.flushEventQueue === 'function') {\n this.eventTracker.flushEventQueue()\n }\n \n // 刷新曝光队列\n if (this.exposureTracker && typeof this.exposureTracker.flushExposureQueue === 'function') {\n this.exposureTracker.flushExposureQueue()\n }\n \n // 刷新错误队列\n if (this.errorTracker && typeof this.errorTracker.flushErrorQueue === 'function') {\n this.errorTracker.flushErrorQueue()\n }\n \n // 刷新性能队列\n if (this.performanceTracker && typeof this.performanceTracker.flushPerformanceQueue === 'function') {\n this.performanceTracker.flushPerformanceQueue()\n }\n \n // 刷新用户行为队列\n if (this.userBehaviorTracker && typeof this.userBehaviorTracker.flushBehaviorQueue === 'function') {\n this.userBehaviorTracker.flushBehaviorQueue()\n }\n \n if (this.config.getConfig().debugSwitch) {\n console.log('页面卸载:已刷新所有待上报队列,使用 sendBeacon 发送')\n }\n } catch (error) {\n console.error('页面卸载时刷新队列失败:', error)\n }\n }\n \n // 监听 URL 变化,检测跳转到外部页面(仅用定时器轮询,以域名变化判定为外部)\n this.setupUrlChangeMonitoring(handlePageUnload)\n \n // 使用 pagehide 事件(更可靠,在移动端和某些场景下比 beforeunload 更可靠)\n // pagehide 会在页面卸载时触发,包括:\n // - 用户关闭标签页/窗口\n // - 用户导航到其他页面\n // - 移动端浏览器切换到后台\n window.addEventListener('pagehide', (event) => {\n // event.persisted 为 true 表示页面被缓存(如 iOS Safari 的页面缓存)\n // 即使被缓存,我们也应该上报数据,因为用户可能不会再回来\n handlePageUnload()\n }, { capture: true })\n \n // 使用 beforeunload 作为补充(在某些浏览器中更早触发)\n // 注意:beforeunload 在某些场景下可能不触发(如移动端、SPA 路由跳转等)\n window.addEventListener('beforeunload', () => {\n handlePageUnload()\n }, { capture: true })\n }\n \n // 监听 URL 变化,检测跳转到外部页面\n // 仅使用定时器轮询:实现简单、兼容性好,对微信 H5 中 location.href 跳转最可靠\n setupUrlChangeMonitoring(handlePageUnload) {\n const self = this\n let lastHref = location.href\n let lastOrigin = location.origin\n let isMonitoring = true\n let urlCheckInterval = null\n \n const stopMonitoring = () => {\n if (!isMonitoring) return\n isMonitoring = false\n if (urlCheckInterval) {\n clearInterval(urlCheckInterval)\n urlCheckInterval = null\n }\n }\n \n urlCheckInterval = setInterval(() => {\n if (!isMonitoring) return\n \n try {\n const currentHref = location.href\n const currentOrigin = location.origin\n \n if (currentHref !== lastHref) {\n if (currentOrigin !== lastOrigin) {\n if (self.config.getConfig().debugSwitch) {\n console.log('检测到跳转到外部页面(域名变化),立即发送埋点数据:', currentHref)\n }\n stopMonitoring() // 立即清除定时器,避免泄漏和无效轮询\n handlePageUnload()\n }\n lastHref = currentHref\n lastOrigin = currentOrigin\n }\n } catch (error) {\n if (self.config.getConfig().debugSwitch) {\n console.warn('URL 监控异常:', error)\n }\n stopMonitoring()\n }\n }, 30)\n \n // 供 destroy() 调用,确保定时器被清除、不泄漏\n this._urlMonitoringCleanup = stopMonitoring\n }\n \n // 手动上报错误\n reportError(error, context = {}) {\n this.errorTracker.reportError(error, context)\n }\n \n // 手动上报事件\n reportEvent(eventName, data = {}) {\n this.eventTracker.reportEvent(eventName, data)\n }\n reportCustomEvent(eventName, data = {}) {\n this.eventTracker.reportCustomEvent(eventName, data)\n } \n \n\n // ========== 页面信息相关方法 ==========\n \n \n // 获取当前页面停留时间(事件追踪器)\n getCurrentPageStayTime() {\n return this.eventTracker.getCurrentPageStayTime()\n }\n \n // 获取页面历史记录\n getPageHistory() {\n return this.eventTracker.pageHistory || []\n }\n \n // 手动上报性能指标\n reportPerformance(metrics = {}) {\n this.performanceTracker.reportPerformance(metrics)\n }\n \n // 手动上报用户行为\n reportBehavior(eventName, data = {}) {\n this.userBehaviorTracker.reportCustomBehavior(eventName, data)\n }\n \n // 设置用户信息\n setUser(userInfo) {\n this.config.setUser(userInfo)\n // 同步到第三方SDK\n this.thirdPartyIntegrator.reportUser(userInfo)\n }\n \n // 设置自定义配置\n setConfig(config) {\n this.config.updateConfig(config)\n }\n \n // 获取性能指标\n getPerformanceMetrics() {\n return this.performanceTracker.getCurrentMetrics()\n }\n \n // 获取用户行为数据\n getBehaviorData() {\n return this.userBehaviorTracker.getCurrentBehaviors()\n }\n \n // 获取会话ID\n getSessionId() {\n return this.userBehaviorTracker.getSessionId()\n }\n \n // 检查第三方SDK是否已集成\n isThirdPartySDKIntegrated(sdkName) {\n return this.thirdPartyIntegrator.isSDKIntegrated(sdkName)\n }\n \n // 获取已集成的第三方SDK列表\n getIntegratedThirdPartySDKs() {\n return this.thirdPartyIntegrator.getIntegratedSDKs()\n }\n \n // 设置Vue Router监控(用于监控路由跳转的页面浏览时间)\n setupVueRouterMonitoring(router) {\n if (!router) {\n console.warn('Vue Router 实例未提供')\n return\n }\n if (this.config.config.enableRouteTracking) {\n this.eventTracker.setupVueRouterMonitoring(router)\n // this.performanceTracker.setupVueRouterMonitoring(router)\n }\n }\n \n // 获取当前路由信息\n getCurrentRoute() {\n return this.eventTracker.getCurrentRoute()\n }\n \n // 获取上一个页面信息(包含停留时间)\n getPreviousPageInfo() {\n return this.eventTracker.getPreviousPageInfo()\n }\n \n // 获取当前路由停留时间\n getCurrentRouteStayTime() {\n return this.eventTracker.getCurrentRouteStayTime()\n }\n \n // ========== 曝光追踪相关方法 ==========\n \n // 追踪单个商品元素\n // 使用方式:\n // tracker.trackProduct(element, { productId: '123', productName: '商品名称' })\n trackProduct(element, options = {}) {\n return this.exposureTracker.trackProduct(element, options)\n }\n \n // 批量追踪商品元素\n // 使用方式:\n // tracker.trackProducts([element1, element2, ...], { productId: '123' })\n // 或者\n // tracker.trackProducts('.product-item', { productId: '123' })\n trackProducts(selectorOrElements, options = {}) {\n return this.exposureTracker.trackProducts(selectorOrElements, options)\n }\n \n // 取消追踪商品元素\n untrackProduct(element) {\n return this.exposureTracker.untrackProduct(element)\n }\n \n // 取消追踪所有商品元素\n untrackAllProducts() {\n return this.exposureTracker.untrackAll()\n }\n \n // 手动上报曝光事件\n reportExposure(productInfo = {}) {\n return this.exposureTracker.reportExposure(productInfo)\n }\n \n // 获取已追踪的元素列表\n getTrackedProducts() {\n return this.exposureTracker.getTrackedElements()\n }\n \n // 获取曝光队列\n getExposureQueue() {\n return this.exposureTracker.getExposureQueue()\n }\n \n // 刷新曝光队列(立即上报)\n flushExposureQueue() {\n return this.exposureTracker.flushExposureQueue()\n }\n \n // 销毁 SDK\n destroy() {\n // 清理 URL 监控\n if (this._urlMonitoringCleanup && typeof this._urlMonitoringCleanup === 'function') {\n this._urlMonitoringCleanup()\n }\n \n this.errorTracker.destroy()\n this.eventTracker.destroy()\n this.performanceTracker.destroy()\n this.userBehaviorTracker.destroy()\n this.exposureTracker.destroy()\n this.thirdPartyIntegrator.destroy()\n console.log('Frontend SDK 已销毁')\n }\n}\n\nexport default FrontendSDK "],"names":["bind","fn","thisArg","apply","arguments","cache","toString","Object","prototype","getPrototypeOf","iterator","Symbol","toStringTag","kindOf","create","thing","str","call","slice","toLowerCase","kindOfTest","type","typeOfTest","_typeof","isArray","Array","isUndefined","isBuffer","val","constructor","isFunction","isArrayBuffer","isString","isNumber","isObject","isPlainObject","isDate","isFile","isBlob","isFileList","isURLSearchParams","_map2","_slicedToArray","map","isReadableStream","isRequest","isResponse","isHeaders","forEach","obj","i","l","_ref$allOwnKeys","length","undefined","allOwnKeys","key","keys","getOwnPropertyNames","len","findKey","_key","_global","globalThis","self","window","global","isContextDefined","context","TypedArray","isTypedArray","Uint8Array","isHTMLForm","hasOwnProperty","prop","isRegExp","reduceDescriptors","reducer","descriptors","getOwnPropertyDescriptors","reducedDescriptors","descriptor","name","ret","defineProperties","setImmediateSupported","postMessageSupported","token","callbacks","isAsyncFn","_setImmediate","setImmediate","postMessage","concat","Math","random","addEventListener","_ref5","source","data","shift","cb","push","setTimeout","asap","queueMicrotask","process","nextTick","utils$1","isFormData","kind","FormData","append","isArrayBufferView","ArrayBuffer","isView","buffer","isBoolean","isEmptyObject","e","isStream","pipe","merge","caseless","this","result","assignValue","targetKey","extend","a","b","trim","replace","stripBOM","content","charCodeAt","inherits","superConstructor","props","defineProperty","value","assign","toFlatObject","sourceObj","destObj","filter","propFilter","merged","endsWith","searchString","position","String","lastIndex","indexOf","toArray","arr","forEachEntry","_iterator","next","done","pair","matchAll","regExp","matches","exec","hasOwnProp","freezeMethods","enumerable","writable","set","Error","toObjectSet","arrayOrString","delimiter","define","split","toCamelCase","m","p1","p2","toUpperCase","noop","toFiniteNumber","defaultValue","Number","isFinite","isSpecCompliantForm","toJSONObject","stack","visit","target","reducedValue","isThenable","then","catch","isIterable","AxiosError","message","code","config","request","response","captureStackTrace","status","utils","toJSON","description","number","fileName","lineNumber","columnNumber","from","error","customProps","axiosError","cause","isVisitable","removeBrackets","renderKey","path","dots","join","predicates","test","toFormData","formData","options","TypeError","metaTokens","indexes","option","visitor","defaultVisitor","useBlob","Blob","convertValue","toISOString","Buffer","JSON","stringify","some","isFlatArray","el","index","exposedHelpers","build","pop","encode","charMap","encodeURIComponent","match","AxiosURLSearchParams","params","_pairs","buildURL","url","_encode","serialize","serializedParams","serializeFn","hashmarkIndex","encoder","InterceptorManager$1","_createClass","InterceptorManager","_classCallCheck","handlers","fulfilled","rejected","synchronous","runWhen","id","h","transitionalDefaults","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","platform$1","isBrowser","classes","URLSearchParams","protocols","hasBrowserEnv","document","_navigator","navigator","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","origin","location","href","_objectSpread","platform","formDataToJSON","buildPath","isNumericKey","isLast","arrayToObject","entries","parsePropPath","defaults","transitional","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","env","rawValue","parser","parse","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","ERR_BAD_RESPONSE","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","Accept","method","defaults$1","ignoreDuplicateOf","$internals","normalizeHeader","header","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","rawHeaders","parsed","line","substring","parseHeaders","dest","_step","_createForOfIteratorHelper","s","n","entry","_toConsumableArray","err","f","tokens","tokensRE","parseTokens","matcher","deleted","deleteHeader","format","normalized","w","char","formatHeader","_this$constructor","_len","targets","asStrings","_ref","_ref2","get","first","computed","_len2","_key2","accessors","defineAccessor","accessorName","methodName","arg1","arg2","arg3","configurable","buildAccessors","accessor","_ref3","mapped","headerValue","AxiosHeaders$1","transformData","fns","normalize","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","resolve","reject","ERR_BAD_REQUEST","floor","progressEventReducer","listener","isDownloadStream","freq","bytesNotified","_speedometer","samplesCount","min","firstSampleTS","bytes","timestamps","head","tail","chunkLength","now","Date","startedAt","bytesCount","passed","round","speedometer","lastArgs","timer","timestamp","threshold","invoke","args","clearTimeout","throttle","loaded","total","lengthComputable","progressBytes","rate","_defineProperty","progress","estimated","event","progressEventDecorator","throttled","asyncDecorator","isMSIE","URL","protocol","host","port","userAgent","write","expires","domain","secure","cookie","toGMTString","read","RegExp","decodeURIComponent","remove","buildFullPath","baseURL","requestedURL","allowAbsoluteUrls","isRelativeUrl","relativeURL","combineURLs","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","configValue","res","resolveConfig","newConfig","auth","btoa","username","password","unescape","Boolean","_arrayLikeToArray","isURLSameOrigin","xsrfValue","cookies","xhrAdapter","XMLHttpRequest","Promise","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","_config","requestData","requestHeaders","unsubscribe","signal","removeEventListener","onloadend","responseHeaders","getAllResponseHeaders","responseText","statusText","open","onreadystatechange","readyState","responseURL","onabort","ECONNABORTED","onerror","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","setRequestHeader","_progressEventReducer2","upload","_progressEventReducer4","cancel","abort","subscribe","aborted","send","composeSignals$1","signals","controller","AbortController","reason","streamChunk","_regenerator","chunk","chunkSize","pos","end","_context","byteLength","readBytes","_wrapAsyncGenerator","_callee","iterable","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_t","_context2","p","_asyncIterator","readStream","_awaitAsyncGenerator","v","d","_regeneratorValues","_asyncGeneratorDelegate","return","_x","_x2","_callee2","stream","reader","_yield$_awaitAsyncGen","_context3","asyncIterator","getReader","_x3","trackStream","onProgress","onFinish","_onFinish","ReadableStream","pull","_asyncToGenerator","_callee3","_yield$iterator$next","_done","loadedBytes","_t2","_context4","close","enqueue","highWaterMark","isFetchSupported","fetch","Request","Response","isReadableStreamSupported","encodeText","TextEncoder","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","body","duplex","has","supportsResponseStream","resolvers","_","ERR_NOT_SUPPORT","getBodyLength","_request","size","resolveBodyLength","getContentLength","_x4","knownAdapters","http","xhr","_ref4","_callee4","_resolveConfig","_resolveConfig$withCr","fetchOptions","composedSignal","requestContentLength","contentTypeHeader","_progressEventDecorat","_progressEventDecorat2","flush","isCredentialsSupported","isStreamResponse","responseContentLength","_ref6","_onProgress","_flush","responseData","_t3","_t4","_t5","composeSignals","toAbortSignal","credentials","_x5","renderReason","isResolvedHandle","adapters","nameOrAdapter","rejectedReasons","reasons","state","throwIfCancellationRequested","throwIfRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","validator","version","formatMessage","opt","desc","opts","ERR_DEPRECATED","console","warn","spelling","correctSpelling","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","_request2","configOrUrl","dummy","boolean","function","baseUrl","withXsrfToken","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","unshift","promise","responseInterceptorChain","chain","onFulfilled","onRejected","generateHTTPMethod","isForm","Axios$1","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","splice","_this","c","CancelToken$1","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","HttpStatusCode$1","axios","createInstance","defaultConfig","instance","Cancel","all","promises","spread","callback","isAxiosError","payload","formToJSON","getAdapter","default","axios$1","axiosInstance","use","USER_AGENT","EMPTY","TYPEOF","BROWSER","CPU","DEVICE","ENGINE","OS","RESULT","NAME","TYPE","VENDOR","ARCHITECTURE","MAJOR","MODEL","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","XR","EMBEDDED","INAPP","BRANDS","FORMFACTORS","FULLVERLIST","PLATFORM","PLATFORMVER","BITNESS","CH","CH_FULL_VER_LIST","CH_ARCH","CH_BITNESS","CH_FORM_FACTORS","CH_MOBILE","CH_MODEL","CH_PLATFORM","CH_PLATFORM_VER","CH_ALL_VALUES","AMAZON","APPLE","ASUS","BLACKBERRY","GOOGLE","HUAWEI","LENOVO","HONOR","LG","MICROSOFT","MOTOROLA","NVIDIA","ONEPLUS","OPPO","SAMSUNG","SHARP","SONY","XIAOMI","ZEBRA","CHROME","CHROMIUM","CHROMECAST","EDGE","FIREFOX","OPERA","FACEBOOK","SOGOU","PREFIX_MOBILE","SUFFIX_BROWSER","WINDOWS","NAVIGATOR","NAVIGATOR_UADATA","userAgentData","enumerize","enums","str1","str2","lowerize","isExtensions","deep","itemListToArray","strip","brand","majorize","setProps","propName","pattern","stripQuotes","rgxMapper","ua","arrays","j","k","q","regex","strMapper","windowsVersionMap","ME","XP","Vista","NT","formFactorsMap","embedded","mobile","tablet","smarttv","wearable","xr","browserHintsMap","Chrome","Edge","Yandex","defaultRegexes","browser","cpu","device","OnePlus","engine","os","defaultProps","init","isIgnore","isIgnoreRgx","createIData","item","itemType","init_props","is_ignoreProps","is_ignoreRgx","toString_props","IData","getItem","withClientHints","getHighEntropyValues","setCH","UACHData","parseCH","withFeatureCheck","detectFeature","is","strToCheck","that","IDataResolve","resolveData","uach","isHttpUACH","UAItem","rgxMap","uaCH","ch","brave","isBrave","standalone","maxTouchPoints","detect","parseUA","realVersion","parseInt","prevName","brands","brandName","brandVersion","archName","reParse","vendor","ff","idx","osName","osVersion","UAParser","extensions","kv","getResult","httpUACH","regexMap","defaultRgx","mergedRgx","extraRgx","createItemFunc","getBrowser","getCPU","getDevice","getEngine","getOS","setUA","isEmpty","isNull","performanceNow","performance","pad","num","placeholder","sequenceCounter","lastTimestamp","instanceId","getSessionId","hexTimestamp","timestampMid12","timestampLow12","timestampTop8","guid","uniqueIdCounter","generateUniqueId","timestamp36","padStart","validateUseragent","WeixinJSBridge","isWeinxin","extractHashPath","urlString","hashIndex","pathWithoutQuery","includes","getPageKey","page","uiVersion","basePage","parts","basePageLower","login","buyPkgListNew","cardDetailInfo","flowSettle","chargeMoney","payOrderDetail","alipayOrderDetail","detectPlatform","parseUserAgent","getOsVersion","_result$os3","iosMatch","androidMatch","Reporter","isReporting","_cachedSessionId","_sessionIdFromStorage","_report","reportData","formatReportData","getConfig","customReport","defaultReport","debugSwitch","screen","width","height","availWidth","availHeight","colorDepth","pixelDepth","viewport","innerWidth","innerHeight","connection","effectiveType","downlink","rtt","memory","usedJSHeapSize","totalJSHeapSize","jsHeapSizeLimit","sessionId","sessionStorage","traceSdkInfoStr","traceSdkInfo","updateConfig","log","_result$os","_result$os2","baseData","channel","uiVer","osType","screenWidth","screenHeight","windowInnerWidth","windowInnerHeight","netType","tags","customerId","deviceId","deviceNo","userId","temp","mergedTags","_defaultReport","reportUrl","thirdPartyConfig","getReportUrl","getThirdPartyConfig","reportToBackend","reportToThirdParty","_reportToBackend","success","sendBeacon","isObjectOverSizeLimit","reportViaAxios","_x6","_reportViaAxios","post","_x7","_x8","_reportToThirdParty","_callee5","_context5","baidu","_hmt","reportToBaidu","umeng","_um","reportToUmeng","sensors","reportToSensors","tencent","MTA","reportToTencent","custom","reportToCustom","allSettled","_x9","_x0","_reportToBaidu","_callee6","_context6","_x1","_x10","_reportToUmeng","_callee7","_context7","_x11","_x12","_reportToSensors","_callee8","_context8","track","_x13","_x14","_reportToTencent","_callee9","_context9","Event","stat","_x15","_x16","_reportToCustom","_callee0","_context0","report","_x17","_x18","object","limitInKB","serializedObject","ErrorTracker","reporter","errorQueue","isInitialized","reportTimer","errorCache","Map","errorCacheTimeout","maxCacheSize","errorFingerprint","createErrorFingerprint","errorTimeout","resourceErrorTimeout","lastResourceError","fingerprint","cleanupErrorCache","firstKey","delete","_step$value","enableErrorTracking","enableResourceError","setupErrorListener","enableUnhandledRejection","setupUnhandledRejectionListener","reportInterval","setupPeriodicReport","interval","clearInterval","setInterval","flushErrorQueue","_this2","handleResourceError","handleJavaScriptError","_this3","_event$error","handleError","filename","lineno","colno","_this4","resourceKey","tagName","src","_this5","rejectionTimeout","lastRejection","_event$reason","_event$reason2","rejectionKey","_event$reason3","isDuplicateError","parsedStackInfo","parseStack","errorInfo","functionName","stackFrames","maxQueueSize","errMessage","errStack","rChromeCallStack1","rChromeCallStack2","rMozillaCallStack","callStackStr","startsWith","lines","_step2","stackLines","_iterator2","frameInfo","firstFrame","parseError","_this$config","EventTracker","eventQueue","clickListener","pageViewListener","originalPushState","originalReplaceState","pageHistory","currentPage","currentPageStartTime","previousPage","previousPageStayTime","currentRoute","routeStartTime","vueRouter","title","enterTime","referrer","enableClickTracking","setupClickTracking","enablePageViewTracking","setupPageViewTracking","_target$textContent","clickData","element","className","text","textContent","x","clientX","y","clientY","handleEvent","pageViewConfig","pageViewTracking","lastPageViewUrl","lastPageViewTime","PAGEVIEW_DEBOUNCE","debounce","currentUrl","currentTime","handlePageChange","uuid","pageKey","pageUri","eventType","listenPopstate","listenHistoryAPI","history","pushState","replaceState","vueRouterMode","flushEventQueue","newUrl","router","_this6","beforeEach","to","handleRouteLeave","afterEach","handleRouteEnter","beforeResolve","calculateRouteStayTime","stayTime","recordRouteStayTime","recordRouteEnter","route","_this$config2","_this$config3","eventName","_previousPageInfo$pre","previousPageInfo","getPreviousPageInfo","eventInfo","refer","duration","_this7","actionKey","PerformanceTracker","eventTracker","pageStartTime","performanceQueue","thirdPartySDKs","routeHistory","metrics","fcp","lcp","fid","cls","ttfb","domLoad","windowLoad","resourceLoad","apiRequests","pageStayTime","previousPageUrl","currentPageUrl","enablePerformanceTracking","setupPerformanceMonitoring","enableResourceTracking","setupResourceMonitoring","enableApiTracking","setupApiMonitoring","enableInteractionTracking","setupInteractionMonitoring","initThirdPartySDKs","flushPerformanceQueue","routeInfo","fullPath","leaveTime","query","meta","reportRouteStayTime","routeData","user","getUser","getDeviceInfo","stats","totalRoutes","averageStayTime","routesByPath","totalStayTime","count","pathStats","captureDOMLoadTime","captureWindowLoadTime","captureWebVitals","reportPerformanceMetrics","observer","PerformanceObserver","list","getEntries","entryType","handleResourceLoad","observe","entryTypes","_startTime","handleApiRequest","firstInputTime","firstInputDelay","handleFirstInput","_this7$config","startTime","buffered","_step3","_iterator3","clsValue","_step4","_iterator4","hadRecentInput","resourceInfo","initiatorType","transferSize","reportSlowResource","_previousPageInfo","_previousPageInfo2","apiInfo","interfaceUrl","interfaceDuration","calculatePageStayTime","reportPageStayTime","_this8","_previousPageInfo3","_previousPageInfo4","performanceData","stayData","UserBehaviorTracker","behaviorQueue","generateSessionId","scrollDepth","mouseMovements","keyStrokes","formInteractions","timeTracker","behaviors","pageViews","clicks","scrolls","formSubmissions","navigation","timeOnPage","enableUserInteractionTracking","setupUserInteractionTracking","enableFormTracking","setupFormTracking","enableScrollTracking","setupScrollTracking","enableMouseTracking","setupMouseTracking","enableKeyboardTracking","setupKeyboardTracking","setupTimeTracking","flushBehaviorQueue","trackClick","trackDoubleClick","trackRightClick","trackTouch","trackFormSubmission","trackFormFieldChange","trackFormFieldFocus","trackFormFieldBlur","scrollTimeout","scrollTop","pageYOffset","documentElement","scrollHeight","clientHeight","trackScroll","passive","mouseTimeout","trackMouseMovement","trackKeyStroke","reportTimeOnPage","referrerData","extractDomain","reportBehavior","pageViewData","_event$target$textCon","pageX","pageY","doubleClickData","rightClickData","touchData","touches","touch","identifier","form","action","fields","getFormFields","fieldData","field","focusData","blurData","depth","scrollData","movements","mouseData","keyData","ctrlKey","shiftKey","altKey","metaKey","behaviorData","appId","appVersion","customData","formElements","elements","hostname","substr","ExposureTracker","trackedElements","exposureQueue","scrollTimer","useFallback","lastReportTime","debounceTime","defaultOptions","rootMargin","scrollThrottle","isIntersectionObserverSupported","createObserver","setupFallbackTracking","IntersectionObserverEntry","root","IntersectionObserver","handleIntersection","elementId","getElementId","getElementConfig","visibleRatio","intersectionRatio","elementState","timeSinceLastReport","triggerExposure","productInfo","extractProductInfo","exposureData","viewParam","getReportData","flushExposureQueue","unobserve","disconnect","clear","removeScrollListener","addScrollListener","checkAllElementsVisibility","scrollHandler","lastScrollTime","throttleTime","viewportBottom","viewportRight","contains","calculateVisibleRatio","toFixed","viewportTop","viewportLeft","rect","getBoundingClientRect","bottom","top","right","left","visibleTop","max","visibleBottom","visibleLeft","visibleRight","visibleArea","elementArea","nodeType","untrackProduct","setAttribute","selectorOrElements","querySelectorAll","elementOptions","trackProduct","removeAttribute","getAttribute","_exposureUniqueId","uniqueId","configAttr","productId","productName","productPrice","productCategory","productImage","_this9","queueToReport","Set","uniqueArr","_item$viewParam","exposeContent","_this0","_this1","untrackAll","ThirdPartyIntegrator","integratedSDKs","enabled","initBaiduAnalytics","initUmengAnalytics","initSensorsAnalytics","initTencentAnalytics","google","initGoogleAnalytics","initCustomAnalytics","siteId","autoPageview","serverUrl","setServerUrl","setSiteId","trackPageview","setAppId","gtag","measurementId","page_title","page_location","eventData","values","sdk","reportToSDK","pageData","reportPageViewToSDK","userData","reportUserToSDK","reportPerformanceToSDK","userType","setProfile","setUserInfo","setUser","trackPerformance","sdkName","_this$integratedSDKs$","destroy","ConfigManager","environment","enableEventTracking","enableRouteTracking","userInfo","_window","FrontendSDK","errorTracker","performanceTracker","userBehaviorTracker","exposureTracker","thirdPartyIntegrator","setupPageUnloadHandler","isUnloading","handlePageUnload","setupUrlChangeMonitoring","capture","lastHref","lastOrigin","isMonitoring","urlCheckInterval","stopMonitoring","currentHref","currentOrigin","_urlMonitoringCleanup","reportError","reportEvent","reportCustomEvent","getCurrentPageStayTime","reportPerformance","reportCustomBehavior","reportUser","getCurrentMetrics","getCurrentBehaviors","isSDKIntegrated","getIntegratedSDKs","setupVueRouterMonitoring","getCurrentRoute","getCurrentRouteStayTime","trackProducts","reportExposure","getTrackedElements","getExposureQueue"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/axios/index.js","../axios-config.js","../node_modules/ua-parser-js/src/main/ua-parser.mjs","../utils.js","../reporter.js","../errorTracker.js","../eventTracker.js","../performanceTracker.js","../userBehaviorTracker.js","../exposureTracker.js","../thirdPartyIntegrator.js","../configManager.js","../index.js"],"sourcesContent":["'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n \n try {\n return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)){\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n utils.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype;\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request, fetchOptions);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.11.0\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n} = axios;\n\nexport {\n axios as default,\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n}\n","/* eslint-disable */\n// 简化的axios配置,避免Node.js模块依赖问题\nimport axios from 'axios'\n\n// 创建axios实例,使用浏览器兼容的配置\nconst axiosInstance = axios.create({\n timeout: 10000,\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n})\n\n// 请求拦截器\naxiosInstance.interceptors.request.use(\n (config) => {\n return config\n },\n (error) => {\n return Promise.reject(error)\n }\n)\n\n// 响应拦截器\naxiosInstance.interceptors.response.use(\n (response) => {\n return response\n },\n (error) => {\n return Promise.reject(error)\n }\n)\n\nexport default axiosInstance ","// Generated ESM version of ua-parser-js\n// DO NOT EDIT THIS FILE!\n// Source: /src/main/ua-parser.js\n\n/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v2.0.6\n Copyright © 2012-2025 Faisal Salman <f@faisalman.com>\n AGPLv3 License *//*\n Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n Supports browser & node.js environment. \n Demo : https://uaparser.dev\n Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n/* jshint esversion: 6 */ \n/* globals window */\n\n\n \n //////////////\n // Constants\n /////////////\n\n var LIBVERSION = '2.0.6',\n UA_MAX_LENGTH = 500,\n USER_AGENT = 'user-agent',\n EMPTY = '',\n UNKNOWN = '?',\n TYPEOF = {\n FUNCTION : 'function',\n OBJECT : 'object',\n STRING : 'string',\n UNDEFINED : 'undefined'\n },\n\n // properties\n BROWSER = 'browser',\n CPU = 'cpu',\n DEVICE = 'device',\n ENGINE = 'engine',\n OS = 'os',\n RESULT = 'result',\n\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n MAJOR = 'major',\n MODEL = 'model',\n\n // device types\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n XR = 'xr',\n EMBEDDED = 'embedded',\n\n // browser types\n INAPP = 'inapp',\n\n // client hints\n BRANDS = 'brands',\n FORMFACTORS = 'formFactors',\n FULLVERLIST = 'fullVersionList',\n PLATFORM = 'platform',\n PLATFORMVER = 'platformVersion',\n BITNESS = 'bitness',\n CH = 'sec-ch-ua',\n CH_FULL_VER_LIST= CH + '-full-version-list',\n CH_ARCH = CH + '-arch',\n CH_BITNESS = CH + '-' + BITNESS,\n CH_FORM_FACTORS = CH + '-form-factors',\n CH_MOBILE = CH + '-' + MOBILE,\n CH_MODEL = CH + '-' + MODEL,\n CH_PLATFORM = CH + '-' + PLATFORM,\n CH_PLATFORM_VER = CH_PLATFORM + '-version',\n CH_ALL_VALUES = [BRANDS, FULLVERLIST, MOBILE, MODEL, PLATFORM, PLATFORMVER, ARCHITECTURE, FORMFACTORS, BITNESS],\n\n // device vendors\n AMAZON = 'Amazon',\n APPLE = 'Apple',\n ASUS = 'ASUS',\n BLACKBERRY = 'BlackBerry',\n GOOGLE = 'Google',\n HUAWEI = 'Huawei',\n LENOVO = 'Lenovo',\n HONOR = 'Honor',\n LG = 'LG',\n MICROSOFT = 'Microsoft',\n MOTOROLA = 'Motorola',\n NVIDIA = 'Nvidia',\n ONEPLUS = 'OnePlus',\n OPPO = 'OPPO',\n SAMSUNG = 'Samsung',\n SHARP = 'Sharp',\n SONY = 'Sony',\n XIAOMI = 'Xiaomi',\n ZEBRA = 'Zebra',\n\n // browsers\n CHROME = 'Chrome',\n CHROMIUM = 'Chromium',\n CHROMECAST = 'Chromecast',\n EDGE = 'Edge',\n FIREFOX = 'Firefox',\n OPERA = 'Opera',\n FACEBOOK = 'Facebook',\n SOGOU = 'Sogou',\n\n PREFIX_MOBILE = 'Mobile ',\n SUFFIX_BROWSER = ' Browser',\n\n // os\n WINDOWS = 'Windows';\n \n var isWindow = typeof window !== TYPEOF.UNDEFINED,\n NAVIGATOR = (isWindow && window.navigator) ? \n window.navigator : \n undefined,\n NAVIGATOR_UADATA = (NAVIGATOR && NAVIGATOR.userAgentData) ? \n NAVIGATOR.userAgentData : \n undefined;\n\n ///////////\n // Helper\n //////////\n\n var extend = function (defaultRgx, extensions) {\n var mergedRgx = {};\n var extraRgx = extensions;\n if (!isExtensions(extensions)) {\n extraRgx = {};\n for (var i in extensions) {\n for (var j in extensions[i]) {\n extraRgx[j] = extensions[i][j].concat(extraRgx[j] ? extraRgx[j] : []);\n }\n }\n }\n for (var k in defaultRgx) {\n mergedRgx[k] = extraRgx[k] && extraRgx[k].length % 2 === 0 ? extraRgx[k].concat(defaultRgx[k]) : defaultRgx[k];\n }\n return mergedRgx;\n },\n enumerize = function (arr) {\n var enums = {};\n for (var i=0; i<arr.length; i++) {\n enums[arr[i].toUpperCase()] = arr[i];\n }\n return enums;\n },\n has = function (str1, str2) {\n if (typeof str1 === TYPEOF.OBJECT && str1.length > 0) {\n for (var i in str1) {\n if (lowerize(str2) == lowerize(str1[i])) return true;\n }\n return false;\n }\n return isString(str1) ? lowerize(str2) == lowerize(str1) : false;\n },\n isExtensions = function (obj, deep) {\n for (var prop in obj) {\n return /^(browser|cpu|device|engine|os)$/.test(prop) || (deep ? isExtensions(obj[prop]) : false);\n }\n },\n isString = function (val) {\n return typeof val === TYPEOF.STRING;\n },\n itemListToArray = function (header) {\n if (!header) return undefined;\n var arr = [];\n var tokens = strip(/\\\\?\\\"/g, header).split(',');\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].indexOf(';') > -1) {\n var token = trim(tokens[i]).split(';v=');\n arr[i] = { brand : token[0], version : token[1] };\n } else {\n arr[i] = trim(tokens[i]);\n }\n }\n return arr;\n },\n lowerize = function (str) {\n return isString(str) ? str.toLowerCase() : str;\n },\n majorize = function (version) {\n return isString(version) ? strip(/[^\\d\\.]/g, version).split('.')[0] : undefined;\n },\n setProps = function (arr) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n var propName = arr[i];\n if (typeof propName == TYPEOF.OBJECT && propName.length == 2) {\n this[propName[0]] = propName[1];\n } else {\n this[propName] = undefined;\n }\n }\n return this;\n },\n strip = function (pattern, str) {\n return isString(str) ? str.replace(pattern, EMPTY) : str;\n },\n stripQuotes = function (str) {\n return strip(/\\\\?\\\"/g, str); \n },\n trim = function (str, len) {\n str = strip(/^\\s\\s*/, String(str));\n return typeof len === TYPEOF.UNDEFINED ? str : str.substring(0, len);\n };\n\n ///////////////\n // Map helper\n //////////////\n\n var rgxMapper = function (ua, arrays) {\n\n if(!ua || !arrays) return;\n\n var i = 0, j, k, p, q, matches, match;\n\n // loop through all regexes maps\n while (i < arrays.length && !matches) {\n\n var regex = arrays[i], // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n j = k = 0;\n\n // try matching uastring with regexes\n while (j < regex.length && !matches) {\n\n if (!regex[j]) { break; }\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n // check if given property is actually array\n if (typeof q === TYPEOF.OBJECT && q.length > 0) {\n if (q.length === 2) {\n if (typeof q[1] == TYPEOF.FUNCTION) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length >= 3) {\n // Check whether q[1] FUNCTION or REGEX\n if (typeof q[1] === TYPEOF.FUNCTION && !(q[1].exec && q[1].test)) {\n if (q.length > 3) {\n this[q[0]] = match ? q[1].apply(this, q.slice(2)) : undefined;\n } else {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n }\n } else {\n if (q.length == 3) {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n } else if (q.length == 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n } else if (q.length > 4) {\n this[q[0]] = match ? q[3].apply(this, [match.replace(q[1], q[2])].concat(q.slice(4))) : undefined;\n }\n }\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n strMapper = function (str, map) {\n\n for (var i in map) {\n // check if current value is array\n if (typeof map[i] === TYPEOF.OBJECT && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return map.hasOwnProperty('*') ? map['*'] : str;\n };\n\n ///////////////\n // String map\n //////////////\n\n var windowsVersionMap = {\n 'ME' : '4.90',\n 'NT 3.51': '3.51',\n 'NT 4.0': '4.0',\n '2000' : ['5.0', '5.01'],\n 'XP' : ['5.1', '5.2'],\n 'Vista' : '6.0',\n '7' : '6.1',\n '8' : '6.2',\n '8.1' : '6.3',\n '10' : ['6.4', '10.0'],\n 'NT' : ''\n },\n \n formFactorsMap = {\n 'embedded' : 'Automotive',\n 'mobile' : 'Mobile',\n 'tablet' : ['Tablet', 'EInk'],\n 'smarttv' : 'TV',\n 'wearable' : 'Watch',\n 'xr' : ['VR', 'XR'],\n '?' : ['Desktop', 'Unknown'],\n '*' : undefined\n },\n\n browserHintsMap = {\n 'Chrome' : 'Google Chrome',\n 'Edge' : 'Microsoft Edge',\n 'Edge WebView2' : 'Microsoft Edge WebView2',\n 'Chrome WebView': 'Android WebView',\n 'Chrome Headless':'HeadlessChrome',\n 'Huawei Browser': 'HuaweiBrowser',\n 'MIUI Browser' : 'Miui Browser',\n 'Opera Mobi' : 'OperaMobile',\n 'Yandex' : 'YaBrowser'\n };\n\n //////////////\n // Regex map\n /////////////\n\n var defaultRegexes = {\n\n browser : [[\n\n // Most common regardless engine\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, PREFIX_MOBILE + 'Chrome']], [\n /webview.+edge\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, EDGE+' WebView']], [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i \n ], [VERSION, [NAME, 'Edge']], [\n\n // Presto based\n /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n ], [NAME, VERSION], [\n /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, OPERA+' Mini']], [\n /\\bop(?:rg)?x\\/([\\w\\.]+)/i // Opera GX\n ], [VERSION, [NAME, OPERA+' GX']], [\n /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, OPERA]], [\n\n // Mixed\n /\\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\\/ ]?([\\w\\.]+)/i // Baidu\n ], [VERSION, [NAME, 'Baidu']], [\n /\\b(?:mxbrowser|mxios|myie2)\\/?([-\\w\\.]*)\\b/i // Maxthon\n ], [VERSION, [NAME, 'Maxthon']], [\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\\/ ]?([\\w\\.]*)/i, \n // Lunascape/Maxthon/Netfront/Jasmine/Blazer/Sleipnir\n // Trident based\n /(avant|iemobile|slim(?:browser|boat|jet))[\\/ ]?([\\d\\.]*)/i, // Avant/IEMobile/SlimBrowser/SlimBoat/Slimjet\n /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n // Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon/LG Browser/Otter/qutebrowser/Dooble/Palemoon\n /(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,\n // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio/Dragon\n /(heytap|ovi|115|surf|qwant)browser\\/([\\d\\.]+)/i, // HeyTap/Ovi/115/Surf\n /(qwant)(?:ios|mobile)\\/([\\d\\.]+)/i, // Qwant\n /(ecosia|weibo)(?:__| \\w+@)([\\d\\.]+)/i // Ecosia/Weibo\n ], [NAME, VERSION], [\n /quark(?:pc)?\\/([-\\w\\.]+)/i // Quark\n ], [VERSION, [NAME, 'Quark']], [\n /\\bddg\\/([\\w\\.]+)/i // DuckDuckGo\n ], [VERSION, [NAME, 'DuckDuckGo']], [\n /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UCBrowser']], [\n /microm.+\\bqbcore\\/([\\w\\.]+)/i, // WeChat Desktop for Windows Built-in Browser\n /\\bqbcore\\/([\\w\\.]+).+microm/i,\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [\n /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [\n /ya(?:search)?browser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [\n /slbrowser\\/([\\w\\.]+)/i // Smart Lenovo Browser\n ], [VERSION, [NAME, 'Smart ' + LENOVO + SUFFIX_BROWSER]], [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure' + SUFFIX_BROWSER], VERSION], [\n /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, FIREFOX+' Focus']], [\n /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, OPERA+' Touch']], [\n /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, OPERA+' Coast']], [\n /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI' + SUFFIX_BROWSER]], [\n /fxios\\/([\\w\\.-]+)/i // Firefox for iOS\n ], [VERSION, [NAME, PREFIX_MOBILE + FIREFOX]], [\n /\\bqihoobrowser\\/?([\\w\\.]*)/i // 360\n ], [VERSION, [NAME, '360']], [\n /\\b(qq)\\/([\\w\\.]+)/i // QQ\n ], [[NAME, /(.+)/, '$1Browser'], VERSION], [\n /(oculus|sailfish|huawei|vivo|pico)browser\\/([\\w\\.]+)/i\n ], [[NAME, /(.+)/, '$1' + SUFFIX_BROWSER], VERSION], [ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser/PicoBrowser\n /samsungbrowser\\/([\\w\\.]+)/i // Samsung Internet\n ], [VERSION, [NAME, SAMSUNG + ' Internet']], [\n /metasr[\\/ ]?([\\d\\.]+)/i // Sogou Explorer\n ], [VERSION, [NAME, SOGOU + ' Explorer']], [\n /(sogou)mo\\w+\\/([\\d\\.]+)/i // Sogou Mobile\n ], [[NAME, SOGOU + ' Mobile'], VERSION], [\n /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n /m?(qqbrowser|2345(?=browser|chrome|explorer))\\w*[\\/ ]?v?([\\w\\.]+)/i // QQ/2345\n ], [NAME, VERSION], [\n /(lbbrowser|rekonq)/i // LieBao Browser/Rekonq\n ], [NAME], [\n /ome\\/([\\w\\.]+) \\w* ?(iron) saf/i, // Iron\n /ome\\/([\\w\\.]+).+qihu (360)[es]e/i // 360\n ], [VERSION, NAME], [\n\n // WebView\n /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n ], [[NAME, FACEBOOK], VERSION, [TYPE, INAPP]], [\n /(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i, // Kakao App\n /(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i, // Naver InApp\n /(daum)apps[\\/ ]([\\w\\.]+)/i, // Daum App\n /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(alipay)client\\/([\\w\\.]+)/i, // Alipay\n /(twitter)(?:and| f.+e\\/([\\w\\.]+))/i, // Twitter\n /(bing)(?:web|sapphire)\\/([\\w\\.]+)/i, // Bing\n /(instagram|snapchat|klarna)[\\/ ]([-\\w\\.]+)/i // Instagram/Snapchat/Klarna\n ], [NAME, VERSION, [TYPE, INAPP]], [\n /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA'], [TYPE, INAPP]], [\n /musical_ly(?:.+app_?version\\/|_)([\\w\\.]+)/i // TikTok\n ], [VERSION, [NAME, 'TikTok'], [TYPE, INAPP]], [\n /\\[(linkedin)app\\]/i // LinkedIn App for iOS & Android\n ], [NAME, [TYPE, INAPP]], [\n /(zalo(?:app)?)[\\/\\sa-z]*([\\w\\.-]+)/i // Zalo \n ], [[NAME, /(.+)/, 'Zalo'], VERSION, [TYPE, INAPP]], [\n\n /(chromium)[\\/ ]([-\\w\\.]+)/i // Chromium\n ], [NAME, VERSION], [\n\n /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n ], [VERSION, [NAME, CHROME+' Headless']], [\n\n /wv\\).+chrome\\/([\\w\\.]+).+edgw\\//i // Edge WebView2\n ], [VERSION, [NAME, EDGE+' WebView2']], [\n\n / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, CHROME+' WebView'], VERSION], [\n\n /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android' + SUFFIX_BROWSER]], [\n\n /chrome\\/([\\w\\.]+) mobile/i // Chrome Mobile\n ], [VERSION, [NAME, PREFIX_MOBILE + 'Chrome']], [\n\n /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /version\\/([\\w\\.\\,]+) .*mobile(?:\\/\\w+ | ?)safari/i // Safari Mobile\n ], [VERSION, [NAME, PREFIX_MOBILE + 'Safari']], [\n /iphone .*mobile(?:\\/\\w+ | ?)safari/i\n ], [[NAME, PREFIX_MOBILE + 'Safari']], [\n /version\\/([\\w\\.\\,]+) .*(safari)/i // Safari\n ], [VERSION, NAME], [\n /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, '1']], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(?:mobile|tablet);.*(firefox)\\/([\\w\\.-]+)/i // Firefox Mobile\n ], [[NAME, PREFIX_MOBILE + FIREFOX], VERSION], [\n /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /(wolvic|librewolf)\\/([\\w\\.]+)/i // Wolvic/LibreWolf\n ], [NAME, VERSION], [\n /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, FIREFOX+' Reality']], [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\\/ ]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror\n /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+(?= .+rv\\:.+gecko\\/\\d+)|[0-4][\\w\\.]+(?!.+compatible))/i, // Mozilla\n\n // Other\n /(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser/Ladybird\n /\\b(links) \\(([\\w\\.]+)/i // Links\n ], [NAME, [VERSION, /_/g, '.']], [\n \n /(cobalt)\\/([\\w\\.]+)/i // Cobalt\n ], [NAME, [VERSION, /[^\\d\\.]+./, EMPTY]]\n ],\n\n cpu : [[\n\n /\\b((amd|x|x86[-_]?|wow|win)64)\\b/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i, // IA32 (quicktime)\n /\\b((i[346]|x)86)(pc)?\\b/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [\n\n /\\b(aarch64|arm(v?[89]e?l?|_?64))\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [\n\n /\\b(arm(v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [\n\n // PocketPC mistakenly identified as PowerPC\n /( (ce|mobile); ppc;|\\/[\\w\\.]+arm\\b)/i\n ], [[ARCHITECTURE, 'arm']], [\n\n / sun4\\w[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n /\\b(avr32|ia64(?=;)|68k(?=\\))|\\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\\b|pa-risc)/i,\n /((ppc|powerpc)(64)?)( mac|;|\\))/i, // PowerPC\n /(?:osf1|[freopnt]{3,4}bsd) (alpha)/i // Alpha\n ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n /mc680.0/i\n ], [[ARCHITECTURE, '68k']], [\n /winnt.+\\[axp/i\n ], [[ARCHITECTURE, 'alpha']]\n ],\n\n device : [[\n\n //////////////////////////\n // MOBILES & TABLETS\n /////////////////////////\n\n // Samsung\n /\\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\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n /\\b((?:s[cgp]h|gt|sm)-(?![lr])\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,\n /samsung[- ]((?!sm-[lr]|browser)[-\\w]+)/i,\n /sec-(sgh\\w+)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n // Apple\n /(?:\\/|\\()(ip(?:hone|od)[\\w, ]*)[\\/\\);]/i // iPod/iPhone\n ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n /\\b(?:ios|apple\\w+)\\/.+[\\(\\/](ipad)/i, // iPad\n /\\b(ipad)[\\d,]*[;\\] ].+(mac |i(pad)?)os/i\n ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n /(macintosh);/i\n ], [MODEL, [VENDOR, APPLE]], [\n\n // Sharp\n /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [\n\n // Honor\n /\\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\\)|;)/i\n ], [MODEL, [VENDOR, HONOR], [TYPE, TABLET]], [\n /honor([-\\w ]+)[;\\)]/i\n ], [MODEL, [VENDOR, HONOR], [TYPE, MOBILE]], [\n\n // Huawei\n /\\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\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n /(?:huawei) ?([-\\w ]+)[;\\)]/i,\n /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][\\dc][adnt]?)\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n // Xiaomi\n /oid[^\\)]+; (2[\\dbc]{4}(182|283|rp\\w{2})[cgl]|m2105k81a?c)(?: bui|\\))/i,\n /\\b(?:xiao)?((?:red)?mi[-_ ]?pad[\\w- ]*)(?: bui|\\))/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n /\\b(poco[\\w ]+|m2\\d{3}j\\d\\d[a-z]{2})(?: bui|\\))/i, // Xiaomi POCO\n /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n /oid[^\\)]+; (m?[12][0-389][01]\\w{3,6}[c-y])( bui|; wv|\\))/i, // Xiaomi Redmi 'numeric' models\n /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note|max|cc)?[_ ]?(?:\\d{0,2}\\w?)[_ ]?(?:plus|se|lite|pro)?( 5g|lte)?)(?: bui|\\))/i, // Xiaomi Mi\n / ([\\w ]+) miui\\/v?\\d/i\n ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n\n // OnePlus\n /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,\n /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n ], [MODEL, [VENDOR, ONEPLUS], [TYPE, MOBILE]], [\n\n // OPPO\n /; (\\w+) bui.+ oppo/i,\n /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n ], [MODEL, [VENDOR, OPPO], [TYPE, MOBILE]], [\n /\\b(opd2(\\d{3}a?))(?: bui|\\))/i\n ], [MODEL, [VENDOR, strMapper, { 'OnePlus' : ['203', '304', '403', '404', '413', '415'], '*' : OPPO }], [TYPE, TABLET]], [\n\n // BLU\n /(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\\w\\+ ]*)(?: bui|\\))/i // Vivo series\n ], [MODEL, [VENDOR, 'BLU'], [TYPE, MOBILE]], [ \n\n // Vivo\n /; vivo (\\w+)(?: bui|\\))/i,\n /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n // Realme\n /\\b(rmx[1-3]\\d{3})(?: bui|;|\\))/i\n ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n // Lenovo\n /(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,\n /lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\\w- ]+?)|tb[\\w-]{6,7})( bui|;|\\)|\\/)/i\n ], [MODEL, [VENDOR, LENOVO], [TYPE, TABLET]], [ \n /lenovo[-_ ]?([-\\w ]+?)(?: bui|\\)|\\/)/i\n ], [MODEL, [VENDOR, LENOVO], [TYPE, MOBILE]], [\n\n // Motorola\n /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n /\\bmot(?:orola)?[- ]([\\w\\s]+)(\\)| bui)/i,\n /((?:moto(?! 360)[-\\w\\(\\) ]+|xt\\d{3,4}[cgkosw\\+]?[-\\d]*|nexus 6)(?= bui|\\)))/i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n // LG\n /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n /\\blg[-e;\\/ ]+(?!.*(?:browser|netcast|android tv|watch|webos))(\\w+)/i,\n /\\blg-?([\\d\\w]+) bui/i\n ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n // Nokia\n /(nokia) (t[12][01])/i\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n /(?:maemo|nokia).*(n900|lumia \\d+|rm-\\d+)/i,\n /nokia[-_ ]?(([-\\w\\. ]*?))( bui|\\)|;|\\/)/i\n ], [[MODEL, /_/g, ' '], [TYPE, MOBILE], [VENDOR, 'Nokia']], [\n\n // Google\n /(pixel (c|tablet))\\b/i // Google Pixel C/Tablet\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n // Google Pixel\n /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\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n /(google) (pixelbook( go)?)/i\n ], [VENDOR, MODEL], [\n\n // Sony\n /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\n ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n /sony tablet [ps]/i,\n /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi|aeo(?!bc)\\w\\w)( bui|\\))/i, // Kindle Fire without Silk / Echo Show\n /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n // BlackBerry\n /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n /(?:blackberry|\\(bb10;) (\\w+)/i\n ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n // Asus\n /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n // HTC\n /(nexus 9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n // TCL\n /tcl (xess p17aa)/i,\n /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\n ], [MODEL, [VENDOR, 'TCL'], [TYPE, TABLET]], [\n /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\n ], [MODEL, [VENDOR, 'TCL'], [TYPE, MOBILE]], [\n\n // itel\n /(itel) ((\\w+))/i\n ], [[VENDOR, lowerize], MODEL, [TYPE, strMapper, { 'tablet' : ['p10001l', 'w7001'], '*' : 'mobile' }]], [\n\n // Acer\n /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n // Meizu\n /droid.+; (m[1-5] note) bui/i,\n /\\bmz-([-\\w]{2,})/i\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n \n // Ulefone\n /; ((?:power )?armor(?:[\\w ]{0,8}))(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Ulefone'], [TYPE, MOBILE]], [\n\n // Energizer\n /; (energy ?\\w+)(?: bui|\\))/i,\n /; energizer ([\\w ]+)(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Energizer'], [TYPE, MOBILE]], [\n\n // Cat\n /; cat (b35);/i,\n /; (b15q?|s22 flip|s48c|s62 pro)(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Cat'], [TYPE, MOBILE]], [\n\n // Smartfren\n /((?:new )?andromax[\\w- ]+)(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Smartfren'], [TYPE, MOBILE]], [\n\n // Nothing\n /droid.+; (a(in)?(0(15|59|6[35])|142)p?)/i\n ], [MODEL, [VENDOR, 'Nothing'], [TYPE, MOBILE]], [\n\n // Archos\n /; (x67 5g|tikeasy \\w+|ac[1789]\\d\\w+)( b|\\))/i,\n /archos ?(5|gamepad2?|([\\w ]*[t1789]|hello) ?\\d+[\\w ]*)( b|\\))/i\n ], [MODEL, [VENDOR, 'Archos'], [TYPE, TABLET]], [\n /archos ([\\w ]+)( b|\\))/i,\n /; (ac[3-6]\\d\\w{2,8})( b|\\))/i \n ], [MODEL, [VENDOR, 'Archos'], [TYPE, MOBILE]], [\n\n // HMD\n /; (n159v)/i\n ], [MODEL, [VENDOR, 'HMD'], [TYPE, MOBILE]], [\n\n // MIXED\n /(imo) (tab \\w+)/i, // IMO\n /(infinix|tecno) (x1101b?|p904|dp(7c|8d|10a)( pro)?|p70[1-3]a?|p904|t1101)/i // Infinix XPad / Tecno\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|tecno|micromax|advan)[-_ ]?([-\\w]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Tecno/Micromax/Advan\n // BLU/HMD/IMO/Infinix/Lava/OnePlus/TCL/Wiko\n /; (blu|hmd|imo|infinix|lava|oneplus|tcl|wiko)[_ ]([\\w\\+ ]+?)(?: bui|\\)|; r)/i,\n /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n /(oppo) ?([\\w ]+) bui/i, // OPPO\n /(hisense) ([ehv][\\w ]+)\\)/i, // Hisense\n /droid[^;]+; (philips)[_ ]([sv-x][\\d]{3,4}[xz]?)/i // Philips\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /(kobo)\\s(ereader|touch)/i, // Kobo\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i // Kindle\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(surface duo)/i // Surface Duo\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n /((?:tegranote|shield t(?!.+d tv))[\\w- ]*?)(?: b|\\))/i // Nvidia Tablets\n ], [MODEL, [VENDOR, NVIDIA], [TYPE, TABLET]], [\n /(sprint) (\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n /droid.+; ([c6]+|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /(philips)[\\w ]+tv/i, // Philips\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n /(vizio)(?: |.+model\\/)(\\w+-\\w+)/i, // Vizio\n /tcast.+(lg)e?. ([-\\w]+)/i // LG SmartTV\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i\n ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n /(apple) ?tv/i // Apple TV\n ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n /crkey.*devicetype\\/chromecast/i // Google Chromecast Third Generation\n ], [[MODEL, CHROMECAST+' Third Generation'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /crkey.*devicetype\\/([^/]*)/i // Google Chromecast with specific device type\n ], [[MODEL, /^/, 'Chromecast '], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /fuchsia.*crkey/i // Google Chromecast Nest Hub\n ], [[MODEL, CHROMECAST+' Nest Hub'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /crkey/i // Google Chromecast, Linux-based or unknown\n ], [[MODEL, CHROMECAST], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /(portaltv)/i // Facebook Portal TV\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, SMARTTV]], [\n /droid.+aft(\\w+)( bui|\\))/i // Fire TV\n ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n /(shield \\w+ tv)/i // Nvidia Shield TV\n ], [MODEL, [VENDOR, NVIDIA], [TYPE, SMARTTV]], [\n /\\(dtv[\\);].+(aquos)/i,\n /(aquos-tv[\\w ]+)\\)/i // Sharp\n ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[\n /(bravia[\\w ]+)( bui|\\))/i // Sony\n ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [\n /(mi(tv|box)-?\\w+) bui/i // Xiaomi\n ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [\n /Hbbtv.*(technisat) (.*);/i // TechniSAT\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, /.+\\/(\\w+)/, '$1', strMapper, {'LG':'lge'}], [MODEL, trim], [TYPE, SMARTTV]], [\n\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /(playstation \\w+)/i // Playstation\n ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n /(ouya)/i, // Ouya\n /(nintendo) (\\w+)/i, // Nintendo\n /(retroid) (pocket ([^\\)]+))/i // Retroid Pocket\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n /droid.+; (shield)( bui|\\))/i // Nvidia Portable\n ], [MODEL, [VENDOR, NVIDIA], [TYPE, CONSOLE]], [\n\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /\\b(sm-[lr]\\d\\d[0156][fnuw]?s?|gear live)\\b/i // Samsung Galaxy Watch\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]], [\n /((pebble))app/i, // Pebble\n /(asus|google|lg|oppo) ((pixel |zen)?watch[\\w ]*)( bui|\\))/i // Asus ZenWatch / LG Watch / Pixel Watch\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /(ow(?:19|20)?we?[1-3]{1,3})/i // Oppo Watch\n ], [MODEL, [VENDOR, OPPO], [TYPE, WEARABLE]], [\n /(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i // Apple Watch\n ], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [\n /(opwwe\\d{3})/i // OnePlus Watch\n ], [MODEL, [VENDOR, ONEPLUS], [TYPE, WEARABLE]], [\n /(moto 360)/i // Motorola 360\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, WEARABLE]], [\n /(smartwatch 3)/i // Sony SmartWatch\n ], [MODEL, [VENDOR, SONY], [TYPE, WEARABLE]], [\n /(g watch r)/i // LG G Watch R\n ], [MODEL, [VENDOR, LG], [TYPE, WEARABLE]], [\n /droid.+; (wt63?0{2,3})\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n\n ///////////////////\n // XR\n ///////////////////\n\n /droid.+; (glass) \\d/i // Google Glass\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, XR]], [\n /(pico) ([\\w ]+) os\\d/i // Pico\n ], [VENDOR, MODEL, [TYPE, XR]], [\n /(quest( \\d| pro)?s?).+vr/i // Meta Quest\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, XR]], [\n /mobile vr; rv.+firefox/i // Unidentifiable VR device using Firefox Reality / Wolvic\n ], [[TYPE, XR]], [\n\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [\n /(aeobc)\\b/i // Echo Dot\n ], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [\n /(homepod).+mac os/i // Apple HomePod\n ], [MODEL, [VENDOR, APPLE], [TYPE, EMBEDDED]], [\n /windows iot/i // Unidentifiable embedded device using Windows IoT\n ], [[TYPE, EMBEDDED]], [\n\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid.+; ([\\w- ]+) (4k|android|smart|google)[- ]?tv/i // Unidentifiable SmartTV\n ], [MODEL, [TYPE, SMARTTV]], [\n /\\b((4k|android|smart|opera)[- ]?tv|tv; rv:|large screen[\\w ]+safari)\\b/i\n ], [[TYPE, SMARTTV]], [\n /droid .+?; ([^;]+?)(?: bui|; wv\\)|\\) applew|; hmsc).+?(mobile|vr|\\d) safari/i\n ], [MODEL, [TYPE, strMapper, { 'mobile' : 'Mobile', 'xr' : 'VR', '*' : TABLET }]], [\n /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n ], [[TYPE, TABLET]], [\n /(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n ], [[TYPE, MOBILE]], [\n /droid .+?; ([\\w\\. -]+)( bui|\\))/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, EDGE+'HTML']], [\n\n /(arkweb)\\/([\\w\\.]+)/i // ArkWeb\n ], [NAME, VERSION], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna/Servo\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i, // iCab\n\n /\\b(libweb)/i // LibWeb\n ], [NAME, VERSION], [\n /ladybird\\//i\n ], [[NAME, 'LibWeb']], [\n\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows\n /(windows nt) (6\\.[23]); arm/i // Windows RT\n ], [[NAME, /N/, 'R'], [VERSION, strMapper, windowsVersionMap]], [\n /(windows (?:phone|mobile|iot))(?: os)?[\\/ ]?([\\d\\.]*( se)?)/i, // Windows IoT/Mobile/Phone\n // Windows NT/3.1/95/98/ME/2000/XP/Vista/7/8/8.1/10/11\n /(windows)[\\/ ](1[01]|2000|3\\.1|7|8(\\.1)?|9[58]|me|server 20\\d\\d( r2)?|vista|xp)/i\n ], [NAME, VERSION], [\n /windows nt ?([\\d\\.\\)]*)(?!.+xbox)/i,\n /\\bwin(?=3| ?9|n)(?:nt| 9x )?([\\d\\.;]*)/i\n ], [[VERSION, /(;|\\))/g, '', strMapper, windowsVersionMap], [NAME, WINDOWS]], [\n /(windows ce)\\/?([\\d\\.]*)/i // Windows CE\n ], [NAME, VERSION], [\n\n // iOS/macOS\n /[adehimnop]{4,7}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n /(?:ios;fbsv|ios(?=.+ip(?:ad|hone))|ip(?:ad|hone)(?: |.+i(?:pad)?)os)[\\/ ]([\\w\\.]+)/i,\n /cfnetwork\\/.+darwin/i\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n /(mac os x) ?([\\w\\. ]*)/i,\n /(macintosh|mac_powerpc\\b)(?!.+(haiku|morphos))/i // Mac OS\n ], [[NAME, 'macOS'], [VERSION, /_/g, '.']], [\n\n // Google Chromecast\n /android ([\\d\\.]+).*crkey/i // Google Chromecast, Android-based\n ], [VERSION, [NAME, CHROMECAST + ' Android']], [\n /fuchsia.*crkey\\/([\\d\\.]+)/i // Google Chromecast, Fuchsia-based\n ], [VERSION, [NAME, CHROMECAST + ' Fuchsia']], [\n /crkey\\/([\\d\\.]+).*devicetype\\/smartspeaker/i // Google Chromecast, Linux-based Smart Speaker\n ], [VERSION, [NAME, CHROMECAST + ' SmartSpeaker']], [\n /linux.*crkey\\/([\\d\\.]+)/i // Google Chromecast, Legacy Linux-based\n ], [VERSION, [NAME, CHROMECAST + ' Linux']], [\n /crkey\\/([\\d\\.]+)/i // Google Chromecast, unknown\n ], [VERSION, [NAME, CHROMECAST]], [\n\n // Mobile OSes\n /droid ([\\w\\.]+)\\b.+(android[- ]x86)/i // Android-x86\n ], [VERSION, NAME], [ \n /(ubuntu) ([\\w\\.]+) like android/i // Ubuntu Touch\n ], [[NAME, /(.+)/, '$1 Touch'], VERSION], [\n /(harmonyos)[\\/ ]?([\\d\\.]*)/i, // HarmonyOS\n // Android/Blackberry/WebOS/QNX/Bada/RIM/KaiOS/Maemo/MeeGo/S40/Sailfish OS/OpenHarmony/Tizen\n /(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen)\\w*[-\\/\\.; ]?([\\d\\.]*)/i\n ], [NAME, VERSION], [\n /\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, BLACKBERRY]], [\n /(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [\n /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n ], [VERSION, [NAME, FIREFOX+' OS']], [\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i, // WebOS\n /webos(?:[ \\/]?|\\.tv-20(?=2[2-9]))(\\d[\\d\\.]*)/i\n ], [VERSION, [NAME, 'webOS']], [\n /web0s;.+?(?:chr[o0]me|safari)\\/(\\d+)/i\n // https://webostv.developer.lge.com/develop/specifications/web-api-and-web-engine\n ], [[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']], [ \n /watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i // watchOS\n ], [VERSION, [NAME, 'watchOS']], [\n\n // Google ChromeOS\n /(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i // Chromium OS\n ], [[NAME, \"Chrome OS\"], VERSION],[\n\n // Smart TVs\n /panasonic;(viera)/i, // Panasonic Viera\n /(netrange)mmh/i, // Netrange\n /(nettv)\\/(\\d+\\.[\\w\\.]+)/i, // NetTV\n\n // Console\n /(nintendo|playstation) (\\w+)/i, // Nintendo/Playstation\n /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n /(pico) .+os([\\w\\.]+)/i, // Pico\n\n // Other\n /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n /linux.+(mint)[\\/\\(\\) ]?([\\w\\.]*)/i, // Mint\n /(mageia|vectorlinux|fuchsia|arcaos|arch(?= ?linux))[;l ]([\\d\\.]*)/i, // Mageia/VectorLinux/Fuchsia/ArcaOS/Arch\n /([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,\n // Ubuntu/Debian/SUSE/Gentoo/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire/Knoppix\n /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n /\\b(aix)[; ]([1-9\\.]{0,4})/i, // AIX\n /(hurd|linux|morphos)(?: (?:arm|x86|ppc)\\w*| ?)([\\w\\.]*)/i, // Hurd/Linux/MorphOS\n /(gnu) ?([\\w\\.]*)/i, // GNU\n /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n /(haiku) ?(r\\d)?/i // Haiku\n ], [NAME, VERSION], [\n /(sunos) ?([\\d\\.]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n /\\b(beos|os\\/2|amigaos|openvms|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/OpenVMS/HP-UX/SerenityOS\n /(unix) ?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n /////////////////\n // Factories\n ////////////////\n\n var defaultProps = (function () {\n var props = { init : {}, isIgnore : {}, isIgnoreRgx : {}, toString : {}};\n setProps.call(props.init, [\n [BROWSER, [NAME, VERSION, MAJOR, TYPE]],\n [CPU, [ARCHITECTURE]],\n [DEVICE, [TYPE, MODEL, VENDOR]],\n [ENGINE, [NAME, VERSION]],\n [OS, [NAME, VERSION]]\n ]);\n setProps.call(props.isIgnore, [\n [BROWSER, [VERSION, MAJOR]],\n [ENGINE, [VERSION]],\n [OS, [VERSION]]\n ]);\n setProps.call(props.isIgnoreRgx, [\n [BROWSER, / ?browser$/i],\n [OS, / ?os$/i]\n ]);\n setProps.call(props.toString, [\n [BROWSER, [NAME, VERSION]],\n [CPU, [ARCHITECTURE]],\n [DEVICE, [VENDOR, MODEL]],\n [ENGINE, [NAME, VERSION]],\n [OS, [NAME, VERSION]]\n ]);\n return props;\n })();\n\n var createIData = function (item, itemType) {\n\n var init_props = defaultProps.init[itemType],\n is_ignoreProps = defaultProps.isIgnore[itemType] || 0,\n is_ignoreRgx = defaultProps.isIgnoreRgx[itemType] || 0,\n toString_props = defaultProps.toString[itemType] || 0;\n\n function IData () {\n setProps.call(this, init_props);\n }\n\n IData.prototype.getItem = function () {\n return item;\n };\n\n IData.prototype.withClientHints = function () {\n\n // nodejs / non-client-hints browsers\n if (!NAVIGATOR_UADATA) {\n return item\n .parseCH()\n .get();\n }\n\n // browsers based on chromium 85+\n return NAVIGATOR_UADATA\n .getHighEntropyValues(CH_ALL_VALUES)\n .then(function (res) {\n return item\n .setCH(new UACHData(res, false))\n .parseCH()\n .get();\n });\n };\n\n IData.prototype.withFeatureCheck = function () {\n return item.detectFeature().get();\n };\n\n if (itemType != RESULT) {\n IData.prototype.is = function (strToCheck) {\n var is = false;\n for (var i in this) {\n 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)) {\n is = true;\n if (strToCheck != TYPEOF.UNDEFINED) break;\n } else if (strToCheck == TYPEOF.UNDEFINED && is) {\n is = !is;\n break;\n }\n }\n return is;\n };\n IData.prototype.toString = function () {\n var str = EMPTY;\n for (var i in toString_props) {\n if (typeof(this[toString_props[i]]) !== TYPEOF.UNDEFINED) {\n str += (str ? ' ' : EMPTY) + this[toString_props[i]];\n }\n }\n return str || TYPEOF.UNDEFINED;\n };\n }\n\n if (!NAVIGATOR_UADATA) {\n IData.prototype.then = function (cb) { \n var that = this;\n var IDataResolve = function () {\n for (var prop in that) {\n if (that.hasOwnProperty(prop)) {\n this[prop] = that[prop];\n }\n }\n };\n IDataResolve.prototype = {\n is : IData.prototype.is,\n toString : IData.prototype.toString\n };\n var resolveData = new IDataResolve();\n cb(resolveData);\n return resolveData;\n };\n }\n\n return new IData();\n };\n\n /////////////////\n // Constructor\n ////////////////\n\n function UACHData (uach, isHttpUACH) {\n uach = uach || {};\n setProps.call(this, CH_ALL_VALUES);\n if (isHttpUACH) {\n setProps.call(this, [\n [BRANDS, itemListToArray(uach[CH])],\n [FULLVERLIST, itemListToArray(uach[CH_FULL_VER_LIST])],\n [MOBILE, /\\?1/.test(uach[CH_MOBILE])],\n [MODEL, stripQuotes(uach[CH_MODEL])],\n [PLATFORM, stripQuotes(uach[CH_PLATFORM])],\n [PLATFORMVER, stripQuotes(uach[CH_PLATFORM_VER])],\n [ARCHITECTURE, stripQuotes(uach[CH_ARCH])],\n [FORMFACTORS, itemListToArray(uach[CH_FORM_FACTORS])],\n [BITNESS, stripQuotes(uach[CH_BITNESS])]\n ]);\n } else {\n for (var prop in uach) {\n if(this.hasOwnProperty(prop) && typeof uach[prop] !== TYPEOF.UNDEFINED) this[prop] = uach[prop];\n }\n }\n }\n\n function UAItem (itemType, ua, rgxMap, uaCH) {\n\n this.get = function (prop) {\n if (!prop) return this.data;\n return this.data.hasOwnProperty(prop) ? this.data[prop] : undefined;\n };\n\n this.set = function (prop, val) {\n this.data[prop] = val;\n return this;\n };\n\n this.setCH = function (ch) {\n this.uaCH = ch;\n return this;\n };\n\n this.detectFeature = function () {\n if (NAVIGATOR && NAVIGATOR.userAgent == this.ua) {\n switch (this.itemType) {\n case BROWSER:\n // Brave-specific detection\n if (NAVIGATOR.brave && typeof NAVIGATOR.brave.isBrave == TYPEOF.FUNCTION) {\n this.set(NAME, 'Brave');\n }\n break;\n case DEVICE:\n // Chrome-specific detection: check for 'mobile' value of navigator.userAgentData\n if (!this.get(TYPE) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[MOBILE]) {\n this.set(TYPE, MOBILE);\n }\n // iPadOS-specific detection: identified as Mac, but has some iOS-only properties\n if (this.get(MODEL) == 'Macintosh' && NAVIGATOR && typeof NAVIGATOR.standalone !== TYPEOF.UNDEFINED && NAVIGATOR.maxTouchPoints && NAVIGATOR.maxTouchPoints > 2) {\n this.set(MODEL, 'iPad')\n .set(TYPE, TABLET);\n }\n break;\n case OS:\n // Chrome-specific detection: check for 'platform' value of navigator.userAgentData\n if (!this.get(NAME) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[PLATFORM]) {\n this.set(NAME, NAVIGATOR_UADATA[PLATFORM]);\n }\n break;\n case RESULT:\n var data = this.data;\n var detect = function (itemType) {\n return data[itemType]\n .getItem()\n .detectFeature()\n .get();\n };\n this.set(BROWSER, detect(BROWSER))\n .set(CPU, detect(CPU))\n .set(DEVICE, detect(DEVICE))\n .set(ENGINE, detect(ENGINE))\n .set(OS, detect(OS));\n }\n }\n return this;\n };\n\n this.parseUA = function () {\n if (this.itemType != RESULT) {\n rgxMapper.call(this.data, this.ua, this.rgxMap);\n }\n switch (this.itemType) {\n case BROWSER:\n this.set(MAJOR, majorize(this.get(VERSION)));\n break;\n case OS:\n if (this.get(NAME) == 'iOS' && this.get(VERSION) == '18.6') {\n // Based on the assumption that iOS version is tightly coupled with Safari version\n var realVersion = /\\) Version\\/([\\d\\.]+)/.exec(this.ua); // Get Safari version\n if (realVersion && parseInt(realVersion[1].substring(0,2), 10) >= 26) {\n this.set(VERSION, realVersion[1]); // Set as iOS version\n }\n }\n break;\n }\n return this;\n };\n\n this.parseCH = function () {\n var uaCH = this.uaCH,\n rgxMap = this.rgxMap;\n \n switch (this.itemType) {\n case BROWSER:\n case ENGINE:\n var brands = uaCH[FULLVERLIST] || uaCH[BRANDS], prevName;\n if (brands) {\n for (var i=0; i<brands.length; i++) {\n var brandName = brands[i].brand || brands[i],\n brandVersion = brands[i].version;\n if (this.itemType == BROWSER && \n !/not.a.brand/i.test(brandName) && \n (!prevName || \n (/Chrom/.test(prevName) && brandName != CHROMIUM) || \n (prevName == EDGE && /WebView2/.test(brandName))\n )) {\n brandName = strMapper(brandName, browserHintsMap);\n prevName = this.get(NAME);\n if (!(prevName && !/Chrom/.test(prevName) && /Chrom/.test(brandName))) {\n this.set(NAME, brandName)\n .set(VERSION, brandVersion)\n .set(MAJOR, majorize(brandVersion));\n }\n prevName = brandName;\n }\n if (this.itemType == ENGINE && brandName == CHROMIUM) {\n this.set(VERSION, brandVersion);\n }\n }\n }\n break;\n case CPU:\n var archName = uaCH[ARCHITECTURE];\n if (archName) {\n if (archName && uaCH[BITNESS] == '64') archName += '64';\n rgxMapper.call(this.data, archName + ';', rgxMap);\n }\n break;\n case DEVICE:\n if (uaCH[MOBILE]) {\n this.set(TYPE, MOBILE);\n }\n if (uaCH[MODEL]) {\n this.set(MODEL, uaCH[MODEL]);\n if (!this.get(TYPE) || !this.get(VENDOR)) {\n var reParse = {};\n rgxMapper.call(reParse, 'droid 9; ' + uaCH[MODEL] + ')', rgxMap);\n if (!this.get(TYPE) && !!reParse.type) {\n this.set(TYPE, reParse.type);\n }\n if (!this.get(VENDOR) && !!reParse.vendor) {\n this.set(VENDOR, reParse.vendor);\n }\n }\n }\n if (uaCH[FORMFACTORS]) {\n var ff;\n if (typeof uaCH[FORMFACTORS] !== 'string') {\n var idx = 0;\n while (!ff && idx < uaCH[FORMFACTORS].length) {\n ff = strMapper(uaCH[FORMFACTORS][idx++], formFactorsMap);\n }\n } else {\n ff = strMapper(uaCH[FORMFACTORS], formFactorsMap);\n }\n this.set(TYPE, ff);\n }\n break;\n case OS:\n var osName = uaCH[PLATFORM];\n if(osName) {\n var osVersion = uaCH[PLATFORMVER];\n if (osName == WINDOWS) osVersion = (parseInt(majorize(osVersion), 10) >= 13 ? '11' : '10');\n this.set(NAME, osName)\n .set(VERSION, osVersion);\n }\n // Xbox-Specific Detection\n if (this.get(NAME) == WINDOWS && uaCH[MODEL] == 'Xbox') {\n this.set(NAME, 'Xbox')\n .set(VERSION, undefined);\n } \n break;\n case RESULT:\n var data = this.data;\n var parse = function (itemType) {\n return data[itemType]\n .getItem()\n .setCH(uaCH)\n .parseCH()\n .get();\n };\n this.set(BROWSER, parse(BROWSER))\n .set(CPU, parse(CPU))\n .set(DEVICE, parse(DEVICE))\n .set(ENGINE, parse(ENGINE))\n .set(OS, parse(OS));\n }\n return this;\n };\n\n setProps.call(this, [\n ['itemType', itemType],\n ['ua', ua],\n ['uaCH', uaCH],\n ['rgxMap', rgxMap],\n ['data', createIData(this, itemType)]\n ]);\n\n return this;\n }\n\n function UAParser (ua, extensions, headers) {\n\n if (typeof ua === TYPEOF.OBJECT) {\n if (isExtensions(ua, true)) {\n if (typeof extensions === TYPEOF.OBJECT) {\n headers = extensions; // case UAParser(extensions, headers) \n }\n extensions = ua; // case UAParser(extensions)\n } else {\n headers = ua; // case UAParser(headers)\n extensions = undefined;\n }\n ua = undefined;\n } else if (typeof ua === TYPEOF.STRING && !isExtensions(extensions, true)) {\n headers = extensions; // case UAParser(ua, headers)\n extensions = undefined;\n }\n\n if (headers) {\n if (typeof headers.append === TYPEOF.FUNCTION) {\n // Convert Headers object into a plain object\n var kv = {};\n headers.forEach(function (v, k) { kv[String(k).toLowerCase()] = v; });\n headers = kv;\n } else {\n // Normalize headers field name into lowercase\n var normalized = {};\n for (var header in headers) {\n if (headers.hasOwnProperty(header)) {\n normalized[String(header).toLowerCase()] = headers[header];\n }\n }\n headers = normalized;\n }\n }\n \n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions, headers).getResult();\n }\n\n var userAgent = typeof ua === TYPEOF.STRING ? ua : // Passed user-agent string\n (headers && headers[USER_AGENT] ? headers[USER_AGENT] : // User-Agent from passed headers\n ((NAVIGATOR && NAVIGATOR.userAgent) ? NAVIGATOR.userAgent : // navigator.userAgent\n EMPTY)), // empty string\n\n httpUACH = new UACHData(headers, true),\n regexMap = extensions ? \n extend(defaultRegexes, extensions) : \n defaultRegexes,\n\n createItemFunc = function (itemType) {\n if (itemType == RESULT) {\n return function () {\n return new UAItem(itemType, userAgent, regexMap, httpUACH)\n .set('ua', userAgent)\n .set(BROWSER, this.getBrowser())\n .set(CPU, this.getCPU())\n .set(DEVICE, this.getDevice())\n .set(ENGINE, this.getEngine())\n .set(OS, this.getOS())\n .get();\n };\n } else {\n return function () {\n return new UAItem(itemType, userAgent, regexMap[itemType], httpUACH)\n .parseUA()\n .get();\n };\n }\n };\n \n // public methods\n setProps.call(this, [\n ['getBrowser', createItemFunc(BROWSER)],\n ['getCPU', createItemFunc(CPU)],\n ['getDevice', createItemFunc(DEVICE)],\n ['getEngine', createItemFunc(ENGINE)],\n ['getOS', createItemFunc(OS)],\n ['getResult', createItemFunc(RESULT)],\n ['getUA', function () { return userAgent; }],\n ['setUA', function (ua) {\n if (isString(ua)) userAgent = trim(ua, UA_MAX_LENGTH);\n return this;\n }]\n ])\n .setUA(userAgent);\n\n return this;\n }\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR, TYPE]);\n UAParser.CPU = enumerize([ARCHITECTURE]);\n UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n export {UAParser};","/* eslint-disable */\n// SDK 工具函数\nimport { UAParser } from 'ua-parser-js'\n\n\nconst isNull = val => val === null\nconst isUndefined = val => typeof val === 'undefined'\nexport const isEmpty = val => {\n if (isNull(val) || isUndefined(val) || val === '') {\n return true\n }\n return false\n}\n\n/**\n * performance.now() 兼容性处理\n * 优先使用 performance.now(),降级使用 Date.now()\n * @returns {Function} 返回当前时间戳的函数(毫秒)\n */\nexport const performanceNow = (() => {\n // 检查是否支持 performance.now\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n return () => performance.now()\n }\n // 降级方案:使用 Date.now()\n // 注意:Date.now() 的精度较低,且可能受系统时间调整影响\n return () => Date.now()\n})()\n\nexport function pad(num, len, placeholder = '0') {\n const str = String(num)\n if (str.length < len) {\n let result = str\n for (let i = 0; i < len - str.length; i += 1) {\n result = placeholder + result\n }\n return result\n }\n return str\n}\n\n// export function getSessionId() {\n// const date = new Date()\n\n// // yyyy-MM-dd的16进制表示,7位数字\n// const hexDate = parseInt(\n// `${date.getFullYear()}${pad(date.getMonth() + 1, 2)}${pad(\n// date.getDate(),\n// 2\n// )}`,\n// 10\n// ).toString(16)\n\n// // hh-mm-ss-ms的16进制表示,最大也是7位\n// const hexTime = parseInt(\n// `${pad(date.getHours(), 2)}${pad(date.getMinutes(), 2)}${pad(\n// date.getSeconds(),\n// 2\n// )}${pad(date.getMilliseconds(), 3)}`,\n// 10\n// ).toString(16)\n\n// // 第8位数字表示后面的time字符串的长度\n// let guid = hexDate + hexTime.length + hexTime\n\n// // 补充随机数,补足32位的16进制数\n// while (guid.length < 32) {\n// guid += Math.floor(Math.random() * 16).toString(16)\n// }\n\n// // 分为三段,前两段包含时间戳信息 第一段 和第二段去掉最后一数字 16进制转10进制 获取年月日 时分秒\n// return `${guid.slice(0, 8)}-${guid.slice(8, 16)}-${guid.slice(16)}`\n// }\n\n// 序列号,用于同一毫秒内的递增\nlet sequenceCounter = 0\nlet lastTimestamp = 0\n// 实例唯一标识(每个浏览器实例生成一次,用于区分不同实例)\n// 使用时间戳 + 随机数生成,确保不同实例有不同的标识\nconst instanceId = (() => {\n const randomPart = Math.floor(Math.random() * 0xFFFF) // 16位随机数\n const timePart = Date.now() % 0xFFFF // 16位时间戳低位\n return (randomPart << 16) | timePart // 组合成32位,取低16位作为实例ID\n})()\n\nexport const getSessionId = () => {\n const now = Date.now()\n\n // 如果时间戳相同,使用序列号递增\n if (now === lastTimestamp) {\n sequenceCounter++\n } else {\n sequenceCounter = 0\n lastTimestamp = now\n }\n\n // 将时间戳转为16进制(13位时间戳转为11位16进制)\n const hexTimestamp = pad(now.toString(16), 11, '0')\n\n // 序列号转为16进制(最多4位,支持65535个序列)\n const hexSequence = pad(sequenceCounter.toString(16), 4, '0')\n\n // 实例ID(4位16进制,用于区分不同浏览器实例)\n // 这样即使1000个客户在同一毫秒打开,实例ID也不同,避免重复\n const hexInstanceId = pad((instanceId & 0xFFFF).toString(16), 4, '0')\n\n // 时间戳的扩展部分(17位16进制),用于保证唯一性和排序性\n // 方案:直接使用时间戳的低68位(17位16进制 = 68位二进制)\n // 时间戳是13位数字(约43位二进制),我们需要17位16进制(68位二进制)\n //\n // 策略:将时间戳转换为16进制,然后扩展到17位\n // 如果时间戳的16进制表示不足17位,用0填充(这样保证单调性)\n // 如果超过17位,取低17位(这样保证唯一性)\n //\n // 但这样会有问题:时间戳只有11位16进制,不足17位\n //\n // 更好的方案:使用时间戳的不同连续位段,按从高到低的顺序组合\n // 这样当时间戳增加时,高位部分先变化,确保扩展部分也增大\n //\n // 具体实现:将时间戳的连续位段按重要性从高到低排列\n // 1. 时间戳的高位部分(最重要,放在最前面)\n // 2. 时间戳的中间部分\n // 3. 时间戳的低位部分\n // 4. 时间戳的重复/扩展部分(用于填充到17位)\n\n // 提取时间戳的不同连续位段(使用位运算,不使用取模,保证单调性)\n // 第24-43位(右移24位,取低20位)- 最高有效位部分,5位16进制\n const timestampHigh20 = (now >> 24) & 0xFFFFF\n\n // 第12-23位(右移12位,取低12位)- 中间高位部分,3位16进制\n const timestampMid12 = (now >> 12) & 0xFFF\n\n // 第0-11位(取低12位)- 最低位部分,3位16进制\n const timestampLow12 = now & 0xFFF\n\n // 第36-43位(右移36位,取低8位)- 更高位部分,2位16进制\n const timestampTop8 = (now >> 36) & 0xFF\n\n // 第44-51位(右移44位,取低8位)- 最高位部分,2位16进制(如果时间戳超过43位)\n const timestampTop8Ext = (now >> 44) & 0xFF\n\n // 第52-55位(右移52位,取低4位)- 最高位剩余部分,1位16进制\n const timestampTop4 = (now >> 52) & 0xF\n\n // 第56-59位(右移56位,取低4位)- 最高位扩展部分,1位16进制\n const timestampTop4Ext = (now >> 56) & 0xF\n\n // 组合时间戳扩展部分(13位16进制,因为实例ID占了4位)\n // 按从高到低的顺序排列,确保时间戳越大,扩展部分也越大\n // 5位 + 2位 + 3位 + 3位 = 13位\n const hexTimestampExt = pad(timestampHigh20.toString(16), 5, '0') + // 5位:第24-43位(最重要,优先变化)\n pad(timestampTop8.toString(16), 2, '0') + // 2位:第36-43位\n pad(timestampMid12.toString(16), 3, '0') + // 3位:第12-23位\n pad(timestampLow12.toString(16), 3, '0') // 3位:第0-11位\n\n // 组合:时间戳(11位) + 序列号(4位) + 实例ID(4位) + 时间戳扩展(13位) = 32位\n // 这样的组合可以保证跨项目/实例的唯一性和排序性:\n // 1. 时间戳不同时,时间戳大的ID一定更大(时间戳在最前面,11位,字符串比较时优先)\n // 2. 时间戳相同时,序列号大的ID一定更大(序列号在中间,4位)\n // 3. 时间戳和序列号都相同时,实例ID不同(4位),确保不同浏览器实例生成的ID不同\n // 4. 时间戳扩展部分保证唯一性和排序性(13位)\n //\n // 关键改进:加入实例ID后,即使1000个客户在同一毫秒打开各自的公众号,\n // 每个实例的instanceId都不同(随机生成),可以避免ID重复\n let guid = hexTimestamp + hexSequence + hexInstanceId + hexTimestampExt\n\n // 确保正好32位\n guid = guid.slice(0, 32)\n // 如果不足32位,用0补齐(理论上不会发生)\n guid = pad(guid, 32, '0')\n\n // 分为三段,保持原有格式\n return `${guid.slice(0, 8)}${guid.slice(8, 16)}${guid.slice(16)}`\n}\n\n/**\n * 生成一个短唯一识别码\n * 格式:时间戳(36进制,8位)+ 随机数(36进制,4位)= 12位字符串\n * 优点:短、唯一、高性能\n * @returns {string} 12位的唯一识别码,例如:'k2j3h4g5f1a'\n */\nlet uniqueIdCounter = 0\nexport function generateUniqueId() {\n // 获取当前时间戳(毫秒)\n const timestamp = Date.now()\n \n // 时间戳转为36进制(0-9a-z),取后8位\n const timestamp36 = timestamp.toString(36).slice(-8).padStart(8, '0')\n \n // 递增计数器(用于同一毫秒内的多次调用)\n uniqueIdCounter = (uniqueIdCounter + 1) % 46656 // 36^3,确保3位足够\n \n // 随机数 + 计数器,转为36进制,取4位\n const random = Math.floor(Math.random() * 36)\n const counter36 = uniqueIdCounter.toString(36).padStart(2, '0')\n const random36 = random.toString(36)\n const suffix = (counter36 + random36).padStart(4, '0').slice(-4)\n \n return timestamp36 + suffix\n}\n\n/**\n * 生成一个更短的唯一识别码(8位)\n * 格式:时间戳(36进制,6位)+ 随机数(36进制,2位)= 8位字符串\n * 适用于需要更短ID的场景\n * @returns {string} 8位的唯一识别码\n */\nlet shortIdCounter = 0\nexport function generateShortId() {\n // 获取当前时间戳(毫秒)\n const timestamp = Date.now()\n \n // 时间戳转为36进制,取后6位\n const timestamp36 = timestamp.toString(36).slice(-6).padStart(6, '0')\n \n // 递增计数器 + 随机数\n shortIdCounter = (shortIdCounter + 1) % 1296 // 36^2,确保2位足够\n const random = Math.floor(Math.random() * 36)\n const suffix = (shortIdCounter.toString(36) + random.toString(36)).padStart(2, '0').slice(-2)\n \n return timestamp36 + suffix\n}\n\n/**\n * 检测当前环境是否为微信浏览器\n * @returns {boolean} 如果是微信浏览器返回true,否则返回false\n */\nexport const isWeinxin = () => {\n // 首先检查是否存在WeixinJSBridge对象,这是微信内置的JavaScript对象\n if (typeof WeixinJSBridge !== 'undefined') {\n return true\n }\n // 获取浏览器的userAgent信息并转换为小写\n var ua = navigator.userAgent.toLowerCase()\n // eslint-disable-next-line\n var isWeixin = ua?.indexOf('micromessenger') !== -1 || ua?.match(/MicroMessenger/i) == 'micromessenger'\n if (isWeixin) {\n return true\n } else {\n return false\n }\n}\n\n\n/**\n * 判断当前用户代理是否为支付宝客户端\n * @returns {boolean} - 如果是支付宝客户端返回true,否则返回false\n */\nexport const isAlipayAgent = () => {\n // 以下是另一种判断方式,已被注释掉\n // return searchInfo?.userAgent === 'AlipayClient'\n // 获取用户代理字符串并转换为小写\n const ua = navigator?.userAgent?.toLowerCase()\n // eslint-disable-next-line - 禁用下一行的ESLint规则检查\n // 判断用户代理中是否包含'alipay'字符串,或者通过正则匹配'alipay'(不区分大小写)\n const isAlipay = ua?.indexOf('alipay') !== -1 || ua?.match(/Alipay/i) == 'alipay'\n // 如果检测到支付宝用户代理,返回true,否则返回false\n if (isAlipay) {\n return true\n } else {\n return false\n }\n}\n\nexport const validateUseragent = () => {\n if (isWeinxin()) {\n return 'WECHAT'\n }\n if (isAlipayAgent()) {\n return 'ALIPAY'\n }\n return 'OTHER'\n}\n\nexport const extractHashPath = (urlString) => {\n const hashIndex = urlString?.indexOf('#')\n if (hashIndex === -1) return '' // 没有 hash\n\n const hashPart = urlString.slice(hashIndex + 1) // \"/buyPkgListNew/aaa?... \"\n const pathWithoutQuery = hashPart.replace(/^\\//, '').split('?')[0] // \"buyPkgListNew/aaa\"\n \n // 如果路径包含斜杠,只返回第一个路径段(基础页面名)\n // 例如:buyPkgListNew/aaa -> buyPkgListNew\n if (pathWithoutQuery.includes('/')) {\n return pathWithoutQuery.split('/')[0]\n }\n \n return pathWithoutQuery // \"buyPkgListNew\"\n}\n\nexport const getPageKey = (page, uiVersion) => {\n const ob = { login: 'LOGIN', buyPkgListNew: 'BUY_LIST', cardDetailInfo: 'CARD_DETAIL', flowSettle: 'SETTLEMENT', chargeMoney: 'WALLET', payOrderDetail: 'ORDER_DETAIL', alipayOrderDetail: 'ORDER_DETAIL' }\n \n // 处理带有路径的情况,例如 LOGIN/qwewqe 或 login/qwewqe\n // 提取基础页面名称(第一个路径段)\n let basePage = page\n if (page && typeof page === 'string') {\n // 如果包含斜杠,提取第一部分\n const parts = page.split('/')\n if (parts.length > 1) {\n basePage = parts[0]\n }\n }\n \n // 转换为小写以便匹配映射对象\n const basePageLower = basePage.toLowerCase()\n \n if (['HONGSHUN','IOP-V2', 'XIAOCHENG-V2', 'BLACKGOLD'].includes(uiVersion)) {\n if (basePageLower === 'chargemoney') {\n if ((window.location.href?.indexOf('showMoney=false') > -1)) {\n return 'EQUITY'\n }\n }\n }\n \n // 如果不在映射对象中,返回基础页面名(保持原始大小写,如果没有路径则返回原始值)\n // 如果原始 page 包含路径,返回基础页面名的大写形式\n if (page && typeof page === 'string' && page.includes('/')) {\n return basePage\n }\n \n // 如果没有路径,保持原有逻辑\n return ob[page] || page\n}\n\nexport const uniqueArr = (arr) => {\n return Array.from(new Set(arr))\n}\n\nexport const detectPlatform = () => {\n const ua = navigator.userAgent.toLowerCase()\n if (/android|adr/.test(ua)) return 'Android'\n if (/iphone|ipad|ipod|ios/.test(ua)) return 'iOS'\n return '其他'\n}\n\n/**\n * 使用 ua-parser-js 解析 User-Agent 信息\n * @param {string} [userAgent] 可选,默认取当前浏览器 UA\n * @returns {import('ua-parser-js').UAParser.IResult} 解析结果\n */\nexport const parseUserAgent = (userAgent) => {\n try {\n // ua-parser-js 需要先实例化\n const parser = new UAParser(userAgent || (typeof navigator !== 'undefined' ? navigator.userAgent : ''))\n return parser.getResult()\n } catch (e) {\n console.warn('UAParser 解析失败:', e)\n return {\n ua: typeof navigator !== 'undefined' ? navigator.userAgent : '',\n browser: {},\n engine: {},\n os: {\n name: detectPlatform()\n },\n device: {},\n cpu: {}\n }\n }\n}\n\nexport const getOsType = () => {\n const result = parseUserAgent()\n if (isEmpty(result?.os)) {\n return detectPlatform()\n }\n // os?.version 也可以加版本 但不一定获取的到\n if (['iOS', 'Android'].includes(result?.os?.name)) {\n console.log('parseagernt--', result?.os)\n return result?.os?.name\n }\n return '其他'\n}\n\n/**\n * 通过 userAgent 获取系统版本\n * @param {string} [userAgent] 可选,默认取当前浏览器 UA\n * @returns {string|null} 系统版本号,如果无法获取则返回 null\n * @example\n * getOsVersion() // '15.0' (iOS) 或 '12.0' (Android)\n * getOsVersion('Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X)') // '15.0'\n */\nexport const getOsVersion = (userAgent) => {\n try {\n const result = parseUserAgent(userAgent)\n // ua-parser-js 解析结果中,os.version 包含系统版本\n if (result?.os?.version) {\n return result.os.version\n }\n \n // 如果 ua-parser-js 无法解析,尝试手动解析\n const ua = userAgent || (typeof navigator !== 'undefined' ? navigator.userAgent : '')\n \n // iOS 版本解析:OS 15_0 like Mac OS X -> 15.0\n const iosMatch = ua.match(/OS\\s+(\\d+)[_.](\\d+)/i)\n if (iosMatch) {\n return `${iosMatch[1]}.${iosMatch[2]}`\n }\n \n // Android 版本解析:Android 12.0 -> 12.0\n const androidMatch = ua.match(/Android\\s+([\\d.]+)/i)\n if (androidMatch) {\n return androidMatch[1]\n }\n \n return null\n } catch (e) {\n console.warn('获取系统版本失败:', e)\n return null\n }\n}\n\n\n\n","/* eslint-disable */\n// 上报器\nimport axiosInstance from './axios-config.js'\nimport { validateUseragent, getOsType, getOsVersion, isEmpty, getSessionId } from './utils.js'\n\nexport class Reporter {\n constructor(config) {\n this.config = config\n this.isReporting = false\n // 缓存 sessionId(仅当成功从 sessionStorage 读取后缓存)\n // 如果 sessionStorage 没有值,下次还要继续尝试读取\n this._cachedSessionId = null\n // 标记是否已成功从 sessionStorage 读取过(成功读取后才标记为 true)\n // 如果为 false,下次还要继续尝试从 sessionStorage 读取\n this._sessionIdFromStorage = false\n }\n \n // 上报数据\n async report(type, data) {\n // if (this.config.getConfig().debugSwitch) {\n // console.log('report----------', type, data)\n // }\n \n // 移除 isReporting 检查,允许多个上报并发执行\n // 这样可以确保 tab 切换时的曝光事件能立即上报\n \n try {\n const reportData = this.formatReportData(type, data)\n \n // 优先使用自定义上报函数\n if (this.config.getConfig().customReport) {\n await this.config.getConfig().customReport(type, reportData)\n } else {\n // 使用默认上报方式\n await this.defaultReport(type, reportData)\n }\n } catch (error) {\n console.error('上报失败:', error)\n // 上报失败时也记录日志,方便调试\n if (this.config.getConfig().debugSwitch) {\n console.error('上报失败详情:', {\n type,\n error: error.message,\n stack: error.stack\n })\n }\n }\n }\n // 设备基本信息\n getDeviceInfo() {\n return {\n screen: {\n width: screen.width,\n height: screen.height,\n availWidth: screen.availWidth,\n availHeight: screen.availHeight,\n colorDepth: screen.colorDepth,\n pixelDepth: screen.pixelDepth\n },\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight\n },\n connection: navigator.connection ? {\n effectiveType: navigator.connection.effectiveType,\n downlink: navigator.connection.downlink,\n rtt: navigator.connection.rtt\n } : null,\n memory: navigator.memory ? {\n usedJSHeapSize: navigator.memory.usedJSHeapSize,\n totalJSHeapSize: navigator.memory.totalJSHeapSize,\n jsHeapSizeLimit: navigator.memory.jsHeapSizeLimit\n } : null\n }\n }\n \n // 获取或初始化 sessionId\n // 优化:如果 sessionStorage 没拿到值,下次还要优先从 sessionStorage 取,一直判断\n getSessionId() {\n // 如果已成功从 sessionStorage 读取过且缓存存在,直接返回缓存\n if (this._sessionIdFromStorage && this._cachedSessionId) {\n return this._cachedSessionId\n }\n \n let sessionId = this.config.getConfig().sessionId || ''\n \n // 优先从 sessionStorage 读取(如果之前没成功读取过,每次都要尝试)\n if (!this._sessionIdFromStorage && typeof sessionStorage !== 'undefined') {\n try {\n const traceSdkInfoStr = sessionStorage.getItem('SS_TRACESDK_INFO')\n if (traceSdkInfoStr) {\n const traceSdkInfo = JSON.parse(traceSdkInfoStr)\n if (traceSdkInfo && !isEmpty(traceSdkInfo.sessionId)) {\n // 成功从 sessionStorage 读取到值\n sessionId = traceSdkInfo.sessionId\n // 同步更新配置中的 sessionId,保持一致性\n this.config.updateConfig({ sessionId: sessionId })\n // 更新缓存\n this._cachedSessionId = sessionId\n // 标记已成功从 sessionStorage 读取,后续直接使用缓存\n this._sessionIdFromStorage = true\n \n if (this.config.getConfig().debugSwitch) {\n console.log('从 sessionStorage 成功读取 sessionId:', sessionId)\n }\n \n return sessionId\n }\n }\n // 如果 sessionStorage 中没有值或值为空,不标记为已读取\n // 下次调用时还会继续尝试从 sessionStorage 读取\n if (this.config.getConfig().debugSwitch) {\n console.log('sessionStorage 中未找到有效的 sessionId,下次继续尝试读取')\n }\n } catch (error) {\n // 读取失败,不标记为已读取,下次继续尝试\n if (this.config.getConfig().debugSwitch) {\n console.warn('读取 SS_TRACESDK_INFO 失败,下次继续尝试:', error)\n }\n }\n }\n \n // 如果 sessionId 仍为空,生成新的\n if (isEmpty(sessionId)) {\n sessionId = getSessionId()\n this.config.updateConfig({ sessionId: sessionId })\n // 注意:这里不更新 _sessionIdFromStorage,下次还要继续尝试从 sessionStorage 读取\n // 也不缓存,因为可能 sessionStorage 中会有新值\n }\n \n return sessionId\n }\n \n // 格式化上报数据\n formatReportData(type, data) {\n // 使用优化后的 getSessionId 方法\n const sessionId = this.getSessionId()\n const baseData = {\n sessionId: sessionId || '',\n channel: validateUseragent(),\n uiVer: this.config.getConfig().uiVersion,\n osType: getOsType(),\n osVersion: getOsVersion(),\n screenWidth: screen.width,\n screenHeight: screen.height,\n windowInnerWidth: window.innerWidth,\n windowInnerHeight: window.innerHeight,\n netType: navigator.connection ? navigator.connection.effectiveType : '',\n\n tags: {\n customerId: this.config.getConfig().customerId,\n deviceId: this.config.getConfig().deviceId,\n deviceNo: this.config.getConfig().deviceNo,\n userId: this.config.getConfig().userId,\n // device: this.getDeviceInfo()\n }\n }\n\n const temp = Array.isArray(data) ? data : [data]\n temp.forEach(item => {\n const mergedTags = Object.assign(\n {},\n baseData.tags || {},\n (item && item.tags) || {}\n )\n Object.assign(item, baseData)\n if (Object.keys(mergedTags).length > 0) {\n item.tags = mergedTags\n }\n })\n // return {\n // // ...baseData,\n // // data: Array.isArray(data) ? data : [data]\n // temp\n // }\n return temp\n }\n \n // 默认上报方式\n async defaultReport(type, reportData) {\n const reportUrl = this.config.getReportUrl()\n const thirdPartyConfig = this.config.getThirdPartyConfig()\n\n // 上报到后端接口\n if (reportUrl) {\n await this.reportToBackend(reportUrl, reportData)\n }\n \n // 上报到第三方埋点\n if (thirdPartyConfig && Object.keys(thirdPartyConfig).length > 0) {\n await this.reportToThirdParty(thirdPartyConfig, reportData)\n }\n }\n \n // 上报到后端接口\n async reportToBackend(url, data) {\n // 优先使用 sendBeacon (适用于页面卸载等场景,性能更好)\n // 小于64kb\n if (navigator.sendBeacon && !this.isObjectOverSizeLimit(data, 60)) {\n // 创建 Blob 对象发送 JSON 数据\n // const blob = new Blob([JSON.stringify(data)], { // 会触发CORS预检请求\n // type: 'application/json'\n // })\n const formData = new FormData();\n formData.append('events', JSON.stringify(data));\n const success = navigator.sendBeacon(url, formData)\n if (this.config.getConfig().debugSwitch) {\n console.log('上报数据:', url,data)\n }\n if (!success) {\n return await this.reportViaAxios(url, formData)\n }\n } else {\n // 不支持 sendBeacon,使用 axios\n if (this.config.getConfig().debugSwitch) {\n console.warn('浏览器不支持 sendBeacon,使用 axios')\n }\n return await this.reportViaAxios(url, data)\n }\n }\n \n // 使用 axios 上报(降级方案)\n async reportViaAxios(url, data) {\n try {\n const response = await axiosInstance.post(url, data)\n return response.data\n } catch (error) {\n console.error('后端上报失败:', error)\n }\n }\n \n // 上报到第三方埋点\n async reportToThirdParty(config, data) {\n const promises = []\n \n // 百度统计\n if (config.baidu && window._hmt) {\n promises.push(this.reportToBaidu(config.baidu, data))\n }\n \n // 友盟统计\n if (config.umeng && window._um) {\n promises.push(this.reportToUmeng(config.umeng, data))\n }\n \n // 神策数据\n if (config.sensors && window.sensors) {\n promises.push(this.reportToSensors(config.sensors, data))\n }\n \n // 腾讯云分析\n if (config.tencent && window.MTA) {\n promises.push(this.reportToTencent(config.tencent, data))\n }\n \n // 自定义第三方\n if (config.custom) {\n promises.push(this.reportToCustom(config.custom, data))\n }\n \n try {\n await Promise.allSettled(promises)\n } catch (error) {\n console.error('第三方上报失败:', error)\n }\n }\n \n // 上报到百度统计\n async reportToBaidu(config, data) {\n if (window._hmt) {\n window._hmt.push(['_trackEvent', data.type, JSON.stringify(data.data)])\n }\n }\n \n // 上报到友盟统计\n async reportToUmeng(config, data) {\n if (window._um) {\n window._um.push(['track', data.type, data.data])\n }\n }\n \n // 上报到神策数据\n async reportToSensors(config, data) {\n if (window.sensors) {\n window.sensors.track(data.type, data.data[0] || {})\n }\n }\n \n // 上报到腾讯云分析\n async reportToTencent(config, data) {\n if (window.MTA) {\n window.MTA.Event.stat(data.type, data.data[0] || {})\n }\n }\n \n // 上报到自定义第三方\n async reportToCustom(config, data) {\n if (typeof config.report === 'function') {\n await config.report(data)\n }\n }\n // 判断数据大小\n isObjectOverSizeLimit(object,limitInKB) {\n const serializedObject = JSON.stringify(object)\n const sizeInBytes = new TextEncoder().encode(serializedObject).length\n const sizeInKB = sizeInBytes / 1024\n return sizeInKB > limitInKB\n }\n}\n","/* eslint-disable */\n// 错误追踪器\nimport { Reporter } from './reporter'\n\nexport class ErrorTracker {\n constructor(config) {\n this.config = config\n this.reporter = new Reporter(config)\n this.errorQueue = []\n this.isInitialized = false\n this.reportTimer = null\n \n // 防重复触发的机制\n this.errorCache = new Map() // 缓存已处理的错误\n this.errorCacheTimeout = 5000 // 5秒内的相同错误将被忽略\n this.maxCacheSize = 100 // 最大缓存错误数量\n \n // 错误指纹生成器\n this.errorFingerprint = this.createErrorFingerprint.bind(this)\n \n // 防抖定时器\n this.errorTimeout = null\n this.resourceErrorTimeout = null\n this.lastResourceError = null\n }\n \n // 创建错误指纹(用于识别重复错误)\n createErrorFingerprint(error, context) {\n const message = error?.message || error?.toString() || error\n const stack = error?.stack || context.stack\n const type = context.type || 'unknown'\n const url = window.location.href\n \n // 生成错误指纹\n return `${type}:${message}:${url}:${stack ? stack.split('\\n')[0] : ''}`\n }\n \n // 检查是否为重复错误\n isDuplicateError(error, context) {\n const fingerprint = this.errorFingerprint(error, context)\n const now = Date.now()\n \n // 清理过期的缓存\n this.cleanupErrorCache(now)\n \n // 检查是否已存在相同指纹的错误\n if (this.errorCache.has(fingerprint)) {\n const lastTime = this.errorCache.get(fingerprint)\n if (now - lastTime < this.errorCacheTimeout) {\n return true // 是重复错误\n }\n }\n \n // 添加到缓存\n this.errorCache.set(fingerprint, now)\n \n // 限制缓存大小\n if (this.errorCache.size > this.maxCacheSize) {\n const firstKey = this.errorCache.keys().next().value\n this.errorCache.delete(firstKey)\n }\n \n return false\n }\n \n // 清理过期的错误缓存\n cleanupErrorCache(now) {\n for (const [fingerprint, timestamp] of this.errorCache.entries()) {\n if (now - timestamp > this.errorCacheTimeout) {\n this.errorCache.delete(fingerprint)\n }\n }\n }\n \n init() {\n if (this.isInitialized) return\n \n const config = this.config.getConfig()\n \n // 监听 JavaScript 错误和资源加载错误(统一处理)\n if (config.enableErrorTracking || config.enableResourceError) {\n this.setupErrorListener()\n }\n \n // 监听未处理的 Promise 拒绝\n if (config.enableUnhandledRejection) {\n this.setupUnhandledRejectionListener()\n }\n \n // 设置定时上报\n if (config.reportInterval > 0) {\n this.setupPeriodicReport()\n }\n \n this.isInitialized = true\n }\n \n // 设置定时上报\n setupPeriodicReport() {\n const interval = this.config.getConfig().reportInterval\n if (interval > 0) {\n // 清除之前的定时器(如果存在)\n if (this.reportTimer) {\n clearInterval(this.reportTimer)\n }\n // 保存定时器ID,以便后续清理\n this.reportTimer = setInterval(() => {\n this.flushErrorQueue()\n }, interval)\n }\n }\n \n // 设置错误监听器(统一处理 JavaScript 错误和资源错误)\n setupErrorListener() {\n window.addEventListener('error', (event) => {\n // 判断错误类型\n if (event.target && event.target !== window) {\n // 资源加载错误(JS 文件、CSS 文件、图片、视频等)\n this.handleResourceError(event)\n } else {\n // JavaScript 运行时错误\n this.handleJavaScriptError(event)\n }\n }, true)\n }\n \n // 处理 JavaScript 运行时错误\n handleJavaScriptError(event) {\n // 清除之前的定时器\n if (this.errorTimeout) {\n clearTimeout(this.errorTimeout)\n }\n \n // 延迟处理,避免重复触发\n this.errorTimeout = setTimeout(() => {\n this.handleError(event.error || event.message, {\n type: 'javascript',\n filename: event.filename,\n lineno: event.lineno,\n colno: event.colno,\n stack: event.error?.stack\n })\n }, 100)\n }\n \n // 处理资源加载错误\n handleResourceError(event) {\n const resourceKey = `${event.target.tagName}:${event.target.src || event.target.href}`\n \n // 检查是否为重复的资源错误\n if (this.lastResourceError === resourceKey) {\n if (this.config.getConfig().debugSwitch) {\n console.log('忽略重复的资源加载错误:', resourceKey)\n }\n return\n }\n \n this.lastResourceError = resourceKey\n \n // 清除之前的定时器\n if (this.resourceErrorTimeout) {\n clearTimeout(this.resourceErrorTimeout)\n }\n \n // 延迟处理,避免重复触发\n this.resourceErrorTimeout = setTimeout(() => {\n this.handleError(`Resource load failed: ${event.target.src || event.target.href}`, {\n type: 'resource',\n tagName: event.target.tagName,\n src: event.target.src,\n href: event.target.href\n })\n \n // 清理资源错误记录\n setTimeout(() => {\n this.lastResourceError = null\n }, 2000)\n }, 100)\n }\n \n // 设置未处理 Promise 拒绝监听器\n setupUnhandledRejectionListener() {\n // 使用防抖机制避免重复触发\n let rejectionTimeout = null\n let lastRejection = null\n // 只有这个错误看见错误数 行数\n window.addEventListener('unhandledrejection', (event) => {\n // 检查是否为重复的拒绝\n const rejectionKey = `${event.reason?.message || event.reason}:${event.reason?.stack || ''}`\n \n if (lastRejection === rejectionKey) {\n if (this.config.getConfig().debugSwitch) {\n console.log('忽略重复的 Promise 拒绝:', event.reason)\n }\n return\n }\n \n lastRejection = rejectionKey\n \n // 清除之前的定时器\n if (rejectionTimeout) {\n clearTimeout(rejectionTimeout)\n }\n \n // 延迟处理,避免重复触发\n rejectionTimeout = setTimeout(() => {\n this.handleError(event.reason, {\n type: 'unhandledrejection',\n stack: event.reason?.stack\n })\n \n // 清理拒绝记录\n setTimeout(() => {\n lastRejection = null\n }, 1000)\n }, 100)\n })\n }\n \n // 处理错误\n handleError(error, context = {}) {\n // 检查是否为重复错误\n if (this.isDuplicateError(error, context)) {\n if (this.config.getConfig().debugSwitch) {\n console.log('忽略重复错误:', error?.message || error)\n }\n return\n }\n\n // 解析错误堆栈,提取关键信息\n const parsedStackInfo = this.parseStack(error)\n\n const errorInfo = {\n message: error?.message || error?.toString() || error,\n stack: error?.stack || context.stack,\n type: context.type || 'unknown',\n timestamp: Date.now(),\n url: window.location.href,\n userAgent: navigator.userAgent,\n // 添加解析后的堆栈信息\n fileName: parsedStackInfo.fileName,\n lineNumber: parsedStackInfo.lineNumber,\n columnNumber: parsedStackInfo.columnNumber,\n functionName: parsedStackInfo.functionName,\n stackFrames: parsedStackInfo.stackFrames,\n ...context\n }\n \n // 添加到队列\n this.errorQueue.push(errorInfo)\n\n // if (this.config.getConfig().debugSwitch) { \n // console.log('errorInfo-----', errorInfo)\n // }\n // 立即上报或延迟上报\n if (this.config.getConfig().reportInterval === 0) {\n this.reporter.report('error', [errorInfo])\n } else if (this.errorQueue.length >= this.config.getConfig().maxQueueSize) { // 检查队列大小\n this.flushErrorQueue()\n }\n }\n\n // 解析错误堆栈,提取关键信息\n parseStack(error) {\n const stack = error?.stack || ''\n const message = error?.message || error?.toString() || ''\n \n const result = { \n errMessage: message, \n errStack: stack,\n fileName: '',\n lineNumber: '',\n columnNumber: '',\n functionName: '',\n stackFrames: []\n }\n\n if (!stack) {\n return result\n }\n\n try {\n // Chrome/Edge 堆栈格式: at functionName (file:line:col) 或 at file:line:col\n const rChromeCallStack1 = /^\\s*at\\s+([^(]+?)\\s+\\((.+?):(\\d+):(\\d+)\\)$/\n const rChromeCallStack2 = /^\\s*at\\s+(.+?):(\\d+):(\\d+)$/\n // Firefox/Safari 堆栈格式: functionName@file:line:col\n const rMozillaCallStack = /^\\s*([^@]*)@(.+?):(\\d+):(\\d+)$/\n \n // 移除 Chrome 中的错误消息行\n let callStackStr = stack\n if (message && stack.startsWith(message)) {\n callStackStr = stack.substring(message.length).replace(/^\\n+/, '')\n } else if (stack.includes('\\n')) {\n const lines = stack.split('\\n')\n // 如果第一行包含错误消息,移除它\n if (lines[0] && !lines[0].trim().startsWith('at') && !lines[0].includes('@')) {\n callStackStr = lines.slice(1).join('\\n')\n }\n }\n \n // 解析每一行堆栈\n const stackLines = callStackStr.split('\\n').filter(line => line.trim())\n const stackFrames = []\n \n for (const line of stackLines) {\n let frameInfo = null\n \n // 尝试匹配 Chrome 格式1: at functionName (file:line:col)\n let match = line.match(rChromeCallStack1)\n if (match) {\n frameInfo = {\n functionName: match[1].trim(),\n fileName: match[2],\n lineNumber: parseInt(match[3]),\n columnNumber: parseInt(match[4])\n }\n } else {\n // 尝试匹配 Chrome 格式2: at file:line:col\n match = line.match(rChromeCallStack2)\n if (match) {\n frameInfo = {\n functionName: '',\n fileName: match[1],\n lineNumber: parseInt(match[2]),\n columnNumber: parseInt(match[3])\n }\n } else {\n // 尝试匹配 Firefox/Safari 格式: functionName@file:line:col\n match = line.match(rMozillaCallStack)\n if (match) {\n frameInfo = {\n functionName: match[1].trim(),\n fileName: match[2],\n lineNumber: parseInt(match[3]),\n columnNumber: parseInt(match[4])\n }\n }\n }\n }\n \n if (frameInfo) {\n stackFrames.push(frameInfo)\n }\n }\n \n // 获取第一个堆栈帧的信息(最顶层的错误位置)\n if (stackFrames.length > 0) {\n const firstFrame = stackFrames[0]\n result.fileName = firstFrame.fileName\n result.lineNumber = firstFrame.lineNumber\n result.columnNumber = firstFrame.columnNumber\n result.functionName = firstFrame.functionName\n }\n \n result.stackFrames = stackFrames\n \n } catch (parseError) {\n if (this.config?.getConfig()?.debugSwitch) {\n console.warn('解析堆栈失败:', parseError)\n }\n }\n \n return result\n }\n\n \n // 手动上报错误\n reportError(error, context = {}) {\n this.handleError(error, context)\n }\n \n // 刷新错误队列\n flushErrorQueue() {\n if (this.errorQueue.length > 0) {\n this.reporter.report('error', [...this.errorQueue])\n this.errorQueue = []\n }\n }\n \n // 销毁\n destroy() {\n if (this.config.getConfig().reportInterval > 0) {\n this.flushErrorQueue()\n }\n \n // 清除定时器,防止内存泄漏\n if (this.reportTimer) {\n clearInterval(this.reportTimer)\n this.reportTimer = null\n }\n \n this.isInitialized = false\n }\n} ","/* eslint-disable */\n// 事件追踪器\nimport { Reporter } from './reporter'\nimport { generateUniqueId, extractHashPath, getPageKey } from './utils'\n\nexport class EventTracker {\n constructor(config) {\n this.config = config\n this.reporter = new Reporter(config)\n this.eventQueue = []\n this.isInitialized = false\n this.clickListener = null\n this.pageViewListener = null\n this.reportTimer = null\n this.originalPushState = null\n this.originalReplaceState = null\n \n // 页面历史追踪\n this.pageHistory = [] // 页面历史记录\n this.currentPage = null // 当前页面信息\n this.currentPageStartTime = Date.now() // 当前页面开始时间\n this.previousPage = null // 上一个页面信息\n this.previousPageStayTime = 0 // 上一个页面停留时间\n \n // 路由停留时间相关\n this.currentRoute = null\n this.routeStartTime = Date.now()\n this.vueRouter = null\n }\n \n init() {\n if (this.isInitialized) return\n \n const config = this.config.getConfig()\n \n // 初始化当前页面信息(首次加载)\n this.currentPage = {\n url: window.location.href,\n title: document.title,\n enterTime: Date.now(),\n referrer: document.referrer\n }\n this.currentPageStartTime = Date.now()\n \n // 监听点击事件\n if (config.enableClickTracking) {\n this.setupClickTracking()\n }\n \n // 监听页面浏览\n if (config.enablePageViewTracking) {\n this.setupPageViewTracking()\n }\n \n // // 监听页面卸载,记录当前页面停留时间\n // window.addEventListener('beforeunload', () => {\n // this.handlePageUnload()\n // })\n \n // 监听页面可见性变化\n document.addEventListener('visibilitychange', () => {\n if (document.hidden) {\n // 页面隐藏时记录停留时间(如果用户切换标签页)\n // 这里可以选择是否记录,因为用户可能还会回来\n }\n })\n \n // 设置定时上报\n if (this.config.getConfig().reportInterval > 0) { \n this.setupPeriodicReport()\n }\n this.isInitialized = true\n }\n \n // 处理页面卸载\n // handlePageUnload() {\n // if (this.currentPage) {\n // const stayTime = Date.now() - this.currentPageStartTime\n // this.previousPage = {\n // ...this.currentPage,\n // stayTime: stayTime,\n // leaveTime: Date.now()\n // }\n // this.previousPageStayTime = stayTime\n // }\n // }\n \n // 设置点击追踪\n setupClickTracking() {\n this.clickListener = (event) => {\n const target = event.target\n const clickData = {\n type: 'click',\n timestamp: Date.now(),\n url: window.location.href,\n element: {\n tagName: target.tagName,\n className: target.className,\n id: target.id,\n text: target.textContent?.substring(0, 50)\n },\n position: {\n x: event.clientX,\n y: event.clientY\n }\n }\n \n this.handleEvent('click', clickData)\n }\n \n document.addEventListener('click', this.clickListener, true)\n }\n \n // 设置页面浏览追踪\n setupPageViewTracking() {\n const config = this.config.getConfig()\n const pageViewConfig = config.pageViewTracking || {}\n \n // 初始页面浏览\n // this.handleEvent('pageview', {\n // type: 'pageview',\n // timestamp: Date.now(),\n // url: window.location.href,\n // title: document.title,\n // referrer: document.referrer\n // })\n \n // 防重复触发的机制\n let lastPageViewUrl = window.location.href\n let lastPageViewTime = Date.now()\n const PAGEVIEW_DEBOUNCE = pageViewConfig.debounce || 100 // 可配置的防抖时间\n \n // 监听路由变化(适用于 SPA)\n this.pageViewListener = () => {\n const currentUrl = window.location.href\n const currentTime = Date.now()\n \n // 防重复触发:相同URL且时间间隔太短则忽略\n if (currentUrl === lastPageViewUrl && \n (currentTime - lastPageViewTime) < PAGEVIEW_DEBOUNCE && (this.config.getConfig().debugSwitch)) {\n console.log('忽略重复的页面浏览事件:', currentUrl)\n return\n }\n \n // 处理页面切换:记录上一个页面的停留时间\n this.handlePageChange(currentUrl, currentTime)\n lastPageViewUrl = currentUrl\n lastPageViewTime = currentTime\n // 更新最后触发的信息\n this.handleEvent('pageview', {\n uuid: generateUniqueId(),\n timestamp: currentTime,\n pageKey: getPageKey(extractHashPath(currentUrl), this.config.getConfig().uiVersion),\n pageUri: extractHashPath(currentUrl),\n eventType: 'VIEW'\n })\n }\n \n // 根据配置决定监听方式\n if (pageViewConfig.listenPopstate !== false) {\n // 监听 popstate 事件(浏览器前进后退)\n window.addEventListener('popstate', this.pageViewListener)\n }\n \n if (pageViewConfig.listenHistoryAPI !== false) {\n // 重写 history 方法,监听编程式路由跳转\n // 保存原始方法,以便销毁时恢复\n this.originalPushState = history.pushState\n this.originalReplaceState = history.replaceState\n \n history.pushState = function(...args) {\n this.originalPushState.apply(history, args)\n // 使用 setTimeout 确保 URL 已更新\n setTimeout(() => {\n this.pageViewListener()\n }, 0)\n }.bind(this)\n \n history.replaceState = function(...args) {\n this.originalReplaceState.apply(history, args)\n // 使用 setTimeout 确保 URL 已更新\n setTimeout(() => {\n this.pageViewListener()\n }, 0)\n }.bind(this)\n }\n \n // 如果使用 Vue Router,可以选择只监听一种方式\n if (pageViewConfig.vueRouterMode) {\n if (this.config.getConfig().debugSwitch) {\n console.log('Vue Router 模式:页面浏览追踪已优化')\n }\n this.pageViewListener()\n }\n }\n \n // 设置定时上报\n setupPeriodicReport() {\n const interval = this.config.getConfig().reportInterval\n if (interval > 0) {\n // 清除之前的定时器(如果存在)\n if (this.reportTimer) {\n clearInterval(this.reportTimer)\n }\n // 保存定时器ID,以便后续清理\n this.reportTimer = setInterval(() => {\n this.flushEventQueue()\n }, interval)\n }\n }\n \n // 处理页面切换\n handlePageChange(newUrl, currentTime) {\n // 如果有上一个页面,计算停留时间\n if (this.currentPage) {\n // const stayTime = currentTime - this.currentPageStartTime\n \n // 保存上一个页面信息\n this.previousPage = {\n ...this.currentPage,\n // stayTime: stayTime,\n // leaveTime: currentTime\n }\n // this.previousPageStayTime = stayTime\n \n // 添加到页面历史\n this.pageHistory.push({\n ...this.previousPage\n })\n \n // 限制历史记录数量(最多保留20条)\n if (this.pageHistory.length > 20) {\n this.pageHistory.shift()\n }\n \n // if (this.config.getConfig().debugSwitch) {\n // console.log(`页面切换: ${this.currentPage.url} → ${newUrl},停留时间: ${stayTime}ms`)\n // }\n }\n \n // 设置当前页面信息\n this.currentPage = {\n url: newUrl,\n title: document.title,\n enterTime: currentTime,\n referrer: document.referrer\n }\n this.currentPageStartTime = currentTime\n }\n \n // 设置Vue Router监控\n setupVueRouterMonitoring(router) {\n if (!router || this.vueRouter) return\n \n this.vueRouter = router\n this.currentRoute = router.currentRoute.value\n \n // 路由前置守卫 - 记录路由离开时间\n router.beforeEach((to, from, next) => {\n if (from.name) {\n this.handleRouteLeave(from, to)\n }\n next()\n })\n \n // 路由后置守卫 - 记录路由进入时间\n router.afterEach((to, from) => {\n this.handleRouteEnter(to, from)\n })\n \n // 监听路由变化\n router.beforeResolve((to, from, next) => {\n if (from.name) {\n this.calculateRouteStayTime(from)\n }\n next()\n })\n \n if (this.config?.getConfig()?.debugSwitch) {\n console.log('Vue Router 监控已设置')\n }\n }\n \n // 处理路由离开\n handleRouteLeave(from, to) {\n const stayTime = Date.now() - this.routeStartTime\n \n // 记录路由停留时间\n this.recordRouteStayTime(from, stayTime)\n \n // 更新当前路由信息\n this.currentRoute = from\n this.routeStartTime = Date.now()\n }\n \n // 处理路由进入\n handleRouteEnter(to, from) {\n // 设置新路由的开始时间\n this.routeStartTime = Date.now()\n this.currentRoute = to\n \n // 记录路由进入\n this.recordRouteEnter(to, from)\n }\n \n // 记录路由停留时间\n recordRouteStayTime(route, stayTime) {\n // 更新 previousPage 对象\n // this.previousPage = {\n // name: route.name || 'unknown',\n // path: route.path,\n // fullPath: route.fullPath,\n // stayTime: stayTime,\n // enterTime: this.routeStartTime,\n // leaveTime: Date.now(),\n // params: route.params,\n // query: route.query,\n // meta: route.meta,\n // // 兼容原有的 url 和 title\n // url: route.fullPath || route.path,\n // title: route.meta?.title || route.name || 'unknown'\n // }\n this.previousPage.stayTime = stayTime\n this.previousPageStayTime = stayTime\n \n if (this.config?.getConfig()?.debugSwitch) {\n console.log('路由停留时间数据', this.previousPage)\n }\n }\n \n // 记录路由进入\n recordRouteEnter(to, from) {\n if (this.config?.getConfig()?.debugSwitch) {\n console.log(`进入路由: ${to.name || to.path}`)\n }\n }\n \n // 计算路由停留时间\n calculateRouteStayTime(route) {\n if (!this.routeStartTime) return 0\n \n const stayTime = Date.now() - this.routeStartTime\n return stayTime\n }\n \n // 获取当前路由信息\n getCurrentRoute() {\n return this.currentRoute\n }\n \n // 获取上一个页面信息\n getPreviousPageInfo() {\n return {\n previousPage: this.previousPage ? {\n url: this.previousPage.url,\n title: this.previousPage.title,\n stayTime: this.previousPageStayTime\n } : null,\n previousPageStayTime: this.previousPageStayTime\n }\n }\n \n // 获取当前页面停留时间\n getCurrentPageStayTime() {\n if (!this.currentPageStartTime) return 0\n return Date.now() - this.currentPageStartTime\n }\n \n // 获取当前路由停留时间\n getCurrentRouteStayTime() {\n if (!this.routeStartTime) return 0\n return Date.now() - this.routeStartTime\n }\n \n // 处理事件\n handleEvent(eventName, data) {\n // 获取上一个页面信息(作为基本信息)\n const previousPageInfo = this.getPreviousPageInfo()\n const eventInfo = {\n // eventName,\n ...data,\n tags: {\n ...data.tags,\n // 添加页面基本信息\n refer: extractHashPath(previousPageInfo?.previousPage?.url),\n duration: previousPageInfo?.previousPageStayTime\n }\n }\n // 添加到队列\n this.eventQueue.push(eventInfo)\n\n // if (this.config.getConfig().debugSwitch) { \n // console.log('eventInfo----', eventInfo)\n // }\n // 立即上报或延迟上报\n if (this.config.getConfig().reportInterval === 0) {\n this.reporter.report('event', [eventInfo])\n } else if (this.eventQueue.length >= this.config.getConfig().maxQueueSize) { // 检查队列大小\n this.flushEventQueue()\n }\n }\n \n // 手动上报事件\n reportEvent(eventName, data = {}) {\n const eventInfo = {\n uuid: generateUniqueId(),\n timestamp: Date.now(),\n // actionKey: eventName,\n pageKey: getPageKey(extractHashPath(window.location.href), this.config.getConfig().uiVersion),\n pageUri: extractHashPath(window.location.href),\n eventType: 'CLICK',\n tags: {\n actionKey: eventName,\n ...data,\n }\n }\n \n // CREATE_ORDER 事件立即上报,其他事件走队列\n if (eventName === 'CREATE_ORDER') {\n // 立即上报,不进入队列\n this.reporter.report('event', [eventInfo]).catch(error => {\n console.error('CREATE_ORDER 事件上报失败:', error)\n if (this.config.getConfig().debugSwitch) {\n console.error('CREATE_ORDER 事件上报失败详情:', error)\n }\n })\n } else {\n // 其他事件走队列\n this.handleEvent(eventName, eventInfo)\n }\n }\n\n // 手动上报页面浏览事件\n reportCustomEvent(eventName, data = {}) {\n const eventInfo = {\n uuid: generateUniqueId(),\n timestamp: Date.now(),\n // actionKey: eventName,\n pageKey: data?.pageKey || getPageKey(extractHashPath(window.location.href), this.config.getConfig().uiVersion),\n pageUri: data?.pageUri || extractHashPath(window.location.href),\n eventType: data.eventType || 'VIEW',\n tags: {\n ...data.tags,\n // 添加页面基本信息\n refer: data.refer,\n duration: 0\n }\n }\n // 添加到队列\n this.eventQueue.push(eventInfo)\n }\n \n // 刷新事件队列\n flushEventQueue() {\n if (this.eventQueue.length > 0) {\n this.reporter.report('event', [...this.eventQueue])\n this.eventQueue = []\n }\n }\n \n // 销毁\n destroy() {\n this.flushEventQueue()\n \n // 清除定时器,防止内存泄漏\n if (this.reportTimer) {\n clearInterval(this.reportTimer)\n this.reportTimer = null\n }\n \n // 移除点击事件监听器\n if (this.clickListener) {\n document.removeEventListener('click', this.clickListener, true)\n this.clickListener = null\n }\n \n // 移除页面浏览事件监听器\n if (this.pageViewListener) {\n window.removeEventListener('popstate', this.pageViewListener)\n this.pageViewListener = null\n }\n \n // 恢复原始的 history 方法,防止内存泄漏\n if (this.originalPushState) {\n history.pushState = this.originalPushState\n this.originalPushState = null\n }\n \n if (this.originalReplaceState) {\n history.replaceState = this.originalReplaceState\n this.originalReplaceState = null\n }\n \n this.isInitialized = false\n }\n} ","/* eslint-disable */\n// 性能监控器\nimport { Reporter } from './reporter'\nimport { performanceNow, generateUniqueId, extractHashPath, getPageKey, uniqueArr } from './utils'\n\nexport class PerformanceTracker {\n constructor(config, eventTracker = null) {\n this.config = config\n this.reporter = new Reporter(config)\n this.eventTracker = eventTracker // 事件追踪器引用,用于获取页面信息\n this.isInitialized = false\n this.pageStartTime = Date.now()\n this.performanceQueue = []\n this.thirdPartySDKs = {}\n this.reportTimer = null\n \n // 页面浏览时间相关\n this.currentRoute = null\n this.routeStartTime = Date.now()\n this.routeHistory = []\n this.vueRouter = null\n \n // 性能指标\n this.metrics = {\n fcp: 0, // First Contentful Paint\n lcp: 0, // Largest Contentful Paint\n fid: 0, // First Input Delay\n cls: 0, // Cumulative Layout Shift\n ttfb: 0, // Time to First Byte\n domLoad: 0, // DOM加载时间\n windowLoad: 0, // 页面完全加载时间\n resourceLoad: [], // 资源加载时间\n apiRequests: [], // API请求时间\n pageStayTime: 0, // 页面停留时间\n previousPageUrl: '', // 上一个页面地址\n currentPageUrl: '' // 当前页面地址\n }\n }\n \n init() {\n if (this.isInitialized) return\n \n const config = this.config.getConfig()\n \n // 监控页面性能\n if (config.enablePerformanceTracking) {\n this.setupPerformanceMonitoring()\n }\n \n // 监控资源加载 有问题需要优化 有需要时\n if (config.enableResourceTracking) {\n this.setupResourceMonitoring()\n }\n \n // 监控API请求\n if (config.enableApiTracking) {\n this.setupApiMonitoring()\n }\n \n // 监控用户交互性能\n if (config.enableInteractionTracking) {\n this.setupInteractionMonitoring()\n }\n \n // 初始化第三方SDK\n this.initThirdPartySDKs()\n \n // 设置定时上报\n if (config.reportInterval > 0) {\n this.setupPeriodicReport()\n }\n \n this.isInitialized = true\n }\n \n // 设置定时上报\n setupPeriodicReport() {\n const interval = this.config.getConfig().reportInterval\n if (interval > 0) {\n // 清除之前的定时器(如果存在)\n if (this.reportTimer) {\n clearInterval(this.reportTimer)\n }\n // 保存定时器ID,以便后续清理\n this.reportTimer = setInterval(() => {\n this.flushPerformanceQueue()\n }, interval)\n }\n }\n \n // 设置Vue Router监控\n setupVueRouterMonitoring(router) {\n if (!router || this.vueRouter) return\n \n this.vueRouter = router\n this.currentRoute = router.currentRoute.value\n \n // 路由前置守卫 - 记录路由离开时间\n router.beforeEach((to, from, next) => {\n if (from.name) {\n this.handleRouteLeave(from, to)\n }\n next()\n })\n \n // 路由后置守卫 - 记录路由进入时间\n router.afterEach((to, from) => {\n this.handleRouteEnter(to, from)\n })\n \n // 监听路由变化\n router.beforeResolve((to, from, next) => {\n if (from.name) {\n this.calculateRouteStayTime(from)\n }\n next()\n })\n // if (this.config?.config?.debugSwitch) {\n // console.log('Vue Router 监控已设置')\n // }\n }\n \n // 处理路由离开\n handleRouteLeave(from, to) {\n const stayTime = Date.now() - this.routeStartTime\n \n // 记录路由停留时间\n this.recordRouteStayTime(from, stayTime)\n \n // 更新当前路由信息\n this.currentRoute = from\n this.routeStartTime = Date.now()\n }\n \n // 处理路由进入\n handleRouteEnter(to, from) {\n // 设置新路由的开始时间\n this.routeStartTime = Date.now()\n this.currentRoute = to\n \n // 记录路由进入\n this.recordRouteEnter(to, from)\n }\n \n // 记录路由停留时间\n recordRouteStayTime(route, stayTime) {\n const routeInfo = {\n name: route.name || 'unknown',\n path: route.path,\n fullPath: route.fullPath,\n stayTime,\n enterTime: this.routeStartTime,\n leaveTime: Date.now(),\n params: route.params,\n query: route.query,\n meta: route.meta\n }\n \n this.routeHistory.push(routeInfo)\n \n // 更新性能指标\n this.metrics.pageStayTime = stayTime\n // 更新上一个页面地址(当前离开的页面\n this.metrics.previousPageUrl = route.name\n \n // 上报路由停留时间\n this.reportRouteStayTime(routeInfo)\n if (this.config?.config?.debugSwitch) {\n console.log('路由数据', routeInfo)\n }\n }\n \n // 记录路由进入\n recordRouteEnter(to, from) {\n const routeInfo = {\n name: to.name || 'unknown',\n path: to.path,\n fullPath: to.fullPath,\n enterTime: Date.now(),\n params: to.params,\n query: to.query,\n meta: to.meta,\n fromRoute: from ? {\n name: from.name,\n path: from.path\n } : null\n }\n \n // 更新当前页面地址\n this.metrics.currentPageUrl = to.name\n \n if (this.config?.config?.debugSwitch) {\n console.log(`进入路由: ${to.name || to.path}`)\n }\n }\n \n // 计算路由停留时间\n calculateRouteStayTime(route) {\n if (!this.routeStartTime) return 0\n \n const stayTime = Date.now() - this.routeStartTime\n return stayTime\n }\n \n // 上报路由停留时间\n reportRouteStayTime(routeInfo) {\n const routeData = {\n type: 'route_stay_time',\n timestamp: Date.now(),\n route: routeInfo,\n user: this.config.getUser(),\n device: this.getDeviceInfo()\n }\n \n this.reporter.report('route_performance', [routeData])\n }\n \n // 获取当前路由信息\n getCurrentRoute() {\n return this.currentRoute\n }\n \n // 获取路由历史\n getRouteHistory() {\n return [...this.routeHistory]\n }\n \n // 获取当前页面停留时间\n getCurrentPageStayTime() {\n if (!this.routeStartTime) return 0\n return Date.now() - this.routeStartTime\n }\n \n // 获取路由性能统计\n getRoutePerformanceStats() {\n const stats = {\n totalRoutes: this.routeHistory.length,\n averageStayTime: 0,\n routesByPath: new Map(),\n totalStayTime: 0\n }\n \n if (this.routeHistory.length > 0) {\n this.routeHistory.forEach(route => {\n stats.totalStayTime += route.stayTime\n \n // 按路径分组统计\n if (!stats.routesByPath.has(route.path)) {\n stats.routesByPath.set(route.path, {\n count: 0,\n totalStayTime: 0,\n averageStayTime: 0\n })\n }\n \n const pathStats = stats.routesByPath.get(route.path)\n pathStats.count++\n pathStats.totalStayTime += route.stayTime\n pathStats.averageStayTime = pathStats.totalStayTime / pathStats.count\n })\n \n stats.averageStayTime = stats.totalStayTime / stats.totalRoutes\n }\n \n return stats\n }\n \n // 设置性能监控\n setupPerformanceMonitoring() {\n // 等待页面加载完成\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n this.captureDOMLoadTime()\n })\n } else {\n this.captureDOMLoadTime()\n }\n \n window.addEventListener('load', () => {\n this.captureWindowLoadTime()\n this.captureWebVitals()\n this.reportPerformanceMetrics()\n })\n // 监控页面可见性变化 tab切换时使用\n // document.addEventListener('visibilitychange', () => {\n // if (document.hidden) {\n // this.handlePageHidden()\n // } else {\n // this.handlePageVisible()\n // }\n // })\n }\n \n // 设置资源监控\n setupResourceMonitoring() {\n // 监控资源加载\n if (typeof window !== 'undefined' && 'PerformanceObserver' in window) {\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (entry.entryType === 'resource') {\n this.handleResourceLoad(entry)\n }\n }\n })\n \n try {\n observer.observe({ entryTypes: ['resource'] })\n } catch (e) {\n // 降级方案:手动监控\n // this.setupResourceFallback()\n }\n }\n }\n \n // 设置API监控\n setupApiMonitoring() {\n // 拦截axios请求\n if (typeof window.axios !== 'undefined') {\n // 请求拦截器\n window.axios.interceptors.request.use((config) => {\n config._startTime = performanceNow()\n return config\n })\n \n // 响应拦截器\n window.axios.interceptors.response.use(\n (response) => {\n const endTime = performanceNow()\n const duration = endTime - response.config._startTime\n // if (this.config?.config?.debugSwitch) {\n // console.log('duration----', response.config.url, duration, response.status)\n // }\n this.handleApiRequest(response.config.url, duration, response.status)\n return response\n },\n (error) => {\n if (error.config) {\n const endTime = performanceNow()\n const duration = endTime - error.config._startTime\n // if (this.config?.config?.debugSwitch) { \n // console.log('duration----', error.config.url, duration, 'error')\n // }\n this.handleApiRequest(error.config.url, duration, 'error')\n }\n throw error\n }\n )\n }\n }\n \n // 设置交互监控\n setupInteractionMonitoring() {\n // 监控用户交互延迟\n let firstInputTime = 0\n let firstInputDelay = 0\n \n const handleFirstInput = (event) => {\n if (firstInputTime === 0) {\n firstInputTime = performanceNow()\n firstInputDelay = firstInputTime - this.metrics.fcp\n \n this.metrics.fid = firstInputDelay\n \n // 移除事件监听器\n document.removeEventListener('click', handleFirstInput, true)\n document.removeEventListener('keydown', handleFirstInput, true)\n document.removeEventListener('touchstart', handleFirstInput, true)\n }\n }\n \n document.addEventListener('click', handleFirstInput, true)\n document.addEventListener('keydown', handleFirstInput, true)\n document.addEventListener('touchstart', handleFirstInput, true)\n }\n \n // 捕获DOM加载时间\n captureDOMLoadTime() {\n this.metrics.domLoad = performanceNow()\n }\n \n // 捕获页面完全加载时间\n captureWindowLoadTime() {\n this.metrics.windowLoad = performanceNow()\n }\n \n // 捕获Web Vitals指标\n captureWebVitals() {\n // First Contentful Paint\n if (typeof window !== 'undefined' && 'PerformanceObserver' in window) {\n try {\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n // first-paint 从页面加载开始到第一个像素绘制到屏幕上的时间,也可以把 FP 理解成白屏时间\n // first-contentful-paint 从页面加载开始到所有页面内容在屏幕上完成渲染的时间\n if (entry.name === 'first-contentful-paint') {\n this.metrics.fcp = entry.startTime\n if (this.config?.config?.debugSwitch) {\n console.log('FCP:', entry.startTime)\n }\n }\n }\n })\n observer.observe({ type: \"paint\", buffered: true })\n } catch (e) {\n console.warn('FCP监控失败:', e)\n }\n }\n \n // Largest Contentful Paint 从页面加载开始到最大文本块或图像元素在屏幕上完成渲染的时间\n if (typeof window !== 'undefined' && 'PerformanceObserver' in window) {\n try {\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n this.metrics.lcp = entry.startTime\n }\n })\n observer.observe({ entryTypes: ['largest-contentful-paint'] })\n } catch (e) {\n console.warn('LCP监控失败:', e)\n }\n }\n \n // Cumulative Layout Shift 页面加载开始和其生命周期状态变为隐藏期间发生的所有意外布局偏移的累积分数\n if (typeof window !== 'undefined' && 'PerformanceObserver' in window) {\n try {\n let clsValue = 0\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (!entry.hadRecentInput) {\n clsValue += entry.value\n }\n }\n this.metrics.cls = clsValue\n })\n observer.observe({ entryTypes: ['layout-shift'] })\n } catch (e) {\n console.warn('CLS监控失败:', e)\n }\n }\n }\n \n // 处理资源加载\n handleResourceLoad(entry) {\n const resourceInfo = {\n name: entry.name,\n type: entry.initiatorType,\n duration: entry.duration,\n size: entry.transferSize,\n timestamp: Date.now()\n }\n \n this.metrics.resourceLoad.push(resourceInfo)\n \n // 检查资源加载性能\n if (entry.duration > 3000) { // 超过3秒的资源\n this.reportSlowResource(resourceInfo)\n }\n }\n \n // 处理API请求\n handleApiRequest(url, duration, status) {\n let previousPageInfo = {}\n if (this.eventTracker && typeof this.eventTracker.getPreviousPageInfo === 'function') {\n previousPageInfo = this.eventTracker.getPreviousPageInfo()\n }\n const apiInfo = {\n interfaceUrl: typeof url === 'string' ? url : url.toString(),\n interfaceDuration: duration,\n status,\n uuid: generateUniqueId(),\n timestamp: Date.now(),\n pageKey: getPageKey(extractHashPath(window.location.href), this.config.getConfig().uiVersion),\n pageUri: extractHashPath(window.location.href),\n eventType: 'INTERFACEDURATION',\n refer: extractHashPath(previousPageInfo?.previousPage?.url || ''),\n duration: previousPageInfo?.previousPageStayTime || 0,\n tags: {\n actionKey: ''\n }\n }\n \n // this.metrics.apiRequests.push(apiInfo)\n \n // 检查API性能\n if (duration > 5000) { // 超过5秒的API\n // this.reportSlowApi(apiInfo)\n } else {\n // // 接口时间 自己加的 根据最终情况判断\n this.performanceQueue.push(apiInfo)\n }\n }\n \n // 处理页面隐藏\n handlePageHidden() {\n this.calculatePageStayTime()\n }\n \n // 处理页面显示\n handlePageVisible() {\n this.pageStartTime = Date.now()\n }\n \n // 计算页面停留时间\n calculatePageStayTime() {\n const stayTime = Date.now() - this.pageStartTime\n this.reportPageStayTime(stayTime)\n }\n \n // 上报性能指标\n reportPerformanceMetrics() {\n // 延迟获取上一个页面信息,确保 eventTracker 已经初始化并记录页面信息\n // 使用 Promise.resolve().then() 确保在下一个事件循环中执行,此时 eventTracker 应该已经初始化完成\n setTimeout(() => {\n // 获取上一个页面信息(如果 eventTracker 可用)\n let previousPageInfo = {}\n if (this.eventTracker && typeof this.eventTracker.getPreviousPageInfo === 'function') {\n previousPageInfo = this.eventTracker.getPreviousPageInfo()\n }\n \n // 更新 metrics 中的页面地址信息\n // const currentPageUrl = extractHashPath(window.location.href)\n // this.metrics.currentPageUrl = currentPageUrl\n // this.metrics.previousPageUrl = extractHashPath(previousPageInfo?.previousPage?.url || '') || this.metrics.previousPageUrl\n \n const performanceData = {\n eventType: 'PERFORMANCE',\n uuid: generateUniqueId(),\n timestamp: Date.now(),\n pageKey: getPageKey(extractHashPath(window.location.href), this.config.getConfig().uiVersion),\n pageUri: extractHashPath(window.location.href),\n refer: extractHashPath(previousPageInfo?.previousPage?.url || ''),\n duration: previousPageInfo?.previousPageStayTime || 0,\n metrics: this.metrics\n }\n \n this.performanceQueue.push(performanceData)\n if (this.config.getConfig().debugSwitch) { \n console.log('Performance Data:', performanceData)\n }\n \n // 立即上报或延迟上报\n if (this.config.getConfig().reportInterval === 0) {\n this.reporter.report('performance', [performanceData])\n } else if (this.performanceQueue.length >= this.config.getConfig().maxQueueSize) {// 检查队列大小\n this.flushPerformanceQueue()\n }\n }, 100)\n }\n \n // 上报慢资源\n reportSlowResource(resourceInfo) {\n this.reporter.report('slow_resource', [resourceInfo])\n }\n \n // 上报慢API\n reportSlowApi(apiInfo) {\n this.reporter.report('slow_api', [apiInfo])\n }\n \n // 上报页面停留时间\n reportPageStayTime(stayTime) {\n const stayData = {\n type: 'page_stay',\n url: window.location.href,\n stayTime,\n timestamp: Date.now()\n }\n \n this.reporter.report('page_stay', [stayData])\n }\n \n // 获取设备信息\n getDeviceInfo() {\n return {\n screen: {\n width: screen.width,\n height: screen.height,\n availWidth: screen.availWidth,\n availHeight: screen.availHeight,\n colorDepth: screen.colorDepth,\n pixelDepth: screen.pixelDepth\n },\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight\n },\n connection: navigator.connection ? {\n effectiveType: navigator.connection.effectiveType,\n downlink: navigator.connection.downlink,\n rtt: navigator.connection.rtt\n } : null,\n memory: navigator.memory ? {\n usedJSHeapSize: navigator.memory.usedJSHeapSize,\n totalJSHeapSize: navigator.memory.totalJSHeapSize,\n jsHeapSizeLimit: navigator.memory.jsHeapSizeLimit\n } : null\n }\n }\n \n // 初始化第三方SDK\n initThirdPartySDKs() {\n const config = this.config.getThirdPartyConfig()\n \n // 百度统计\n if (config.baidu && window._hmt) {\n this.thirdPartySDKs.baidu = window._hmt\n }\n \n // 友盟统计\n if (config.umeng && window._um) {\n this.thirdPartySDKs.umeng = window._um\n }\n \n // 神策数据\n if (config.sensors && window.sensors) {\n this.thirdPartySDKs.sensors = window.sensors\n }\n \n // 腾讯云分析\n if (config.tencent && window.MTA) {\n this.thirdPartySDKs.tencent = window.MTA\n }\n }\n \n // 刷新性能队列\n flushPerformanceQueue() {\n if (this.performanceQueue.length > 0) {\n this.reporter.report('performance', [...this.performanceQueue])\n this.performanceQueue = []\n }\n }\n \n // 手动上报性能指标\n reportPerformance(metrics = {}) {\n const performanceData = {\n type: 'custom_performance',\n timestamp: Date.now(),\n url: window.location.href,\n metrics,\n user: this.config.getUser()\n }\n \n this.reporter.report('performance', [performanceData])\n }\n \n // 获取当前性能指标\n getCurrentMetrics() {\n return { ...this.metrics }\n }\n \n // 销毁\n destroy() {\n if (this.config.getConfig().reportInterval > 0) { \n this.flushPerformanceQueue()\n }\n \n // 清除定时器,防止内存泄漏\n if (this.reportTimer) {\n clearInterval(this.reportTimer)\n this.reportTimer = null\n }\n \n this.isInitialized = false\n }\n} ","/* eslint-disable */\n// 用户行为追踪器\nimport { Reporter } from './reporter'\n\nexport class UserBehaviorTracker {\n constructor(config) {\n this.config = config\n this.reporter = new Reporter(config)\n this.isInitialized = false\n this.behaviorQueue = []\n this.sessionId = this.generateSessionId()\n this.pageStartTime = Date.now()\n this.scrollDepth = 0\n this.mouseMovements = []\n this.keyStrokes = []\n this.formInteractions = []\n this.timeTracker = null\n this.reportTimer = null\n this.originalPushState = null\n this.originalReplaceState = null\n \n // 行为数据\n this.behaviors = {\n pageViews: [],\n clicks: [],\n scrolls: [],\n formSubmissions: [],\n navigation: [],\n timeOnPage: 0\n }\n }\n \n init() {\n if (this.isInitialized) return\n \n const config = this.config.getConfig()\n \n // 追踪页面浏览\n // if (config.enablePageViewTracking) {\n // this.setupPageViewTracking()\n // }\n \n // 追踪用户交互\n if (config.enableUserInteractionTracking) {\n this.setupUserInteractionTracking()\n }\n \n // 追踪表单行为\n if (config.enableFormTracking) {\n this.setupFormTracking()\n }\n \n // 追踪滚动行为\n if (config.enableScrollTracking) {\n this.setupScrollTracking()\n }\n \n // 追踪鼠标移动\n if (config.enableMouseTracking) {\n this.setupMouseTracking()\n }\n \n // 追踪键盘输入\n if (config.enableKeyboardTracking) {\n this.setupKeyboardTracking()\n }\n \n // 追踪页面停留时间\n this.setupTimeTracking()\n \n // 追踪访问来源\n // this.trackReferrer()\n \n // 设置定时上报\n if (config.reportInterval > 0) {\n this.setupPeriodicReport()\n }\n \n this.isInitialized = true\n }\n \n // 设置定时上报\n setupPeriodicReport() {\n const interval = this.config.getConfig().reportInterval\n if (interval > 0) {\n // 清除之前的定时器(如果存在)\n if (this.reportTimer) {\n clearInterval(this.reportTimer)\n }\n // 保存定时器ID,以便后续清理\n this.reportTimer = setInterval(() => {\n this.flushBehaviorQueue()\n }, interval)\n }\n }\n \n // 设置页面浏览追踪\n // setupPageViewTracking() {\n // // 初始页面浏览\n // this.trackPageView()\n \n // // 监听路由变化\n // this.setupRouteChangeTracking()\n \n // // 监听页面可见性变化\n // document.addEventListener('visibilitychange', () => {\n // if (document.hidden) {\n // this.handlePageHidden()\n // } else {\n // this.handlePageVisible()\n // }\n // })\n // }\n \n // 设置路由变化追踪\n // setupRouteChangeTracking() {\n // // 监听 popstate 事件\n // window.addEventListener('popstate', () => {\n // this.trackPageView()\n // })\n \n // // 监听 pushstate 和 replacestate\n // // 保存原始方法,以便销毁时恢复\n // this.originalPushState = history.pushState\n // this.originalReplaceState = history.replaceState\n \n // history.pushState = function(...args) {\n // this.originalPushState.apply(history, args)\n // setTimeout(() => {\n // this.trackPageView()\n // }, 0)\n // }.bind(this)\n \n // history.replaceState = function(...args) {\n // this.originalReplaceState.apply(history, args)\n // setTimeout(() => {\n // this.trackPageView()\n // }, 0)\n // }.bind(this)\n // }\n \n // 设置用户交互追踪\n setupUserInteractionTracking() {\n // 点击追踪\n document.addEventListener('click', (event) => {\n this.trackClick(event)\n }, true)\n \n // 双击追踪\n document.addEventListener('dblclick', (event) => {\n this.trackDoubleClick(event)\n }, true)\n \n // 右键点击追踪\n document.addEventListener('contextmenu', (event) => {\n this.trackRightClick(event)\n }, true)\n \n // 触摸事件追踪\n if ('ontouchstart' in window) {\n document.addEventListener('touchstart', (event) => {\n this.trackTouch(event)\n }, true)\n }\n }\n \n // 设置表单追踪\n setupFormTracking() {\n // 表单提交\n document.addEventListener('submit', (event) => {\n this.trackFormSubmission(event)\n }, true)\n \n // 表单字段变化\n document.addEventListener('change', (event) => {\n if (event.target.tagName === 'INPUT' || event.target.tagName === 'SELECT' || event.target.tagName === 'TEXTAREA') {\n this.trackFormFieldChange(event)\n }\n }, true)\n \n // 表单字段聚焦\n document.addEventListener('focus', (event) => {\n if (event.target.tagName === 'INPUT' || event.target.tagName === 'SELECT' || event.target.tagName === 'TEXTAREA') {\n this.trackFormFieldFocus(event)\n }\n }, true)\n \n // 表单字段失焦\n document.addEventListener('blur', (event) => {\n if (event.target.tagName === 'INPUT' || event.target.tagName === 'SELECT' || event.target.tagName === 'TEXTAREA') {\n this.trackFormFieldBlur(event)\n }\n }, true)\n }\n \n // 设置滚动追踪\n setupScrollTracking() {\n let scrollTimeout\n let lastScrollTop = 0\n \n document.addEventListener('scroll', () => {\n clearTimeout(scrollTimeout)\n scrollTimeout = setTimeout(() => {\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop\n const scrollHeight = document.documentElement.scrollHeight\n const clientHeight = document.documentElement.clientHeight\n \n // 计算滚动深度百分比\n const scrollDepth = Math.round((scrollTop / (scrollHeight - clientHeight)) * 100)\n \n if (scrollDepth > this.scrollDepth) {\n this.scrollDepth = scrollDepth\n this.trackScroll(scrollDepth, scrollTop)\n }\n }, 100)\n }, { passive: true })\n }\n \n // 设置鼠标移动追踪\n setupMouseTracking() {\n let mouseTimeout\n let mouseMovements = []\n \n document.addEventListener('mousemove', (event) => {\n clearTimeout(mouseTimeout)\n \n mouseMovements.push({\n x: event.clientX,\n y: event.clientY,\n timestamp: Date.now()\n })\n \n // 限制鼠标移动记录数量\n if (mouseMovements.length > 100) {\n mouseMovements.shift()\n }\n \n mouseTimeout = setTimeout(() => {\n if (mouseMovements.length > 10) {\n this.trackMouseMovement(mouseMovements)\n mouseMovements = []\n }\n }, 1000)\n }, { passive: true })\n }\n \n // 设置键盘追踪\n setupKeyboardTracking() {\n document.addEventListener('keydown', (event) => {\n // 不追踪密码字段\n if (event.target.type === 'password') return\n \n this.trackKeyStroke(event)\n }, true)\n }\n \n // 设置时间追踪\n setupTimeTracking() {\n // 清除之前的定时器(如果存在)\n if (this.timeTracker) {\n clearInterval(this.timeTracker)\n }\n \n // 每秒更新页面停留时间,保存定时器ID以便后续清理\n this.timeTracker = setInterval(() => {\n this.behaviors.timeOnPage += 1\n }, 1000)\n \n // 页面卸载时上报停留时间\n window.addEventListener('beforeunload', () => {\n this.reportTimeOnPage()\n })\n }\n \n // 追踪访问来源\n trackReferrer() {\n const referrer = document.referrer\n if (referrer) {\n const referrerData = {\n type: 'referrer',\n url: referrer,\n domain: this.extractDomain(referrer),\n timestamp: Date.now()\n }\n if (this.config.getConfig().debugSwitch) { \n console.log('referrerData----', referrerData)\n }\n this.behaviors.navigation.push(referrerData)\n this.reportBehavior('referrer', referrerData)\n }\n }\n \n // 追踪页面浏览\n trackPageView() {\n const pageViewData = {\n type: 'pageview',\n url: window.location.href,\n title: document.title,\n timestamp: Date.now(),\n sessionId: this.sessionId,\n referrer: document.referrer\n }\n \n this.behaviors.pageViews.push(pageViewData)\n this.reportBehavior('pageview', pageViewData)\n \n // 重置页面相关数据\n this.pageStartTime = Date.now()\n this.scrollDepth = 0\n }\n \n // 追踪点击\n trackClick(event) {\n const clickData = {\n type: 'click',\n element: {\n tagName: event.target.tagName,\n className: event.target.className,\n id: event.target.id,\n text: event.target.textContent?.substring(0, 50),\n href: event.target.href\n },\n position: {\n x: event.clientX,\n y: event.clientY,\n pageX: event.pageX,\n pageY: event.pageY\n },\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n \n this.behaviors.clicks.push(clickData)\n this.reportBehavior('click', clickData)\n }\n \n // 追踪双击\n trackDoubleClick(event) {\n const doubleClickData = {\n type: 'doubleclick',\n element: {\n tagName: event.target.tagName,\n className: event.target.className,\n id: event.target.id\n },\n position: {\n x: event.clientX,\n y: event.clientY\n },\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n \n this.reportBehavior('doubleclick', doubleClickData)\n }\n \n // 追踪右键点击\n trackRightClick(event) {\n const rightClickData = {\n type: 'rightclick',\n element: {\n tagName: event.target.tagName,\n className: event.target.className,\n id: event.target.id\n },\n position: {\n x: event.clientX,\n y: event.clientY\n },\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n \n this.reportBehavior('rightclick', rightClickData)\n }\n \n // 追踪触摸\n trackTouch(event) {\n const touchData = {\n type: 'touch',\n touches: Array.from(event.touches).map(touch => ({\n x: touch.clientX,\n y: touch.clientY,\n identifier: touch.identifier\n })),\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n \n this.reportBehavior('touch', touchData)\n }\n \n // 追踪表单提交\n trackFormSubmission(event) {\n const formData = {\n type: 'form_submission',\n form: {\n action: event.target.action,\n method: event.target.method,\n id: event.target.id,\n className: event.target.className\n },\n fields: this.getFormFields(event.target),\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n \n this.behaviors.formSubmissions.push(formData)\n this.reportBehavior('form_submission', formData)\n }\n \n // 追踪表单字段变化\n trackFormFieldChange(event) {\n const fieldData = {\n type: 'form_field_change',\n field: {\n name: event.target.name,\n type: event.target.type,\n value: event.target.type === 'password' ? '***' : event.target.value,\n id: event.target.id\n },\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n \n this.reportBehavior('form_field_change', fieldData)\n }\n \n // 追踪表单字段聚焦\n trackFormFieldFocus(event) {\n const focusData = {\n type: 'form_field_focus',\n field: {\n name: event.target.name,\n type: event.target.type,\n id: event.target.id\n },\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n \n this.reportBehavior('form_field_focus', focusData)\n }\n \n // 追踪表单字段失焦\n trackFormFieldBlur(event) {\n const blurData = {\n type: 'form_field_blur',\n field: {\n name: event.target.name,\n type: event.target.type,\n id: event.target.id\n },\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n \n this.reportBehavior('form_field_blur', blurData)\n }\n \n // 追踪滚动\n trackScroll(depth, scrollTop) {\n const scrollData = {\n type: 'scroll',\n depth: depth,\n scrollTop: scrollTop,\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n if (this.config.getConfig().debugSwitch) { \n console.log('scrollData---', scrollData)\n }\n this.reportBehavior('scroll', scrollData)\n }\n \n // 追踪鼠标移动\n trackMouseMovement(movements) {\n const mouseData = {\n type: 'mouse_movement',\n movements: movements,\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n if (this.config.getConfig().debugSwitch) { \n console.log('mouse_movement---', mouseData)\n }\n this.reportBehavior('mouse_movement', mouseData)\n }\n \n // 追踪键盘输入\n trackKeyStroke(event) {\n const keyData = {\n type: 'keystroke',\n key: event.key,\n code: event.code,\n ctrlKey: event.ctrlKey,\n shiftKey: event.shiftKey,\n altKey: event.altKey,\n metaKey: event.metaKey,\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n if (this.config.getConfig().debugSwitch) { \n console.log('keystroke---', keyData)\n }\n this.reportBehavior('keystroke', keyData)\n }\n \n // // 处理页面隐藏\n // handlePageHidden() {\n // this.reportTimeOnPage()\n // }\n \n // // 处理页面显示\n // handlePageVisible() {\n // this.pageStartTime = Date.now()\n // }\n \n // 上报页面停留时间\n // reportTimeOnPage() {\n // const timeData = {\n // type: 'time_on_page',\n // time: this.behaviors.timeOnPage,\n // url: window.location.href,\n // timestamp: Date.now(),\n // sessionId: this.sessionId\n // }\n // this.reportBehavior('time_on_page', timeData)\n // }\n \n // 上报行为数据\n reportBehavior(type, data) {\n const behaviorData = {\n type,\n data,\n user: this.config.getUser(),\n config: {\n appId: this.config.getConfig().appId,\n appVersion: this.config.getConfig().appVersion,\n // environment: this.config.getConfig().environment\n }\n }\n \n // 添加到队列\n this.behaviorQueue.push(behaviorData)\n // 立即上报或延迟上报\n if (this.config.getConfig().reportInterval === 0) {\n this.reporter.report('behavior', [behaviorData])\n } else if (this.behaviorQueue.length >= this.config.getConfig().maxQueueSize) { // 检查队列大小\n this.flushBehaviorQueue()\n }\n }\n \n // 手动上报行为\n reportCustomBehavior(eventName, data = {}) {\n const customData = {\n type: 'custom_behavior',\n eventName,\n ...data,\n timestamp: Date.now(),\n sessionId: this.sessionId\n }\n \n this.reportBehavior('custom_behavior', customData)\n }\n \n // 刷新行为队列\n flushBehaviorQueue() {\n if (this.behaviorQueue.length > 0) {\n this.reporter.report('behavior', [...this.behaviorQueue])\n this.behaviorQueue = []\n }\n }\n \n // 获取表单字段信息\n getFormFields(form) {\n const fields = []\n const formElements = form.elements\n \n for (let i = 0; i < formElements.length; i++) {\n const element = formElements[i]\n if (element.name) {\n fields.push({\n name: element.name,\n type: element.type,\n value: element.type === 'password' ? '***' : element.value\n })\n }\n }\n \n return fields\n }\n \n // 提取域名\n extractDomain(url) {\n try {\n return new URL(url).hostname\n } catch (e) {\n return url\n }\n }\n \n // 生成会话ID\n generateSessionId() {\n return 'session_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9)\n }\n \n // 获取当前行为数据\n getCurrentBehaviors() {\n return { ...this.behaviors }\n }\n \n // 获取会话ID\n getSessionId() {\n return this.sessionId\n }\n \n // 销毁\n destroy() {\n if (this.config.getConfig().reportInterval > 0) {\n this.flushBehaviorQueue()\n }\n this.reportTimeOnPage()\n \n // 清除上报定时器,防止内存泄漏\n if (this.reportTimer) {\n clearInterval(this.reportTimer)\n this.reportTimer = null\n }\n \n // 清除时间追踪定时器,防止内存泄漏\n if (this.timeTracker) {\n clearInterval(this.timeTracker)\n this.timeTracker = null\n }\n \n // 恢复原始的 history 方法,防止内存泄漏\n if (this.originalPushState) {\n history.pushState = this.originalPushState\n this.originalPushState = null\n }\n \n if (this.originalReplaceState) {\n history.replaceState = this.originalReplaceState\n this.originalReplaceState = null\n }\n \n this.isInitialized = false\n }\n} ","/* eslint-disable */\n// 商品曝光追踪器\n// 统计规则:商品元素50%以上面积进入可视区域,立即定义为1次曝光(不需要停留时间)\nimport { Reporter } from './reporter'\nimport { generateUniqueId, extractHashPath, getPageKey, uniqueArr } from './utils'\n\nexport class ExposureTracker {\n constructor(config, eventTracker = null) {\n this.config = config\n this.reporter = new Reporter(config)\n this.eventTracker = eventTracker // 事件追踪器引用,用于获取页面信息\n this.isInitialized = false\n this.observer = null\n this.trackedElements = new Map() // 存储被追踪的元素及其状态\n this.exposureQueue = [] // 曝光事件队列\n this.reportTimer = null\n this.scrollTimer = null // 滚动事件节流定时器\n this.useFallback = false // 是否使用降级方案\n this.lastReportTime = new Map() // 记录每个元素的上报时间,用于去重(key: elementId, value: timestamp)\n this.debounceTime = 500 // 去重时间间隔(毫秒),同一元素在500ms内只上报一次\n \n // 默认配置\n this.defaultOptions = {\n threshold: 0.5, // 可见面积阈值:50%\n rootMargin: '0px', // 根边距\n scrollThrottle: 100 // 滚动事件节流时间(毫秒),降级方案使用\n }\n }\n \n init() {\n if (this.isInitialized) return\n \n // 检查浏览器是否支持 Intersection Observer\n if (this.isIntersectionObserverSupported()) {\n // 使用 Intersection Observer API(推荐方案)\n this.createObserver()\n this.useFallback = false\n \n if (this.config.getConfig().debugSwitch) {\n console.log('曝光追踪器初始化完成(使用 Intersection Observer API)')\n }\n } else {\n // 使用降级方案(滚动事件 + getBoundingClientRect)\n this.setupFallbackTracking()\n this.useFallback = true\n \n if (this.config.getConfig().debugSwitch) {\n console.warn('浏览器不支持 Intersection Observer,使用降级方案(滚动事件追踪)')\n }\n }\n \n // 设置定时上报\n const config = this.config.getConfig()\n if (config.reportInterval > 0) {\n this.setupPeriodicReport()\n }\n \n this.isInitialized = true\n \n if (config.debugSwitch) {\n console.log('曝光追踪器初始化完成')\n }\n }\n \n // 检查浏览器是否支持 Intersection Observer\n isIntersectionObserverSupported() {\n return (\n typeof window !== 'undefined' &&\n 'IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype\n )\n }\n \n // 创建 Intersection Observer\n createObserver() {\n const options = {\n root: null, // 使用视口作为根\n rootMargin: this.defaultOptions.rootMargin,\n threshold: [0, 0.5, 1] // 监听0%、50%、100%的可见性变化\n }\n \n this.observer = new IntersectionObserver((entries) => {\n entries.forEach(entry => {\n this.handleIntersection(entry)\n })\n }, options)\n }\n \n // 处理元素交叉状态变化\n handleIntersection(entry) {\n const element = entry.target\n const elementId = this.getElementId(element)\n \n // 获取元素的曝光配置\n const config = this.getElementConfig(element)\n const threshold = config.threshold || this.defaultOptions.threshold\n \n // 计算可见面积比例\n const visibleRatio = entry.intersectionRatio\n \n // 判断元素是否达到曝光阈值(50%以上可见)\n const isThresholdMet = visibleRatio >= threshold\n \n // if (this.config.getConfig().debugSwitch) {\n // console.log(`元素 ${elementId} 可见性检查:`, {\n // visibleRatio: (visibleRatio * 100).toFixed(2) + '%',\n // threshold: (threshold * 100).toFixed(2) + '%',\n // isThresholdMet\n // })\n // }\n \n // 只要达到阈值就立即上报,但需要去重(避免短时间内重复上报)\n if (isThresholdMet) {\n // 获取元素状态(如果不存在则创建)\n if (!this.trackedElements.has(elementId)) {\n this.trackedElements.set(elementId, {\n element,\n config\n })\n }\n \n const elementState = this.trackedElements.get(elementId)\n \n // 检查是否需要去重\n const now = Date.now()\n const lastReportTime = this.lastReportTime.get(elementId) || 0\n const timeSinceLastReport = now - lastReportTime\n \n if (timeSinceLastReport >= this.debounceTime) {\n // 距离上次上报时间超过去重间隔,可以上报\n this.lastReportTime.set(elementId, now)\n \n // 立即触发曝光\n this.triggerExposure(element, elementId, elementState, visibleRatio, 0)\n \n // if (this.config.getConfig().debugSwitch) {\n // console.log(`元素 ${elementId} 进入可视区域,可见比例: ${(visibleRatio * 100).toFixed(2)}%,立即触发曝光`)\n // }\n } else {\n // 距离上次上报时间太短,跳过本次上报\n if (this.config.getConfig().debugSwitch) {\n console.log(`元素 ${elementId} 跳过上报(去重),距离上次上报 ${timeSinceLastReport}ms,需要间隔 ${this.debounceTime}ms`)\n }\n }\n }\n }\n \n // 触发曝光事件\n triggerExposure(element, elementId, elementState, visibleRatio, duration) {\n // 获取商品信息(从元素属性或data属性中获取)\n const productInfo = this.extractProductInfo(element, elementState.config)\n let previousPageInfo = {}\n // 获取上一个页面信息(如果 eventTracker 可用)\n if (this.eventTracker && typeof this.eventTracker.getPreviousPageInfo === 'function') {\n previousPageInfo = this.eventTracker.getPreviousPageInfo()\n }\n const config = this.getElementConfig(element)\n const exposureData = {\n uuid: generateUniqueId(),\n timestamp: Date.now(),\n pageKey: getPageKey(extractHashPath(window.location.href), this.config.getConfig().uiVersion),\n pageUri: extractHashPath(window.location.href),\n eventType: 'EXPOSE',\n viewParam: { ...productInfo },\n tags: { actionKey: '', ...config, refer: extractHashPath(previousPageInfo?.previousPage?.url), duration: previousPageInfo?.previousPageStayTime, }\n // pageInfo: Object.keys(pageInfo).length > 0 ? pageInfo : {\n // currentUrl: window.location.href,\n // currentTitle: document.title\n // }\n\n\n // type: 'exposure',\n // eventName: 'product_exposure',\n // timestamp: Date.now(),\n // url: window.location.href,\n // element: {\n // id: elementId,\n // tagName: element.tagName,\n // className: element.className,\n // ...productInfo\n // },\n // exposure: {\n // visibleRatio: Math.round(visibleRatio * 100) / 100, // 保留两位小数\n // duration: duration, // 停留时间(毫秒),当前为0(立即曝光)\n // threshold: this.defaultOptions.threshold\n // },\n // 添加页面基本信息\n // pageInfo: Object.keys(pageInfo).length > 0 ? pageInfo : {\n // currentUrl: window.location.href,\n // currentTitle: document.title\n // }\n }\n \n // 添加到队列\n this.exposureQueue.push(exposureData)\n \n // if (this.config.getConfig().debugSwitch) {\n // console.log('商品曝光事件:', exposureData)\n // }\n \n // 根据配置决定立即上报还是延迟上报\n const reportInterval = this.config.getConfig().reportInterval\n if (reportInterval === 0) {\n // 立即上报(使用 Promise 确保上报不阻塞,适合 tab 切换场景)\n Promise.resolve().then(() => {\n this.reporter.report('exposure', this.getReportData([exposureData])).catch(error => {\n console.error('曝光上报失败:', error)\n if (this.config.getConfig().debugSwitch) {\n console.error('曝光上报失败详情:', error)\n }\n })\n })\n } else if (this.exposureQueue.length >= this.config.getConfig().maxQueueSize) {\n // 队列达到最大长度,立即上报\n this.flushExposureQueue()\n }\n }\n \n // 设置降级方案(滚动事件追踪)\n setupFallbackTracking() {\n // 创建虚拟 observer 对象,保持 API 一致性\n this.observer = {\n observe: (element) => {\n // 在降级方案中,observe 方法只是记录元素\n // 实际的检测通过滚动事件触发\n const elementId = this.getElementId(element)\n if (!this.trackedElements.has(elementId)) {\n // 元素会在 trackProduct 中被添加到 trackedElements\n // 这里不需要额外操作\n }\n },\n unobserve: (element) => {\n // 在降级方案中,取消追踪\n const elementId = this.getElementId(element)\n this.trackedElements.delete(elementId)\n },\n disconnect: () => {\n // 清理所有追踪\n this.trackedElements.clear()\n this.removeScrollListener()\n }\n }\n \n // 添加滚动事件监听(使用节流优化性能)\n this.addScrollListener()\n \n // 初始检查一次(处理页面加载时已可见的元素)\n setTimeout(() => {\n this.checkAllElementsVisibility()\n }, 100)\n }\n \n // 添加滚动事件监听器\n addScrollListener() {\n if (this.scrollHandler) return\n \n let lastScrollTime = 0\n const throttleTime = this.defaultOptions.scrollThrottle\n \n this.scrollHandler = () => {\n const now = Date.now()\n if (now - lastScrollTime >= throttleTime) {\n lastScrollTime = now\n this.checkAllElementsVisibility()\n }\n }\n \n // 监听滚动事件(支持移动端)\n window.addEventListener('scroll', this.scrollHandler, { passive: true })\n // 监听触摸移动事件(移动端优化)\n window.addEventListener('touchmove', this.scrollHandler, { passive: true })\n // 监听 resize 事件(窗口大小变化时重新计算)\n window.addEventListener('resize', this.scrollHandler, { passive: true })\n }\n \n // 移除滚动事件监听器\n removeScrollListener() {\n if (this.scrollHandler) {\n window.removeEventListener('scroll', this.scrollHandler)\n window.removeEventListener('touchmove', this.scrollHandler)\n window.removeEventListener('resize', this.scrollHandler)\n this.scrollHandler = null\n }\n }\n \n // 检查所有元素的可见性(降级方案)\n checkAllElementsVisibility() {\n if (!this.useFallback) return\n \n const viewportTop = 0\n const viewportBottom = window.innerHeight\n const viewportLeft = 0\n const viewportRight = window.innerWidth\n \n this.trackedElements.forEach((elementState, elementId) => {\n const element = elementState.element\n if (!element || !document.contains(element)) {\n // 元素已被移除,清理\n this.trackedElements.delete(elementId)\n return\n }\n \n const config = elementState.config\n const threshold = config.threshold || this.defaultOptions.threshold\n \n // 计算元素可见面积比例\n const visibleRatio = this.calculateVisibleRatio(\n element,\n viewportTop,\n viewportBottom,\n viewportLeft,\n viewportRight\n )\n \n // 判断元素是否达到曝光阈值(50%以上可见)\n const isThresholdMet = visibleRatio >= threshold\n \n // 只要达到阈值就立即上报,但需要去重(避免短时间内重复上报)\n if (isThresholdMet) {\n // 检查是否需要去重\n const now = Date.now()\n const lastReportTime = this.lastReportTime.get(elementId) || 0\n const timeSinceLastReport = now - lastReportTime\n \n if (timeSinceLastReport >= this.debounceTime) {\n // 距离上次上报时间超过去重间隔,可以上报\n this.lastReportTime.set(elementId, now)\n \n this.triggerExposure(element, elementId, elementState, visibleRatio, 0)\n \n if (this.config.getConfig().debugSwitch) {\n console.log(`元素 ${elementId} 进入可视区域,可见比例: ${(visibleRatio * 100).toFixed(2)}%,立即触发曝光`)\n }\n } else {\n // 距离上次上报时间太短,跳过本次上报\n if (this.config.getConfig().debugSwitch) {\n console.log(`元素 ${elementId} 跳过上报(去重),距离上次上报 ${timeSinceLastReport}ms,需要间隔 ${this.debounceTime}ms`)\n }\n }\n }\n })\n }\n \n // 计算元素可见面积比例(降级方案)\n calculateVisibleRatio(element, viewportTop, viewportBottom, viewportLeft, viewportRight) {\n const rect = element.getBoundingClientRect()\n \n // 元素完全不可见\n if (rect.bottom < viewportTop || rect.top > viewportBottom ||\n rect.right < viewportLeft || rect.left > viewportRight) {\n return 0\n }\n \n // 计算可见区域\n const visibleTop = Math.max(rect.top, viewportTop)\n const visibleBottom = Math.min(rect.bottom, viewportBottom)\n const visibleLeft = Math.max(rect.left, viewportLeft)\n const visibleRight = Math.min(rect.right, viewportRight)\n \n // 计算可见面积\n const visibleWidth = Math.max(0, visibleRight - visibleLeft)\n const visibleHeight = Math.max(0, visibleBottom - visibleTop)\n const visibleArea = visibleWidth * visibleHeight\n \n // 计算元素总面积\n const elementWidth = rect.width\n const elementHeight = rect.height\n const elementArea = elementWidth * elementHeight\n \n // 如果元素面积为0,返回0\n if (elementArea === 0) {\n return 0\n }\n \n // 返回可见比例\n return visibleArea / elementArea\n }\n \n // 追踪商品元素\n // 使用方式:\n // tracker.trackProduct(element, { productId: '123', productName: '商品名称' })\n trackProduct(element, options = {}) {\n if (!this.isInitialized) {\n console.warn('曝光追踪器未初始化')\n return\n }\n \n if (!element || typeof element !== 'object' || !element.nodeType) {\n console.warn('无效的元素,无法追踪')\n return\n }\n \n // 获取元素唯一标识\n const elementId = this.getElementId(element)\n // 存储元素配置信息\n const config = {\n ...options\n // threshold: options.threshold || this.defaultOptions.threshold\n }\n \n // 如果元素已经被追踪,先取消追踪\n if (this.trackedElements.has(elementId)) {\n this.untrackProduct(element)\n }\n \n // 设置元素的自定义属性,用于存储配置\n element.setAttribute('data-exposure-tracked', 'true')\n element.setAttribute('data-exposure-config', JSON.stringify(config))\n \n // 记录追踪状态\n this.trackedElements.set(elementId, {\n element,\n config\n })\n \n // 开始观察元素\n if (this.observer) {\n this.observer.observe(element)\n }\n \n // 如果是降级方案,立即检查一次\n if (this.useFallback) {\n setTimeout(() => {\n this.checkAllElementsVisibility()\n }, 0)\n }\n \n if (this.config.getConfig().debugSwitch) {\n // console.log(`开始追踪商品元素: ${elementId}`, config)\n }\n }\n \n // 批量追踪商品元素\n // 使用方式:\n // tracker.trackProducts([element1, element2, ...], { productId: '123' })\n // 或者\n // tracker.trackProducts('.product-item', { productId: '123' })\n trackProducts(selectorOrElements, options = {}) {\n if (!this.isInitialized || !this.observer) {\n console.warn('曝光追踪器未初始化')\n return\n }\n \n let elements = []\n \n // 如果是选择器字符串,查找元素\n if (typeof selectorOrElements === 'string') {\n elements = Array.from(document.querySelectorAll(selectorOrElements))\n } else if (Array.isArray(selectorOrElements)) {\n elements = selectorOrElements\n } else {\n console.warn('无效的选择器或元素列表')\n return\n }\n \n // 批量追踪\n elements.forEach((element, index) => {\n // 如果options是数组,使用对应索引的配置;否则使用统一配置\n const elementOptions = Array.isArray(options) \n ? options[index] || {} \n : options\n \n this.trackProduct(element, elementOptions)\n })\n \n if (this.config.getConfig().debugSwitch) {\n // console.log(`批量追踪了 ${elements.length} 个商品元素`)\n }\n }\n \n // 取消追踪商品元素\n untrackProduct(element) {\n if (!this.observer) return\n \n const elementId = this.getElementId(element)\n \n // 停止观察元素\n if (this.observer.unobserve) {\n this.observer.unobserve(element)\n }\n \n // 移除追踪状态\n this.trackedElements.delete(elementId)\n \n // 清除上报时间记录\n this.lastReportTime.delete(elementId)\n \n // 移除自定义属性\n if (element && element.removeAttribute) {\n element.removeAttribute('data-exposure-tracked')\n element.removeAttribute('data-exposure-config')\n }\n \n if (this.config.getConfig().debugSwitch) {\n console.log(`取消追踪商品元素: ${elementId}`)\n }\n }\n \n // 取消追踪所有商品元素\n untrackAll() {\n if (!this.observer) return\n \n // 如果是使用 Intersection Observer,逐个取消观察\n if (!this.useFallback) {\n this.trackedElements.forEach((state, elementId) => {\n if (state.element && this.observer.unobserve) {\n this.observer.unobserve(state.element)\n }\n })\n }\n \n this.trackedElements.clear()\n \n // if (this.config.getConfig().debugSwitch) {\n // console.log('已取消追踪所有商品元素')\n // }\n }\n \n // 获取元素唯一标识\n getElementId(element) {\n // 优先使用data-exposure-id属性\n if (element.getAttribute('data-exposure-id')) {\n return element.getAttribute('data-exposure-id')\n }\n \n // 如果元素已经有生成的唯一ID,直接返回\n if (element._exposureUniqueId) {\n return element._exposureUniqueId\n }\n \n // 其次使用id属性\n if (element.id) {\n return `id_${element.id}`\n }\n \n // 使用data-product-id属性\n if (element.getAttribute('data-product-id')) {\n return `product_${element.getAttribute('data-product-id')}`\n }\n \n // 最后生成一个短唯一识别码并保存到元素上\n const uniqueId = generateUniqueId()\n element._exposureUniqueId = uniqueId\n return uniqueId\n }\n \n // 获取元素配置\n getElementConfig(element) {\n const configAttr = element.getAttribute('data-exposure-config')\n if (configAttr) {\n try {\n return JSON.parse(configAttr)\n } catch (e) {\n return {}\n }\n }\n return {}\n }\n \n // 提取商品信息\n extractProductInfo(element, config = {}) {\n const productInfo = {\n productId: config.productId || element.getAttribute('data-product-id') || null,\n productName: config.productName || element.getAttribute('data-product-name') || null,\n productPrice: config.productPrice || element.getAttribute('data-product-price') || null,\n productCategory: config.productCategory || element.getAttribute('data-product-category') || null,\n productImage: config.productImage || element.getAttribute('data-product-image') || null\n }\n \n // 移除空值\n Object.keys(productInfo).forEach(key => {\n if (productInfo[key] === null) {\n delete productInfo[key]\n }\n })\n \n return productInfo\n }\n \n // 设置定时上报\n setupPeriodicReport() {\n const interval = this.config.getConfig().reportInterval\n if (interval > 0) {\n // 清除之前的定时器(如果存在)\n if (this.reportTimer) {\n clearInterval(this.reportTimer)\n }\n // 保存定时器ID,以便后续清理\n this.reportTimer = setInterval(() => {\n this.flushExposureQueue()\n }, interval)\n }\n }\n\n getReportData(queueToReport) {\n if (queueToReport.length > 0) {\n const reportData = queueToReport[0]\n if (reportData.tags) {\n const arr = uniqueArr(queueToReport.map(item => item.viewParam?.productId).filter(Boolean))\n reportData.tags.exposeContent = arr?.length > 0 ? arr.join(',') : ''\n }\n delete reportData.viewParam\n return reportData\n }\n return null\n }\n \n // 刷新曝光队列\n flushExposureQueue() {\n if (this.exposureQueue.length > 0) {\n const queueToReport = [...this.exposureQueue]\n this.exposureQueue = []\n // 使用 Promise 确保上报不阻塞\n Promise.resolve().then(() => {\n this.reporter.report('exposure', this.getReportData(queueToReport)).catch(error => {\n console.error('批量曝光上报失败:', error)\n if (this.config.getConfig().debugSwitch) {\n console.error('批量曝光上报失败详情:', error)\n }\n })\n })\n }\n }\n \n // 手动上报曝光事件\n reportExposure(productInfo = {}) {\n // 获取上一个页面信息(如果 eventTracker 可用)\n let pageInfo = {}\n let previousPageInfo = {}\n if (this.eventTracker && typeof this.eventTracker.getPreviousPageInfo === 'function') {\n previousPageInfo = this.eventTracker.getPreviousPageInfo()\n // pageInfo = {\n // currentUrl: window.location.href,\n // currentTitle: document.title,\n // previousPage: previousPageInfo.previousPage,\n // previousPageStayTime: previousPageInfo.previousPageStayTime,\n // currentPageStayTime: this.eventTracker.getCurrentPageStayTime ? this.eventTracker.getCurrentPageStayTime() : 0\n // }\n }\n\n const exposureData = {\n uuid: generateUniqueId(),\n timestamp: Date.now(),\n pageKey: getPageKey(extractHashPath(window.location.href), this.config.getConfig().uiVersion),\n pageUri: extractHashPath(window.location.href),\n eventType: 'EXPOSE',\n viewParam: { ...productInfo },\n tags: { \n ...config, \n actionKey: '',\n refer: extractHashPath(previousPageInfo?.previousPage?.url),\n duration: previousPageInfo?.previousPageStayTime\n }\n }\n \n // 使用 Promise 确保上报不阻塞\n Promise.resolve().then(() => {\n this.reporter.report('exposure', this.getReportData(exposureData)).catch(error => {\n console.error('手动曝光上报失败:', error)\n if (this.config.getConfig().debugSwitch) {\n console.error('手动曝光上报失败详情:', error)\n }\n })\n })\n }\n \n // 获取已追踪的元素列表\n getTrackedElements() {\n return Array.from(this.trackedElements.keys())\n }\n \n // 获取曝光队列\n getExposureQueue() {\n return [...this.exposureQueue]\n }\n \n // 销毁\n destroy() {\n // 刷新曝光队列\n this.flushExposureQueue()\n \n // 清除上报定时器\n if (this.reportTimer) {\n clearInterval(this.reportTimer)\n this.reportTimer = null\n }\n \n // 取消所有追踪\n this.untrackAll()\n \n // 断开观察器\n if (this.observer) {\n if (this.observer.disconnect) {\n this.observer.disconnect()\n }\n this.observer = null\n }\n \n // 移除滚动事件监听器(降级方案)\n this.removeScrollListener()\n \n // 清空状态\n this.trackedElements.clear()\n this.exposureQueue = []\n this.lastReportTime.clear()\n this.useFallback = false\n \n this.isInitialized = false\n \n if (this.config.getConfig().debugSwitch) {\n console.log('曝光追踪器已销毁')\n }\n }\n}\n\n","/* eslint-disable */\n// 第三方SDK集成器\nexport class ThirdPartyIntegrator {\n constructor(config) {\n this.config = config\n this.integratedSDKs = {}\n this.isInitialized = false\n }\n \n init() {\n if (this.isInitialized) return\n \n const config = this.config.getThirdPartyConfig()\n \n // 初始化百度统计\n if (config.baidu && config.baidu.enabled) {\n this.initBaiduAnalytics(config.baidu)\n }\n \n // 初始化友盟统计\n if (config.umeng && config.umeng.enabled) {\n this.initUmengAnalytics(config.umeng)\n }\n \n // 初始化神策数据\n if (config.sensors && config.sensors.enabled) {\n this.initSensorsAnalytics(config.sensors)\n }\n \n // 初始化腾讯云分析\n if (config.tencent && config.tencent.enabled) {\n this.initTencentAnalytics(config.tencent)\n }\n \n // 初始化Google Analytics\n if (config.google && config.google.enabled) {\n this.initGoogleAnalytics(config.google)\n }\n \n // 初始化自定义第三方\n if (config.custom && config.custom.enabled) {\n this.initCustomAnalytics(config.custom)\n }\n \n this.isInitialized = true\n }\n \n // 初始化百度统计\n initBaiduAnalytics(config) {\n try {\n if (window._hmt) {\n this.integratedSDKs.baidu = {\n name: 'baidu',\n instance: window._hmt,\n config: config\n }\n \n // 设置百度统计配置\n if (config.siteId) {\n window._hmt.push(['_setAccount', config.siteId])\n }\n \n if (config.autoPageview !== false) {\n window._hmt.push(['_trackPageview'])\n }\n \n console.log('百度统计集成成功')\n } else {\n console.warn('百度统计未加载,请检查脚本是否正确引入')\n }\n } catch (error) {\n console.error('百度统计集成失败:', error)\n }\n }\n \n // 初始化友盟统计\n initUmengAnalytics(config) {\n try {\n if (window._um) {\n this.integratedSDKs.umeng = {\n name: 'umeng',\n instance: window._um,\n config: config\n }\n \n // 设置友盟统计配置\n if (config.siteId) {\n window._um.push(['setAccount', config.siteId])\n }\n \n if (config.autoPageview !== false) {\n window._um.push(['trackPageview'])\n }\n \n console.log('友盟统计集成成功')\n } else {\n console.warn('友盟统计未加载,请检查脚本是否正确引入')\n }\n } catch (error) {\n console.error('友盟统计集成失败:', error)\n }\n }\n \n // 初始化神策数据\n initSensorsAnalytics(config) {\n try {\n if (window.sensors) {\n this.integratedSDKs.sensors = {\n name: 'sensors',\n instance: window.sensors,\n config: config\n }\n \n // 设置神策数据配置\n if (config.serverUrl) {\n window.sensors.setServerUrl(config.serverUrl)\n }\n \n if (config.siteId) {\n window.sensors.setSiteId(config.siteId)\n }\n \n if (config.autoPageview !== false) {\n window.sensors.trackPageview()\n }\n \n console.log('神策数据集成成功')\n } else {\n console.warn('神策数据未加载,请检查脚本是否正确引入')\n }\n } catch (error) {\n console.error('神策数据集成失败:', error)\n }\n }\n \n // 初始化腾讯云分析\n initTencentAnalytics(config) {\n try {\n if (window.MTA) {\n this.integratedSDKs.tencent = {\n name: 'tencent',\n instance: window.MTA,\n config: config\n }\n \n // 设置腾讯云分析配置\n if (config.appId) {\n window.MTA.setAppId(config.appId)\n }\n \n if (config.autoPageview !== false) {\n window.MTA.trackPageview()\n }\n \n console.log('腾讯云分析集成成功')\n } else {\n console.warn('腾讯云分析未加载,请检查脚本是否正确引入')\n }\n } catch (error) {\n console.error('腾讯云分析集成失败:', error)\n }\n }\n \n // 初始化Google Analytics\n initGoogleAnalytics(config) {\n try {\n if (window.gtag) {\n this.integratedSDKs.google = {\n name: 'google',\n instance: window.gtag,\n config: config\n }\n \n // 设置Google Analytics配置\n if (config.measurementId) {\n window.gtag('config', config.measurementId, {\n page_title: document.title,\n page_location: window.location.href\n })\n }\n \n console.log('Google Analytics集成成功')\n } else {\n console.warn('Google Analytics未加载,请检查脚本是否正确引入')\n }\n } catch (error) {\n console.error('Google Analytics集成失败:', error)\n }\n }\n \n // 初始化自定义第三方\n initCustomAnalytics(config) {\n try {\n if (typeof config.init === 'function') {\n const instance = config.init(config)\n this.integratedSDKs.custom = {\n name: 'custom',\n instance: instance,\n config: config\n }\n \n console.log('自定义第三方集成成功')\n } else {\n console.warn('自定义第三方配置缺少init函数')\n }\n } catch (error) {\n console.error('自定义第三方集成失败:', error)\n }\n }\n \n // 上报事件到所有集成的第三方SDK\n reportEvent(eventName, eventData = {}) {\n Object.values(this.integratedSDKs).forEach(sdk => {\n try {\n this.reportToSDK(sdk, eventName, eventData)\n } catch (error) {\n console.error(`上报事件到${sdk.name}失败:`, error)\n }\n })\n }\n \n // 上报页面浏览到所有集成的第三方SDK\n reportPageView(pageData = {}) {\n Object.values(this.integratedSDKs).forEach(sdk => {\n try {\n this.reportPageViewToSDK(sdk, pageData)\n } catch (error) {\n console.error(`上报页面浏览到${sdk.name}失败:`, error)\n }\n })\n }\n \n // 上报用户信息到所有集成的第三方SDK\n reportUser(userData = {}) {\n Object.values(this.integratedSDKs).forEach(sdk => {\n try {\n this.reportUserToSDK(sdk, userData)\n } catch (error) {\n console.error(`上报用户信息到${sdk.name}失败:`, error)\n }\n })\n }\n \n // 上报性能指标到所有集成的第三方SDK\n reportPerformance(performanceData = {}) {\n Object.values(this.integratedSDKs).forEach(sdk => {\n try {\n this.reportPerformanceToSDK(sdk, performanceData)\n } catch (error) {\n console.error(`上报性能指标到${sdk.name}失败:`, error)\n }\n })\n }\n \n // 上报事件到特定SDK\n reportToSDK(sdk, eventName, eventData) {\n switch (sdk.name) {\n case 'baidu':\n if (sdk.instance && sdk.instance.push) {\n sdk.instance.push(['_trackEvent', eventName, JSON.stringify(eventData)])\n }\n break\n \n case 'umeng':\n if (sdk.instance && sdk.instance.push) {\n sdk.instance.push(['track', eventName, eventData])\n }\n break\n \n case 'sensors':\n if (sdk.instance && sdk.instance.track) {\n sdk.instance.track(eventName, eventData)\n }\n break\n \n case 'tencent':\n if (sdk.instance && sdk.instance.Event && sdk.instance.Event.stat) {\n sdk.instance.Event.stat(eventName, eventData)\n }\n break\n \n case 'google':\n if (sdk.instance && typeof sdk.instance === 'function') {\n sdk.instance('event', eventName, eventData)\n }\n break\n \n case 'custom':\n if (sdk.instance && typeof sdk.instance.track === 'function') {\n sdk.instance.track(eventName, eventData)\n }\n break\n \n default:\n console.warn(`未知的SDK类型: ${sdk.name}`)\n }\n }\n \n // 上报页面浏览到特定SDK\n reportPageViewToSDK(sdk, pageData) {\n switch (sdk.name) {\n case 'baidu':\n if (sdk.instance && sdk.instance.push) {\n sdk.instance.push(['_trackPageview', pageData.url || window.location.href])\n }\n break\n \n case 'umeng':\n if (sdk.instance && sdk.instance.push) {\n sdk.instance.push(['trackPageview', pageData.url || window.location.href])\n }\n break\n \n case 'sensors':\n if (sdk.instance && sdk.instance.trackPageview) {\n sdk.instance.trackPageview(pageData)\n }\n break\n \n case 'tencent':\n if (sdk.instance && sdk.instance.trackPageview) {\n sdk.instance.trackPageview(pageData.url || window.location.href)\n }\n break\n \n case 'google':\n if (sdk.instance && typeof sdk.instance === 'function') {\n sdk.instance('config', sdk.config.measurementId, {\n page_title: pageData.title || document.title,\n page_location: pageData.url || window.location.href\n })\n }\n break\n \n case 'custom':\n if (sdk.instance && typeof sdk.instance.trackPageview === 'function') {\n sdk.instance.trackPageview(pageData)\n }\n break\n \n default:\n console.warn(`未知的SDK类型: ${sdk.name}`)\n }\n }\n \n // 上报用户信息到特定SDK\n reportUserToSDK(sdk, userData) {\n switch (sdk.name) {\n case 'baidu':\n if (sdk.instance && sdk.instance.push) {\n sdk.instance.push(['_setUserTag', 'userId', userData.userId])\n sdk.instance.push(['_setUserTag', 'userType', userData.userType])\n }\n break\n \n case 'umeng':\n if (sdk.instance && sdk.instance.push) {\n sdk.instance.push(['setUserTag', 'userId', userData.userId])\n sdk.instance.push(['setUserTag', 'userType', userData.userType])\n }\n break\n \n case 'sensors':\n if (sdk.instance && sdk.instance.setProfile) {\n sdk.instance.setProfile(userData)\n }\n break\n \n case 'tencent':\n if (sdk.instance && sdk.instance.setUserInfo) {\n sdk.instance.setUserInfo(userData)\n }\n break\n \n case 'google':\n if (sdk.instance && typeof sdk.instance === 'function') {\n sdk.instance('set', 'user_id', userData.userId)\n }\n break\n \n case 'custom':\n if (sdk.instance && typeof sdk.instance.setUser === 'function') {\n sdk.instance.setUser(userData)\n }\n break\n \n default:\n console.warn(`未知的SDK类型: ${sdk.name}`)\n }\n }\n \n // 上报性能指标到特定SDK\n reportPerformanceToSDK(sdk, performanceData) {\n switch (sdk.name) {\n case 'baidu':\n if (sdk.instance && sdk.instance.push) {\n sdk.instance.push(['_trackEvent', 'performance', JSON.stringify(performanceData)])\n }\n break\n \n case 'umeng':\n if (sdk.instance && sdk.instance.push) {\n sdk.instance.push(['track', 'performance', performanceData])\n }\n break\n \n case 'sensors':\n if (sdk.instance && sdk.instance.track) {\n sdk.instance.track('performance', performanceData)\n }\n break\n \n case 'tencent':\n if (sdk.instance && sdk.instance.Event && sdk.instance.Event.stat) {\n sdk.instance.Event.stat('performance', performanceData)\n }\n break\n \n case 'google':\n if (sdk.instance && typeof sdk.instance === 'function') {\n sdk.instance('event', 'performance', performanceData)\n }\n break\n \n case 'custom':\n if (sdk.instance && typeof sdk.instance.trackPerformance === 'function') {\n sdk.instance.trackPerformance(performanceData)\n }\n break\n \n default:\n console.warn(`未知的SDK类型: ${sdk.name}`)\n }\n }\n \n // 检查SDK是否已集成\n isSDKIntegrated(sdkName) {\n return !!this.integratedSDKs[sdkName]\n }\n \n // 获取已集成的SDK列表\n getIntegratedSDKs() {\n return Object.keys(this.integratedSDKs)\n }\n \n // 获取特定SDK的实例\n getSDKInstance(sdkName) {\n return this.integratedSDKs[sdkName]?.instance || null\n }\n \n // 销毁所有集成的SDK\n destroy() {\n Object.values(this.integratedSDKs).forEach(sdk => {\n try {\n if (sdk.instance && typeof sdk.instance.destroy === 'function') {\n sdk.instance.destroy()\n }\n } catch (error) {\n console.error(`销毁${sdk.name}失败:`, error)\n }\n })\n \n this.integratedSDKs = {}\n this.isInitialized = false\n }\n} ","/* eslint-disable */\n// 配置管理器\nimport { getSessionId } from \"./utils\"\nexport class ConfigManager {\n constructor(options = {}) {\n this.config = {\n // 基础配置\n appId: options.appId || '',\n appVersion: options.appVersion || '1.0.0',\n environment: options.environment || 'production',\n debugSwitch: options.debugSwitch === true,\n customerId: options.customerId || '',\n userId: options.userId || '',\n deviceNo: options.deviceNo || '',\n deviceId: options.userId || '',\n uiVersion: options.uiVersion || '',\n sessionId: getSessionId(),\n \n // 上报配置\n reportUrl: options.reportUrl || '',\n reportInterval: options.reportInterval || 5000, // 批量上报间隔\n maxQueueSize: options.maxQueueSize || 100, // 最大队列大小\n \n // 错误追踪配置\n enableErrorTracking: options.enableErrorTracking !== false,\n enableUnhandledRejection: options.enableUnhandledRejection !== false,\n enableResourceError: options.enableResourceError !== false,\n \n // 事件追踪配置\n enableEventTracking: options.enableEventTracking !== false, // 暂时没用到\n enableClickTracking: options.enableClickTracking !== false, // 自动事件追踪\n enablePageViewTracking: options.enablePageViewTracking !== false, // 页面浏览追踪\n \n // 性能监控配置\n enablePerformanceTracking: options.enablePerformanceTracking !== false,\n enableResourceTracking: options.enableResourceTracking !== false,\n enableApiTracking: options.enableApiTracking !== false,\n enableInteractionTracking: options.enableInteractionTracking !== false,\n enableRouteTracking: options.enableRouteTracking !== false, // 路由追踪\n \n // 用户行为追踪配置\n enableUserInteractionTracking: options.enableUserInteractionTracking !== false,\n enableFormTracking: options.enableFormTracking !== false,\n enableScrollTracking: options.enableScrollTracking !== false,\n enableMouseTracking: options.enableMouseTracking !== false,\n enableKeyboardTracking: options.enableKeyboardTracking !== false,\n \n // 第三方埋点配置\n thirdPartyConfig: options.thirdPartyConfig || {},\n \n // 用户信息\n user: options.user || null,\n \n // 自定义上报函数\n customReport: options.customReport || null\n }\n\n this.user = null\n }\n \n // 更新配置\n updateConfig(newConfig) {\n this.config = { ...this.config, ...newConfig }\n }\n \n // 设置用户信息\n setUser(userInfo) {\n this.user = userInfo\n }\n \n // 获取配置\n getConfig() {\n return this.config\n }\n \n // 获取用户信息\n getUser() {\n return this.user\n }\n \n // 获取上报URL\n getReportUrl() {\n return this.config.reportUrl\n }\n \n // 获取第三方配置\n getThirdPartyConfig() {\n return this.config.thirdPartyConfig\n }\n \n // 检查是否启用错误追踪\n isErrorTrackingEnabled() {\n return this.config.enableErrorTracking\n }\n \n // 检查是否启用事件追踪\n isEventTrackingEnabled() {\n return this.config.enableEventTracking\n }\n} ","/* eslint-disable */\n// 前端 SDK 主入口\nimport { ErrorTracker } from './errorTracker'\nimport { EventTracker } from './eventTracker'\nimport { PerformanceTracker } from './performanceTracker'\nimport { UserBehaviorTracker } from './userBehaviorTracker'\nimport { ExposureTracker } from './exposureTracker'\nimport { ThirdPartyIntegrator } from './thirdPartyIntegrator'\nimport { ConfigManager } from './configManager'\nimport axiosInstance from './axios-config.js'\nimport { performanceNow } from './utils'\n\n// 导出工具函数供外部使用\nexport { performanceNow }\n\n// 将axios挂载到全局,确保性能监控能正常工作\nif (typeof window !== 'undefined' && !window?.axios) {\n window.axios = axiosInstance\n}\n\nclass FrontendSDK {\n constructor(options = {}) {\n this.config = new ConfigManager(options)\n this.errorTracker = new ErrorTracker(this.config)\n this.eventTracker = new EventTracker(this.config)\n this.performanceTracker = new PerformanceTracker(this.config, this.eventTracker)\n this.userBehaviorTracker = new UserBehaviorTracker(this.config)\n // 将 eventTracker 传递给 exposureTracker,以便获取页面信息\n this.exposureTracker = new ExposureTracker(this.config, this.eventTracker)\n this.thirdPartyIntegrator = new ThirdPartyIntegrator(this.config)\n \n this.init()\n }\n \n init() {\n // 初始化错误追踪\n // this.errorTracker.init() // 第一期先不做\n \n // 初始化事件追踪\n this.eventTracker.init()\n \n // 初始化性能监控\n // this.performanceTracker.init() 第一期先不做\n \n // 初始化用户行为追踪\n // this.userBehaviorTracker.init() 第一期先不做\n \n // 初始化曝光追踪\n this.exposureTracker.init()\n \n // 初始化第三方SDK集成\n this.thirdPartyIntegrator.init()\n \n // 设置页面卸载监听,确保在浏览器退出时上报所有待上报的数据\n this.setupPageUnloadHandler()\n \n console.log('Frontend SDK 初始化完成')\n }\n \n // 设置页面卸载处理器\n // 确保在浏览器退出时,所有待上报的数据都能通过 sendBeacon 发送\n setupPageUnloadHandler() {\n // 标记是否已经处理过卸载,避免重复上报\n let isUnloading = false\n \n // 统一的页面卸载处理方法\n const handlePageUnload = () => {\n // 避免重复处理\n if (isUnloading) return\n isUnloading = true\n \n // 刷新所有待上报的队列\n // 这些方法会调用 reporter.report,而 reporter 会优先使用 sendBeacon\n // sendBeacon 的优势就是在页面卸载时仍能可靠发送数据\n try {\n // 刷新事件队列\n if (this.eventTracker && typeof this.eventTracker.flushEventQueue === 'function') {\n this.eventTracker.flushEventQueue()\n }\n \n // 刷新曝光队列\n if (this.exposureTracker && typeof this.exposureTracker.flushExposureQueue === 'function') {\n this.exposureTracker.flushExposureQueue()\n }\n \n // 刷新错误队列\n if (this.errorTracker && typeof this.errorTracker.flushErrorQueue === 'function') {\n this.errorTracker.flushErrorQueue()\n }\n \n // 刷新性能队列\n if (this.performanceTracker && typeof this.performanceTracker.flushPerformanceQueue === 'function') {\n this.performanceTracker.flushPerformanceQueue()\n }\n \n // 刷新用户行为队列\n if (this.userBehaviorTracker && typeof this.userBehaviorTracker.flushBehaviorQueue === 'function') {\n this.userBehaviorTracker.flushBehaviorQueue()\n }\n \n if (this.config.getConfig().debugSwitch) {\n console.log('页面卸载:已刷新所有待上报队列,使用 sendBeacon 发送')\n }\n } catch (error) {\n console.error('页面卸载时刷新队列失败:', error)\n }\n }\n \n // 监听 URL 变化,检测跳转到外部页面(仅用定时器轮询,以域名变化判定为外部)\n this.setupUrlChangeMonitoring(handlePageUnload)\n \n // 使用 pagehide 事件(更可靠,在移动端和某些场景下比 beforeunload 更可靠)\n // pagehide 会在页面卸载时触发,包括:\n // - 用户关闭标签页/窗口\n // - 用户导航到其他页面\n // - 移动端浏览器切换到后台\n window.addEventListener('pagehide', (event) => {\n // event.persisted 为 true 表示页面被缓存(如 iOS Safari 的页面缓存)\n // 即使被缓存,我们也应该上报数据,因为用户可能不会再回来\n handlePageUnload()\n }, { capture: true })\n \n // 使用 beforeunload 作为补充(在某些浏览器中更早触发)\n // 注意:beforeunload 在某些场景下可能不触发(如移动端、SPA 路由跳转等)\n window.addEventListener('beforeunload', () => {\n handlePageUnload()\n }, { capture: true })\n }\n \n // 监听 URL 变化,检测跳转到外部页面\n // 仅使用定时器轮询:实现简单、兼容性好,对微信 H5 中 location.href 跳转最可靠\n setupUrlChangeMonitoring(handlePageUnload) {\n const self = this\n let lastHref = location.href\n let lastOrigin = location.origin\n let isMonitoring = true\n let urlCheckInterval = null\n \n const stopMonitoring = () => {\n if (!isMonitoring) return\n isMonitoring = false\n if (urlCheckInterval) {\n clearInterval(urlCheckInterval)\n urlCheckInterval = null\n }\n }\n \n urlCheckInterval = setInterval(() => {\n if (!isMonitoring) return\n \n try {\n const currentHref = location.href\n const currentOrigin = location.origin\n \n if (currentHref !== lastHref) {\n if (currentOrigin !== lastOrigin) {\n if (self.config.getConfig().debugSwitch) {\n console.log('检测到跳转到外部页面(域名变化),立即发送埋点数据:', currentHref)\n }\n stopMonitoring() // 立即清除定时器,避免泄漏和无效轮询\n handlePageUnload()\n }\n lastHref = currentHref\n lastOrigin = currentOrigin\n }\n } catch (error) {\n if (self.config.getConfig().debugSwitch) {\n console.warn('URL 监控异常:', error)\n }\n stopMonitoring()\n }\n }, 30)\n \n // 供 destroy() 调用,确保定时器被清除、不泄漏\n this._urlMonitoringCleanup = stopMonitoring\n }\n \n // 手动上报错误\n reportError(error, context = {}) {\n this.errorTracker.reportError(error, context)\n }\n \n // 手动上报事件\n reportEvent(eventName, data = {}) {\n this.eventTracker.reportEvent(eventName, data)\n }\n reportCustomEvent(eventName, data = {}) {\n this.eventTracker.reportCustomEvent(eventName, data)\n } \n \n\n // ========== 页面信息相关方法 ==========\n \n \n // 获取当前页面停留时间(事件追踪器)\n getCurrentPageStayTime() {\n return this.eventTracker.getCurrentPageStayTime()\n }\n \n // 获取页面历史记录\n getPageHistory() {\n return this.eventTracker.pageHistory || []\n }\n \n // 手动上报性能指标\n reportPerformance(metrics = {}) {\n this.performanceTracker.reportPerformance(metrics)\n }\n \n // 手动上报用户行为\n reportBehavior(eventName, data = {}) {\n this.userBehaviorTracker.reportCustomBehavior(eventName, data)\n }\n \n // 设置用户信息\n setUser(userInfo) {\n this.config.setUser(userInfo)\n // 同步到第三方SDK\n this.thirdPartyIntegrator.reportUser(userInfo)\n }\n \n // 设置自定义配置\n setConfig(config) {\n this.config.updateConfig(config)\n }\n \n // 获取性能指标\n getPerformanceMetrics() {\n return this.performanceTracker.getCurrentMetrics()\n }\n \n // 获取用户行为数据\n getBehaviorData() {\n return this.userBehaviorTracker.getCurrentBehaviors()\n }\n \n // 获取会话ID\n getSessionId() {\n return this.userBehaviorTracker.getSessionId()\n }\n \n // 检查第三方SDK是否已集成\n isThirdPartySDKIntegrated(sdkName) {\n return this.thirdPartyIntegrator.isSDKIntegrated(sdkName)\n }\n \n // 获取已集成的第三方SDK列表\n getIntegratedThirdPartySDKs() {\n return this.thirdPartyIntegrator.getIntegratedSDKs()\n }\n \n // 设置Vue Router监控(用于监控路由跳转的页面浏览时间)\n setupVueRouterMonitoring(router) {\n if (!router) {\n console.warn('Vue Router 实例未提供')\n return\n }\n if (this.config.config.enableRouteTracking) {\n this.eventTracker.setupVueRouterMonitoring(router)\n // this.performanceTracker.setupVueRouterMonitoring(router)\n }\n }\n \n // 获取当前路由信息\n getCurrentRoute() {\n return this.eventTracker.getCurrentRoute()\n }\n \n // 获取上一个页面信息(包含停留时间)\n getPreviousPageInfo() {\n return this.eventTracker.getPreviousPageInfo()\n }\n \n // 获取当前路由停留时间\n getCurrentRouteStayTime() {\n return this.eventTracker.getCurrentRouteStayTime()\n }\n \n // ========== 曝光追踪相关方法 ==========\n \n // 追踪单个商品元素\n // 使用方式:\n // tracker.trackProduct(element, { productId: '123', productName: '商品名称' })\n trackProduct(element, options = {}) {\n return this.exposureTracker.trackProduct(element, options)\n }\n \n // 批量追踪商品元素\n // 使用方式:\n // tracker.trackProducts([element1, element2, ...], { productId: '123' })\n // 或者\n // tracker.trackProducts('.product-item', { productId: '123' })\n trackProducts(selectorOrElements, options = {}) {\n return this.exposureTracker.trackProducts(selectorOrElements, options)\n }\n \n // 取消追踪商品元素\n untrackProduct(element) {\n return this.exposureTracker.untrackProduct(element)\n }\n \n // 取消追踪所有商品元素\n untrackAllProducts() {\n return this.exposureTracker.untrackAll()\n }\n \n // 手动上报曝光事件\n reportExposure(productInfo = {}) {\n return this.exposureTracker.reportExposure(productInfo)\n }\n \n // 获取已追踪的元素列表\n getTrackedProducts() {\n return this.exposureTracker.getTrackedElements()\n }\n \n // 获取曝光队列\n getExposureQueue() {\n return this.exposureTracker.getExposureQueue()\n }\n \n // 刷新曝光队列(立即上报)\n flushExposureQueue() {\n return this.exposureTracker.flushExposureQueue()\n }\n \n // 销毁 SDK\n destroy() {\n // 清理 URL 监控\n if (this._urlMonitoringCleanup && typeof this._urlMonitoringCleanup === 'function') {\n this._urlMonitoringCleanup()\n }\n \n this.errorTracker.destroy()\n this.eventTracker.destroy()\n this.performanceTracker.destroy()\n this.userBehaviorTracker.destroy()\n this.exposureTracker.destroy()\n this.thirdPartyIntegrator.destroy()\n console.log('Frontend SDK 已销毁')\n }\n}\n\nexport default FrontendSDK "],"names":["bind","fn","thisArg","apply","arguments","cache","toString","Object","prototype","getPrototypeOf","iterator","Symbol","toStringTag","kindOf","create","thing","str","call","slice","toLowerCase","kindOfTest","type","typeOfTest","_typeof","isArray","Array","isUndefined","isBuffer","val","constructor","isFunction","isArrayBuffer","isString","isNumber","isObject","isPlainObject","isDate","isFile","isBlob","isFileList","isURLSearchParams","_map2","_slicedToArray","map","isReadableStream","isRequest","isResponse","isHeaders","forEach","obj","i","l","_ref$allOwnKeys","length","undefined","allOwnKeys","key","keys","getOwnPropertyNames","len","findKey","_key","_global","globalThis","self","window","global","isContextDefined","context","TypedArray","isTypedArray","Uint8Array","isHTMLForm","hasOwnProperty","prop","isRegExp","reduceDescriptors","reducer","descriptors","getOwnPropertyDescriptors","reducedDescriptors","descriptor","name","ret","defineProperties","setImmediateSupported","postMessageSupported","token","callbacks","isAsyncFn","_setImmediate","setImmediate","postMessage","concat","Math","random","addEventListener","_ref5","source","data","shift","cb","push","setTimeout","asap","queueMicrotask","process","nextTick","utils$1","isFormData","kind","FormData","append","isArrayBufferView","ArrayBuffer","isView","buffer","isBoolean","isEmptyObject","e","isStream","pipe","merge","caseless","this","result","assignValue","targetKey","extend","a","b","trim","replace","stripBOM","content","charCodeAt","inherits","superConstructor","props","defineProperty","value","assign","toFlatObject","sourceObj","destObj","filter","propFilter","merged","endsWith","searchString","position","String","lastIndex","indexOf","toArray","arr","forEachEntry","_iterator","next","done","pair","matchAll","regExp","matches","exec","hasOwnProp","freezeMethods","enumerable","writable","set","Error","toObjectSet","arrayOrString","delimiter","define","split","toCamelCase","m","p1","p2","toUpperCase","noop","toFiniteNumber","defaultValue","Number","isFinite","isSpecCompliantForm","toJSONObject","stack","visit","target","reducedValue","isThenable","then","catch","isIterable","AxiosError","message","code","config","request","response","captureStackTrace","status","utils","toJSON","description","number","fileName","lineNumber","columnNumber","from","error","customProps","axiosError","cause","isVisitable","removeBrackets","renderKey","path","dots","join","predicates","test","toFormData","formData","options","TypeError","metaTokens","indexes","option","visitor","defaultVisitor","useBlob","Blob","convertValue","toISOString","Buffer","JSON","stringify","some","isFlatArray","el","index","exposedHelpers","build","pop","encode","charMap","encodeURIComponent","match","AxiosURLSearchParams","params","_pairs","buildURL","url","_encode","serialize","serializedParams","serializeFn","hashmarkIndex","encoder","InterceptorManager$1","_createClass","InterceptorManager","_classCallCheck","handlers","fulfilled","rejected","synchronous","runWhen","id","h","transitionalDefaults","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","platform$1","isBrowser","classes","URLSearchParams","protocols","hasBrowserEnv","document","_navigator","navigator","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","origin","location","href","_objectSpread","platform","formDataToJSON","buildPath","isNumericKey","isLast","arrayToObject","entries","parsePropPath","defaults","transitional","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","env","rawValue","parser","parse","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","ERR_BAD_RESPONSE","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","Accept","method","defaults$1","ignoreDuplicateOf","$internals","normalizeHeader","header","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","rawHeaders","parsed","line","substring","parseHeaders","dest","_step","_createForOfIteratorHelper","s","n","entry","_toConsumableArray","err","f","tokens","tokensRE","parseTokens","matcher","deleted","deleteHeader","format","normalized","w","char","formatHeader","_this$constructor","_len","targets","asStrings","_ref","_ref2","get","first","computed","_len2","_key2","accessors","defineAccessor","accessorName","methodName","arg1","arg2","arg3","configurable","buildAccessors","accessor","_ref3","mapped","headerValue","AxiosHeaders$1","transformData","fns","normalize","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","resolve","reject","ERR_BAD_REQUEST","floor","progressEventReducer","listener","isDownloadStream","freq","bytesNotified","_speedometer","samplesCount","min","firstSampleTS","bytes","timestamps","head","tail","chunkLength","now","Date","startedAt","bytesCount","passed","round","speedometer","lastArgs","timer","timestamp","threshold","invoke","args","clearTimeout","throttle","loaded","total","lengthComputable","progressBytes","rate","_defineProperty","progress","estimated","event","progressEventDecorator","throttled","asyncDecorator","isMSIE","URL","protocol","host","port","userAgent","write","expires","domain","secure","cookie","toGMTString","read","RegExp","decodeURIComponent","remove","buildFullPath","baseURL","requestedURL","allowAbsoluteUrls","isRelativeUrl","relativeURL","combineURLs","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","configValue","res","resolveConfig","newConfig","auth","btoa","username","password","unescape","Boolean","_arrayLikeToArray","isURLSameOrigin","xsrfValue","cookies","xhrAdapter","XMLHttpRequest","Promise","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","_config","requestData","requestHeaders","unsubscribe","signal","removeEventListener","onloadend","responseHeaders","getAllResponseHeaders","responseText","statusText","open","onreadystatechange","readyState","responseURL","onabort","ECONNABORTED","onerror","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","setRequestHeader","_progressEventReducer2","upload","_progressEventReducer4","cancel","abort","subscribe","aborted","send","composeSignals$1","signals","controller","AbortController","reason","streamChunk","_regenerator","chunk","chunkSize","pos","end","_context","byteLength","readBytes","_wrapAsyncGenerator","_callee","iterable","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_t","_context2","p","_asyncIterator","readStream","_awaitAsyncGenerator","v","d","_regeneratorValues","_asyncGeneratorDelegate","return","_x","_x2","_callee2","stream","reader","_yield$_awaitAsyncGen","_context3","asyncIterator","getReader","_x3","trackStream","onProgress","onFinish","_onFinish","ReadableStream","pull","_asyncToGenerator","_callee3","_yield$iterator$next","_done","loadedBytes","_t2","_context4","close","enqueue","highWaterMark","isFetchSupported","fetch","Request","Response","isReadableStreamSupported","encodeText","TextEncoder","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","body","duplex","has","supportsResponseStream","resolvers","_","ERR_NOT_SUPPORT","getBodyLength","_request","size","resolveBodyLength","getContentLength","_x4","knownAdapters","http","xhr","_ref4","_callee4","_resolveConfig","_resolveConfig$withCr","fetchOptions","composedSignal","requestContentLength","contentTypeHeader","_progressEventDecorat","_progressEventDecorat2","flush","isCredentialsSupported","isStreamResponse","responseContentLength","_ref6","_onProgress","_flush","responseData","_t3","_t4","_t5","composeSignals","toAbortSignal","credentials","_x5","renderReason","isResolvedHandle","adapters","nameOrAdapter","rejectedReasons","reasons","state","throwIfCancellationRequested","throwIfRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","validator","version","formatMessage","opt","desc","opts","ERR_DEPRECATED","console","warn","spelling","correctSpelling","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","_request2","configOrUrl","dummy","boolean","function","baseUrl","withXsrfToken","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","unshift","promise","responseInterceptorChain","chain","onFulfilled","onRejected","generateHTTPMethod","isForm","Axios$1","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","splice","_this","c","CancelToken$1","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","HttpStatusCode$1","axios","createInstance","defaultConfig","instance","Cancel","all","promises","spread","callback","isAxiosError","payload","formToJSON","getAdapter","default","axios$1","axiosInstance","use","USER_AGENT","EMPTY","TYPEOF","BROWSER","CPU","DEVICE","ENGINE","OS","RESULT","NAME","TYPE","VENDOR","ARCHITECTURE","MAJOR","MODEL","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","XR","EMBEDDED","INAPP","BRANDS","FORMFACTORS","FULLVERLIST","PLATFORM","PLATFORMVER","BITNESS","CH","CH_FULL_VER_LIST","CH_ARCH","CH_BITNESS","CH_FORM_FACTORS","CH_MOBILE","CH_MODEL","CH_PLATFORM","CH_PLATFORM_VER","CH_ALL_VALUES","AMAZON","APPLE","ASUS","BLACKBERRY","GOOGLE","HUAWEI","LENOVO","HONOR","LG","MICROSOFT","MOTOROLA","NVIDIA","ONEPLUS","OPPO","SAMSUNG","SHARP","SONY","XIAOMI","ZEBRA","CHROME","CHROMIUM","CHROMECAST","EDGE","FIREFOX","OPERA","FACEBOOK","SOGOU","PREFIX_MOBILE","SUFFIX_BROWSER","WINDOWS","NAVIGATOR","NAVIGATOR_UADATA","userAgentData","enumerize","enums","str1","str2","lowerize","isExtensions","deep","itemListToArray","strip","brand","majorize","setProps","propName","pattern","stripQuotes","rgxMapper","ua","arrays","j","k","q","regex","strMapper","windowsVersionMap","ME","XP","Vista","NT","formFactorsMap","embedded","mobile","tablet","smarttv","wearable","xr","browserHintsMap","Chrome","Edge","Yandex","defaultRegexes","browser","cpu","device","OnePlus","engine","os","defaultProps","init","isIgnore","isIgnoreRgx","createIData","item","itemType","init_props","is_ignoreProps","is_ignoreRgx","toString_props","IData","getItem","withClientHints","getHighEntropyValues","setCH","UACHData","parseCH","withFeatureCheck","detectFeature","is","strToCheck","that","IDataResolve","resolveData","uach","isHttpUACH","UAItem","rgxMap","uaCH","ch","brave","isBrave","standalone","maxTouchPoints","detect","parseUA","realVersion","parseInt","prevName","brands","brandName","brandVersion","archName","reParse","vendor","ff","idx","osName","osVersion","UAParser","extensions","kv","getResult","httpUACH","regexMap","defaultRgx","mergedRgx","extraRgx","createItemFunc","getBrowser","getCPU","getDevice","getEngine","getOS","setUA","isEmpty","isNull","performanceNow","performance","pad","num","placeholder","sequenceCounter","lastTimestamp","instanceId","getSessionId","hexTimestamp","timestampMid12","timestampLow12","timestampTop8","guid","uniqueIdCounter","generateUniqueId","timestamp36","padStart","validateUseragent","WeixinJSBridge","isWeinxin","isAlipayAgent","extractHashPath","urlString","hashIndex","pathWithoutQuery","includes","getPageKey","page","uiVersion","basePage","parts","_window$location$href","basePageLower","login","buyPkgListNew","cardDetailInfo","flowSettle","chargeMoney","payOrderDetail","alipayOrderDetail","detectPlatform","parseUserAgent","getOsVersion","_result$os3","iosMatch","androidMatch","Reporter","isReporting","_cachedSessionId","_sessionIdFromStorage","_report","reportData","formatReportData","getConfig","customReport","defaultReport","debugSwitch","screen","width","height","availWidth","availHeight","colorDepth","pixelDepth","viewport","innerWidth","innerHeight","connection","effectiveType","downlink","rtt","memory","usedJSHeapSize","totalJSHeapSize","jsHeapSizeLimit","sessionId","sessionStorage","traceSdkInfoStr","traceSdkInfo","updateConfig","log","_result$os","_result$os2","baseData","channel","uiVer","osType","screenWidth","screenHeight","windowInnerWidth","windowInnerHeight","netType","tags","customerId","deviceId","deviceNo","userId","temp","mergedTags","_defaultReport","reportUrl","thirdPartyConfig","getReportUrl","getThirdPartyConfig","reportToBackend","reportToThirdParty","_reportToBackend","success","sendBeacon","isObjectOverSizeLimit","reportViaAxios","_x6","_reportViaAxios","post","_x7","_x8","_reportToThirdParty","_callee5","_context5","baidu","_hmt","reportToBaidu","umeng","_um","reportToUmeng","sensors","reportToSensors","tencent","MTA","reportToTencent","custom","reportToCustom","allSettled","_x9","_x0","_reportToBaidu","_callee6","_context6","_x1","_x10","_reportToUmeng","_callee7","_context7","_x11","_x12","_reportToSensors","_callee8","_context8","track","_x13","_x14","_reportToTencent","_callee9","_context9","Event","stat","_x15","_x16","_reportToCustom","_callee0","_context0","report","_x17","_x18","object","limitInKB","serializedObject","ErrorTracker","reporter","errorQueue","isInitialized","reportTimer","errorCache","Map","errorCacheTimeout","maxCacheSize","errorFingerprint","createErrorFingerprint","errorTimeout","resourceErrorTimeout","lastResourceError","fingerprint","cleanupErrorCache","firstKey","delete","_step$value","enableErrorTracking","enableResourceError","setupErrorListener","enableUnhandledRejection","setupUnhandledRejectionListener","reportInterval","setupPeriodicReport","interval","clearInterval","setInterval","flushErrorQueue","_this2","handleResourceError","handleJavaScriptError","_this3","_event$error","handleError","filename","lineno","colno","_this4","resourceKey","tagName","src","_this5","rejectionTimeout","lastRejection","_event$reason","_event$reason2","rejectionKey","_event$reason3","isDuplicateError","parsedStackInfo","parseStack","errorInfo","functionName","stackFrames","maxQueueSize","errMessage","errStack","rChromeCallStack1","rChromeCallStack2","rMozillaCallStack","callStackStr","startsWith","lines","_step2","stackLines","_iterator2","frameInfo","firstFrame","parseError","_this$config","EventTracker","eventQueue","clickListener","pageViewListener","originalPushState","originalReplaceState","pageHistory","currentPage","currentPageStartTime","previousPage","previousPageStayTime","currentRoute","routeStartTime","vueRouter","title","enterTime","referrer","enableClickTracking","setupClickTracking","enablePageViewTracking","setupPageViewTracking","_target$textContent","clickData","element","className","text","textContent","x","clientX","y","clientY","handleEvent","pageViewConfig","pageViewTracking","lastPageViewUrl","lastPageViewTime","PAGEVIEW_DEBOUNCE","debounce","currentUrl","currentTime","handlePageChange","uuid","pageKey","pageUri","eventType","listenPopstate","listenHistoryAPI","history","pushState","replaceState","vueRouterMode","flushEventQueue","newUrl","router","_this6","beforeEach","to","handleRouteLeave","afterEach","handleRouteEnter","beforeResolve","calculateRouteStayTime","stayTime","recordRouteStayTime","recordRouteEnter","route","_this$config2","_this$config3","eventName","_previousPageInfo$pre","previousPageInfo","getPreviousPageInfo","eventInfo","refer","duration","_this7","actionKey","PerformanceTracker","eventTracker","pageStartTime","performanceQueue","thirdPartySDKs","routeHistory","metrics","fcp","lcp","fid","cls","ttfb","domLoad","windowLoad","resourceLoad","apiRequests","pageStayTime","previousPageUrl","currentPageUrl","enablePerformanceTracking","setupPerformanceMonitoring","enableResourceTracking","setupResourceMonitoring","enableApiTracking","setupApiMonitoring","enableInteractionTracking","setupInteractionMonitoring","initThirdPartySDKs","flushPerformanceQueue","routeInfo","fullPath","leaveTime","query","meta","reportRouteStayTime","routeData","user","getUser","getDeviceInfo","stats","totalRoutes","averageStayTime","routesByPath","totalStayTime","count","pathStats","captureDOMLoadTime","captureWindowLoadTime","captureWebVitals","reportPerformanceMetrics","observer","PerformanceObserver","list","getEntries","entryType","handleResourceLoad","observe","entryTypes","_startTime","handleApiRequest","firstInputTime","firstInputDelay","handleFirstInput","_this7$config","startTime","buffered","_step3","_iterator3","clsValue","_step4","_iterator4","hadRecentInput","resourceInfo","initiatorType","transferSize","reportSlowResource","_previousPageInfo","_previousPageInfo2","apiInfo","interfaceUrl","interfaceDuration","calculatePageStayTime","reportPageStayTime","_this8","_previousPageInfo3","_previousPageInfo4","performanceData","stayData","UserBehaviorTracker","behaviorQueue","generateSessionId","scrollDepth","mouseMovements","keyStrokes","formInteractions","timeTracker","behaviors","pageViews","clicks","scrolls","formSubmissions","navigation","timeOnPage","enableUserInteractionTracking","setupUserInteractionTracking","enableFormTracking","setupFormTracking","enableScrollTracking","setupScrollTracking","enableMouseTracking","setupMouseTracking","enableKeyboardTracking","setupKeyboardTracking","setupTimeTracking","flushBehaviorQueue","trackClick","trackDoubleClick","trackRightClick","trackTouch","trackFormSubmission","trackFormFieldChange","trackFormFieldFocus","trackFormFieldBlur","scrollTimeout","scrollTop","pageYOffset","documentElement","scrollHeight","clientHeight","trackScroll","passive","mouseTimeout","trackMouseMovement","trackKeyStroke","reportTimeOnPage","referrerData","extractDomain","reportBehavior","pageViewData","_event$target$textCon","pageX","pageY","doubleClickData","rightClickData","touchData","touches","touch","identifier","form","action","fields","getFormFields","fieldData","field","focusData","blurData","depth","scrollData","movements","mouseData","keyData","ctrlKey","shiftKey","altKey","metaKey","behaviorData","appId","appVersion","customData","formElements","elements","hostname","substr","ExposureTracker","trackedElements","exposureQueue","scrollTimer","useFallback","lastReportTime","debounceTime","defaultOptions","rootMargin","scrollThrottle","isIntersectionObserverSupported","createObserver","setupFallbackTracking","IntersectionObserverEntry","root","IntersectionObserver","handleIntersection","elementId","getElementId","getElementConfig","visibleRatio","intersectionRatio","elementState","timeSinceLastReport","triggerExposure","productInfo","extractProductInfo","exposureData","viewParam","getReportData","flushExposureQueue","unobserve","disconnect","clear","removeScrollListener","addScrollListener","checkAllElementsVisibility","scrollHandler","lastScrollTime","throttleTime","viewportBottom","viewportRight","contains","calculateVisibleRatio","toFixed","viewportTop","viewportLeft","rect","getBoundingClientRect","bottom","top","right","left","visibleTop","max","visibleBottom","visibleLeft","visibleRight","visibleArea","elementArea","nodeType","untrackProduct","setAttribute","selectorOrElements","querySelectorAll","elementOptions","trackProduct","removeAttribute","getAttribute","_exposureUniqueId","uniqueId","configAttr","productId","productName","productPrice","productCategory","productImage","_this9","queueToReport","Set","uniqueArr","_item$viewParam","exposeContent","_this0","_this1","untrackAll","ThirdPartyIntegrator","integratedSDKs","enabled","initBaiduAnalytics","initUmengAnalytics","initSensorsAnalytics","initTencentAnalytics","google","initGoogleAnalytics","initCustomAnalytics","siteId","autoPageview","serverUrl","setServerUrl","setSiteId","trackPageview","setAppId","gtag","measurementId","page_title","page_location","eventData","values","sdk","reportToSDK","pageData","reportPageViewToSDK","userData","reportUserToSDK","reportPerformanceToSDK","userType","setProfile","setUserInfo","setUser","trackPerformance","sdkName","_this$integratedSDKs$","destroy","ConfigManager","environment","enableEventTracking","enableRouteTracking","userInfo","_window","FrontendSDK","errorTracker","performanceTracker","userBehaviorTracker","exposureTracker","thirdPartyIntegrator","setupPageUnloadHandler","isUnloading","handlePageUnload","setupUrlChangeMonitoring","capture","lastHref","lastOrigin","isMonitoring","urlCheckInterval","stopMonitoring","currentHref","currentOrigin","_urlMonitoringCleanup","reportError","reportEvent","reportCustomEvent","getCurrentPageStayTime","reportPerformance","reportCustomBehavior","reportUser","getCurrentMetrics","getCurrentBehaviors","isSDKIntegrated","getIntegratedSDKs","setupVueRouterMonitoring","getCurrentRoute","getCurrentRouteStayTime","trackProducts","reportExposure","getTrackedElements","getExposureQueue"],"mappings":"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"}