mixpanel-browser 2.58.0 → 2.59.0

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":"mixpanel-recorder.min.js","sources":["../node_modules/rrweb/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/utils.js","../node_modules/rrweb/es/rrweb/packages/types/dist/types.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/mutation.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/error-handler.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observer.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/cross-origin-iframe-mirror.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/iframe-manager.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js","../node_modules/rrweb/es/rrweb/ext/tslib/tslib.es6.js","../node_modules/rrweb/es/rrweb/ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/serialize-args.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/2d.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/webgl.js","../node_modules/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__funcToSource.js","../node_modules/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createInlineWorkerFactory.js","../node_modules/rrweb/es/rrweb/_virtual/image-bitmap-data-url-worker.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/stylesheet-manager.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/processed-node-manager.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/index.js","../node_modules/@rrweb/types/dist/types.js","../src/config.js","../src/window.js","../src/promise-polyfill.js","../src/utils.js","../src/gdpr-utils.js","../src/shared-lock.js","../src/storage/local-storage.js","../src/request-queue.js","../src/request-batcher.js","../src/recorder/session-recording.js","../src/recorder/index.js"],"sourcesContent":["var NodeType;\r\n(function (NodeType) {\r\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\r\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\r\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\r\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\r\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\r\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\r\n})(NodeType || (NodeType = {}));\n\nfunction isElement(n) {\r\n return n.nodeType === n.ELEMENT_NODE;\r\n}\r\nfunction isShadowRoot(n) {\r\n const host = n === null || n === void 0 ? void 0 : n.host;\r\n return Boolean((host === null || host === void 0 ? void 0 : host.shadowRoot) === n);\r\n}\r\nfunction isNativeShadowDom(shadowRoot) {\r\n return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\r\n}\r\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\r\n if (cssText.includes(' background-clip: text;') &&\r\n !cssText.includes(' -webkit-background-clip: text;')) {\r\n cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\r\n }\r\n return cssText;\r\n}\r\nfunction escapeImportStatement(rule) {\r\n const { cssText } = rule;\r\n if (cssText.split('\"').length < 3)\r\n return cssText;\r\n const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\r\n if (rule.layerName === '') {\r\n statement.push(`layer`);\r\n }\r\n else if (rule.layerName) {\r\n statement.push(`layer(${rule.layerName})`);\r\n }\r\n if (rule.supportsText) {\r\n statement.push(`supports(${rule.supportsText})`);\r\n }\r\n if (rule.media.length) {\r\n statement.push(rule.media.mediaText);\r\n }\r\n return statement.join(' ') + ';';\r\n}\r\nfunction stringifyStylesheet(s) {\r\n try {\r\n const rules = s.rules || s.cssRules;\r\n return rules\r\n ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join(''))\r\n : null;\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n}\r\nfunction stringifyRule(rule) {\r\n let importStringified;\r\n if (isCSSImportRule(rule)) {\r\n try {\r\n importStringified =\r\n stringifyStylesheet(rule.styleSheet) ||\r\n escapeImportStatement(rule);\r\n }\r\n catch (error) {\r\n }\r\n }\r\n else if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\r\n return fixSafariColons(rule.cssText);\r\n }\r\n return importStringified || rule.cssText;\r\n}\r\nfunction fixSafariColons(cssStringified) {\r\n const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\r\n return cssStringified.replace(regex, '$1\\\\$2');\r\n}\r\nfunction isCSSImportRule(rule) {\r\n return 'styleSheet' in rule;\r\n}\r\nfunction isCSSStyleRule(rule) {\r\n return 'selectorText' in rule;\r\n}\r\nclass Mirror {\r\n constructor() {\r\n this.idNodeMap = new Map();\r\n this.nodeMetaMap = new WeakMap();\r\n }\r\n getId(n) {\r\n var _a;\r\n if (!n)\r\n return -1;\r\n const id = (_a = this.getMeta(n)) === null || _a === void 0 ? void 0 : _a.id;\r\n return id !== null && id !== void 0 ? id : -1;\r\n }\r\n getNode(id) {\r\n return this.idNodeMap.get(id) || null;\r\n }\r\n getIds() {\r\n return Array.from(this.idNodeMap.keys());\r\n }\r\n getMeta(n) {\r\n return this.nodeMetaMap.get(n) || null;\r\n }\r\n removeNodeFromMap(n) {\r\n const id = this.getId(n);\r\n this.idNodeMap.delete(id);\r\n if (n.childNodes) {\r\n n.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\r\n }\r\n }\r\n has(id) {\r\n return this.idNodeMap.has(id);\r\n }\r\n hasNode(node) {\r\n return this.nodeMetaMap.has(node);\r\n }\r\n add(n, meta) {\r\n const id = meta.id;\r\n this.idNodeMap.set(id, n);\r\n this.nodeMetaMap.set(n, meta);\r\n }\r\n replace(id, n) {\r\n const oldNode = this.getNode(id);\r\n if (oldNode) {\r\n const meta = this.nodeMetaMap.get(oldNode);\r\n if (meta)\r\n this.nodeMetaMap.set(n, meta);\r\n }\r\n this.idNodeMap.set(id, n);\r\n }\r\n reset() {\r\n this.idNodeMap = new Map();\r\n this.nodeMetaMap = new WeakMap();\r\n }\r\n}\r\nfunction createMirror() {\r\n return new Mirror();\r\n}\r\nfunction maskInputValue({ element, maskInputOptions, tagName, type, value, maskInputFn, }) {\r\n let text = value || '';\r\n const actualType = type && toLowerCase(type);\r\n if (maskInputOptions[tagName.toLowerCase()] ||\r\n (actualType && maskInputOptions[actualType])) {\r\n if (maskInputFn) {\r\n text = maskInputFn(text, element);\r\n }\r\n else {\r\n text = '*'.repeat(text.length);\r\n }\r\n }\r\n return text;\r\n}\r\nfunction toLowerCase(str) {\r\n return str.toLowerCase();\r\n}\r\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\r\nfunction is2DCanvasBlank(canvas) {\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx)\r\n return true;\r\n const chunkSize = 50;\r\n for (let x = 0; x < canvas.width; x += chunkSize) {\r\n for (let y = 0; y < canvas.height; y += chunkSize) {\r\n const getImageData = ctx.getImageData;\r\n const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\r\n ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\r\n : getImageData;\r\n const pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\r\n if (pixelBuffer.some((pixel) => pixel !== 0))\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction isNodeMetaEqual(a, b) {\r\n if (!a || !b || a.type !== b.type)\r\n return false;\r\n if (a.type === NodeType.Document)\r\n return a.compatMode === b.compatMode;\r\n else if (a.type === NodeType.DocumentType)\r\n return (a.name === b.name &&\r\n a.publicId === b.publicId &&\r\n a.systemId === b.systemId);\r\n else if (a.type === NodeType.Comment ||\r\n a.type === NodeType.Text ||\r\n a.type === NodeType.CDATA)\r\n return a.textContent === b.textContent;\r\n else if (a.type === NodeType.Element)\r\n return (a.tagName === b.tagName &&\r\n JSON.stringify(a.attributes) ===\r\n JSON.stringify(b.attributes) &&\r\n a.isSVG === b.isSVG &&\r\n a.needBlock === b.needBlock);\r\n return false;\r\n}\r\nfunction getInputType(element) {\r\n const type = element.type;\r\n return element.hasAttribute('data-rr-is-password')\r\n ? 'password'\r\n : type\r\n ?\r\n toLowerCase(type)\r\n : null;\r\n}\r\nfunction extractFileExtension(path, baseURL) {\r\n var _a;\r\n let url;\r\n try {\r\n url = new URL(path, baseURL !== null && baseURL !== void 0 ? baseURL : window.location.href);\r\n }\r\n catch (err) {\r\n return null;\r\n }\r\n const regex = /\\.([0-9a-z]+)(?:$)/i;\r\n const match = url.pathname.match(regex);\r\n return (_a = match === null || match === void 0 ? void 0 : match[1]) !== null && _a !== void 0 ? _a : null;\r\n}\n\nlet _id = 1;\r\nconst tagNameRegex = new RegExp('[^a-z0-9-_:]');\r\nconst IGNORED_NODE = -2;\r\nfunction genId() {\r\n return _id++;\r\n}\r\nfunction getValidTagName(element) {\r\n if (element instanceof HTMLFormElement) {\r\n return 'form';\r\n }\r\n const processedTagName = toLowerCase(element.tagName);\r\n if (tagNameRegex.test(processedTagName)) {\r\n return 'div';\r\n }\r\n return processedTagName;\r\n}\r\nfunction extractOrigin(url) {\r\n let origin = '';\r\n if (url.indexOf('//') > -1) {\r\n origin = url.split('/').slice(0, 3).join('/');\r\n }\r\n else {\r\n origin = url.split('/')[0];\r\n }\r\n origin = origin.split('?')[0];\r\n return origin;\r\n}\r\nlet canvasService;\r\nlet canvasCtx;\r\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\r\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\r\nconst URL_WWW_MATCH = /^www\\..*/i;\r\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\r\nfunction absoluteToStylesheet(cssText, href) {\r\n return (cssText || '').replace(URL_IN_CSS_REF, (origin, quote1, path1, quote2, path2, path3) => {\r\n const filePath = path1 || path2 || path3;\r\n const maybeQuote = quote1 || quote2 || '';\r\n if (!filePath) {\r\n return origin;\r\n }\r\n if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\r\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n }\r\n if (DATA_URI.test(filePath)) {\r\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n }\r\n if (filePath[0] === '/') {\r\n return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\r\n }\r\n const stack = href.split('/');\r\n const parts = filePath.split('/');\r\n stack.pop();\r\n for (const part of parts) {\r\n if (part === '.') {\r\n continue;\r\n }\r\n else if (part === '..') {\r\n stack.pop();\r\n }\r\n else {\r\n stack.push(part);\r\n }\r\n }\r\n return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\r\n });\r\n}\r\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\r\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\r\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\r\n if (attributeValue.trim() === '') {\r\n return attributeValue;\r\n }\r\n let pos = 0;\r\n function collectCharacters(regEx) {\r\n let chars;\r\n const match = regEx.exec(attributeValue.substring(pos));\r\n if (match) {\r\n chars = match[0];\r\n pos += chars.length;\r\n return chars;\r\n }\r\n return '';\r\n }\r\n const output = [];\r\n while (true) {\r\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\r\n if (pos >= attributeValue.length) {\r\n break;\r\n }\r\n let url = collectCharacters(SRCSET_NOT_SPACES);\r\n if (url.slice(-1) === ',') {\r\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\r\n output.push(url);\r\n }\r\n else {\r\n let descriptorsStr = '';\r\n url = absoluteToDoc(doc, url);\r\n let inParens = false;\r\n while (true) {\r\n const c = attributeValue.charAt(pos);\r\n if (c === '') {\r\n output.push((url + descriptorsStr).trim());\r\n break;\r\n }\r\n else if (!inParens) {\r\n if (c === ',') {\r\n pos += 1;\r\n output.push((url + descriptorsStr).trim());\r\n break;\r\n }\r\n else if (c === '(') {\r\n inParens = true;\r\n }\r\n }\r\n else {\r\n if (c === ')') {\r\n inParens = false;\r\n }\r\n }\r\n descriptorsStr += c;\r\n pos += 1;\r\n }\r\n }\r\n }\r\n return output.join(', ');\r\n}\r\nfunction absoluteToDoc(doc, attributeValue) {\r\n if (!attributeValue || attributeValue.trim() === '') {\r\n return attributeValue;\r\n }\r\n const a = doc.createElement('a');\r\n a.href = attributeValue;\r\n return a.href;\r\n}\r\nfunction isSVGElement(el) {\r\n return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\r\n}\r\nfunction getHref() {\r\n const a = document.createElement('a');\r\n a.href = '';\r\n return a.href;\r\n}\r\nfunction transformAttribute(doc, tagName, name, value) {\r\n if (!value) {\r\n return value;\r\n }\r\n if (name === 'src' ||\r\n (name === 'href' && !(tagName === 'use' && value[0] === '#'))) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'xlink:href' && value[0] !== '#') {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'background' &&\r\n (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'srcset') {\r\n return getAbsoluteSrcsetString(doc, value);\r\n }\r\n else if (name === 'style') {\r\n return absoluteToStylesheet(value, getHref());\r\n }\r\n else if (tagName === 'object' && name === 'data') {\r\n return absoluteToDoc(doc, value);\r\n }\r\n return value;\r\n}\r\nfunction ignoreAttribute(tagName, name, _value) {\r\n return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\r\n}\r\nfunction _isBlockedElement(element, blockClass, blockSelector) {\r\n try {\r\n if (typeof blockClass === 'string') {\r\n if (element.classList.contains(blockClass)) {\r\n return true;\r\n }\r\n }\r\n else {\r\n for (let eIndex = element.classList.length; eIndex--;) {\r\n const className = element.classList[eIndex];\r\n if (blockClass.test(className)) {\r\n return true;\r\n }\r\n }\r\n }\r\n if (blockSelector) {\r\n return element.matches(blockSelector);\r\n }\r\n }\r\n catch (e) {\r\n }\r\n return false;\r\n}\r\nfunction classMatchesRegex(node, regex, checkAncestors) {\r\n if (!node)\r\n return false;\r\n if (node.nodeType !== node.ELEMENT_NODE) {\r\n if (!checkAncestors)\r\n return false;\r\n return classMatchesRegex(node.parentNode, regex, checkAncestors);\r\n }\r\n for (let eIndex = node.classList.length; eIndex--;) {\r\n const className = node.classList[eIndex];\r\n if (regex.test(className)) {\r\n return true;\r\n }\r\n }\r\n if (!checkAncestors)\r\n return false;\r\n return classMatchesRegex(node.parentNode, regex, checkAncestors);\r\n}\r\nfunction needMaskingText(node, maskTextClass, maskTextSelector, checkAncestors) {\r\n try {\r\n const el = node.nodeType === node.ELEMENT_NODE\r\n ? node\r\n : node.parentElement;\r\n if (el === null)\r\n return false;\r\n if (typeof maskTextClass === 'string') {\r\n if (checkAncestors) {\r\n if (el.closest(`.${maskTextClass}`))\r\n return true;\r\n }\r\n else {\r\n if (el.classList.contains(maskTextClass))\r\n return true;\r\n }\r\n }\r\n else {\r\n if (classMatchesRegex(el, maskTextClass, checkAncestors))\r\n return true;\r\n }\r\n if (maskTextSelector) {\r\n if (checkAncestors) {\r\n if (el.closest(maskTextSelector))\r\n return true;\r\n }\r\n else {\r\n if (el.matches(maskTextSelector))\r\n return true;\r\n }\r\n }\r\n }\r\n catch (e) {\r\n }\r\n return false;\r\n}\r\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\r\n const win = iframeEl.contentWindow;\r\n if (!win) {\r\n return;\r\n }\r\n let fired = false;\r\n let readyState;\r\n try {\r\n readyState = win.document.readyState;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n if (readyState !== 'complete') {\r\n const timer = setTimeout(() => {\r\n if (!fired) {\r\n listener();\r\n fired = true;\r\n }\r\n }, iframeLoadTimeout);\r\n iframeEl.addEventListener('load', () => {\r\n clearTimeout(timer);\r\n fired = true;\r\n listener();\r\n });\r\n return;\r\n }\r\n const blankUrl = 'about:blank';\r\n if (win.location.href !== blankUrl ||\r\n iframeEl.src === blankUrl ||\r\n iframeEl.src === '') {\r\n setTimeout(listener, 0);\r\n return iframeEl.addEventListener('load', listener);\r\n }\r\n iframeEl.addEventListener('load', listener);\r\n}\r\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\r\n let fired = false;\r\n let styleSheetLoaded;\r\n try {\r\n styleSheetLoaded = link.sheet;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n if (styleSheetLoaded)\r\n return;\r\n const timer = setTimeout(() => {\r\n if (!fired) {\r\n listener();\r\n fired = true;\r\n }\r\n }, styleSheetLoadTimeout);\r\n link.addEventListener('load', () => {\r\n clearTimeout(timer);\r\n fired = true;\r\n listener();\r\n });\r\n}\r\nfunction serializeNode(n, options) {\r\n const { doc, mirror, blockClass, blockSelector, needsMask, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, } = options;\r\n const rootId = getRootId(doc, mirror);\r\n switch (n.nodeType) {\r\n case n.DOCUMENT_NODE:\r\n if (n.compatMode !== 'CSS1Compat') {\r\n return {\r\n type: NodeType.Document,\r\n childNodes: [],\r\n compatMode: n.compatMode,\r\n };\r\n }\r\n else {\r\n return {\r\n type: NodeType.Document,\r\n childNodes: [],\r\n };\r\n }\r\n case n.DOCUMENT_TYPE_NODE:\r\n return {\r\n type: NodeType.DocumentType,\r\n name: n.name,\r\n publicId: n.publicId,\r\n systemId: n.systemId,\r\n rootId,\r\n };\r\n case n.ELEMENT_NODE:\r\n return serializeElementNode(n, {\r\n doc,\r\n blockClass,\r\n blockSelector,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskInputFn,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n keepIframeSrcFn,\r\n newlyAddedElement,\r\n rootId,\r\n });\r\n case n.TEXT_NODE:\r\n return serializeTextNode(n, {\r\n needsMask,\r\n maskTextFn,\r\n rootId,\r\n });\r\n case n.CDATA_SECTION_NODE:\r\n return {\r\n type: NodeType.CDATA,\r\n textContent: '',\r\n rootId,\r\n };\r\n case n.COMMENT_NODE:\r\n return {\r\n type: NodeType.Comment,\r\n textContent: n.textContent || '',\r\n rootId,\r\n };\r\n default:\r\n return false;\r\n }\r\n}\r\nfunction getRootId(doc, mirror) {\r\n if (!mirror.hasNode(doc))\r\n return undefined;\r\n const docId = mirror.getId(doc);\r\n return docId === 1 ? undefined : docId;\r\n}\r\nfunction serializeTextNode(n, options) {\r\n var _a;\r\n const { needsMask, maskTextFn, rootId } = options;\r\n const parentTagName = n.parentNode && n.parentNode.tagName;\r\n let textContent = n.textContent;\r\n const isStyle = parentTagName === 'STYLE' ? true : undefined;\r\n const isScript = parentTagName === 'SCRIPT' ? true : undefined;\r\n if (isStyle && textContent) {\r\n try {\r\n if (n.nextSibling || n.previousSibling) {\r\n }\r\n else if ((_a = n.parentNode.sheet) === null || _a === void 0 ? void 0 : _a.cssRules) {\r\n textContent = stringifyStylesheet(n.parentNode.sheet);\r\n }\r\n }\r\n catch (err) {\r\n console.warn(`Cannot get CSS styles from text's parentNode. Error: ${err}`, n);\r\n }\r\n textContent = absoluteToStylesheet(textContent, getHref());\r\n }\r\n if (isScript) {\r\n textContent = 'SCRIPT_PLACEHOLDER';\r\n }\r\n if (!isStyle && !isScript && textContent && needsMask) {\r\n textContent = maskTextFn\r\n ? maskTextFn(textContent, n.parentElement)\r\n : textContent.replace(/[\\S]/g, '*');\r\n }\r\n return {\r\n type: NodeType.Text,\r\n textContent: textContent || '',\r\n isStyle,\r\n rootId,\r\n };\r\n}\r\nfunction serializeElementNode(n, options) {\r\n const { doc, blockClass, blockSelector, inlineStylesheet, maskInputOptions = {}, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, } = options;\r\n const needBlock = _isBlockedElement(n, blockClass, blockSelector);\r\n const tagName = getValidTagName(n);\r\n let attributes = {};\r\n const len = n.attributes.length;\r\n for (let i = 0; i < len; i++) {\r\n const attr = n.attributes[i];\r\n if (!ignoreAttribute(tagName, attr.name, attr.value)) {\r\n attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value);\r\n }\r\n }\r\n if (tagName === 'link' && inlineStylesheet) {\r\n const stylesheet = Array.from(doc.styleSheets).find((s) => {\r\n return s.href === n.href;\r\n });\r\n let cssText = null;\r\n if (stylesheet) {\r\n cssText = stringifyStylesheet(stylesheet);\r\n }\r\n if (cssText) {\r\n delete attributes.rel;\r\n delete attributes.href;\r\n attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\r\n }\r\n }\r\n if (tagName === 'style' &&\r\n n.sheet &&\r\n !(n.innerText || n.textContent || '').trim().length) {\r\n const cssText = stringifyStylesheet(n.sheet);\r\n if (cssText) {\r\n attributes._cssText = absoluteToStylesheet(cssText, getHref());\r\n }\r\n }\r\n if (tagName === 'input' || tagName === 'textarea' || tagName === 'select') {\r\n const value = n.value;\r\n const checked = n.checked;\r\n if (attributes.type !== 'radio' &&\r\n attributes.type !== 'checkbox' &&\r\n attributes.type !== 'submit' &&\r\n attributes.type !== 'button' &&\r\n value) {\r\n attributes.value = maskInputValue({\r\n element: n,\r\n type: getInputType(n),\r\n tagName,\r\n value,\r\n maskInputOptions,\r\n maskInputFn,\r\n });\r\n }\r\n else if (checked) {\r\n attributes.checked = checked;\r\n }\r\n }\r\n if (tagName === 'option') {\r\n if (n.selected && !maskInputOptions['select']) {\r\n attributes.selected = true;\r\n }\r\n else {\r\n delete attributes.selected;\r\n }\r\n }\r\n if (tagName === 'canvas' && recordCanvas) {\r\n if (n.__context === '2d') {\r\n if (!is2DCanvasBlank(n)) {\r\n attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n }\r\n }\r\n else if (!('__context' in n)) {\r\n const canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n const blankCanvas = document.createElement('canvas');\r\n blankCanvas.width = n.width;\r\n blankCanvas.height = n.height;\r\n const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n if (canvasDataURL !== blankCanvasDataURL) {\r\n attributes.rr_dataURL = canvasDataURL;\r\n }\r\n }\r\n }\r\n if (tagName === 'img' && inlineImages) {\r\n if (!canvasService) {\r\n canvasService = doc.createElement('canvas');\r\n canvasCtx = canvasService.getContext('2d');\r\n }\r\n const image = n;\r\n const oldValue = image.crossOrigin;\r\n image.crossOrigin = 'anonymous';\r\n const recordInlineImage = () => {\r\n image.removeEventListener('load', recordInlineImage);\r\n try {\r\n canvasService.width = image.naturalWidth;\r\n canvasService.height = image.naturalHeight;\r\n canvasCtx.drawImage(image, 0, 0);\r\n attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n }\r\n catch (err) {\r\n console.warn(`Cannot inline img src=${image.currentSrc}! Error: ${err}`);\r\n }\r\n oldValue\r\n ? (attributes.crossOrigin = oldValue)\r\n : image.removeAttribute('crossorigin');\r\n };\r\n if (image.complete && image.naturalWidth !== 0)\r\n recordInlineImage();\r\n else\r\n image.addEventListener('load', recordInlineImage);\r\n }\r\n if (tagName === 'audio' || tagName === 'video') {\r\n const mediaAttributes = attributes;\r\n mediaAttributes.rr_mediaState = n.paused\r\n ? 'paused'\r\n : 'played';\r\n mediaAttributes.rr_mediaCurrentTime = n.currentTime;\r\n mediaAttributes.rr_mediaPlaybackRate = n.playbackRate;\r\n mediaAttributes.rr_mediaMuted = n.muted;\r\n mediaAttributes.rr_mediaLoop = n.loop;\r\n mediaAttributes.rr_mediaVolume = n.volume;\r\n }\r\n if (!newlyAddedElement) {\r\n if (n.scrollLeft) {\r\n attributes.rr_scrollLeft = n.scrollLeft;\r\n }\r\n if (n.scrollTop) {\r\n attributes.rr_scrollTop = n.scrollTop;\r\n }\r\n }\r\n if (needBlock) {\r\n const { width, height } = n.getBoundingClientRect();\r\n attributes = {\r\n class: attributes.class,\r\n rr_width: `${width}px`,\r\n rr_height: `${height}px`,\r\n };\r\n }\r\n if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\r\n if (!n.contentDocument) {\r\n attributes.rr_src = attributes.src;\r\n }\r\n delete attributes.src;\r\n }\r\n let isCustomElement;\r\n try {\r\n if (customElements.get(tagName))\r\n isCustomElement = true;\r\n }\r\n catch (e) {\r\n }\r\n return {\r\n type: NodeType.Element,\r\n tagName,\r\n attributes,\r\n childNodes: [],\r\n isSVG: isSVGElement(n) || undefined,\r\n needBlock,\r\n rootId,\r\n isCustom: isCustomElement,\r\n };\r\n}\r\nfunction lowerIfExists(maybeAttr) {\r\n if (maybeAttr === undefined || maybeAttr === null) {\r\n return '';\r\n }\r\n else {\r\n return maybeAttr.toLowerCase();\r\n }\r\n}\r\nfunction slimDOMExcluded(sn, slimDOMOptions) {\r\n if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\r\n return true;\r\n }\r\n else if (sn.type === NodeType.Element) {\r\n if (slimDOMOptions.script &&\r\n (sn.tagName === 'script' ||\r\n (sn.tagName === 'link' &&\r\n (sn.attributes.rel === 'preload' ||\r\n sn.attributes.rel === 'modulepreload') &&\r\n sn.attributes.as === 'script') ||\r\n (sn.tagName === 'link' &&\r\n sn.attributes.rel === 'prefetch' &&\r\n typeof sn.attributes.href === 'string' &&\r\n extractFileExtension(sn.attributes.href) === 'js'))) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headFavicon &&\r\n ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\r\n (sn.tagName === 'meta' &&\r\n (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\r\n lowerIfExists(sn.attributes.name) === 'application-name' ||\r\n lowerIfExists(sn.attributes.rel) === 'icon' ||\r\n lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\r\n lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\r\n return true;\r\n }\r\n else if (sn.tagName === 'meta') {\r\n if (slimDOMOptions.headMetaDescKeywords &&\r\n lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaSocial &&\r\n (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\r\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\r\n lowerIfExists(sn.attributes.name) === 'pinterest')) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaRobots &&\r\n (lowerIfExists(sn.attributes.name) === 'robots' ||\r\n lowerIfExists(sn.attributes.name) === 'googlebot' ||\r\n lowerIfExists(sn.attributes.name) === 'bingbot')) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaHttpEquiv &&\r\n sn.attributes['http-equiv'] !== undefined) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaAuthorship &&\r\n (lowerIfExists(sn.attributes.name) === 'author' ||\r\n lowerIfExists(sn.attributes.name) === 'generator' ||\r\n lowerIfExists(sn.attributes.name) === 'framework' ||\r\n lowerIfExists(sn.attributes.name) === 'publisher' ||\r\n lowerIfExists(sn.attributes.name) === 'progid' ||\r\n lowerIfExists(sn.attributes.property).match(/^article:/) ||\r\n lowerIfExists(sn.attributes.property).match(/^product:/))) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaVerification &&\r\n (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\r\n lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\r\n lowerIfExists(sn.attributes.name) === 'csrf-token' ||\r\n lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\r\n lowerIfExists(sn.attributes.name) === 'verify-v1' ||\r\n lowerIfExists(sn.attributes.name) === 'verification' ||\r\n lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\nfunction serializeNodeWithId(n, options) {\r\n const { doc, mirror, blockClass, blockSelector, maskTextClass, maskTextSelector, skipChild = false, inlineStylesheet = true, maskInputOptions = {}, maskTextFn, maskInputFn, slimDOMOptions, dataURLOptions = {}, inlineImages = false, recordCanvas = false, onSerialize, onIframeLoad, iframeLoadTimeout = 5000, onStylesheetLoad, stylesheetLoadTimeout = 5000, keepIframeSrcFn = () => false, newlyAddedElement = false, } = options;\r\n let { needsMask } = options;\r\n let { preserveWhiteSpace = true } = options;\r\n if (!needsMask &&\r\n n.childNodes) {\r\n const checkAncestors = needsMask === undefined;\r\n needsMask = needMaskingText(n, maskTextClass, maskTextSelector, checkAncestors);\r\n }\r\n const _serializedNode = serializeNode(n, {\r\n doc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n needsMask,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskTextFn,\r\n maskInputFn,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n keepIframeSrcFn,\r\n newlyAddedElement,\r\n });\r\n if (!_serializedNode) {\r\n console.warn(n, 'not serialized');\r\n return null;\r\n }\r\n let id;\r\n if (mirror.hasNode(n)) {\r\n id = mirror.getId(n);\r\n }\r\n else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\r\n (!preserveWhiteSpace &&\r\n _serializedNode.type === NodeType.Text &&\r\n !_serializedNode.isStyle &&\r\n !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\r\n id = IGNORED_NODE;\r\n }\r\n else {\r\n id = genId();\r\n }\r\n const serializedNode = Object.assign(_serializedNode, { id });\r\n mirror.add(n, serializedNode);\r\n if (id === IGNORED_NODE) {\r\n return null;\r\n }\r\n if (onSerialize) {\r\n onSerialize(n);\r\n }\r\n let recordChild = !skipChild;\r\n if (serializedNode.type === NodeType.Element) {\r\n recordChild = recordChild && !serializedNode.needBlock;\r\n delete serializedNode.needBlock;\r\n const shadowRoot = n.shadowRoot;\r\n if (shadowRoot && isNativeShadowDom(shadowRoot))\r\n serializedNode.isShadowHost = true;\r\n }\r\n if ((serializedNode.type === NodeType.Document ||\r\n serializedNode.type === NodeType.Element) &&\r\n recordChild) {\r\n if (slimDOMOptions.headWhitespace &&\r\n serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'head') {\r\n preserveWhiteSpace = false;\r\n }\r\n const bypassOptions = {\r\n doc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n needsMask,\r\n maskTextClass,\r\n maskTextSelector,\r\n skipChild,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n };\r\n if (serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'textarea' &&\r\n serializedNode.attributes.value !== undefined) ;\r\n else {\r\n for (const childN of Array.from(n.childNodes)) {\r\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n if (serializedChildNode) {\r\n serializedNode.childNodes.push(serializedChildNode);\r\n }\r\n }\r\n }\r\n if (isElement(n) && n.shadowRoot) {\r\n for (const childN of Array.from(n.shadowRoot.childNodes)) {\r\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n if (serializedChildNode) {\r\n isNativeShadowDom(n.shadowRoot) &&\r\n (serializedChildNode.isShadow = true);\r\n serializedNode.childNodes.push(serializedChildNode);\r\n }\r\n }\r\n }\r\n }\r\n if (n.parentNode &&\r\n isShadowRoot(n.parentNode) &&\r\n isNativeShadowDom(n.parentNode)) {\r\n serializedNode.isShadow = true;\r\n }\r\n if (serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'iframe') {\r\n onceIframeLoaded(n, () => {\r\n const iframeDoc = n.contentDocument;\r\n if (iframeDoc && onIframeLoad) {\r\n const serializedIframeNode = serializeNodeWithId(iframeDoc, {\r\n doc: iframeDoc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n needsMask,\r\n maskTextClass,\r\n maskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n });\r\n if (serializedIframeNode) {\r\n onIframeLoad(n, serializedIframeNode);\r\n }\r\n }\r\n }, iframeLoadTimeout);\r\n }\r\n if (serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'link' &&\r\n typeof serializedNode.attributes.rel === 'string' &&\r\n (serializedNode.attributes.rel === 'stylesheet' ||\r\n (serializedNode.attributes.rel === 'preload' &&\r\n typeof serializedNode.attributes.href === 'string' &&\r\n extractFileExtension(serializedNode.attributes.href) === 'css'))) {\r\n onceStylesheetLoaded(n, () => {\r\n if (onStylesheetLoad) {\r\n const serializedLinkNode = serializeNodeWithId(n, {\r\n doc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n needsMask,\r\n maskTextClass,\r\n maskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n });\r\n if (serializedLinkNode) {\r\n onStylesheetLoad(n, serializedLinkNode);\r\n }\r\n }\r\n }, stylesheetLoadTimeout);\r\n }\r\n return serializedNode;\r\n}\r\nfunction snapshot(n, options) {\r\n const { mirror = new Mirror(), blockClass = 'rr-block', blockSelector = null, maskTextClass = 'rr-mask', maskTextSelector = null, inlineStylesheet = true, inlineImages = false, recordCanvas = false, maskAllInputs = false, maskTextFn, maskInputFn, slimDOM = false, dataURLOptions, preserveWhiteSpace, onSerialize, onIframeLoad, iframeLoadTimeout, onStylesheetLoad, stylesheetLoadTimeout, keepIframeSrcFn = () => false, } = options || {};\r\n const maskInputOptions = maskAllInputs === true\r\n ? {\r\n color: true,\r\n date: true,\r\n 'datetime-local': true,\r\n email: true,\r\n month: true,\r\n number: true,\r\n range: true,\r\n search: true,\r\n tel: true,\r\n text: true,\r\n time: true,\r\n url: true,\r\n week: true,\r\n textarea: true,\r\n select: true,\r\n password: true,\r\n }\r\n : maskAllInputs === false\r\n ? {\r\n password: true,\r\n }\r\n : maskAllInputs;\r\n const slimDOMOptions = slimDOM === true || slimDOM === 'all'\r\n ?\r\n {\r\n script: true,\r\n comment: true,\r\n headFavicon: true,\r\n headWhitespace: true,\r\n headMetaDescKeywords: slimDOM === 'all',\r\n headMetaSocial: true,\r\n headMetaRobots: true,\r\n headMetaHttpEquiv: true,\r\n headMetaAuthorship: true,\r\n headMetaVerification: true,\r\n }\r\n : slimDOM === false\r\n ? {}\r\n : slimDOM;\r\n return serializeNodeWithId(n, {\r\n doc: n,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n maskTextClass,\r\n maskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n newlyAddedElement: false,\r\n });\r\n}\r\n\nconst commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\r\nfunction parse(css, options = {}) {\r\n let lineno = 1;\r\n let column = 1;\r\n function updatePosition(str) {\r\n const lines = str.match(/\\n/g);\r\n if (lines) {\r\n lineno += lines.length;\r\n }\r\n const i = str.lastIndexOf('\\n');\r\n column = i === -1 ? column + str.length : str.length - i;\r\n }\r\n function position() {\r\n const start = { line: lineno, column };\r\n return (node) => {\r\n node.position = new Position(start);\r\n whitespace();\r\n return node;\r\n };\r\n }\r\n class Position {\r\n constructor(start) {\r\n this.start = start;\r\n this.end = { line: lineno, column };\r\n this.source = options.source;\r\n }\r\n }\r\n Position.prototype.content = css;\r\n const errorsList = [];\r\n function error(msg) {\r\n const err = new Error(`${options.source || ''}:${lineno}:${column}: ${msg}`);\r\n err.reason = msg;\r\n err.filename = options.source;\r\n err.line = lineno;\r\n err.column = column;\r\n err.source = css;\r\n if (options.silent) {\r\n errorsList.push(err);\r\n }\r\n else {\r\n throw err;\r\n }\r\n }\r\n function stylesheet() {\r\n const rulesList = rules();\r\n return {\r\n type: 'stylesheet',\r\n stylesheet: {\r\n source: options.source,\r\n rules: rulesList,\r\n parsingErrors: errorsList,\r\n },\r\n };\r\n }\r\n function open() {\r\n return match(/^{\\s*/);\r\n }\r\n function close() {\r\n return match(/^}/);\r\n }\r\n function rules() {\r\n let node;\r\n const rules = [];\r\n whitespace();\r\n comments(rules);\r\n while (css.length && css.charAt(0) !== '}' && (node = atrule() || rule())) {\r\n if (node) {\r\n rules.push(node);\r\n comments(rules);\r\n }\r\n }\r\n return rules;\r\n }\r\n function match(re) {\r\n const m = re.exec(css);\r\n if (!m) {\r\n return;\r\n }\r\n const str = m[0];\r\n updatePosition(str);\r\n css = css.slice(str.length);\r\n return m;\r\n }\r\n function whitespace() {\r\n match(/^\\s*/);\r\n }\r\n function comments(rules = []) {\r\n let c;\r\n while ((c = comment())) {\r\n if (c) {\r\n rules.push(c);\r\n }\r\n c = comment();\r\n }\r\n return rules;\r\n }\r\n function comment() {\r\n const pos = position();\r\n if ('/' !== css.charAt(0) || '*' !== css.charAt(1)) {\r\n return;\r\n }\r\n let i = 2;\r\n while ('' !== css.charAt(i) &&\r\n ('*' !== css.charAt(i) || '/' !== css.charAt(i + 1))) {\r\n ++i;\r\n }\r\n i += 2;\r\n if ('' === css.charAt(i - 1)) {\r\n return error('End of comment missing');\r\n }\r\n const str = css.slice(2, i - 2);\r\n column += 2;\r\n updatePosition(str);\r\n css = css.slice(i);\r\n column += 2;\r\n return pos({\r\n type: 'comment',\r\n comment: str,\r\n });\r\n }\r\n function selector() {\r\n whitespace();\r\n while (css[0] == '}') {\r\n error('extra closing bracket');\r\n css = css.slice(1);\r\n whitespace();\r\n }\r\n const m = match(/^((\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[^{])+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const cleanedInput = m[0]\r\n .trim()\r\n .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\r\n .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, (m) => {\r\n return m.replace(/,/g, '\\u200C');\r\n });\r\n return customSplit(cleanedInput).map((s) => s.replace(/\\u200C/g, ',').trim());\r\n }\r\n function customSplit(input) {\r\n const result = [];\r\n let currentSegment = '';\r\n let depthParentheses = 0;\r\n let depthBrackets = 0;\r\n for (const char of input) {\r\n if (char === '(') {\r\n depthParentheses++;\r\n }\r\n else if (char === ')') {\r\n depthParentheses--;\r\n }\r\n else if (char === '[') {\r\n depthBrackets++;\r\n }\r\n else if (char === ']') {\r\n depthBrackets--;\r\n }\r\n if (char === ',' && depthParentheses === 0 && depthBrackets === 0) {\r\n result.push(currentSegment);\r\n currentSegment = '';\r\n }\r\n else {\r\n currentSegment += char;\r\n }\r\n }\r\n if (currentSegment) {\r\n result.push(currentSegment);\r\n }\r\n return result;\r\n }\r\n function declaration() {\r\n const pos = position();\r\n const propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\r\n if (!propMatch) {\r\n return;\r\n }\r\n const prop = trim(propMatch[0]);\r\n if (!match(/^:\\s*/)) {\r\n return error(`property missing ':'`);\r\n }\r\n const val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\r\n const ret = pos({\r\n type: 'declaration',\r\n property: prop.replace(commentre, ''),\r\n value: val ? trim(val[0]).replace(commentre, '') : '',\r\n });\r\n match(/^[;\\s]*/);\r\n return ret;\r\n }\r\n function declarations() {\r\n const decls = [];\r\n if (!open()) {\r\n return error(`missing '{'`);\r\n }\r\n comments(decls);\r\n let decl;\r\n while ((decl = declaration())) {\r\n if (decl !== false) {\r\n decls.push(decl);\r\n comments(decls);\r\n }\r\n decl = declaration();\r\n }\r\n if (!close()) {\r\n return error(`missing '}'`);\r\n }\r\n return decls;\r\n }\r\n function keyframe() {\r\n let m;\r\n const vals = [];\r\n const pos = position();\r\n while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\r\n vals.push(m[1]);\r\n match(/^,\\s*/);\r\n }\r\n if (!vals.length) {\r\n return;\r\n }\r\n return pos({\r\n type: 'keyframe',\r\n values: vals,\r\n declarations: declarations(),\r\n });\r\n }\r\n function atkeyframes() {\r\n const pos = position();\r\n let m = match(/^@([-\\w]+)?keyframes\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n const vendor = m[1];\r\n m = match(/^([-\\w]+)\\s*/);\r\n if (!m) {\r\n return error('@keyframes missing name');\r\n }\r\n const name = m[1];\r\n if (!open()) {\r\n return error(`@keyframes missing '{'`);\r\n }\r\n let frame;\r\n let frames = comments();\r\n while ((frame = keyframe())) {\r\n frames.push(frame);\r\n frames = frames.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(`@keyframes missing '}'`);\r\n }\r\n return pos({\r\n type: 'keyframes',\r\n name,\r\n vendor,\r\n keyframes: frames,\r\n });\r\n }\r\n function atsupports() {\r\n const pos = position();\r\n const m = match(/^@supports *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const supports = trim(m[1]);\r\n if (!open()) {\r\n return error(`@supports missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@supports missing '}'`);\r\n }\r\n return pos({\r\n type: 'supports',\r\n supports,\r\n rules: style,\r\n });\r\n }\r\n function athost() {\r\n const pos = position();\r\n const m = match(/^@host\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n if (!open()) {\r\n return error(`@host missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@host missing '}'`);\r\n }\r\n return pos({\r\n type: 'host',\r\n rules: style,\r\n });\r\n }\r\n function atmedia() {\r\n const pos = position();\r\n const m = match(/^@media *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const media = trim(m[1]);\r\n if (!open()) {\r\n return error(`@media missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@media missing '}'`);\r\n }\r\n return pos({\r\n type: 'media',\r\n media,\r\n rules: style,\r\n });\r\n }\r\n function atcustommedia() {\r\n const pos = position();\r\n const m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\r\n if (!m) {\r\n return;\r\n }\r\n return pos({\r\n type: 'custom-media',\r\n name: trim(m[1]),\r\n media: trim(m[2]),\r\n });\r\n }\r\n function atpage() {\r\n const pos = position();\r\n const m = match(/^@page */);\r\n if (!m) {\r\n return;\r\n }\r\n const sel = selector() || [];\r\n if (!open()) {\r\n return error(`@page missing '{'`);\r\n }\r\n let decls = comments();\r\n let decl;\r\n while ((decl = declaration())) {\r\n decls.push(decl);\r\n decls = decls.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(`@page missing '}'`);\r\n }\r\n return pos({\r\n type: 'page',\r\n selectors: sel,\r\n declarations: decls,\r\n });\r\n }\r\n function atdocument() {\r\n const pos = position();\r\n const m = match(/^@([-\\w]+)?document *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const vendor = trim(m[1]);\r\n const doc = trim(m[2]);\r\n if (!open()) {\r\n return error(`@document missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@document missing '}'`);\r\n }\r\n return pos({\r\n type: 'document',\r\n document: doc,\r\n vendor,\r\n rules: style,\r\n });\r\n }\r\n function atfontface() {\r\n const pos = position();\r\n const m = match(/^@font-face\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n if (!open()) {\r\n return error(`@font-face missing '{'`);\r\n }\r\n let decls = comments();\r\n let decl;\r\n while ((decl = declaration())) {\r\n decls.push(decl);\r\n decls = decls.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(`@font-face missing '}'`);\r\n }\r\n return pos({\r\n type: 'font-face',\r\n declarations: decls,\r\n });\r\n }\r\n const atimport = _compileAtrule('import');\r\n const atcharset = _compileAtrule('charset');\r\n const atnamespace = _compileAtrule('namespace');\r\n function _compileAtrule(name) {\r\n const re = new RegExp('^@' + name + '\\\\s*([^;]+);');\r\n return () => {\r\n const pos = position();\r\n const m = match(re);\r\n if (!m) {\r\n return;\r\n }\r\n const ret = { type: name };\r\n ret[name] = m[1].trim();\r\n return pos(ret);\r\n };\r\n }\r\n function atrule() {\r\n if (css[0] !== '@') {\r\n return;\r\n }\r\n return (atkeyframes() ||\r\n atmedia() ||\r\n atcustommedia() ||\r\n atsupports() ||\r\n atimport() ||\r\n atcharset() ||\r\n atnamespace() ||\r\n atdocument() ||\r\n atpage() ||\r\n athost() ||\r\n atfontface());\r\n }\r\n function rule() {\r\n const pos = position();\r\n const sel = selector();\r\n if (!sel) {\r\n return error('selector missing');\r\n }\r\n comments();\r\n return pos({\r\n type: 'rule',\r\n selectors: sel,\r\n declarations: declarations(),\r\n });\r\n }\r\n return addParent(stylesheet());\r\n}\r\nfunction trim(str) {\r\n return str ? str.replace(/^\\s+|\\s+$/g, '') : '';\r\n}\r\nfunction addParent(obj, parent) {\r\n const isNode = obj && typeof obj.type === 'string';\r\n const childParent = isNode ? obj : parent;\r\n for (const k of Object.keys(obj)) {\r\n const value = obj[k];\r\n if (Array.isArray(value)) {\r\n value.forEach((v) => {\r\n addParent(v, childParent);\r\n });\r\n }\r\n else if (value && typeof value === 'object') {\r\n addParent(value, childParent);\r\n }\r\n }\r\n if (isNode) {\r\n Object.defineProperty(obj, 'parent', {\r\n configurable: true,\r\n writable: true,\r\n enumerable: false,\r\n value: parent || null,\r\n });\r\n }\r\n return obj;\r\n}\n\nconst tagMap = {\r\n script: 'noscript',\r\n altglyph: 'altGlyph',\r\n altglyphdef: 'altGlyphDef',\r\n altglyphitem: 'altGlyphItem',\r\n animatecolor: 'animateColor',\r\n animatemotion: 'animateMotion',\r\n animatetransform: 'animateTransform',\r\n clippath: 'clipPath',\r\n feblend: 'feBlend',\r\n fecolormatrix: 'feColorMatrix',\r\n fecomponenttransfer: 'feComponentTransfer',\r\n fecomposite: 'feComposite',\r\n feconvolvematrix: 'feConvolveMatrix',\r\n fediffuselighting: 'feDiffuseLighting',\r\n fedisplacementmap: 'feDisplacementMap',\r\n fedistantlight: 'feDistantLight',\r\n fedropshadow: 'feDropShadow',\r\n feflood: 'feFlood',\r\n fefunca: 'feFuncA',\r\n fefuncb: 'feFuncB',\r\n fefuncg: 'feFuncG',\r\n fefuncr: 'feFuncR',\r\n fegaussianblur: 'feGaussianBlur',\r\n feimage: 'feImage',\r\n femerge: 'feMerge',\r\n femergenode: 'feMergeNode',\r\n femorphology: 'feMorphology',\r\n feoffset: 'feOffset',\r\n fepointlight: 'fePointLight',\r\n fespecularlighting: 'feSpecularLighting',\r\n fespotlight: 'feSpotLight',\r\n fetile: 'feTile',\r\n feturbulence: 'feTurbulence',\r\n foreignobject: 'foreignObject',\r\n glyphref: 'glyphRef',\r\n lineargradient: 'linearGradient',\r\n radialgradient: 'radialGradient',\r\n};\r\nfunction getTagName(n) {\r\n let tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\r\n if (tagName === 'link' && n.attributes._cssText) {\r\n tagName = 'style';\r\n }\r\n return tagName;\r\n}\r\nfunction escapeRegExp(str) {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\nconst MEDIA_SELECTOR = /(max|min)-device-(width|height)/;\r\nconst MEDIA_SELECTOR_GLOBAL = new RegExp(MEDIA_SELECTOR.source, 'g');\r\nconst HOVER_SELECTOR = /([^\\\\]):hover/;\r\nconst HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, 'g');\r\nfunction adaptCssForReplay(cssText, cache) {\r\n const cachedStyle = cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.get(cssText);\r\n if (cachedStyle)\r\n return cachedStyle;\r\n const ast = parse(cssText, {\r\n silent: true,\r\n });\r\n if (!ast.stylesheet) {\r\n return cssText;\r\n }\r\n const selectors = [];\r\n const medias = [];\r\n function getSelectors(rule) {\r\n if ('selectors' in rule && rule.selectors) {\r\n rule.selectors.forEach((selector) => {\r\n if (HOVER_SELECTOR.test(selector)) {\r\n selectors.push(selector);\r\n }\r\n });\r\n }\r\n if ('media' in rule && rule.media && MEDIA_SELECTOR.test(rule.media)) {\r\n medias.push(rule.media);\r\n }\r\n if ('rules' in rule && rule.rules) {\r\n rule.rules.forEach(getSelectors);\r\n }\r\n }\r\n getSelectors(ast.stylesheet);\r\n let result = cssText;\r\n if (selectors.length > 0) {\r\n const selectorMatcher = new RegExp(selectors\r\n .filter((selector, index) => selectors.indexOf(selector) === index)\r\n .sort((a, b) => b.length - a.length)\r\n .map((selector) => {\r\n return escapeRegExp(selector);\r\n })\r\n .join('|'), 'g');\r\n result = result.replace(selectorMatcher, (selector) => {\r\n const newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, '$1.\\\\:hover');\r\n return `${selector}, ${newSelector}`;\r\n });\r\n }\r\n if (medias.length > 0) {\r\n const mediaMatcher = new RegExp(medias\r\n .filter((media, index) => medias.indexOf(media) === index)\r\n .sort((a, b) => b.length - a.length)\r\n .map((media) => {\r\n return escapeRegExp(media);\r\n })\r\n .join('|'), 'g');\r\n result = result.replace(mediaMatcher, (media) => {\r\n return media.replace(MEDIA_SELECTOR_GLOBAL, '$1-$2');\r\n });\r\n }\r\n cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.set(cssText, result);\r\n return result;\r\n}\r\nfunction createCache() {\r\n const stylesWithHoverClass = new Map();\r\n return {\r\n stylesWithHoverClass,\r\n };\r\n}\r\nfunction buildNode(n, options) {\r\n var _a;\r\n const { doc, hackCss, cache } = options;\r\n switch (n.type) {\r\n case NodeType.Document:\r\n return doc.implementation.createDocument(null, '', null);\r\n case NodeType.DocumentType:\r\n return doc.implementation.createDocumentType(n.name || 'html', n.publicId, n.systemId);\r\n case NodeType.Element: {\r\n const tagName = getTagName(n);\r\n let node;\r\n if (n.isSVG) {\r\n node = doc.createElementNS('http://www.w3.org/2000/svg', tagName);\r\n }\r\n else {\r\n if (n.isCustom &&\r\n ((_a = doc.defaultView) === null || _a === void 0 ? void 0 : _a.customElements) &&\r\n !doc.defaultView.customElements.get(n.tagName))\r\n doc.defaultView.customElements.define(n.tagName, class extends doc.defaultView.HTMLElement {\r\n });\r\n node = doc.createElement(tagName);\r\n }\r\n const specialAttributes = {};\r\n for (const name in n.attributes) {\r\n if (!Object.prototype.hasOwnProperty.call(n.attributes, name)) {\r\n continue;\r\n }\r\n let value = n.attributes[name];\r\n if (tagName === 'option' &&\r\n name === 'selected' &&\r\n value === false) {\r\n continue;\r\n }\r\n if (value === null) {\r\n continue;\r\n }\r\n if (value === true)\r\n value = '';\r\n if (name.startsWith('rr_')) {\r\n specialAttributes[name] = value;\r\n continue;\r\n }\r\n const isTextarea = tagName === 'textarea' && name === 'value';\r\n const isRemoteOrDynamicCss = tagName === 'style' && name === '_cssText';\r\n if (isRemoteOrDynamicCss && hackCss && typeof value === 'string') {\r\n value = adaptCssForReplay(value, cache);\r\n }\r\n if ((isTextarea || isRemoteOrDynamicCss) && typeof value === 'string') {\r\n node.appendChild(doc.createTextNode(value));\r\n n.childNodes = [];\r\n continue;\r\n }\r\n try {\r\n if (n.isSVG && name === 'xlink:href') {\r\n node.setAttributeNS('http://www.w3.org/1999/xlink', name, value.toString());\r\n }\r\n else if (name === 'onload' ||\r\n name === 'onclick' ||\r\n name.substring(0, 7) === 'onmouse') {\r\n node.setAttribute('_' + name, value.toString());\r\n }\r\n else if (tagName === 'meta' &&\r\n n.attributes['http-equiv'] === 'Content-Security-Policy' &&\r\n name === 'content') {\r\n node.setAttribute('csp-content', value.toString());\r\n continue;\r\n }\r\n else if (tagName === 'link' &&\r\n (n.attributes.rel === 'preload' ||\r\n n.attributes.rel === 'modulepreload') &&\r\n n.attributes.as === 'script') {\r\n }\r\n else if (tagName === 'link' &&\r\n n.attributes.rel === 'prefetch' &&\r\n typeof n.attributes.href === 'string' &&\r\n n.attributes.href.endsWith('.js')) {\r\n }\r\n else if (tagName === 'img' &&\r\n n.attributes.srcset &&\r\n n.attributes.rr_dataURL) {\r\n node.setAttribute('rrweb-original-srcset', n.attributes.srcset);\r\n }\r\n else {\r\n node.setAttribute(name, value.toString());\r\n }\r\n }\r\n catch (error) {\r\n }\r\n }\r\n for (const name in specialAttributes) {\r\n const value = specialAttributes[name];\r\n if (tagName === 'canvas' && name === 'rr_dataURL') {\r\n const image = document.createElement('img');\r\n image.onload = () => {\r\n const ctx = node.getContext('2d');\r\n if (ctx) {\r\n ctx.drawImage(image, 0, 0, image.width, image.height);\r\n }\r\n };\r\n image.src = value.toString();\r\n if (node.RRNodeType)\r\n node.rr_dataURL = value.toString();\r\n }\r\n else if (tagName === 'img' && name === 'rr_dataURL') {\r\n const image = node;\r\n if (!image.currentSrc.startsWith('data:')) {\r\n image.setAttribute('rrweb-original-src', n.attributes.src);\r\n image.src = value.toString();\r\n }\r\n }\r\n if (name === 'rr_width') {\r\n node.style.width = value.toString();\r\n }\r\n else if (name === 'rr_height') {\r\n node.style.height = value.toString();\r\n }\r\n else if (name === 'rr_mediaCurrentTime' &&\r\n typeof value === 'number') {\r\n node.currentTime = value;\r\n }\r\n else if (name === 'rr_mediaState') {\r\n switch (value) {\r\n case 'played':\r\n node\r\n .play()\r\n .catch((e) => console.warn('media playback error', e));\r\n break;\r\n case 'paused':\r\n node.pause();\r\n break;\r\n }\r\n }\r\n else if (name === 'rr_mediaPlaybackRate' &&\r\n typeof value === 'number') {\r\n node.playbackRate = value;\r\n }\r\n else if (name === 'rr_mediaMuted' && typeof value === 'boolean') {\r\n node.muted = value;\r\n }\r\n else if (name === 'rr_mediaLoop' && typeof value === 'boolean') {\r\n node.loop = value;\r\n }\r\n else if (name === 'rr_mediaVolume' && typeof value === 'number') {\r\n node.volume = value;\r\n }\r\n }\r\n if (n.isShadowHost) {\r\n if (!node.shadowRoot) {\r\n node.attachShadow({ mode: 'open' });\r\n }\r\n else {\r\n while (node.shadowRoot.firstChild) {\r\n node.shadowRoot.removeChild(node.shadowRoot.firstChild);\r\n }\r\n }\r\n }\r\n return node;\r\n }\r\n case NodeType.Text:\r\n return doc.createTextNode(n.isStyle && hackCss\r\n ? adaptCssForReplay(n.textContent, cache)\r\n : n.textContent);\r\n case NodeType.CDATA:\r\n return doc.createCDATASection(n.textContent);\r\n case NodeType.Comment:\r\n return doc.createComment(n.textContent);\r\n default:\r\n return null;\r\n }\r\n}\r\nfunction buildNodeWithSN(n, options) {\r\n const { doc, mirror, skipChild = false, hackCss = true, afterAppend, cache, } = options;\r\n if (mirror.has(n.id)) {\r\n const nodeInMirror = mirror.getNode(n.id);\r\n const meta = mirror.getMeta(nodeInMirror);\r\n if (isNodeMetaEqual(meta, n))\r\n return mirror.getNode(n.id);\r\n }\r\n let node = buildNode(n, { doc, hackCss, cache });\r\n if (!node) {\r\n return null;\r\n }\r\n if (n.rootId && mirror.getNode(n.rootId) !== doc) {\r\n mirror.replace(n.rootId, doc);\r\n }\r\n if (n.type === NodeType.Document) {\r\n doc.close();\r\n doc.open();\r\n if (n.compatMode === 'BackCompat' &&\r\n n.childNodes &&\r\n n.childNodes[0].type !== NodeType.DocumentType) {\r\n if (n.childNodes[0].type === NodeType.Element &&\r\n 'xmlns' in n.childNodes[0].attributes &&\r\n n.childNodes[0].attributes.xmlns === 'http://www.w3.org/1999/xhtml') {\r\n doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">');\r\n }\r\n else {\r\n doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">');\r\n }\r\n }\r\n node = doc;\r\n }\r\n mirror.add(node, n);\r\n if ((n.type === NodeType.Document || n.type === NodeType.Element) &&\r\n !skipChild) {\r\n for (const childN of n.childNodes) {\r\n const childNode = buildNodeWithSN(childN, {\r\n doc,\r\n mirror,\r\n skipChild: false,\r\n hackCss,\r\n afterAppend,\r\n cache,\r\n });\r\n if (!childNode) {\r\n console.warn('Failed to rebuild', childN);\r\n continue;\r\n }\r\n if (childN.isShadow && isElement(node) && node.shadowRoot) {\r\n node.shadowRoot.appendChild(childNode);\r\n }\r\n else if (n.type === NodeType.Document &&\r\n childN.type == NodeType.Element) {\r\n const htmlElement = childNode;\r\n let body = null;\r\n htmlElement.childNodes.forEach((child) => {\r\n if (child.nodeName === 'BODY')\r\n body = child;\r\n });\r\n if (body) {\r\n htmlElement.removeChild(body);\r\n node.appendChild(childNode);\r\n htmlElement.appendChild(body);\r\n }\r\n else {\r\n node.appendChild(childNode);\r\n }\r\n }\r\n else {\r\n node.appendChild(childNode);\r\n }\r\n if (afterAppend) {\r\n afterAppend(childNode, childN.id);\r\n }\r\n }\r\n }\r\n return node;\r\n}\r\nfunction visit(mirror, onVisit) {\r\n function walk(node) {\r\n onVisit(node);\r\n }\r\n for (const id of mirror.getIds()) {\r\n if (mirror.has(id)) {\r\n walk(mirror.getNode(id));\r\n }\r\n }\r\n}\r\nfunction handleScroll(node, mirror) {\r\n const n = mirror.getMeta(node);\r\n if ((n === null || n === void 0 ? void 0 : n.type) !== NodeType.Element) {\r\n return;\r\n }\r\n const el = node;\r\n for (const name in n.attributes) {\r\n if (!(Object.prototype.hasOwnProperty.call(n.attributes, name) &&\r\n name.startsWith('rr_'))) {\r\n continue;\r\n }\r\n const value = n.attributes[name];\r\n if (name === 'rr_scrollLeft') {\r\n el.scrollLeft = value;\r\n }\r\n if (name === 'rr_scrollTop') {\r\n el.scrollTop = value;\r\n }\r\n }\r\n}\r\nfunction rebuild(n, options) {\r\n const { doc, onVisit, hackCss = true, afterAppend, cache, mirror = new Mirror(), } = options;\r\n const node = buildNodeWithSN(n, {\r\n doc,\r\n mirror,\r\n skipChild: false,\r\n hackCss,\r\n afterAppend,\r\n cache,\r\n });\r\n visit(mirror, (visitedNode) => {\r\n if (onVisit) {\r\n onVisit(visitedNode);\r\n }\r\n handleScroll(visitedNode, mirror);\r\n });\r\n return node;\r\n}\n\nexport { IGNORED_NODE, Mirror, NodeType, adaptCssForReplay, buildNodeWithSN, classMatchesRegex, createCache, createMirror, escapeImportStatement, extractFileExtension, fixSafariColons, genId, getInputType, ignoreAttribute, is2DCanvasBlank, isCSSImportRule, isCSSStyleRule, isElement, isNativeShadowDom, isNodeMetaEqual, isShadowRoot, maskInputValue, needMaskingText, rebuild, serializeNodeWithId, snapshot, stringifyRule, stringifyStylesheet, toLowerCase, transformAttribute };\n","import { classMatchesRegex, IGNORED_NODE, isShadowRoot } from '../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nfunction on(type, fn, target = document) {\r\n const options = { capture: true, passive: true };\r\n target.addEventListener(type, fn, options);\r\n return () => target.removeEventListener(type, fn, options);\r\n}\r\nconst DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +\r\n '\\r\\n' +\r\n 'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\r\n '\\r\\n' +\r\n 'or you can use record.mirror to access the mirror instance during recording.';\r\nlet _mirror = {\r\n map: {},\r\n getId() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return -1;\r\n },\r\n getNode() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return null;\r\n },\r\n removeNodeFromMap() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n },\r\n has() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return false;\r\n },\r\n reset() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n },\r\n};\r\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\r\n _mirror = new Proxy(_mirror, {\r\n get(target, prop, receiver) {\r\n if (prop === 'map') {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n }\r\n return Reflect.get(target, prop, receiver);\r\n },\r\n });\r\n}\r\nfunction throttle(func, wait, options = {}) {\r\n let timeout = null;\r\n let previous = 0;\r\n return function (...args) {\r\n const now = Date.now();\r\n if (!previous && options.leading === false) {\r\n previous = now;\r\n }\r\n const remaining = wait - (now - previous);\r\n const context = this;\r\n if (remaining <= 0 || remaining > wait) {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n timeout = null;\r\n }\r\n previous = now;\r\n func.apply(context, args);\r\n }\r\n else if (!timeout && options.trailing !== false) {\r\n timeout = setTimeout(() => {\r\n previous = options.leading === false ? 0 : Date.now();\r\n timeout = null;\r\n func.apply(context, args);\r\n }, remaining);\r\n }\r\n };\r\n}\r\nfunction hookSetter(target, key, d, isRevoked, win = window) {\r\n const original = win.Object.getOwnPropertyDescriptor(target, key);\r\n win.Object.defineProperty(target, key, isRevoked\r\n ? d\r\n : {\r\n set(value) {\r\n setTimeout(() => {\r\n d.set.call(this, value);\r\n }, 0);\r\n if (original && original.set) {\r\n original.set.call(this, value);\r\n }\r\n },\r\n });\r\n return () => hookSetter(target, key, original || {}, true);\r\n}\r\nfunction patch(source, name, replacement) {\r\n try {\r\n if (!(name in source)) {\r\n return () => {\r\n };\r\n }\r\n const original = source[name];\r\n const wrapped = replacement(original);\r\n if (typeof wrapped === 'function') {\r\n wrapped.prototype = wrapped.prototype || {};\r\n Object.defineProperties(wrapped, {\r\n __rrweb_original__: {\r\n enumerable: false,\r\n value: original,\r\n },\r\n });\r\n }\r\n source[name] = wrapped;\r\n return () => {\r\n source[name] = original;\r\n };\r\n }\r\n catch (_a) {\r\n return () => {\r\n };\r\n }\r\n}\r\nlet nowTimestamp = Date.now;\r\nif (!(/[1-9][0-9]{12}/.test(Date.now().toString()))) {\r\n nowTimestamp = () => new Date().getTime();\r\n}\r\nfunction getWindowScroll(win) {\r\n var _a, _b, _c, _d, _e, _f;\r\n const doc = win.document;\r\n return {\r\n left: doc.scrollingElement\r\n ? doc.scrollingElement.scrollLeft\r\n : win.pageXOffset !== undefined\r\n ? win.pageXOffset\r\n : (doc === null || doc === void 0 ? void 0 : doc.documentElement.scrollLeft) ||\r\n ((_b = (_a = doc === null || doc === void 0 ? void 0 : doc.body) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.scrollLeft) ||\r\n ((_c = doc === null || doc === void 0 ? void 0 : doc.body) === null || _c === void 0 ? void 0 : _c.scrollLeft) ||\r\n 0,\r\n top: doc.scrollingElement\r\n ? doc.scrollingElement.scrollTop\r\n : win.pageYOffset !== undefined\r\n ? win.pageYOffset\r\n : (doc === null || doc === void 0 ? void 0 : doc.documentElement.scrollTop) ||\r\n ((_e = (_d = doc === null || doc === void 0 ? void 0 : doc.body) === null || _d === void 0 ? void 0 : _d.parentElement) === null || _e === void 0 ? void 0 : _e.scrollTop) ||\r\n ((_f = doc === null || doc === void 0 ? void 0 : doc.body) === null || _f === void 0 ? void 0 : _f.scrollTop) ||\r\n 0,\r\n };\r\n}\r\nfunction getWindowHeight() {\r\n return (window.innerHeight ||\r\n (document.documentElement && document.documentElement.clientHeight) ||\r\n (document.body && document.body.clientHeight));\r\n}\r\nfunction getWindowWidth() {\r\n return (window.innerWidth ||\r\n (document.documentElement && document.documentElement.clientWidth) ||\r\n (document.body && document.body.clientWidth));\r\n}\r\nfunction closestElementOfNode(node) {\r\n if (!node) {\r\n return null;\r\n }\r\n const el = node.nodeType === node.ELEMENT_NODE\r\n ? node\r\n : node.parentElement;\r\n return el;\r\n}\r\nfunction isBlocked(node, blockClass, blockSelector, checkAncestors) {\r\n if (!node) {\r\n return false;\r\n }\r\n const el = closestElementOfNode(node);\r\n if (!el) {\r\n return false;\r\n }\r\n try {\r\n if (typeof blockClass === 'string') {\r\n if (el.classList.contains(blockClass))\r\n return true;\r\n if (checkAncestors && el.closest('.' + blockClass) !== null)\r\n return true;\r\n }\r\n else {\r\n if (classMatchesRegex(el, blockClass, checkAncestors))\r\n return true;\r\n }\r\n }\r\n catch (e) {\r\n }\r\n if (blockSelector) {\r\n if (el.matches(blockSelector))\r\n return true;\r\n if (checkAncestors && el.closest(blockSelector) !== null)\r\n return true;\r\n }\r\n return false;\r\n}\r\nfunction isSerialized(n, mirror) {\r\n return mirror.getId(n) !== -1;\r\n}\r\nfunction isIgnored(n, mirror) {\r\n return mirror.getId(n) === IGNORED_NODE;\r\n}\r\nfunction isAncestorRemoved(target, mirror) {\r\n if (isShadowRoot(target)) {\r\n return false;\r\n }\r\n const id = mirror.getId(target);\r\n if (!mirror.has(id)) {\r\n return true;\r\n }\r\n if (target.parentNode &&\r\n target.parentNode.nodeType === target.DOCUMENT_NODE) {\r\n return false;\r\n }\r\n if (!target.parentNode) {\r\n return true;\r\n }\r\n return isAncestorRemoved(target.parentNode, mirror);\r\n}\r\nfunction legacy_isTouchEvent(event) {\r\n return Boolean(event.changedTouches);\r\n}\r\nfunction polyfill(win = window) {\r\n if ('NodeList' in win && !win.NodeList.prototype.forEach) {\r\n win.NodeList.prototype.forEach = Array.prototype\r\n .forEach;\r\n }\r\n if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\r\n win.DOMTokenList.prototype.forEach = Array.prototype\r\n .forEach;\r\n }\r\n if (!Node.prototype.contains) {\r\n Node.prototype.contains = (...args) => {\r\n let node = args[0];\r\n if (!(0 in args)) {\r\n throw new TypeError('1 argument is required');\r\n }\r\n do {\r\n if (this === node) {\r\n return true;\r\n }\r\n } while ((node = node && node.parentNode));\r\n return false;\r\n };\r\n }\r\n}\r\nfunction queueToResolveTrees(queue) {\r\n const queueNodeMap = {};\r\n const putIntoMap = (m, parent) => {\r\n const nodeInTree = {\r\n value: m,\r\n parent,\r\n children: [],\r\n };\r\n queueNodeMap[m.node.id] = nodeInTree;\r\n return nodeInTree;\r\n };\r\n const queueNodeTrees = [];\r\n for (const mutation of queue) {\r\n const { nextId, parentId } = mutation;\r\n if (nextId && nextId in queueNodeMap) {\r\n const nextInTree = queueNodeMap[nextId];\r\n if (nextInTree.parent) {\r\n const idx = nextInTree.parent.children.indexOf(nextInTree);\r\n nextInTree.parent.children.splice(idx, 0, putIntoMap(mutation, nextInTree.parent));\r\n }\r\n else {\r\n const idx = queueNodeTrees.indexOf(nextInTree);\r\n queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));\r\n }\r\n continue;\r\n }\r\n if (parentId in queueNodeMap) {\r\n const parentInTree = queueNodeMap[parentId];\r\n parentInTree.children.push(putIntoMap(mutation, parentInTree));\r\n continue;\r\n }\r\n queueNodeTrees.push(putIntoMap(mutation, null));\r\n }\r\n return queueNodeTrees;\r\n}\r\nfunction iterateResolveTree(tree, cb) {\r\n cb(tree.value);\r\n for (let i = tree.children.length - 1; i >= 0; i--) {\r\n iterateResolveTree(tree.children[i], cb);\r\n }\r\n}\r\nfunction isSerializedIframe(n, mirror) {\r\n return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));\r\n}\r\nfunction isSerializedStylesheet(n, mirror) {\r\n return Boolean(n.nodeName === 'LINK' &&\r\n n.nodeType === n.ELEMENT_NODE &&\r\n n.getAttribute &&\r\n n.getAttribute('rel') === 'stylesheet' &&\r\n mirror.getMeta(n));\r\n}\r\nfunction getBaseDimension(node, rootIframe) {\r\n var _a, _b;\r\n const frameElement = (_b = (_a = node.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView) === null || _b === void 0 ? void 0 : _b.frameElement;\r\n if (!frameElement || frameElement === rootIframe) {\r\n return {\r\n x: 0,\r\n y: 0,\r\n relativeScale: 1,\r\n absoluteScale: 1,\r\n };\r\n }\r\n const frameDimension = frameElement.getBoundingClientRect();\r\n const frameBaseDimension = getBaseDimension(frameElement, rootIframe);\r\n const relativeScale = frameDimension.height / frameElement.clientHeight;\r\n return {\r\n x: frameDimension.x * frameBaseDimension.relativeScale +\r\n frameBaseDimension.x,\r\n y: frameDimension.y * frameBaseDimension.relativeScale +\r\n frameBaseDimension.y,\r\n relativeScale,\r\n absoluteScale: frameBaseDimension.absoluteScale * relativeScale,\r\n };\r\n}\r\nfunction hasShadowRoot(n) {\r\n return Boolean(n === null || n === void 0 ? void 0 : n.shadowRoot);\r\n}\r\nfunction getNestedRule(rules, position) {\r\n const rule = rules[position[0]];\r\n if (position.length === 1) {\r\n return rule;\r\n }\r\n else {\r\n return getNestedRule(rule.cssRules[position[1]].cssRules, position.slice(2));\r\n }\r\n}\r\nfunction getPositionsAndIndex(nestedIndex) {\r\n const positions = [...nestedIndex];\r\n const index = positions.pop();\r\n return { positions, index };\r\n}\r\nfunction uniqueTextMutations(mutations) {\r\n const idSet = new Set();\r\n const uniqueMutations = [];\r\n for (let i = mutations.length; i--;) {\r\n const mutation = mutations[i];\r\n if (!idSet.has(mutation.id)) {\r\n uniqueMutations.push(mutation);\r\n idSet.add(mutation.id);\r\n }\r\n }\r\n return uniqueMutations;\r\n}\r\nclass StyleSheetMirror {\r\n constructor() {\r\n this.id = 1;\r\n this.styleIDMap = new WeakMap();\r\n this.idStyleMap = new Map();\r\n }\r\n getId(stylesheet) {\r\n var _a;\r\n return (_a = this.styleIDMap.get(stylesheet)) !== null && _a !== void 0 ? _a : -1;\r\n }\r\n has(stylesheet) {\r\n return this.styleIDMap.has(stylesheet);\r\n }\r\n add(stylesheet, id) {\r\n if (this.has(stylesheet))\r\n return this.getId(stylesheet);\r\n let newId;\r\n if (id === undefined) {\r\n newId = this.id++;\r\n }\r\n else\r\n newId = id;\r\n this.styleIDMap.set(stylesheet, newId);\r\n this.idStyleMap.set(newId, stylesheet);\r\n return newId;\r\n }\r\n getStyle(id) {\r\n return this.idStyleMap.get(id) || null;\r\n }\r\n reset() {\r\n this.styleIDMap = new WeakMap();\r\n this.idStyleMap = new Map();\r\n this.id = 1;\r\n }\r\n generateId() {\r\n return this.id++;\r\n }\r\n}\r\nfunction getShadowHost(n) {\r\n var _a, _b;\r\n let shadowHost = null;\r\n if (((_b = (_a = n.getRootNode) === null || _a === void 0 ? void 0 : _a.call(n)) === null || _b === void 0 ? void 0 : _b.nodeType) === Node.DOCUMENT_FRAGMENT_NODE &&\r\n n.getRootNode().host)\r\n shadowHost = n.getRootNode().host;\r\n return shadowHost;\r\n}\r\nfunction getRootShadowHost(n) {\r\n let rootShadowHost = n;\r\n let shadowHost;\r\n while ((shadowHost = getShadowHost(rootShadowHost)))\r\n rootShadowHost = shadowHost;\r\n return rootShadowHost;\r\n}\r\nfunction shadowHostInDom(n) {\r\n const doc = n.ownerDocument;\r\n if (!doc)\r\n return false;\r\n const shadowHost = getRootShadowHost(n);\r\n return doc.contains(shadowHost);\r\n}\r\nfunction inDom(n) {\r\n const doc = n.ownerDocument;\r\n if (!doc)\r\n return false;\r\n return doc.contains(n) || shadowHostInDom(n);\r\n}\n\nexport { StyleSheetMirror, _mirror, closestElementOfNode, getBaseDimension, getNestedRule, getPositionsAndIndex, getRootShadowHost, getShadowHost, getWindowHeight, getWindowScroll, getWindowWidth, hasShadowRoot, hookSetter, inDom, isAncestorRemoved, isBlocked, isIgnored, isSerialized, isSerializedIframe, isSerializedStylesheet, iterateResolveTree, legacy_isTouchEvent, nowTimestamp, on, patch, polyfill, queueToResolveTrees, shadowHostInDom, throttle, uniqueTextMutations };\n","var EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n})(CanvasContext || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n ReplayerEvents2[\"Start\"] = \"start\";\n ReplayerEvents2[\"Pause\"] = \"pause\";\n ReplayerEvents2[\"Resume\"] = \"resume\";\n ReplayerEvents2[\"Resize\"] = \"resize\";\n ReplayerEvents2[\"Finish\"] = \"finish\";\n ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n ReplayerEvents2[\"Flush\"] = \"flush\";\n ReplayerEvents2[\"StateChange\"] = \"state-change\";\n ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n ReplayerEvents2[\"Destroy\"] = \"destroy\";\n return ReplayerEvents2;\n})(ReplayerEvents || {});\n\nexport { CanvasContext, EventType, IncrementalSource, MouseInteractions, PointerTypes, ReplayerEvents };\n","import { isShadowRoot, isNativeShadowDom, getInputType, maskInputValue, ignoreAttribute, transformAttribute, toLowerCase, needMaskingText, IGNORED_NODE, serializeNodeWithId } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { isIgnored, isBlocked, isSerialized, isAncestorRemoved, closestElementOfNode, hasShadowRoot, inDom, getShadowHost, isSerializedIframe, isSerializedStylesheet } from '../utils.js';\n\nfunction isNodeInLinkedList(n) {\r\n return '__ln' in n;\r\n}\r\nclass DoubleLinkedList {\r\n constructor() {\r\n this.length = 0;\r\n this.head = null;\r\n this.tail = null;\r\n }\r\n get(position) {\r\n if (position >= this.length) {\r\n throw new Error('Position outside of list range');\r\n }\r\n let current = this.head;\r\n for (let index = 0; index < position; index++) {\r\n current = (current === null || current === void 0 ? void 0 : current.next) || null;\r\n }\r\n return current;\r\n }\r\n addNode(n) {\r\n const node = {\r\n value: n,\r\n previous: null,\r\n next: null,\r\n };\r\n n.__ln = node;\r\n if (n.previousSibling && isNodeInLinkedList(n.previousSibling)) {\r\n const current = n.previousSibling.__ln.next;\r\n node.next = current;\r\n node.previous = n.previousSibling.__ln;\r\n n.previousSibling.__ln.next = node;\r\n if (current) {\r\n current.previous = node;\r\n }\r\n }\r\n else if (n.nextSibling &&\r\n isNodeInLinkedList(n.nextSibling) &&\r\n n.nextSibling.__ln.previous) {\r\n const current = n.nextSibling.__ln.previous;\r\n node.previous = current;\r\n node.next = n.nextSibling.__ln;\r\n n.nextSibling.__ln.previous = node;\r\n if (current) {\r\n current.next = node;\r\n }\r\n }\r\n else {\r\n if (this.head) {\r\n this.head.previous = node;\r\n }\r\n node.next = this.head;\r\n this.head = node;\r\n }\r\n if (node.next === null) {\r\n this.tail = node;\r\n }\r\n this.length++;\r\n }\r\n removeNode(n) {\r\n const current = n.__ln;\r\n if (!this.head) {\r\n return;\r\n }\r\n if (!current.previous) {\r\n this.head = current.next;\r\n if (this.head) {\r\n this.head.previous = null;\r\n }\r\n else {\r\n this.tail = null;\r\n }\r\n }\r\n else {\r\n current.previous.next = current.next;\r\n if (current.next) {\r\n current.next.previous = current.previous;\r\n }\r\n else {\r\n this.tail = current.previous;\r\n }\r\n }\r\n if (n.__ln) {\r\n delete n.__ln;\r\n }\r\n this.length--;\r\n }\r\n}\r\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\r\nclass MutationBuffer {\r\n constructor() {\r\n this.frozen = false;\r\n this.locked = false;\r\n this.texts = [];\r\n this.attributes = [];\r\n this.attributeMap = new WeakMap();\r\n this.removes = [];\r\n this.mapRemoves = [];\r\n this.movedMap = {};\r\n this.addedSet = new Set();\r\n this.movedSet = new Set();\r\n this.droppedSet = new Set();\r\n this.processMutations = (mutations) => {\r\n mutations.forEach(this.processMutation);\r\n this.emit();\r\n };\r\n this.emit = () => {\r\n if (this.frozen || this.locked) {\r\n return;\r\n }\r\n const adds = [];\r\n const addedIds = new Set();\r\n const addList = new DoubleLinkedList();\r\n const getNextId = (n) => {\r\n let ns = n;\r\n let nextId = IGNORED_NODE;\r\n while (nextId === IGNORED_NODE) {\r\n ns = ns && ns.nextSibling;\r\n nextId = ns && this.mirror.getId(ns);\r\n }\r\n return nextId;\r\n };\r\n const pushAdd = (n) => {\r\n if (!n.parentNode ||\r\n !inDom(n) ||\r\n n.parentNode.tagName === 'TEXTAREA') {\r\n return;\r\n }\r\n const parentId = isShadowRoot(n.parentNode)\r\n ? this.mirror.getId(getShadowHost(n))\r\n : this.mirror.getId(n.parentNode);\r\n const nextId = getNextId(n);\r\n if (parentId === -1 || nextId === -1) {\r\n return addList.addNode(n);\r\n }\r\n const sn = serializeNodeWithId(n, {\r\n doc: this.doc,\r\n mirror: this.mirror,\r\n blockClass: this.blockClass,\r\n blockSelector: this.blockSelector,\r\n maskTextClass: this.maskTextClass,\r\n maskTextSelector: this.maskTextSelector,\r\n skipChild: true,\r\n newlyAddedElement: true,\r\n inlineStylesheet: this.inlineStylesheet,\r\n maskInputOptions: this.maskInputOptions,\r\n maskTextFn: this.maskTextFn,\r\n maskInputFn: this.maskInputFn,\r\n slimDOMOptions: this.slimDOMOptions,\r\n dataURLOptions: this.dataURLOptions,\r\n recordCanvas: this.recordCanvas,\r\n inlineImages: this.inlineImages,\r\n onSerialize: (currentN) => {\r\n if (isSerializedIframe(currentN, this.mirror)) {\r\n this.iframeManager.addIframe(currentN);\r\n }\r\n if (isSerializedStylesheet(currentN, this.mirror)) {\r\n this.stylesheetManager.trackLinkElement(currentN);\r\n }\r\n if (hasShadowRoot(n)) {\r\n this.shadowDomManager.addShadowRoot(n.shadowRoot, this.doc);\r\n }\r\n },\r\n onIframeLoad: (iframe, childSn) => {\r\n this.iframeManager.attachIframe(iframe, childSn);\r\n this.shadowDomManager.observeAttachShadow(iframe);\r\n },\r\n onStylesheetLoad: (link, childSn) => {\r\n this.stylesheetManager.attachLinkElement(link, childSn);\r\n },\r\n });\r\n if (sn) {\r\n adds.push({\r\n parentId,\r\n nextId,\r\n node: sn,\r\n });\r\n addedIds.add(sn.id);\r\n }\r\n };\r\n while (this.mapRemoves.length) {\r\n this.mirror.removeNodeFromMap(this.mapRemoves.shift());\r\n }\r\n for (const n of this.movedSet) {\r\n if (isParentRemoved(this.removes, n, this.mirror) &&\r\n !this.movedSet.has(n.parentNode)) {\r\n continue;\r\n }\r\n pushAdd(n);\r\n }\r\n for (const n of this.addedSet) {\r\n if (!isAncestorInSet(this.droppedSet, n) &&\r\n !isParentRemoved(this.removes, n, this.mirror)) {\r\n pushAdd(n);\r\n }\r\n else if (isAncestorInSet(this.movedSet, n)) {\r\n pushAdd(n);\r\n }\r\n else {\r\n this.droppedSet.add(n);\r\n }\r\n }\r\n let candidate = null;\r\n while (addList.length) {\r\n let node = null;\r\n if (candidate) {\r\n const parentId = this.mirror.getId(candidate.value.parentNode);\r\n const nextId = getNextId(candidate.value);\r\n if (parentId !== -1 && nextId !== -1) {\r\n node = candidate;\r\n }\r\n }\r\n if (!node) {\r\n let tailNode = addList.tail;\r\n while (tailNode) {\r\n const _node = tailNode;\r\n tailNode = tailNode.previous;\r\n if (_node) {\r\n const parentId = this.mirror.getId(_node.value.parentNode);\r\n const nextId = getNextId(_node.value);\r\n if (nextId === -1)\r\n continue;\r\n else if (parentId !== -1) {\r\n node = _node;\r\n break;\r\n }\r\n else {\r\n const unhandledNode = _node.value;\r\n if (unhandledNode.parentNode &&\r\n unhandledNode.parentNode.nodeType ===\r\n Node.DOCUMENT_FRAGMENT_NODE) {\r\n const shadowHost = unhandledNode.parentNode\r\n .host;\r\n const parentId = this.mirror.getId(shadowHost);\r\n if (parentId !== -1) {\r\n node = _node;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (!node) {\r\n while (addList.head) {\r\n addList.removeNode(addList.head.value);\r\n }\r\n break;\r\n }\r\n candidate = node.previous;\r\n addList.removeNode(node.value);\r\n pushAdd(node.value);\r\n }\r\n const payload = {\r\n texts: this.texts\r\n .map((text) => {\r\n const n = text.node;\r\n if (n.parentNode &&\r\n n.parentNode.tagName === 'TEXTAREA') {\r\n this.genTextAreaValueMutation(n.parentNode);\r\n }\r\n return {\r\n id: this.mirror.getId(n),\r\n value: text.value,\r\n };\r\n })\r\n .filter((text) => !addedIds.has(text.id))\r\n .filter((text) => this.mirror.has(text.id)),\r\n attributes: this.attributes\r\n .map((attribute) => {\r\n const { attributes } = attribute;\r\n if (typeof attributes.style === 'string') {\r\n const diffAsStr = JSON.stringify(attribute.styleDiff);\r\n const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\r\n if (diffAsStr.length < attributes.style.length) {\r\n if ((diffAsStr + unchangedAsStr).split('var(').length ===\r\n attributes.style.split('var(').length) {\r\n attributes.style = attribute.styleDiff;\r\n }\r\n }\r\n }\r\n return {\r\n id: this.mirror.getId(attribute.node),\r\n attributes: attributes,\r\n };\r\n })\r\n .filter((attribute) => !addedIds.has(attribute.id))\r\n .filter((attribute) => this.mirror.has(attribute.id)),\r\n removes: this.removes,\r\n adds,\r\n };\r\n if (!payload.texts.length &&\r\n !payload.attributes.length &&\r\n !payload.removes.length &&\r\n !payload.adds.length) {\r\n return;\r\n }\r\n this.texts = [];\r\n this.attributes = [];\r\n this.attributeMap = new WeakMap();\r\n this.removes = [];\r\n this.addedSet = new Set();\r\n this.movedSet = new Set();\r\n this.droppedSet = new Set();\r\n this.movedMap = {};\r\n this.mutationCb(payload);\r\n };\r\n this.genTextAreaValueMutation = (textarea) => {\r\n let item = this.attributeMap.get(textarea);\r\n if (!item) {\r\n item = {\r\n node: textarea,\r\n attributes: {},\r\n styleDiff: {},\r\n _unchangedStyles: {},\r\n };\r\n this.attributes.push(item);\r\n this.attributeMap.set(textarea, item);\r\n }\r\n item.attributes.value = Array.from(textarea.childNodes, (cn) => cn.textContent || '').join('');\r\n };\r\n this.processMutation = (m) => {\r\n if (isIgnored(m.target, this.mirror)) {\r\n return;\r\n }\r\n switch (m.type) {\r\n case 'characterData': {\r\n const value = m.target.textContent;\r\n if (!isBlocked(m.target, this.blockClass, this.blockSelector, false) &&\r\n value !== m.oldValue) {\r\n this.texts.push({\r\n value: needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, true) && value\r\n ? this.maskTextFn\r\n ? this.maskTextFn(value, closestElementOfNode(m.target))\r\n : value.replace(/[\\S]/g, '*')\r\n : value,\r\n node: m.target,\r\n });\r\n }\r\n break;\r\n }\r\n case 'attributes': {\r\n const target = m.target;\r\n let attributeName = m.attributeName;\r\n let value = m.target.getAttribute(attributeName);\r\n if (attributeName === 'value') {\r\n const type = getInputType(target);\r\n value = maskInputValue({\r\n element: target,\r\n maskInputOptions: this.maskInputOptions,\r\n tagName: target.tagName,\r\n type,\r\n value,\r\n maskInputFn: this.maskInputFn,\r\n });\r\n }\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, false) ||\r\n value === m.oldValue) {\r\n return;\r\n }\r\n let item = this.attributeMap.get(m.target);\r\n if (target.tagName === 'IFRAME' &&\r\n attributeName === 'src' &&\r\n !this.keepIframeSrcFn(value)) {\r\n if (!target.contentDocument) {\r\n attributeName = 'rr_src';\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n if (!item) {\r\n item = {\r\n node: m.target,\r\n attributes: {},\r\n styleDiff: {},\r\n _unchangedStyles: {},\r\n };\r\n this.attributes.push(item);\r\n this.attributeMap.set(m.target, item);\r\n }\r\n if (attributeName === 'type' &&\r\n target.tagName === 'INPUT' &&\r\n (m.oldValue || '').toLowerCase() === 'password') {\r\n target.setAttribute('data-rr-is-password', 'true');\r\n }\r\n if (!ignoreAttribute(target.tagName, attributeName)) {\r\n item.attributes[attributeName] = transformAttribute(this.doc, toLowerCase(target.tagName), toLowerCase(attributeName), value);\r\n if (attributeName === 'style') {\r\n if (!this.unattachedDoc) {\r\n try {\r\n this.unattachedDoc =\r\n document.implementation.createHTMLDocument();\r\n }\r\n catch (e) {\r\n this.unattachedDoc = this.doc;\r\n }\r\n }\r\n const old = this.unattachedDoc.createElement('span');\r\n if (m.oldValue) {\r\n old.setAttribute('style', m.oldValue);\r\n }\r\n for (const pname of Array.from(target.style)) {\r\n const newValue = target.style.getPropertyValue(pname);\r\n const newPriority = target.style.getPropertyPriority(pname);\r\n if (newValue !== old.style.getPropertyValue(pname) ||\r\n newPriority !== old.style.getPropertyPriority(pname)) {\r\n if (newPriority === '') {\r\n item.styleDiff[pname] = newValue;\r\n }\r\n else {\r\n item.styleDiff[pname] = [newValue, newPriority];\r\n }\r\n }\r\n else {\r\n item._unchangedStyles[pname] = [newValue, newPriority];\r\n }\r\n }\r\n for (const pname of Array.from(old.style)) {\r\n if (target.style.getPropertyValue(pname) === '') {\r\n item.styleDiff[pname] = false;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case 'childList': {\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, true))\r\n return;\r\n if (m.target.tagName === 'TEXTAREA') {\r\n this.genTextAreaValueMutation(m.target);\r\n return;\r\n }\r\n m.addedNodes.forEach((n) => this.genAdds(n, m.target));\r\n m.removedNodes.forEach((n) => {\r\n const nodeId = this.mirror.getId(n);\r\n const parentId = isShadowRoot(m.target)\r\n ? this.mirror.getId(m.target.host)\r\n : this.mirror.getId(m.target);\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, false) ||\r\n isIgnored(n, this.mirror) ||\r\n !isSerialized(n, this.mirror)) {\r\n return;\r\n }\r\n if (this.addedSet.has(n)) {\r\n deepDelete(this.addedSet, n);\r\n this.droppedSet.add(n);\r\n }\r\n else if (this.addedSet.has(m.target) && nodeId === -1) ;\r\n else if (isAncestorRemoved(m.target, this.mirror)) ;\r\n else if (this.movedSet.has(n) &&\r\n this.movedMap[moveKey(nodeId, parentId)]) {\r\n deepDelete(this.movedSet, n);\r\n }\r\n else {\r\n this.removes.push({\r\n parentId,\r\n id: nodeId,\r\n isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target)\r\n ? true\r\n : undefined,\r\n });\r\n }\r\n this.mapRemoves.push(n);\r\n });\r\n break;\r\n }\r\n }\r\n };\r\n this.genAdds = (n, target) => {\r\n if (this.processedNodeManager.inOtherBuffer(n, this))\r\n return;\r\n if (this.addedSet.has(n) || this.movedSet.has(n))\r\n return;\r\n if (this.mirror.hasNode(n)) {\r\n if (isIgnored(n, this.mirror)) {\r\n return;\r\n }\r\n this.movedSet.add(n);\r\n let targetId = null;\r\n if (target && this.mirror.hasNode(target)) {\r\n targetId = this.mirror.getId(target);\r\n }\r\n if (targetId && targetId !== -1) {\r\n this.movedMap[moveKey(this.mirror.getId(n), targetId)] = true;\r\n }\r\n }\r\n else {\r\n this.addedSet.add(n);\r\n this.droppedSet.delete(n);\r\n }\r\n if (!isBlocked(n, this.blockClass, this.blockSelector, false)) {\r\n n.childNodes.forEach((childN) => this.genAdds(childN));\r\n if (hasShadowRoot(n)) {\r\n n.shadowRoot.childNodes.forEach((childN) => {\r\n this.processedNodeManager.add(childN, this);\r\n this.genAdds(childN, n);\r\n });\r\n }\r\n }\r\n };\r\n }\r\n init(options) {\r\n [\r\n 'mutationCb',\r\n 'blockClass',\r\n 'blockSelector',\r\n 'maskTextClass',\r\n 'maskTextSelector',\r\n 'inlineStylesheet',\r\n 'maskInputOptions',\r\n 'maskTextFn',\r\n 'maskInputFn',\r\n 'keepIframeSrcFn',\r\n 'recordCanvas',\r\n 'inlineImages',\r\n 'slimDOMOptions',\r\n 'dataURLOptions',\r\n 'doc',\r\n 'mirror',\r\n 'iframeManager',\r\n 'stylesheetManager',\r\n 'shadowDomManager',\r\n 'canvasManager',\r\n 'processedNodeManager',\r\n ].forEach((key) => {\r\n this[key] = options[key];\r\n });\r\n }\r\n freeze() {\r\n this.frozen = true;\r\n this.canvasManager.freeze();\r\n }\r\n unfreeze() {\r\n this.frozen = false;\r\n this.canvasManager.unfreeze();\r\n this.emit();\r\n }\r\n isFrozen() {\r\n return this.frozen;\r\n }\r\n lock() {\r\n this.locked = true;\r\n this.canvasManager.lock();\r\n }\r\n unlock() {\r\n this.locked = false;\r\n this.canvasManager.unlock();\r\n this.emit();\r\n }\r\n reset() {\r\n this.shadowDomManager.reset();\r\n this.canvasManager.reset();\r\n }\r\n}\r\nfunction deepDelete(addsSet, n) {\r\n addsSet.delete(n);\r\n n.childNodes.forEach((childN) => deepDelete(addsSet, childN));\r\n}\r\nfunction isParentRemoved(removes, n, mirror) {\r\n if (removes.length === 0)\r\n return false;\r\n return _isParentRemoved(removes, n, mirror);\r\n}\r\nfunction _isParentRemoved(removes, n, mirror) {\r\n const { parentNode } = n;\r\n if (!parentNode) {\r\n return false;\r\n }\r\n const parentId = mirror.getId(parentNode);\r\n if (removes.some((r) => r.id === parentId)) {\r\n return true;\r\n }\r\n return _isParentRemoved(removes, parentNode, mirror);\r\n}\r\nfunction isAncestorInSet(set, n) {\r\n if (set.size === 0)\r\n return false;\r\n return _isAncestorInSet(set, n);\r\n}\r\nfunction _isAncestorInSet(set, n) {\r\n const { parentNode } = n;\r\n if (!parentNode) {\r\n return false;\r\n }\r\n if (set.has(parentNode)) {\r\n return true;\r\n }\r\n return _isAncestorInSet(set, parentNode);\r\n}\n\nexport { MutationBuffer as default };\n","let errorHandler;\r\nfunction registerErrorHandler(handler) {\r\n errorHandler = handler;\r\n}\r\nfunction unregisterErrorHandler() {\r\n errorHandler = undefined;\r\n}\r\nconst callbackWrapper = (cb) => {\r\n if (!errorHandler) {\r\n return cb;\r\n }\r\n const rrwebWrapped = ((...rest) => {\r\n try {\r\n return cb(...rest);\r\n }\r\n catch (error) {\r\n if (errorHandler && errorHandler(error) === true) {\r\n return;\r\n }\r\n throw error;\r\n }\r\n });\r\n return rrwebWrapped;\r\n};\n\nexport { callbackWrapper, registerErrorHandler, unregisterErrorHandler };\n","import { toLowerCase, getInputType, maskInputValue } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { on, throttle, isBlocked, getWindowScroll, getWindowHeight, getWindowWidth, hookSetter, patch, legacy_isTouchEvent, nowTimestamp } from '../utils.js';\nimport { MouseInteractions, IncrementalSource, PointerTypes } from '../../../types/dist/types.js';\nimport MutationBuffer from './mutation.js';\nimport { callbackWrapper } from './error-handler.js';\n\nconst mutationBuffers = [];\r\nfunction getEventTarget(event) {\r\n try {\r\n if ('composedPath' in event) {\r\n const path = event.composedPath();\r\n if (path.length) {\r\n return path[0];\r\n }\r\n }\r\n else if ('path' in event && event.path.length) {\r\n return event.path[0];\r\n }\r\n }\r\n catch (_a) {\r\n }\r\n return event && event.target;\r\n}\r\nfunction initMutationObserver(options, rootEl) {\r\n var _a, _b;\r\n const mutationBuffer = new MutationBuffer();\r\n mutationBuffers.push(mutationBuffer);\r\n mutationBuffer.init(options);\r\n let mutationObserverCtor = window.MutationObserver ||\r\n window.__rrMutationObserver;\r\n const angularZoneSymbol = (_b = (_a = window === null || window === void 0 ? void 0 : window.Zone) === null || _a === void 0 ? void 0 : _a.__symbol__) === null || _b === void 0 ? void 0 : _b.call(_a, 'MutationObserver');\r\n if (angularZoneSymbol &&\r\n window[angularZoneSymbol]) {\r\n mutationObserverCtor = window[angularZoneSymbol];\r\n }\r\n const observer = new mutationObserverCtor(callbackWrapper(mutationBuffer.processMutations.bind(mutationBuffer)));\r\n observer.observe(rootEl, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n characterData: true,\r\n characterDataOldValue: true,\r\n childList: true,\r\n subtree: true,\r\n });\r\n return observer;\r\n}\r\nfunction initMoveObserver({ mousemoveCb, sampling, doc, mirror, }) {\r\n if (sampling.mousemove === false) {\r\n return () => {\r\n };\r\n }\r\n const threshold = typeof sampling.mousemove === 'number' ? sampling.mousemove : 50;\r\n const callbackThreshold = typeof sampling.mousemoveCallback === 'number'\r\n ? sampling.mousemoveCallback\r\n : 500;\r\n let positions = [];\r\n let timeBaseline;\r\n const wrappedCb = throttle(callbackWrapper((source) => {\r\n const totalOffset = Date.now() - timeBaseline;\r\n mousemoveCb(positions.map((p) => {\r\n p.timeOffset -= totalOffset;\r\n return p;\r\n }), source);\r\n positions = [];\r\n timeBaseline = null;\r\n }), callbackThreshold);\r\n const updatePosition = callbackWrapper(throttle(callbackWrapper((evt) => {\r\n const target = getEventTarget(evt);\r\n const { clientX, clientY } = legacy_isTouchEvent(evt)\r\n ? evt.changedTouches[0]\r\n : evt;\r\n if (!timeBaseline) {\r\n timeBaseline = nowTimestamp();\r\n }\r\n positions.push({\r\n x: clientX,\r\n y: clientY,\r\n id: mirror.getId(target),\r\n timeOffset: nowTimestamp() - timeBaseline,\r\n });\r\n wrappedCb(typeof DragEvent !== 'undefined' && evt instanceof DragEvent\r\n ? IncrementalSource.Drag\r\n : evt instanceof MouseEvent\r\n ? IncrementalSource.MouseMove\r\n : IncrementalSource.TouchMove);\r\n }), threshold, {\r\n trailing: false,\r\n }));\r\n const handlers = [\r\n on('mousemove', updatePosition, doc),\r\n on('touchmove', updatePosition, doc),\r\n on('drag', updatePosition, doc),\r\n ];\r\n return callbackWrapper(() => {\r\n handlers.forEach((h) => h());\r\n });\r\n}\r\nfunction initMouseInteractionObserver({ mouseInteractionCb, doc, mirror, blockClass, blockSelector, sampling, }) {\r\n if (sampling.mouseInteraction === false) {\r\n return () => {\r\n };\r\n }\r\n const disableMap = sampling.mouseInteraction === true ||\r\n sampling.mouseInteraction === undefined\r\n ? {}\r\n : sampling.mouseInteraction;\r\n const handlers = [];\r\n let currentPointerType = null;\r\n const getHandler = (eventKey) => {\r\n return (event) => {\r\n const target = getEventTarget(event);\r\n if (isBlocked(target, blockClass, blockSelector, true)) {\r\n return;\r\n }\r\n let pointerType = null;\r\n let thisEventKey = eventKey;\r\n if ('pointerType' in event) {\r\n switch (event.pointerType) {\r\n case 'mouse':\r\n pointerType = PointerTypes.Mouse;\r\n break;\r\n case 'touch':\r\n pointerType = PointerTypes.Touch;\r\n break;\r\n case 'pen':\r\n pointerType = PointerTypes.Pen;\r\n break;\r\n }\r\n if (pointerType === PointerTypes.Touch) {\r\n if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\r\n thisEventKey = 'TouchStart';\r\n }\r\n else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\r\n thisEventKey = 'TouchEnd';\r\n }\r\n }\r\n else if (pointerType === PointerTypes.Pen) ;\r\n }\r\n else if (legacy_isTouchEvent(event)) {\r\n pointerType = PointerTypes.Touch;\r\n }\r\n if (pointerType !== null) {\r\n currentPointerType = pointerType;\r\n if ((thisEventKey.startsWith('Touch') &&\r\n pointerType === PointerTypes.Touch) ||\r\n (thisEventKey.startsWith('Mouse') &&\r\n pointerType === PointerTypes.Mouse)) {\r\n pointerType = null;\r\n }\r\n }\r\n else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\r\n pointerType = currentPointerType;\r\n currentPointerType = null;\r\n }\r\n const e = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\r\n if (!e) {\r\n return;\r\n }\r\n const id = mirror.getId(target);\r\n const { clientX, clientY } = e;\r\n callbackWrapper(mouseInteractionCb)(Object.assign({ type: MouseInteractions[thisEventKey], id, x: clientX, y: clientY }, (pointerType !== null && { pointerType })));\r\n };\r\n };\r\n Object.keys(MouseInteractions)\r\n .filter((key) => Number.isNaN(Number(key)) &&\r\n !key.endsWith('_Departed') &&\r\n disableMap[key] !== false)\r\n .forEach((eventKey) => {\r\n let eventName = toLowerCase(eventKey);\r\n const handler = getHandler(eventKey);\r\n if (window.PointerEvent) {\r\n switch (MouseInteractions[eventKey]) {\r\n case MouseInteractions.MouseDown:\r\n case MouseInteractions.MouseUp:\r\n eventName = eventName.replace('mouse', 'pointer');\r\n break;\r\n case MouseInteractions.TouchStart:\r\n case MouseInteractions.TouchEnd:\r\n return;\r\n }\r\n }\r\n handlers.push(on(eventName, handler, doc));\r\n });\r\n return callbackWrapper(() => {\r\n handlers.forEach((h) => h());\r\n });\r\n}\r\nfunction initScrollObserver({ scrollCb, doc, mirror, blockClass, blockSelector, sampling, }) {\r\n const updatePosition = callbackWrapper(throttle(callbackWrapper((evt) => {\r\n const target = getEventTarget(evt);\r\n if (!target ||\r\n isBlocked(target, blockClass, blockSelector, true)) {\r\n return;\r\n }\r\n const id = mirror.getId(target);\r\n if (target === doc && doc.defaultView) {\r\n const scrollLeftTop = getWindowScroll(doc.defaultView);\r\n scrollCb({\r\n id,\r\n x: scrollLeftTop.left,\r\n y: scrollLeftTop.top,\r\n });\r\n }\r\n else {\r\n scrollCb({\r\n id,\r\n x: target.scrollLeft,\r\n y: target.scrollTop,\r\n });\r\n }\r\n }), sampling.scroll || 100));\r\n return on('scroll', updatePosition, doc);\r\n}\r\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\r\n let lastH = -1;\r\n let lastW = -1;\r\n const updateDimension = callbackWrapper(throttle(callbackWrapper(() => {\r\n const height = getWindowHeight();\r\n const width = getWindowWidth();\r\n if (lastH !== height || lastW !== width) {\r\n viewportResizeCb({\r\n width: Number(width),\r\n height: Number(height),\r\n });\r\n lastH = height;\r\n lastW = width;\r\n }\r\n }), 200));\r\n return on('resize', updateDimension, win);\r\n}\r\nconst INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];\r\nconst lastInputValueMap = new WeakMap();\r\nfunction initInputObserver({ inputCb, doc, mirror, blockClass, blockSelector, ignoreClass, ignoreSelector, maskInputOptions, maskInputFn, sampling, userTriggeredOnInput, }) {\r\n function eventHandler(event) {\r\n let target = getEventTarget(event);\r\n const userTriggered = event.isTrusted;\r\n const tagName = target && target.tagName;\r\n if (target && tagName === 'OPTION') {\r\n target = target.parentElement;\r\n }\r\n if (!target ||\r\n !tagName ||\r\n INPUT_TAGS.indexOf(tagName) < 0 ||\r\n isBlocked(target, blockClass, blockSelector, true)) {\r\n return;\r\n }\r\n if (target.classList.contains(ignoreClass) ||\r\n (ignoreSelector && target.matches(ignoreSelector))) {\r\n return;\r\n }\r\n let text = target.value;\r\n let isChecked = false;\r\n const type = getInputType(target) || '';\r\n if (type === 'radio' || type === 'checkbox') {\r\n isChecked = target.checked;\r\n }\r\n else if (maskInputOptions[tagName.toLowerCase()] ||\r\n maskInputOptions[type]) {\r\n text = maskInputValue({\r\n element: target,\r\n maskInputOptions,\r\n tagName,\r\n type,\r\n value: text,\r\n maskInputFn,\r\n });\r\n }\r\n cbWithDedup(target, userTriggeredOnInput\r\n ? { text, isChecked, userTriggered }\r\n : { text, isChecked });\r\n const name = target.name;\r\n if (type === 'radio' && name && isChecked) {\r\n doc\r\n .querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`)\r\n .forEach((el) => {\r\n if (el !== target) {\r\n const text = el.value;\r\n cbWithDedup(el, userTriggeredOnInput\r\n ? { text, isChecked: !isChecked, userTriggered: false }\r\n : { text, isChecked: !isChecked });\r\n }\r\n });\r\n }\r\n }\r\n function cbWithDedup(target, v) {\r\n const lastInputValue = lastInputValueMap.get(target);\r\n if (!lastInputValue ||\r\n lastInputValue.text !== v.text ||\r\n lastInputValue.isChecked !== v.isChecked) {\r\n lastInputValueMap.set(target, v);\r\n const id = mirror.getId(target);\r\n callbackWrapper(inputCb)(Object.assign(Object.assign({}, v), { id }));\r\n }\r\n }\r\n const events = sampling.input === 'last' ? ['change'] : ['input', 'change'];\r\n const handlers = events.map((eventName) => on(eventName, callbackWrapper(eventHandler), doc));\r\n const currentWindow = doc.defaultView;\r\n if (!currentWindow) {\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n }\r\n const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, 'value');\r\n const hookProperties = [\r\n [currentWindow.HTMLInputElement.prototype, 'value'],\r\n [currentWindow.HTMLInputElement.prototype, 'checked'],\r\n [currentWindow.HTMLSelectElement.prototype, 'value'],\r\n [currentWindow.HTMLTextAreaElement.prototype, 'value'],\r\n [currentWindow.HTMLSelectElement.prototype, 'selectedIndex'],\r\n [currentWindow.HTMLOptionElement.prototype, 'selected'],\r\n ];\r\n if (propertyDescriptor && propertyDescriptor.set) {\r\n handlers.push(...hookProperties.map((p) => hookSetter(p[0], p[1], {\r\n set() {\r\n callbackWrapper(eventHandler)({\r\n target: this,\r\n isTrusted: false,\r\n });\r\n },\r\n }, false, currentWindow)));\r\n }\r\n return callbackWrapper(() => {\r\n handlers.forEach((h) => h());\r\n });\r\n}\r\nfunction getNestedCSSRulePositions(rule) {\r\n const positions = [];\r\n function recurse(childRule, pos) {\r\n if ((hasNestedCSSRule('CSSGroupingRule') &&\r\n childRule.parentRule instanceof CSSGroupingRule) ||\r\n (hasNestedCSSRule('CSSMediaRule') &&\r\n childRule.parentRule instanceof CSSMediaRule) ||\r\n (hasNestedCSSRule('CSSSupportsRule') &&\r\n childRule.parentRule instanceof CSSSupportsRule) ||\r\n (hasNestedCSSRule('CSSConditionRule') &&\r\n childRule.parentRule instanceof CSSConditionRule)) {\r\n const rules = Array.from(childRule.parentRule.cssRules);\r\n const index = rules.indexOf(childRule);\r\n pos.unshift(index);\r\n }\r\n else if (childRule.parentStyleSheet) {\r\n const rules = Array.from(childRule.parentStyleSheet.cssRules);\r\n const index = rules.indexOf(childRule);\r\n pos.unshift(index);\r\n }\r\n return pos;\r\n }\r\n return recurse(rule, positions);\r\n}\r\nfunction getIdAndStyleId(sheet, mirror, styleMirror) {\r\n let id, styleId;\r\n if (!sheet)\r\n return {};\r\n if (sheet.ownerNode)\r\n id = mirror.getId(sheet.ownerNode);\r\n else\r\n styleId = styleMirror.getId(sheet);\r\n return {\r\n styleId,\r\n id,\r\n };\r\n}\r\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror, stylesheetManager }, { win }) {\r\n if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\r\n return () => {\r\n };\r\n }\r\n const insertRule = win.CSSStyleSheet.prototype.insertRule;\r\n win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [rule, index] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n adds: [{ rule, index }],\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\r\n win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [index] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n removes: [{ index }],\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n let replace;\r\n if (win.CSSStyleSheet.prototype.replace) {\r\n replace = win.CSSStyleSheet.prototype.replace;\r\n win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [text] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n replace: text,\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n }\r\n let replaceSync;\r\n if (win.CSSStyleSheet.prototype.replaceSync) {\r\n replaceSync = win.CSSStyleSheet.prototype.replaceSync;\r\n win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [text] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n replaceSync: text,\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n }\r\n const supportedNestedCSSRuleTypes = {};\r\n if (canMonkeyPatchNestedCSSRule('CSSGroupingRule')) {\r\n supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\r\n }\r\n else {\r\n if (canMonkeyPatchNestedCSSRule('CSSMediaRule')) {\r\n supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\r\n }\r\n if (canMonkeyPatchNestedCSSRule('CSSConditionRule')) {\r\n supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\r\n }\r\n if (canMonkeyPatchNestedCSSRule('CSSSupportsRule')) {\r\n supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\r\n }\r\n }\r\n const unmodifiedFunctions = {};\r\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n unmodifiedFunctions[typeKey] = {\r\n insertRule: type.prototype.insertRule,\r\n deleteRule: type.prototype.deleteRule,\r\n };\r\n type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [rule, index] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n adds: [\r\n {\r\n rule,\r\n index: [\r\n ...getNestedCSSRulePositions(thisArg),\r\n index || 0,\r\n ],\r\n },\r\n ],\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [index] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n removes: [\r\n { index: [...getNestedCSSRulePositions(thisArg), index] },\r\n ],\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n });\r\n return callbackWrapper(() => {\r\n win.CSSStyleSheet.prototype.insertRule = insertRule;\r\n win.CSSStyleSheet.prototype.deleteRule = deleteRule;\r\n replace && (win.CSSStyleSheet.prototype.replace = replace);\r\n replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\r\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\r\n type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\r\n });\r\n });\r\n}\r\nfunction initAdoptedStyleSheetObserver({ mirror, stylesheetManager, }, host) {\r\n var _a, _b, _c;\r\n let hostId = null;\r\n if (host.nodeName === '#document')\r\n hostId = mirror.getId(host);\r\n else\r\n hostId = mirror.getId(host.host);\r\n const patchTarget = host.nodeName === '#document'\r\n ? (_a = host.defaultView) === null || _a === void 0 ? void 0 : _a.Document\r\n : (_c = (_b = host.ownerDocument) === null || _b === void 0 ? void 0 : _b.defaultView) === null || _c === void 0 ? void 0 : _c.ShadowRoot;\r\n const originalPropertyDescriptor = (patchTarget === null || patchTarget === void 0 ? void 0 : patchTarget.prototype)\r\n ? Object.getOwnPropertyDescriptor(patchTarget === null || patchTarget === void 0 ? void 0 : patchTarget.prototype, 'adoptedStyleSheets')\r\n : undefined;\r\n if (hostId === null ||\r\n hostId === -1 ||\r\n !patchTarget ||\r\n !originalPropertyDescriptor)\r\n return () => {\r\n };\r\n Object.defineProperty(host, 'adoptedStyleSheets', {\r\n configurable: originalPropertyDescriptor.configurable,\r\n enumerable: originalPropertyDescriptor.enumerable,\r\n get() {\r\n var _a;\r\n return (_a = originalPropertyDescriptor.get) === null || _a === void 0 ? void 0 : _a.call(this);\r\n },\r\n set(sheets) {\r\n var _a;\r\n const result = (_a = originalPropertyDescriptor.set) === null || _a === void 0 ? void 0 : _a.call(this, sheets);\r\n if (hostId !== null && hostId !== -1) {\r\n try {\r\n stylesheetManager.adoptStyleSheets(sheets, hostId);\r\n }\r\n catch (e) {\r\n }\r\n }\r\n return result;\r\n },\r\n });\r\n return callbackWrapper(() => {\r\n Object.defineProperty(host, 'adoptedStyleSheets', {\r\n configurable: originalPropertyDescriptor.configurable,\r\n enumerable: originalPropertyDescriptor.enumerable,\r\n get: originalPropertyDescriptor.get,\r\n set: originalPropertyDescriptor.set,\r\n });\r\n });\r\n}\r\nfunction initStyleDeclarationObserver({ styleDeclarationCb, mirror, ignoreCSSAttributes, stylesheetManager, }, { win }) {\r\n const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\r\n win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n var _a;\r\n const [property, value, priority] = argumentsList;\r\n if (ignoreCSSAttributes.has(property)) {\r\n return setProperty.apply(thisArg, [property, value, priority]);\r\n }\r\n const { id, styleId } = getIdAndStyleId((_a = thisArg.parentRule) === null || _a === void 0 ? void 0 : _a.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleDeclarationCb({\r\n id,\r\n styleId,\r\n set: {\r\n property,\r\n value,\r\n priority,\r\n },\r\n index: getNestedCSSRulePositions(thisArg.parentRule),\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\r\n win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n var _a;\r\n const [property] = argumentsList;\r\n if (ignoreCSSAttributes.has(property)) {\r\n return removeProperty.apply(thisArg, [property]);\r\n }\r\n const { id, styleId } = getIdAndStyleId((_a = thisArg.parentRule) === null || _a === void 0 ? void 0 : _a.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleDeclarationCb({\r\n id,\r\n styleId,\r\n remove: {\r\n property,\r\n },\r\n index: getNestedCSSRulePositions(thisArg.parentRule),\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n return callbackWrapper(() => {\r\n win.CSSStyleDeclaration.prototype.setProperty = setProperty;\r\n win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\r\n });\r\n}\r\nfunction initMediaInteractionObserver({ mediaInteractionCb, blockClass, blockSelector, mirror, sampling, doc, }) {\r\n const handler = callbackWrapper((type) => throttle(callbackWrapper((event) => {\r\n const target = getEventTarget(event);\r\n if (!target ||\r\n isBlocked(target, blockClass, blockSelector, true)) {\r\n return;\r\n }\r\n const { currentTime, volume, muted, playbackRate, loop } = target;\r\n mediaInteractionCb({\r\n type,\r\n id: mirror.getId(target),\r\n currentTime,\r\n volume,\r\n muted,\r\n playbackRate,\r\n loop,\r\n });\r\n }), sampling.media || 500));\r\n const handlers = [\r\n on('play', handler(0), doc),\r\n on('pause', handler(1), doc),\r\n on('seeked', handler(2), doc),\r\n on('volumechange', handler(3), doc),\r\n on('ratechange', handler(4), doc),\r\n ];\r\n return callbackWrapper(() => {\r\n handlers.forEach((h) => h());\r\n });\r\n}\r\nfunction initFontObserver({ fontCb, doc }) {\r\n const win = doc.defaultView;\r\n if (!win) {\r\n return () => {\r\n };\r\n }\r\n const handlers = [];\r\n const fontMap = new WeakMap();\r\n const originalFontFace = win.FontFace;\r\n win.FontFace = function FontFace(family, source, descriptors) {\r\n const fontFace = new originalFontFace(family, source, descriptors);\r\n fontMap.set(fontFace, {\r\n family,\r\n buffer: typeof source !== 'string',\r\n descriptors,\r\n fontSource: typeof source === 'string'\r\n ? source\r\n : JSON.stringify(Array.from(new Uint8Array(source))),\r\n });\r\n return fontFace;\r\n };\r\n const restoreHandler = patch(doc.fonts, 'add', function (original) {\r\n return function (fontFace) {\r\n setTimeout(callbackWrapper(() => {\r\n const p = fontMap.get(fontFace);\r\n if (p) {\r\n fontCb(p);\r\n fontMap.delete(fontFace);\r\n }\r\n }), 0);\r\n return original.apply(this, [fontFace]);\r\n };\r\n });\r\n handlers.push(() => {\r\n win.FontFace = originalFontFace;\r\n });\r\n handlers.push(restoreHandler);\r\n return callbackWrapper(() => {\r\n handlers.forEach((h) => h());\r\n });\r\n}\r\nfunction initSelectionObserver(param) {\r\n const { doc, mirror, blockClass, blockSelector, selectionCb } = param;\r\n let collapsed = true;\r\n const updateSelection = callbackWrapper(() => {\r\n const selection = doc.getSelection();\r\n if (!selection || (collapsed && (selection === null || selection === void 0 ? void 0 : selection.isCollapsed)))\r\n return;\r\n collapsed = selection.isCollapsed || false;\r\n const ranges = [];\r\n const count = selection.rangeCount || 0;\r\n for (let i = 0; i < count; i++) {\r\n const range = selection.getRangeAt(i);\r\n const { startContainer, startOffset, endContainer, endOffset } = range;\r\n const blocked = isBlocked(startContainer, blockClass, blockSelector, true) ||\r\n isBlocked(endContainer, blockClass, blockSelector, true);\r\n if (blocked)\r\n continue;\r\n ranges.push({\r\n start: mirror.getId(startContainer),\r\n startOffset,\r\n end: mirror.getId(endContainer),\r\n endOffset,\r\n });\r\n }\r\n selectionCb({ ranges });\r\n });\r\n updateSelection();\r\n return on('selectionchange', updateSelection);\r\n}\r\nfunction initCustomElementObserver({ doc, customElementCb, }) {\r\n const win = doc.defaultView;\r\n if (!win || !win.customElements)\r\n return () => { };\r\n const restoreHandler = patch(win.customElements, 'define', function (original) {\r\n return function (name, constructor, options) {\r\n try {\r\n customElementCb({\r\n define: {\r\n name,\r\n },\r\n });\r\n }\r\n catch (e) {\r\n console.warn(`Custom element callback failed for ${name}`);\r\n }\r\n return original.apply(this, [name, constructor, options]);\r\n };\r\n });\r\n return restoreHandler;\r\n}\r\nfunction mergeHooks(o, hooks) {\r\n const { mutationCb, mousemoveCb, mouseInteractionCb, scrollCb, viewportResizeCb, inputCb, mediaInteractionCb, styleSheetRuleCb, styleDeclarationCb, canvasMutationCb, fontCb, selectionCb, customElementCb, } = o;\r\n o.mutationCb = (...p) => {\r\n if (hooks.mutation) {\r\n hooks.mutation(...p);\r\n }\r\n mutationCb(...p);\r\n };\r\n o.mousemoveCb = (...p) => {\r\n if (hooks.mousemove) {\r\n hooks.mousemove(...p);\r\n }\r\n mousemoveCb(...p);\r\n };\r\n o.mouseInteractionCb = (...p) => {\r\n if (hooks.mouseInteraction) {\r\n hooks.mouseInteraction(...p);\r\n }\r\n mouseInteractionCb(...p);\r\n };\r\n o.scrollCb = (...p) => {\r\n if (hooks.scroll) {\r\n hooks.scroll(...p);\r\n }\r\n scrollCb(...p);\r\n };\r\n o.viewportResizeCb = (...p) => {\r\n if (hooks.viewportResize) {\r\n hooks.viewportResize(...p);\r\n }\r\n viewportResizeCb(...p);\r\n };\r\n o.inputCb = (...p) => {\r\n if (hooks.input) {\r\n hooks.input(...p);\r\n }\r\n inputCb(...p);\r\n };\r\n o.mediaInteractionCb = (...p) => {\r\n if (hooks.mediaInteaction) {\r\n hooks.mediaInteaction(...p);\r\n }\r\n mediaInteractionCb(...p);\r\n };\r\n o.styleSheetRuleCb = (...p) => {\r\n if (hooks.styleSheetRule) {\r\n hooks.styleSheetRule(...p);\r\n }\r\n styleSheetRuleCb(...p);\r\n };\r\n o.styleDeclarationCb = (...p) => {\r\n if (hooks.styleDeclaration) {\r\n hooks.styleDeclaration(...p);\r\n }\r\n styleDeclarationCb(...p);\r\n };\r\n o.canvasMutationCb = (...p) => {\r\n if (hooks.canvasMutation) {\r\n hooks.canvasMutation(...p);\r\n }\r\n canvasMutationCb(...p);\r\n };\r\n o.fontCb = (...p) => {\r\n if (hooks.font) {\r\n hooks.font(...p);\r\n }\r\n fontCb(...p);\r\n };\r\n o.selectionCb = (...p) => {\r\n if (hooks.selection) {\r\n hooks.selection(...p);\r\n }\r\n selectionCb(...p);\r\n };\r\n o.customElementCb = (...c) => {\r\n if (hooks.customElement) {\r\n hooks.customElement(...c);\r\n }\r\n customElementCb(...c);\r\n };\r\n}\r\nfunction initObservers(o, hooks = {}) {\r\n const currentWindow = o.doc.defaultView;\r\n if (!currentWindow) {\r\n return () => {\r\n };\r\n }\r\n mergeHooks(o, hooks);\r\n let mutationObserver;\r\n if (o.recordDOM) {\r\n mutationObserver = initMutationObserver(o, o.doc);\r\n }\r\n const mousemoveHandler = initMoveObserver(o);\r\n const mouseInteractionHandler = initMouseInteractionObserver(o);\r\n const scrollHandler = initScrollObserver(o);\r\n const viewportResizeHandler = initViewportResizeObserver(o, {\r\n win: currentWindow,\r\n });\r\n const inputHandler = initInputObserver(o);\r\n const mediaInteractionHandler = initMediaInteractionObserver(o);\r\n let styleSheetObserver = () => { };\r\n let adoptedStyleSheetObserver = () => { };\r\n let styleDeclarationObserver = () => { };\r\n let fontObserver = () => { };\r\n if (o.recordDOM) {\r\n styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });\r\n adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o, o.doc);\r\n styleDeclarationObserver = initStyleDeclarationObserver(o, {\r\n win: currentWindow,\r\n });\r\n if (o.collectFonts) {\r\n fontObserver = initFontObserver(o);\r\n }\r\n }\r\n const selectionObserver = initSelectionObserver(o);\r\n const customElementObserver = initCustomElementObserver(o);\r\n const pluginHandlers = [];\r\n for (const plugin of o.plugins) {\r\n pluginHandlers.push(plugin.observer(plugin.callback, currentWindow, plugin.options));\r\n }\r\n return callbackWrapper(() => {\r\n mutationBuffers.forEach((b) => b.reset());\r\n mutationObserver === null || mutationObserver === void 0 ? void 0 : mutationObserver.disconnect();\r\n mousemoveHandler();\r\n mouseInteractionHandler();\r\n scrollHandler();\r\n viewportResizeHandler();\r\n inputHandler();\r\n mediaInteractionHandler();\r\n styleSheetObserver();\r\n adoptedStyleSheetObserver();\r\n styleDeclarationObserver();\r\n fontObserver();\r\n selectionObserver();\r\n customElementObserver();\r\n pluginHandlers.forEach((h) => h());\r\n });\r\n}\r\nfunction hasNestedCSSRule(prop) {\r\n return typeof window[prop] !== 'undefined';\r\n}\r\nfunction canMonkeyPatchNestedCSSRule(prop) {\r\n return Boolean(typeof window[prop] !== 'undefined' &&\r\n window[prop].prototype &&\r\n 'insertRule' in window[prop].prototype &&\r\n 'deleteRule' in window[prop].prototype);\r\n}\n\nexport { INPUT_TAGS, initAdoptedStyleSheetObserver, initMutationObserver, initObservers, initScrollObserver, mutationBuffers };\n","class CrossOriginIframeMirror {\r\n constructor(generateIdFn) {\r\n this.generateIdFn = generateIdFn;\r\n this.iframeIdToRemoteIdMap = new WeakMap();\r\n this.iframeRemoteIdToIdMap = new WeakMap();\r\n }\r\n getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\r\n const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\r\n const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\r\n let id = idToRemoteIdMap.get(remoteId);\r\n if (!id) {\r\n id = this.generateIdFn();\r\n idToRemoteIdMap.set(remoteId, id);\r\n remoteIdToIdMap.set(id, remoteId);\r\n }\r\n return id;\r\n }\r\n getIds(iframe, remoteId) {\r\n const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\r\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n return remoteId.map((id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap));\r\n }\r\n getRemoteId(iframe, id, map) {\r\n const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\r\n if (typeof id !== 'number')\r\n return id;\r\n const remoteId = remoteIdToIdMap.get(id);\r\n if (!remoteId)\r\n return -1;\r\n return remoteId;\r\n }\r\n getRemoteIds(iframe, ids) {\r\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\r\n }\r\n reset(iframe) {\r\n if (!iframe) {\r\n this.iframeIdToRemoteIdMap = new WeakMap();\r\n this.iframeRemoteIdToIdMap = new WeakMap();\r\n return;\r\n }\r\n this.iframeIdToRemoteIdMap.delete(iframe);\r\n this.iframeRemoteIdToIdMap.delete(iframe);\r\n }\r\n getIdToRemoteIdMap(iframe) {\r\n let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\r\n if (!idToRemoteIdMap) {\r\n idToRemoteIdMap = new Map();\r\n this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\r\n }\r\n return idToRemoteIdMap;\r\n }\r\n getRemoteIdToIdMap(iframe) {\r\n let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\r\n if (!remoteIdToIdMap) {\r\n remoteIdToIdMap = new Map();\r\n this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\r\n }\r\n return remoteIdToIdMap;\r\n }\r\n}\n\nexport { CrossOriginIframeMirror as default };\n","import { genId, NodeType } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport CrossOriginIframeMirror from './cross-origin-iframe-mirror.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/types.js';\n\nclass IframeManager {\r\n constructor(options) {\r\n this.iframes = new WeakMap();\r\n this.crossOriginIframeMap = new WeakMap();\r\n this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\r\n this.crossOriginIframeRootIdMap = new WeakMap();\r\n this.mutationCb = options.mutationCb;\r\n this.wrappedEmit = options.wrappedEmit;\r\n this.stylesheetManager = options.stylesheetManager;\r\n this.recordCrossOriginIframes = options.recordCrossOriginIframes;\r\n this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\r\n this.mirror = options.mirror;\r\n if (this.recordCrossOriginIframes) {\r\n window.addEventListener('message', this.handleMessage.bind(this));\r\n }\r\n }\r\n addIframe(iframeEl) {\r\n this.iframes.set(iframeEl, true);\r\n if (iframeEl.contentWindow)\r\n this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\r\n }\r\n addLoadListener(cb) {\r\n this.loadListener = cb;\r\n }\r\n attachIframe(iframeEl, childSn) {\r\n var _a;\r\n this.mutationCb({\r\n adds: [\r\n {\r\n parentId: this.mirror.getId(iframeEl),\r\n nextId: null,\r\n node: childSn,\r\n },\r\n ],\r\n removes: [],\r\n texts: [],\r\n attributes: [],\r\n isAttachIframe: true,\r\n });\r\n (_a = this.loadListener) === null || _a === void 0 ? void 0 : _a.call(this, iframeEl);\r\n if (iframeEl.contentDocument &&\r\n iframeEl.contentDocument.adoptedStyleSheets &&\r\n iframeEl.contentDocument.adoptedStyleSheets.length > 0)\r\n this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\r\n }\r\n handleMessage(message) {\r\n const crossOriginMessageEvent = message;\r\n if (crossOriginMessageEvent.data.type !== 'rrweb' ||\r\n crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\r\n return;\r\n const iframeSourceWindow = message.source;\r\n if (!iframeSourceWindow)\r\n return;\r\n const iframeEl = this.crossOriginIframeMap.get(message.source);\r\n if (!iframeEl)\r\n return;\r\n const transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event);\r\n if (transformedEvent)\r\n this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout);\r\n }\r\n transformCrossOriginEvent(iframeEl, e) {\r\n var _a;\r\n switch (e.type) {\r\n case EventType.FullSnapshot: {\r\n this.crossOriginIframeMirror.reset(iframeEl);\r\n this.crossOriginIframeStyleMirror.reset(iframeEl);\r\n this.replaceIdOnNode(e.data.node, iframeEl);\r\n const rootId = e.data.node.id;\r\n this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\r\n this.patchRootIdOnNode(e.data.node, rootId);\r\n return {\r\n timestamp: e.timestamp,\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.Mutation,\r\n adds: [\r\n {\r\n parentId: this.mirror.getId(iframeEl),\r\n nextId: null,\r\n node: e.data.node,\r\n },\r\n ],\r\n removes: [],\r\n texts: [],\r\n attributes: [],\r\n isAttachIframe: true,\r\n },\r\n };\r\n }\r\n case EventType.Meta:\r\n case EventType.Load:\r\n case EventType.DomContentLoaded: {\r\n return false;\r\n }\r\n case EventType.Plugin: {\r\n return e;\r\n }\r\n case EventType.Custom: {\r\n this.replaceIds(e.data.payload, iframeEl, ['id', 'parentId', 'previousId', 'nextId']);\r\n return e;\r\n }\r\n case EventType.IncrementalSnapshot: {\r\n switch (e.data.source) {\r\n case IncrementalSource.Mutation: {\r\n e.data.adds.forEach((n) => {\r\n this.replaceIds(n, iframeEl, [\r\n 'parentId',\r\n 'nextId',\r\n 'previousId',\r\n ]);\r\n this.replaceIdOnNode(n.node, iframeEl);\r\n const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\r\n rootId && this.patchRootIdOnNode(n.node, rootId);\r\n });\r\n e.data.removes.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['parentId', 'id']);\r\n });\r\n e.data.attributes.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['id']);\r\n });\r\n e.data.texts.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['id']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.Drag:\r\n case IncrementalSource.TouchMove:\r\n case IncrementalSource.MouseMove: {\r\n e.data.positions.forEach((p) => {\r\n this.replaceIds(p, iframeEl, ['id']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.ViewportResize: {\r\n return false;\r\n }\r\n case IncrementalSource.MediaInteraction:\r\n case IncrementalSource.MouseInteraction:\r\n case IncrementalSource.Scroll:\r\n case IncrementalSource.CanvasMutation:\r\n case IncrementalSource.Input: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n return e;\r\n }\r\n case IncrementalSource.StyleSheetRule:\r\n case IncrementalSource.StyleDeclaration: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n this.replaceStyleIds(e.data, iframeEl, ['styleId']);\r\n return e;\r\n }\r\n case IncrementalSource.Font: {\r\n return e;\r\n }\r\n case IncrementalSource.Selection: {\r\n e.data.ranges.forEach((range) => {\r\n this.replaceIds(range, iframeEl, ['start', 'end']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.AdoptedStyleSheet: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n this.replaceStyleIds(e.data, iframeEl, ['styleIds']);\r\n (_a = e.data.styles) === null || _a === void 0 ? void 0 : _a.forEach((style) => {\r\n this.replaceStyleIds(style, iframeEl, ['styleId']);\r\n });\r\n return e;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n replace(iframeMirror, obj, iframeEl, keys) {\r\n for (const key of keys) {\r\n if (!Array.isArray(obj[key]) && typeof obj[key] !== 'number')\r\n continue;\r\n if (Array.isArray(obj[key])) {\r\n obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\r\n }\r\n else {\r\n obj[key] = iframeMirror.getId(iframeEl, obj[key]);\r\n }\r\n }\r\n return obj;\r\n }\r\n replaceIds(obj, iframeEl, keys) {\r\n return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\r\n }\r\n replaceStyleIds(obj, iframeEl, keys) {\r\n return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\r\n }\r\n replaceIdOnNode(node, iframeEl) {\r\n this.replaceIds(node, iframeEl, ['id', 'rootId']);\r\n if ('childNodes' in node) {\r\n node.childNodes.forEach((child) => {\r\n this.replaceIdOnNode(child, iframeEl);\r\n });\r\n }\r\n }\r\n patchRootIdOnNode(node, rootId) {\r\n if (node.type !== NodeType.Document && !node.rootId)\r\n node.rootId = rootId;\r\n if ('childNodes' in node) {\r\n node.childNodes.forEach((child) => {\r\n this.patchRootIdOnNode(child, rootId);\r\n });\r\n }\r\n }\r\n}\n\nexport { IframeManager };\n","import { initMutationObserver, initScrollObserver, initAdoptedStyleSheetObserver } from './observer.js';\nimport { patch, inDom } from '../utils.js';\nimport { isNativeShadowDom } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nclass ShadowDomManager {\r\n constructor(options) {\r\n this.shadowDoms = new WeakSet();\r\n this.restoreHandlers = [];\r\n this.mutationCb = options.mutationCb;\r\n this.scrollCb = options.scrollCb;\r\n this.bypassOptions = options.bypassOptions;\r\n this.mirror = options.mirror;\r\n this.init();\r\n }\r\n init() {\r\n this.reset();\r\n this.patchAttachShadow(Element, document);\r\n }\r\n addShadowRoot(shadowRoot, doc) {\r\n if (!isNativeShadowDom(shadowRoot))\r\n return;\r\n if (this.shadowDoms.has(shadowRoot))\r\n return;\r\n this.shadowDoms.add(shadowRoot);\r\n const observer = initMutationObserver(Object.assign(Object.assign({}, this.bypassOptions), { doc, mutationCb: this.mutationCb, mirror: this.mirror, shadowDomManager: this }), shadowRoot);\r\n this.restoreHandlers.push(() => observer.disconnect());\r\n this.restoreHandlers.push(initScrollObserver(Object.assign(Object.assign({}, this.bypassOptions), { scrollCb: this.scrollCb, doc: shadowRoot, mirror: this.mirror })));\r\n setTimeout(() => {\r\n if (shadowRoot.adoptedStyleSheets &&\r\n shadowRoot.adoptedStyleSheets.length > 0)\r\n this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot.adoptedStyleSheets, this.mirror.getId(shadowRoot.host));\r\n this.restoreHandlers.push(initAdoptedStyleSheetObserver({\r\n mirror: this.mirror,\r\n stylesheetManager: this.bypassOptions.stylesheetManager,\r\n }, shadowRoot));\r\n }, 0);\r\n }\r\n observeAttachShadow(iframeElement) {\r\n if (!iframeElement.contentWindow || !iframeElement.contentDocument)\r\n return;\r\n this.patchAttachShadow(iframeElement.contentWindow.Element, iframeElement.contentDocument);\r\n }\r\n patchAttachShadow(element, doc) {\r\n const manager = this;\r\n this.restoreHandlers.push(patch(element.prototype, 'attachShadow', function (original) {\r\n return function (option) {\r\n const shadowRoot = original.call(this, option);\r\n if (this.shadowRoot && inDom(this))\r\n manager.addShadowRoot(this.shadowRoot, doc);\r\n return shadowRoot;\r\n };\r\n }));\r\n }\r\n reset() {\r\n this.restoreHandlers.forEach((handler) => {\r\n try {\r\n handler();\r\n }\r\n catch (e) {\r\n }\r\n });\r\n this.restoreHandlers = [];\r\n this.shadowDoms = new WeakSet();\r\n }\r\n}\n\nexport { ShadowDomManager };\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\n\nexport { __awaiter, __rest };\n","/*\n * base64-arraybuffer 1.0.1 <https://github.com/niklasvh/base64-arraybuffer>\n * Copyright (c) 2021 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n var bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nvar decode = function (base64) {\n var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n var arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return arraybuffer;\n};\n\nexport { decode, encode };\n","import { encode } from './../../../../../../ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js';\n\nconst canvasVarMap = new Map();\r\nfunction variableListFor(ctx, ctor) {\r\n let contextMap = canvasVarMap.get(ctx);\r\n if (!contextMap) {\r\n contextMap = new Map();\r\n canvasVarMap.set(ctx, contextMap);\r\n }\r\n if (!contextMap.has(ctor)) {\r\n contextMap.set(ctor, []);\r\n }\r\n return contextMap.get(ctor);\r\n}\r\nconst saveWebGLVar = (value, win, ctx) => {\r\n if (!value ||\r\n !(isInstanceOfWebGLObject(value, win) || typeof value === 'object'))\r\n return;\r\n const name = value.constructor.name;\r\n const list = variableListFor(ctx, name);\r\n let index = list.indexOf(value);\r\n if (index === -1) {\r\n index = list.length;\r\n list.push(value);\r\n }\r\n return index;\r\n};\r\nfunction serializeArg(value, win, ctx) {\r\n if (value instanceof Array) {\r\n return value.map((arg) => serializeArg(arg, win, ctx));\r\n }\r\n else if (value === null) {\r\n return value;\r\n }\r\n else if (value instanceof Float32Array ||\r\n value instanceof Float64Array ||\r\n value instanceof Int32Array ||\r\n value instanceof Uint32Array ||\r\n value instanceof Uint8Array ||\r\n value instanceof Uint16Array ||\r\n value instanceof Int16Array ||\r\n value instanceof Int8Array ||\r\n value instanceof Uint8ClampedArray) {\r\n const name = value.constructor.name;\r\n return {\r\n rr_type: name,\r\n args: [Object.values(value)],\r\n };\r\n }\r\n else if (value instanceof ArrayBuffer) {\r\n const name = value.constructor.name;\r\n const base64 = encode(value);\r\n return {\r\n rr_type: name,\r\n base64,\r\n };\r\n }\r\n else if (value instanceof DataView) {\r\n const name = value.constructor.name;\r\n return {\r\n rr_type: name,\r\n args: [\r\n serializeArg(value.buffer, win, ctx),\r\n value.byteOffset,\r\n value.byteLength,\r\n ],\r\n };\r\n }\r\n else if (value instanceof HTMLImageElement) {\r\n const name = value.constructor.name;\r\n const { src } = value;\r\n return {\r\n rr_type: name,\r\n src,\r\n };\r\n }\r\n else if (value instanceof HTMLCanvasElement) {\r\n const name = 'HTMLImageElement';\r\n const src = value.toDataURL();\r\n return {\r\n rr_type: name,\r\n src,\r\n };\r\n }\r\n else if (value instanceof ImageData) {\r\n const name = value.constructor.name;\r\n return {\r\n rr_type: name,\r\n args: [serializeArg(value.data, win, ctx), value.width, value.height],\r\n };\r\n }\r\n else if (isInstanceOfWebGLObject(value, win) || typeof value === 'object') {\r\n const name = value.constructor.name;\r\n const index = saveWebGLVar(value, win, ctx);\r\n return {\r\n rr_type: name,\r\n index: index,\r\n };\r\n }\r\n return value;\r\n}\r\nconst serializeArgs = (args, win, ctx) => {\r\n return args.map((arg) => serializeArg(arg, win, ctx));\r\n};\r\nconst isInstanceOfWebGLObject = (value, win) => {\r\n const webGLConstructorNames = [\r\n 'WebGLActiveInfo',\r\n 'WebGLBuffer',\r\n 'WebGLFramebuffer',\r\n 'WebGLProgram',\r\n 'WebGLRenderbuffer',\r\n 'WebGLShader',\r\n 'WebGLShaderPrecisionFormat',\r\n 'WebGLTexture',\r\n 'WebGLUniformLocation',\r\n 'WebGLVertexArrayObject',\r\n 'WebGLVertexArrayObjectOES',\r\n ];\r\n const supportedWebGLConstructorNames = webGLConstructorNames.filter((name) => typeof win[name] === 'function');\r\n return Boolean(supportedWebGLConstructorNames.find((name) => value instanceof win[name]));\r\n};\n\nexport { isInstanceOfWebGLObject, saveWebGLVar, serializeArg, serializeArgs, variableListFor };\n","import { CanvasContext } from '../../../../../types/dist/types.js';\nimport { patch, isBlocked, hookSetter } from '../../../utils.js';\nimport { serializeArgs } from './serialize-args.js';\n\nfunction initCanvas2DMutationObserver(cb, win, blockClass, blockSelector) {\r\n const handlers = [];\r\n const props2D = Object.getOwnPropertyNames(win.CanvasRenderingContext2D.prototype);\r\n for (const prop of props2D) {\r\n try {\r\n if (typeof win.CanvasRenderingContext2D.prototype[prop] !== 'function') {\r\n continue;\r\n }\r\n const restoreHandler = patch(win.CanvasRenderingContext2D.prototype, prop, function (original) {\r\n return function (...args) {\r\n if (!isBlocked(this.canvas, blockClass, blockSelector, true)) {\r\n setTimeout(() => {\r\n const recordArgs = serializeArgs(args, win, this);\r\n cb(this.canvas, {\r\n type: CanvasContext['2D'],\r\n property: prop,\r\n args: recordArgs,\r\n });\r\n }, 0);\r\n }\r\n return original.apply(this, args);\r\n };\r\n });\r\n handlers.push(restoreHandler);\r\n }\r\n catch (_a) {\r\n const hookHandler = hookSetter(win.CanvasRenderingContext2D.prototype, prop, {\r\n set(v) {\r\n cb(this.canvas, {\r\n type: CanvasContext['2D'],\r\n property: prop,\r\n args: [v],\r\n setter: true,\r\n });\r\n },\r\n });\r\n handlers.push(hookHandler);\r\n }\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\n\nexport { initCanvas2DMutationObserver as default };\n","import { patch, isBlocked } from '../../../utils.js';\n\nfunction getNormalizedContextName(contextType) {\r\n return contextType === 'experimental-webgl' ? 'webgl' : contextType;\r\n}\r\nfunction initCanvasContextObserver(win, blockClass, blockSelector, setPreserveDrawingBufferToTrue) {\r\n const handlers = [];\r\n try {\r\n const restoreHandler = patch(win.HTMLCanvasElement.prototype, 'getContext', function (original) {\r\n return function (contextType, ...args) {\r\n if (!isBlocked(this, blockClass, blockSelector, true)) {\r\n const ctxName = getNormalizedContextName(contextType);\r\n if (!('__context' in this))\r\n this.__context = ctxName;\r\n if (setPreserveDrawingBufferToTrue &&\r\n ['webgl', 'webgl2'].includes(ctxName)) {\r\n if (args[0] && typeof args[0] === 'object') {\r\n const contextAttributes = args[0];\r\n if (!contextAttributes.preserveDrawingBuffer) {\r\n contextAttributes.preserveDrawingBuffer = true;\r\n }\r\n }\r\n else {\r\n args.splice(0, 1, {\r\n preserveDrawingBuffer: true,\r\n });\r\n }\r\n }\r\n }\r\n return original.apply(this, [contextType, ...args]);\r\n };\r\n });\r\n handlers.push(restoreHandler);\r\n }\r\n catch (_a) {\r\n console.error('failed to patch HTMLCanvasElement.prototype.getContext');\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\n\nexport { initCanvasContextObserver as default };\n","import { CanvasContext } from '../../../../../types/dist/types.js';\nimport { patch, isBlocked, hookSetter } from '../../../utils.js';\nimport { saveWebGLVar, serializeArgs } from './serialize-args.js';\n\nfunction patchGLPrototype(prototype, type, cb, blockClass, blockSelector, mirror, win) {\r\n const handlers = [];\r\n const props = Object.getOwnPropertyNames(prototype);\r\n for (const prop of props) {\r\n if ([\r\n 'isContextLost',\r\n 'canvas',\r\n 'drawingBufferWidth',\r\n 'drawingBufferHeight',\r\n ].includes(prop)) {\r\n continue;\r\n }\r\n try {\r\n if (typeof prototype[prop] !== 'function') {\r\n continue;\r\n }\r\n const restoreHandler = patch(prototype, prop, function (original) {\r\n return function (...args) {\r\n const result = original.apply(this, args);\r\n saveWebGLVar(result, win, this);\r\n if ('tagName' in this.canvas &&\r\n !isBlocked(this.canvas, blockClass, blockSelector, true)) {\r\n const recordArgs = serializeArgs(args, win, this);\r\n const mutation = {\r\n type,\r\n property: prop,\r\n args: recordArgs,\r\n };\r\n cb(this.canvas, mutation);\r\n }\r\n return result;\r\n };\r\n });\r\n handlers.push(restoreHandler);\r\n }\r\n catch (_a) {\r\n const hookHandler = hookSetter(prototype, prop, {\r\n set(v) {\r\n cb(this.canvas, {\r\n type,\r\n property: prop,\r\n args: [v],\r\n setter: true,\r\n });\r\n },\r\n });\r\n handlers.push(hookHandler);\r\n }\r\n }\r\n return handlers;\r\n}\r\nfunction initCanvasWebGLMutationObserver(cb, win, blockClass, blockSelector, mirror) {\r\n const handlers = [];\r\n handlers.push(...patchGLPrototype(win.WebGLRenderingContext.prototype, CanvasContext.WebGL, cb, blockClass, blockSelector, mirror, win));\r\n if (typeof win.WebGL2RenderingContext !== 'undefined') {\r\n handlers.push(...patchGLPrototype(win.WebGL2RenderingContext.prototype, CanvasContext.WebGL2, cb, blockClass, blockSelector, mirror, win));\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\n\nexport { initCanvasWebGLMutationObserver as default };\n","function funcToSource(fn, sourcemapArg) {\n var sourcemap = sourcemapArg === undefined ? null : sourcemapArg;\n var source = fn.toString();\n var lines = source.split('\\n');\n lines.pop();\n lines.shift();\n var blankPrefixLength = lines[0].search(/\\S/);\n var regex = /(['\"])__worker_loader_strict__(['\"])/g;\n for (var i = 0, n = lines.length; i < n; ++i) {\n lines[i] = lines[i].substring(blankPrefixLength).replace(regex, '$1use strict$2') + '\\n';\n }\n if (sourcemap) {\n lines.push('\\/\\/# sourceMappingURL=' + sourcemap + '\\n');\n }\n return lines;\n}\n\nexport { funcToSource };\n","import { funcToSource } from './_rollup-plugin-web-worker-loader__helper__funcToSource.js';\n\nfunction createURL(fn, sourcemapArg) {\n var lines = funcToSource(fn, sourcemapArg);\n var blob = new Blob(lines, { type: 'application/javascript' });\n return URL.createObjectURL(blob);\n}\n\nfunction createInlineWorkerFactory(fn, sourcemapArg) {\n var url;\n return function WorkerFactory(options) {\n url = url || createURL(fn, sourcemapArg);\n return new Worker(url, options);\n };\n}\n\nexport { createInlineWorkerFactory };\n","import { createInlineWorkerFactory } from './_rollup-plugin-web-worker-loader__helper__browser__createInlineWorkerFactory.js';\n\nvar WorkerFactory = createInlineWorkerFactory(/* rollup-plugin-web-worker-loader */function () {\n(function () {\n '__worker_loader_strict__';\n\n /*! *****************************************************************************\r\n Copyright (c) Microsoft Corporation.\r\n\r\n Permission to use, copy, modify, and/or distribute this software for any\r\n purpose with or without fee is hereby granted.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n PERFORMANCE OF THIS SOFTWARE.\r\n ***************************************************************************** */\r\n\r\n function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n }\n\n /*\n * base64-arraybuffer 1.0.1 <https://github.com/niklasvh/base64-arraybuffer>\n * Copyright (c) 2021 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n // Use a lookup table to find the index.\n var lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n for (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n }\n var encode = function (arraybuffer) {\n var bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n };\n\n const lastBlobMap = new Map();\r\n const transparentBlobMap = new Map();\r\n function getTransparentBlobFor(width, height, dataURLOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const id = `${width}-${height}`;\r\n if ('OffscreenCanvas' in globalThis) {\r\n if (transparentBlobMap.has(id))\r\n return transparentBlobMap.get(id);\r\n const offscreen = new OffscreenCanvas(width, height);\r\n offscreen.getContext('2d');\r\n const blob = yield offscreen.convertToBlob(dataURLOptions);\r\n const arrayBuffer = yield blob.arrayBuffer();\r\n const base64 = encode(arrayBuffer);\r\n transparentBlobMap.set(id, base64);\r\n return base64;\r\n }\r\n else {\r\n return '';\r\n }\r\n });\r\n }\r\n const worker = self;\r\n worker.onmessage = function (e) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n if ('OffscreenCanvas' in globalThis) {\r\n const { id, bitmap, width, height, dataURLOptions } = e.data;\r\n const transparentBase64 = getTransparentBlobFor(width, height, dataURLOptions);\r\n const offscreen = new OffscreenCanvas(width, height);\r\n const ctx = offscreen.getContext('2d');\r\n ctx.drawImage(bitmap, 0, 0);\r\n bitmap.close();\r\n const blob = yield offscreen.convertToBlob(dataURLOptions);\r\n const type = blob.type;\r\n const arrayBuffer = yield blob.arrayBuffer();\r\n const base64 = encode(arrayBuffer);\r\n if (!lastBlobMap.has(id) && (yield transparentBase64) === base64) {\r\n lastBlobMap.set(id, base64);\r\n return worker.postMessage({ id });\r\n }\r\n if (lastBlobMap.get(id) === base64)\r\n return worker.postMessage({ id });\r\n worker.postMessage({\r\n id,\r\n type,\r\n base64,\r\n width,\r\n height,\r\n });\r\n lastBlobMap.set(id, base64);\r\n }\r\n else {\r\n return worker.postMessage({ id: e.data.id });\r\n }\r\n });\r\n };\n\n})();\n}, null);\n/* eslint-enable */\n\nexport { WorkerFactory as default };\n","import { __rest, __awaiter } from './../../../../../../ext/tslib/tslib.es6.js';\nimport { isBlocked } from '../../../utils.js';\nimport { CanvasContext } from '../../../../../types/dist/types.js';\nimport initCanvas2DMutationObserver from './2d.js';\nimport initCanvasContextObserver from './canvas.js';\nimport initCanvasWebGLMutationObserver from './webgl.js';\nimport WorkerFactory from '../../../../../../_virtual/image-bitmap-data-url-worker.js';\n\nclass CanvasManager {\r\n reset() {\r\n this.pendingCanvasMutations.clear();\r\n this.resetObservers && this.resetObservers();\r\n }\r\n freeze() {\r\n this.frozen = true;\r\n }\r\n unfreeze() {\r\n this.frozen = false;\r\n }\r\n lock() {\r\n this.locked = true;\r\n }\r\n unlock() {\r\n this.locked = false;\r\n }\r\n constructor(options) {\r\n this.pendingCanvasMutations = new Map();\r\n this.rafStamps = { latestId: 0, invokeId: null };\r\n this.frozen = false;\r\n this.locked = false;\r\n this.processMutation = (target, mutation) => {\r\n const newFrame = this.rafStamps.invokeId &&\r\n this.rafStamps.latestId !== this.rafStamps.invokeId;\r\n if (newFrame || !this.rafStamps.invokeId)\r\n this.rafStamps.invokeId = this.rafStamps.latestId;\r\n if (!this.pendingCanvasMutations.has(target)) {\r\n this.pendingCanvasMutations.set(target, []);\r\n }\r\n this.pendingCanvasMutations.get(target).push(mutation);\r\n };\r\n const { sampling = 'all', win, blockClass, blockSelector, recordCanvas, dataURLOptions, } = options;\r\n this.mutationCb = options.mutationCb;\r\n this.mirror = options.mirror;\r\n if (recordCanvas && sampling === 'all')\r\n this.initCanvasMutationObserver(win, blockClass, blockSelector);\r\n if (recordCanvas && typeof sampling === 'number')\r\n this.initCanvasFPSObserver(sampling, win, blockClass, blockSelector, {\r\n dataURLOptions,\r\n });\r\n }\r\n initCanvasFPSObserver(fps, win, blockClass, blockSelector, options) {\r\n const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, true);\r\n const snapshotInProgressMap = new Map();\r\n const worker = new WorkerFactory();\r\n worker.onmessage = (e) => {\r\n const { id } = e.data;\r\n snapshotInProgressMap.set(id, false);\r\n if (!('base64' in e.data))\r\n return;\r\n const { base64, type, width, height } = e.data;\r\n this.mutationCb({\r\n id,\r\n type: CanvasContext['2D'],\r\n commands: [\r\n {\r\n property: 'clearRect',\r\n args: [0, 0, width, height],\r\n },\r\n {\r\n property: 'drawImage',\r\n args: [\r\n {\r\n rr_type: 'ImageBitmap',\r\n args: [\r\n {\r\n rr_type: 'Blob',\r\n data: [{ rr_type: 'ArrayBuffer', base64 }],\r\n type,\r\n },\r\n ],\r\n },\r\n 0,\r\n 0,\r\n ],\r\n },\r\n ],\r\n });\r\n };\r\n const timeBetweenSnapshots = 1000 / fps;\r\n let lastSnapshotTime = 0;\r\n let rafId;\r\n const getCanvas = () => {\r\n const matchedCanvas = [];\r\n win.document.querySelectorAll('canvas').forEach((canvas) => {\r\n if (!isBlocked(canvas, blockClass, blockSelector, true)) {\r\n matchedCanvas.push(canvas);\r\n }\r\n });\r\n return matchedCanvas;\r\n };\r\n const takeCanvasSnapshots = (timestamp) => {\r\n if (lastSnapshotTime &&\r\n timestamp - lastSnapshotTime < timeBetweenSnapshots) {\r\n rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n return;\r\n }\r\n lastSnapshotTime = timestamp;\r\n getCanvas()\r\n .forEach((canvas) => __awaiter(this, void 0, void 0, function* () {\r\n var _a;\r\n const id = this.mirror.getId(canvas);\r\n if (snapshotInProgressMap.get(id))\r\n return;\r\n if (canvas.width === 0 || canvas.height === 0)\r\n return;\r\n snapshotInProgressMap.set(id, true);\r\n if (['webgl', 'webgl2'].includes(canvas.__context)) {\r\n const context = canvas.getContext(canvas.__context);\r\n if (((_a = context === null || context === void 0 ? void 0 : context.getContextAttributes()) === null || _a === void 0 ? void 0 : _a.preserveDrawingBuffer) === false) {\r\n context.clear(context.COLOR_BUFFER_BIT);\r\n }\r\n }\r\n const bitmap = yield createImageBitmap(canvas);\r\n worker.postMessage({\r\n id,\r\n bitmap,\r\n width: canvas.width,\r\n height: canvas.height,\r\n dataURLOptions: options.dataURLOptions,\r\n }, [bitmap]);\r\n }));\r\n rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n };\r\n rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n this.resetObservers = () => {\r\n canvasContextReset();\r\n cancelAnimationFrame(rafId);\r\n };\r\n }\r\n initCanvasMutationObserver(win, blockClass, blockSelector) {\r\n this.startRAFTimestamping();\r\n this.startPendingCanvasMutationFlusher();\r\n const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, false);\r\n const canvas2DReset = initCanvas2DMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector);\r\n const canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector, this.mirror);\r\n this.resetObservers = () => {\r\n canvasContextReset();\r\n canvas2DReset();\r\n canvasWebGL1and2Reset();\r\n };\r\n }\r\n startPendingCanvasMutationFlusher() {\r\n requestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n }\r\n startRAFTimestamping() {\r\n const setLatestRAFTimestamp = (timestamp) => {\r\n this.rafStamps.latestId = timestamp;\r\n requestAnimationFrame(setLatestRAFTimestamp);\r\n };\r\n requestAnimationFrame(setLatestRAFTimestamp);\r\n }\r\n flushPendingCanvasMutations() {\r\n this.pendingCanvasMutations.forEach((values, canvas) => {\r\n const id = this.mirror.getId(canvas);\r\n this.flushPendingCanvasMutationFor(canvas, id);\r\n });\r\n requestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n }\r\n flushPendingCanvasMutationFor(canvas, id) {\r\n if (this.frozen || this.locked) {\r\n return;\r\n }\r\n const valuesWithType = this.pendingCanvasMutations.get(canvas);\r\n if (!valuesWithType || id === -1)\r\n return;\r\n const values = valuesWithType.map((value) => {\r\n const rest = __rest(value, [\"type\"]);\r\n return rest;\r\n });\r\n const { type } = valuesWithType[0];\r\n this.mutationCb({ id, type, commands: values });\r\n this.pendingCanvasMutations.delete(canvas);\r\n }\r\n}\n\nexport { CanvasManager };\n","import { stringifyRule } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { StyleSheetMirror } from '../utils.js';\n\nclass StylesheetManager {\r\n constructor(options) {\r\n this.trackedLinkElements = new WeakSet();\r\n this.styleMirror = new StyleSheetMirror();\r\n this.mutationCb = options.mutationCb;\r\n this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\r\n }\r\n attachLinkElement(linkEl, childSn) {\r\n if ('_cssText' in childSn.attributes)\r\n this.mutationCb({\r\n adds: [],\r\n removes: [],\r\n texts: [],\r\n attributes: [\r\n {\r\n id: childSn.id,\r\n attributes: childSn\r\n .attributes,\r\n },\r\n ],\r\n });\r\n this.trackLinkElement(linkEl);\r\n }\r\n trackLinkElement(linkEl) {\r\n if (this.trackedLinkElements.has(linkEl))\r\n return;\r\n this.trackedLinkElements.add(linkEl);\r\n this.trackStylesheetInLinkElement(linkEl);\r\n }\r\n adoptStyleSheets(sheets, hostId) {\r\n if (sheets.length === 0)\r\n return;\r\n const adoptedStyleSheetData = {\r\n id: hostId,\r\n styleIds: [],\r\n };\r\n const styles = [];\r\n for (const sheet of sheets) {\r\n let styleId;\r\n if (!this.styleMirror.has(sheet)) {\r\n styleId = this.styleMirror.add(sheet);\r\n styles.push({\r\n styleId,\r\n rules: Array.from(sheet.rules || CSSRule, (r, index) => ({\r\n rule: stringifyRule(r),\r\n index,\r\n })),\r\n });\r\n }\r\n else\r\n styleId = this.styleMirror.getId(sheet);\r\n adoptedStyleSheetData.styleIds.push(styleId);\r\n }\r\n if (styles.length > 0)\r\n adoptedStyleSheetData.styles = styles;\r\n this.adoptedStyleSheetCb(adoptedStyleSheetData);\r\n }\r\n reset() {\r\n this.styleMirror.reset();\r\n this.trackedLinkElements = new WeakSet();\r\n }\r\n trackStylesheetInLinkElement(linkEl) {\r\n }\r\n}\n\nexport { StylesheetManager };\n","class ProcessedNodeManager {\r\n constructor() {\r\n this.nodeMap = new WeakMap();\r\n this.loop = true;\r\n this.periodicallyClear();\r\n }\r\n periodicallyClear() {\r\n requestAnimationFrame(() => {\r\n this.clear();\r\n if (this.loop)\r\n this.periodicallyClear();\r\n });\r\n }\r\n inOtherBuffer(node, thisBuffer) {\r\n const buffers = this.nodeMap.get(node);\r\n return (buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer));\r\n }\r\n add(node, buffer) {\r\n this.nodeMap.set(node, (this.nodeMap.get(node) || new Set()).add(buffer));\r\n }\r\n clear() {\r\n this.nodeMap = new WeakMap();\r\n }\r\n destroy() {\r\n this.loop = false;\r\n }\r\n}\n\nexport { ProcessedNodeManager as default };\n","import { createMirror, snapshot } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { initObservers, mutationBuffers } from './observer.js';\nimport { polyfill, nowTimestamp, on, getWindowWidth, getWindowHeight, getWindowScroll, isSerializedIframe, isSerializedStylesheet, hasShadowRoot } from '../utils.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/types.js';\nimport { IframeManager } from './iframe-manager.js';\nimport { ShadowDomManager } from './shadow-dom-manager.js';\nimport { CanvasManager } from './observers/canvas/canvas-manager.js';\nimport { StylesheetManager } from './stylesheet-manager.js';\nimport ProcessedNodeManager from './processed-node-manager.js';\nimport { callbackWrapper, unregisterErrorHandler, registerErrorHandler } from './error-handler.js';\n\nfunction wrapEvent(e) {\r\n return Object.assign(Object.assign({}, e), { timestamp: nowTimestamp() });\r\n}\r\nlet wrappedEmit;\r\nlet takeFullSnapshot;\r\nlet canvasManager;\r\nlet recording = false;\r\nconst mirror = createMirror();\r\nfunction record(options = {}) {\r\n const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'rr-block', blockSelector = null, ignoreClass = 'rr-ignore', ignoreSelector = null, maskTextClass = 'rr-mask', maskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskInputFn, maskTextFn, hooks, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordDOM = true, recordCanvas = false, recordCrossOriginIframes = false, recordAfter = options.recordAfter === 'DOMContentLoaded'\r\n ? options.recordAfter\r\n : 'load', userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = () => false, ignoreCSSAttributes = new Set([]), errorHandler, } = options;\r\n registerErrorHandler(errorHandler);\r\n const inEmittingFrame = recordCrossOriginIframes\r\n ? window.parent === window\r\n : true;\r\n let passEmitsToParent = false;\r\n if (!inEmittingFrame) {\r\n try {\r\n if (window.parent.document) {\r\n passEmitsToParent = false;\r\n }\r\n }\r\n catch (e) {\r\n passEmitsToParent = true;\r\n }\r\n }\r\n if (inEmittingFrame && !emit) {\r\n throw new Error('emit function is required');\r\n }\r\n if (mousemoveWait !== undefined && sampling.mousemove === undefined) {\r\n sampling.mousemove = mousemoveWait;\r\n }\r\n mirror.reset();\r\n const maskInputOptions = maskAllInputs === true\r\n ? {\r\n color: true,\r\n date: true,\r\n 'datetime-local': true,\r\n email: true,\r\n month: true,\r\n number: true,\r\n range: true,\r\n search: true,\r\n tel: true,\r\n text: true,\r\n time: true,\r\n url: true,\r\n week: true,\r\n textarea: true,\r\n select: true,\r\n password: true,\r\n }\r\n : _maskInputOptions !== undefined\r\n ? _maskInputOptions\r\n : { password: true };\r\n const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'\r\n ? {\r\n script: true,\r\n comment: true,\r\n headFavicon: true,\r\n headWhitespace: true,\r\n headMetaSocial: true,\r\n headMetaRobots: true,\r\n headMetaHttpEquiv: true,\r\n headMetaVerification: true,\r\n headMetaAuthorship: _slimDOMOptions === 'all',\r\n headMetaDescKeywords: _slimDOMOptions === 'all',\r\n }\r\n : _slimDOMOptions\r\n ? _slimDOMOptions\r\n : {};\r\n polyfill();\r\n let lastFullSnapshotEvent;\r\n let incrementalSnapshotCount = 0;\r\n const eventProcessor = (e) => {\r\n for (const plugin of plugins || []) {\r\n if (plugin.eventProcessor) {\r\n e = plugin.eventProcessor(e);\r\n }\r\n }\r\n if (packFn &&\r\n !passEmitsToParent) {\r\n e = packFn(e);\r\n }\r\n return e;\r\n };\r\n wrappedEmit = (e, isCheckout) => {\r\n var _a;\r\n if (((_a = mutationBuffers[0]) === null || _a === void 0 ? void 0 : _a.isFrozen()) &&\r\n e.type !== EventType.FullSnapshot &&\r\n !(e.type === EventType.IncrementalSnapshot &&\r\n e.data.source === IncrementalSource.Mutation)) {\r\n mutationBuffers.forEach((buf) => buf.unfreeze());\r\n }\r\n if (inEmittingFrame) {\r\n emit === null || emit === void 0 ? void 0 : emit(eventProcessor(e), isCheckout);\r\n }\r\n else if (passEmitsToParent) {\r\n const message = {\r\n type: 'rrweb',\r\n event: eventProcessor(e),\r\n origin: window.location.origin,\r\n isCheckout,\r\n };\r\n window.parent.postMessage(message, '*');\r\n }\r\n if (e.type === EventType.FullSnapshot) {\r\n lastFullSnapshotEvent = e;\r\n incrementalSnapshotCount = 0;\r\n }\r\n else if (e.type === EventType.IncrementalSnapshot) {\r\n if (e.data.source === IncrementalSource.Mutation &&\r\n e.data.isAttachIframe) {\r\n return;\r\n }\r\n incrementalSnapshotCount++;\r\n const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\r\n const exceedTime = checkoutEveryNms &&\r\n e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\r\n if (exceedCount || exceedTime) {\r\n takeFullSnapshot(true);\r\n }\r\n }\r\n };\r\n const wrappedMutationEmit = (m) => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Mutation }, m),\r\n }));\r\n };\r\n const wrappedScrollEmit = (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Scroll }, p),\r\n }));\r\n const wrappedCanvasMutationEmit = (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.CanvasMutation }, p),\r\n }));\r\n const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.AdoptedStyleSheet }, a),\r\n }));\r\n const stylesheetManager = new StylesheetManager({\r\n mutationCb: wrappedMutationEmit,\r\n adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit,\r\n });\r\n const iframeManager = new IframeManager({\r\n mirror,\r\n mutationCb: wrappedMutationEmit,\r\n stylesheetManager: stylesheetManager,\r\n recordCrossOriginIframes,\r\n wrappedEmit,\r\n });\r\n for (const plugin of plugins || []) {\r\n if (plugin.getMirror)\r\n plugin.getMirror({\r\n nodeMirror: mirror,\r\n crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\r\n crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror,\r\n });\r\n }\r\n const processedNodeManager = new ProcessedNodeManager();\r\n canvasManager = new CanvasManager({\r\n recordCanvas,\r\n mutationCb: wrappedCanvasMutationEmit,\r\n win: window,\r\n blockClass,\r\n blockSelector,\r\n mirror,\r\n sampling: sampling.canvas,\r\n dataURLOptions,\r\n });\r\n const shadowDomManager = new ShadowDomManager({\r\n mutationCb: wrappedMutationEmit,\r\n scrollCb: wrappedScrollEmit,\r\n bypassOptions: {\r\n blockClass,\r\n blockSelector,\r\n maskTextClass,\r\n maskTextSelector,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n dataURLOptions,\r\n maskTextFn,\r\n maskInputFn,\r\n recordCanvas,\r\n inlineImages,\r\n sampling,\r\n slimDOMOptions,\r\n iframeManager,\r\n stylesheetManager,\r\n canvasManager,\r\n keepIframeSrcFn,\r\n processedNodeManager,\r\n },\r\n mirror,\r\n });\r\n takeFullSnapshot = (isCheckout = false) => {\r\n if (!recordDOM) {\r\n return;\r\n }\r\n wrappedEmit(wrapEvent({\r\n type: EventType.Meta,\r\n data: {\r\n href: window.location.href,\r\n width: getWindowWidth(),\r\n height: getWindowHeight(),\r\n },\r\n }), isCheckout);\r\n stylesheetManager.reset();\r\n shadowDomManager.init();\r\n mutationBuffers.forEach((buf) => buf.lock());\r\n const node = snapshot(document, {\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n maskTextClass,\r\n maskTextSelector,\r\n inlineStylesheet,\r\n maskAllInputs: maskInputOptions,\r\n maskTextFn,\r\n slimDOM: slimDOMOptions,\r\n dataURLOptions,\r\n recordCanvas,\r\n inlineImages,\r\n onSerialize: (n) => {\r\n if (isSerializedIframe(n, mirror)) {\r\n iframeManager.addIframe(n);\r\n }\r\n if (isSerializedStylesheet(n, mirror)) {\r\n stylesheetManager.trackLinkElement(n);\r\n }\r\n if (hasShadowRoot(n)) {\r\n shadowDomManager.addShadowRoot(n.shadowRoot, document);\r\n }\r\n },\r\n onIframeLoad: (iframe, childSn) => {\r\n iframeManager.attachIframe(iframe, childSn);\r\n shadowDomManager.observeAttachShadow(iframe);\r\n },\r\n onStylesheetLoad: (linkEl, childSn) => {\r\n stylesheetManager.attachLinkElement(linkEl, childSn);\r\n },\r\n keepIframeSrcFn,\r\n });\r\n if (!node) {\r\n return console.warn('Failed to snapshot the document');\r\n }\r\n wrappedEmit(wrapEvent({\r\n type: EventType.FullSnapshot,\r\n data: {\r\n node,\r\n initialOffset: getWindowScroll(window),\r\n },\r\n }), isCheckout);\r\n mutationBuffers.forEach((buf) => buf.unlock());\r\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\r\n stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\r\n };\r\n try {\r\n const handlers = [];\r\n const observe = (doc) => {\r\n var _a;\r\n return callbackWrapper(initObservers)({\r\n mutationCb: wrappedMutationEmit,\r\n mousemoveCb: (positions, source) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source,\r\n positions,\r\n },\r\n })),\r\n mouseInteractionCb: (d) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.MouseInteraction }, d),\r\n })),\r\n scrollCb: wrappedScrollEmit,\r\n viewportResizeCb: (d) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.ViewportResize }, d),\r\n })),\r\n inputCb: (v) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Input }, v),\r\n })),\r\n mediaInteractionCb: (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.MediaInteraction }, p),\r\n })),\r\n styleSheetRuleCb: (r) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.StyleSheetRule }, r),\r\n })),\r\n styleDeclarationCb: (r) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.StyleDeclaration }, r),\r\n })),\r\n canvasMutationCb: wrappedCanvasMutationEmit,\r\n fontCb: (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Font }, p),\r\n })),\r\n selectionCb: (p) => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Selection }, p),\r\n }));\r\n },\r\n customElementCb: (c) => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.CustomElement }, c),\r\n }));\r\n },\r\n blockClass,\r\n ignoreClass,\r\n ignoreSelector,\r\n maskTextClass,\r\n maskTextSelector,\r\n maskInputOptions,\r\n inlineStylesheet,\r\n sampling,\r\n recordDOM,\r\n recordCanvas,\r\n inlineImages,\r\n userTriggeredOnInput,\r\n collectFonts,\r\n doc,\r\n maskInputFn,\r\n maskTextFn,\r\n keepIframeSrcFn,\r\n blockSelector,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n mirror,\r\n iframeManager,\r\n stylesheetManager,\r\n shadowDomManager,\r\n processedNodeManager,\r\n canvasManager,\r\n ignoreCSSAttributes,\r\n plugins: ((_a = plugins === null || plugins === void 0 ? void 0 : plugins.filter((p) => p.observer)) === null || _a === void 0 ? void 0 : _a.map((p) => ({\r\n observer: p.observer,\r\n options: p.options,\r\n callback: (payload) => wrappedEmit(wrapEvent({\r\n type: EventType.Plugin,\r\n data: {\r\n plugin: p.name,\r\n payload,\r\n },\r\n })),\r\n }))) || [],\r\n }, hooks);\r\n };\r\n iframeManager.addLoadListener((iframeEl) => {\r\n try {\r\n handlers.push(observe(iframeEl.contentDocument));\r\n }\r\n catch (error) {\r\n console.warn(error);\r\n }\r\n });\r\n const init = () => {\r\n takeFullSnapshot();\r\n handlers.push(observe(document));\r\n recording = true;\r\n };\r\n if (document.readyState === 'interactive' ||\r\n document.readyState === 'complete') {\r\n init();\r\n }\r\n else {\r\n handlers.push(on('DOMContentLoaded', () => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.DomContentLoaded,\r\n data: {},\r\n }));\r\n if (recordAfter === 'DOMContentLoaded')\r\n init();\r\n }));\r\n handlers.push(on('load', () => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.Load,\r\n data: {},\r\n }));\r\n if (recordAfter === 'load')\r\n init();\r\n }, window));\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n processedNodeManager.destroy();\r\n recording = false;\r\n unregisterErrorHandler();\r\n };\r\n }\r\n catch (error) {\r\n console.warn(error);\r\n }\r\n}\r\nrecord.addCustomEvent = (tag, payload) => {\r\n if (!recording) {\r\n throw new Error('please add custom event after start recording');\r\n }\r\n wrappedEmit(wrapEvent({\r\n type: EventType.Custom,\r\n data: {\r\n tag,\r\n payload,\r\n },\r\n }));\r\n};\r\nrecord.freezePage = () => {\r\n mutationBuffers.forEach((buf) => buf.freeze());\r\n};\r\nrecord.takeFullSnapshot = (isCheckout) => {\r\n if (!recording) {\r\n throw new Error('please take full snapshot after start recording');\r\n }\r\n takeFullSnapshot(isCheckout);\r\n};\r\nrecord.mirror = mirror;\n\nexport { record as default };\n","var EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n})(CanvasContext || {});\nvar MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {\n MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n return MediaInteractions2;\n})(MediaInteractions || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n ReplayerEvents2[\"Start\"] = \"start\";\n ReplayerEvents2[\"Pause\"] = \"pause\";\n ReplayerEvents2[\"Resume\"] = \"resume\";\n ReplayerEvents2[\"Resize\"] = \"resize\";\n ReplayerEvents2[\"Finish\"] = \"finish\";\n ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n ReplayerEvents2[\"Flush\"] = \"flush\";\n ReplayerEvents2[\"StateChange\"] = \"state-change\";\n ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n ReplayerEvents2[\"Destroy\"] = \"destroy\";\n return ReplayerEvents2;\n})(ReplayerEvents || {});\nexport {\n CanvasContext,\n EventType,\n IncrementalSource,\n MediaInteractions,\n MouseInteractions,\n PointerTypes,\n ReplayerEvents\n};\n//# sourceMappingURL=types.js.map\n","var Config = {\n DEBUG: false,\n LIB_VERSION: '2.58.0'\n};\n\nexport default Config;\n","// since es6 imports are static and we run unit tests from the console, window won't be defined when importing this file\nvar win;\nif (typeof(window) === 'undefined') {\n var loc = {\n hostname: ''\n };\n win = {\n navigator: { userAgent: '', onLine: true },\n document: {\n location: loc,\n referrer: ''\n },\n screen: { width: 0, height: 0 },\n location: loc\n };\n} else {\n win = window;\n}\n\nexport { win as window };\n","import { window } from './window';\n/**\n * Promise polyfill sourced from https://github.com/getify/native-promise-only.\n * Modified to\n * - remove UMD wrapper and export as an object, so that we don't globally polyfill Promise.\n * - rename access notation for dynamically referenced props to avoid minification, e.g. this.__NPO__ -> this['__NPO__']\n*/\n\n/*! Native Promise Only\n v0.8.1 (c) Kyle Simpson\n MIT License: http://getify.mit-license.org\n*/\n\n/*jshint validthis:true */\n'use strict';\n\nvar setImmediate = window['setImmediate'];\nvar builtInProp, cycle, schedulingQueue,\n ToString = Object.prototype.toString,\n timer = (typeof setImmediate !== 'undefined') ?\n function timer(fn) { return setImmediate(fn); } :\n setTimeout;\n\n// dammit, IE8.\ntry {\n Object.defineProperty({},'x',{});\n builtInProp = function builtInProp(obj,name,val,config) {\n return Object.defineProperty(obj,name,{\n value: val,\n writable: true,\n configurable: config !== false\n });\n };\n}\ncatch (err) {\n builtInProp = function builtInProp(obj,name,val) {\n obj[name] = val;\n return obj;\n };\n}\n\n// Note: using a queue instead of array for efficiency\nschedulingQueue = (function Queue() {\n var first, last, item;\n\n function Item(fn,self) {\n this.fn = fn;\n this.self = self;\n this.next = void 0;\n }\n\n return {\n add: function add(fn,self) {\n item = new Item(fn,self);\n if (last) {\n last.next = item;\n }\n else {\n first = item;\n }\n last = item;\n item = void 0;\n },\n drain: function drain() {\n var f = first;\n first = last = cycle = void 0;\n\n while (f) {\n f.fn.call(f.self);\n f = f.next;\n }\n }\n };\n})();\n\nfunction schedule(fn,self) {\n schedulingQueue.add(fn,self);\n if (!cycle) {\n cycle = timer(schedulingQueue.drain);\n }\n}\n\n// promise duck typing\nfunction isThenable(o) {\n var _then, oType = typeof o;\n\n if (o !== null && (oType === 'object' || oType === 'function')) {\n _then = o.then;\n }\n return typeof _then === 'function' ? _then : false;\n}\n\nfunction notify() {\n for (var i=0; i<this.chain.length; i++) {\n notifyIsolated(\n this,\n (this.state === 1) ? this.chain[i].success : this.chain[i].failure,\n this.chain[i]\n );\n }\n this.chain.length = 0;\n}\n\n// NOTE: This is a separate function to isolate\n// the `try..catch` so that other code can be\n// optimized better\nfunction notifyIsolated(self,cb,chain) {\n var ret, _then;\n try {\n if (cb === false) {\n chain.reject(self.msg);\n }\n else {\n if (cb === true) {\n ret = self.msg;\n }\n else {\n ret = cb.call(void 0,self.msg);\n }\n\n if (ret === chain.promise) {\n chain.reject(TypeError('Promise-chain cycle'));\n }\n // eslint-disable-next-line no-cond-assign\n else if (_then = isThenable(ret)) {\n _then.call(ret,chain.resolve,chain.reject);\n }\n else {\n chain.resolve(ret);\n }\n }\n }\n catch (err) {\n chain.reject(err);\n }\n}\n\nfunction resolve(msg) {\n var _then, self = this;\n\n // already triggered?\n if (self.triggered) { return; }\n\n self.triggered = true;\n\n // unwrap\n if (self.def) {\n self = self.def;\n }\n\n try {\n // eslint-disable-next-line no-cond-assign\n if (_then = isThenable(msg)) {\n schedule(function(){\n var defWrapper = new MakeDefWrapper(self);\n try {\n _then.call(msg,\n function $resolve$(){ resolve.apply(defWrapper,arguments); },\n function $reject$(){ reject.apply(defWrapper,arguments); }\n );\n }\n catch (err) {\n reject.call(defWrapper,err);\n }\n });\n }\n else {\n self.msg = msg;\n self.state = 1;\n if (self.chain.length > 0) {\n schedule(notify,self);\n }\n }\n }\n catch (err) {\n reject.call(new MakeDefWrapper(self),err);\n }\n}\n\nfunction reject(msg) {\n var self = this;\n\n // already triggered?\n if (self.triggered) { return; }\n\n self.triggered = true;\n\n // unwrap\n if (self.def) {\n self = self.def;\n }\n\n self.msg = msg;\n self.state = 2;\n if (self.chain.length > 0) {\n schedule(notify,self);\n }\n}\n\nfunction iteratePromises(Constructor,arr,resolver,rejecter) {\n for (var idx=0; idx<arr.length; idx++) {\n (function IIFE(idx){\n Constructor.resolve(arr[idx])\n .then(\n function $resolver$(msg){\n resolver(idx,msg);\n },\n rejecter\n );\n })(idx);\n }\n}\n\nfunction MakeDefWrapper(self) {\n this.def = self;\n this.triggered = false;\n}\n\nfunction MakeDef(self) {\n this.promise = self;\n this.state = 0;\n this.triggered = false;\n this.chain = [];\n this.msg = void 0;\n}\n\nfunction NpoPromise(executor) {\n if (typeof executor !== 'function') {\n throw TypeError('Not a function');\n }\n\n if (this['__NPO__'] !== 0) {\n throw TypeError('Not a promise');\n }\n\n // instance shadowing the inherited \"brand\"\n // to signal an already \"initialized\" promise\n this['__NPO__'] = 1;\n\n var def = new MakeDef(this);\n\n this['then'] = function then(success,failure) {\n var o = {\n success: typeof success === 'function' ? success : true,\n failure: typeof failure === 'function' ? failure : false\n };\n // Note: `then(..)` itself can be borrowed to be used against\n // a different promise constructor for making the chained promise,\n // by substituting a different `this` binding.\n o.promise = new this.constructor(function extractChain(resolve,reject) {\n if (typeof resolve !== 'function' || typeof reject !== 'function') {\n throw TypeError('Not a function');\n }\n\n o.resolve = resolve;\n o.reject = reject;\n });\n def.chain.push(o);\n\n if (def.state !== 0) {\n schedule(notify,def);\n }\n\n return o.promise;\n };\n this['catch'] = function $catch$(failure) {\n return this.then(void 0,failure);\n };\n\n try {\n executor.call(\n void 0,\n function publicResolve(msg){\n resolve.call(def,msg);\n },\n function publicReject(msg) {\n reject.call(def,msg);\n }\n );\n }\n catch (err) {\n reject.call(def,err);\n }\n}\n\nvar PromisePrototype = builtInProp({},'constructor',NpoPromise,\n /*configurable=*/false\n);\n\n // Note: Android 4 cannot use `Object.defineProperty(..)` here\nNpoPromise.prototype = PromisePrototype;\n\n// built-in \"brand\" to signal an \"uninitialized\" promise\nbuiltInProp(PromisePrototype,'__NPO__',0,\n /*configurable=*/false\n);\n\nbuiltInProp(NpoPromise,'resolve',function Promise$resolve(msg) {\n var Constructor = this;\n\n // spec mandated checks\n // note: best \"isPromise\" check that's practical for now\n if (msg && typeof msg === 'object' && msg['__NPO__'] === 1) {\n return msg;\n }\n\n return new Constructor(function executor(resolve,reject){\n if (typeof resolve !== 'function' || typeof reject !== 'function') {\n throw TypeError('Not a function');\n }\n\n resolve(msg);\n });\n});\n\nbuiltInProp(NpoPromise,'reject',function Promise$reject(msg) {\n return new this(function executor(resolve,reject){\n if (typeof resolve !== 'function' || typeof reject !== 'function') {\n throw TypeError('Not a function');\n }\n\n reject(msg);\n });\n});\n\nbuiltInProp(NpoPromise,'all',function Promise$all(arr) {\n var Constructor = this;\n\n // spec mandated checks\n if (ToString.call(arr) !== '[object Array]') {\n return Constructor.reject(TypeError('Not an array'));\n }\n if (arr.length === 0) {\n return Constructor.resolve([]);\n }\n\n return new Constructor(function executor(resolve,reject){\n if (typeof resolve !== 'function' || typeof reject !== 'function') {\n throw TypeError('Not a function');\n }\n\n var len = arr.length, msgs = Array(len), count = 0;\n\n iteratePromises(Constructor,arr,function resolver(idx,msg) {\n msgs[idx] = msg;\n if (++count === len) {\n resolve(msgs);\n }\n },reject);\n });\n});\n\nbuiltInProp(NpoPromise,'race',function Promise$race(arr) {\n var Constructor = this;\n\n // spec mandated checks\n if (ToString.call(arr) !== '[object Array]') {\n return Constructor.reject(TypeError('Not an array'));\n }\n\n return new Constructor(function executor(resolve,reject){\n if (typeof resolve !== 'function' || typeof reject !== 'function') {\n throw TypeError('Not a function');\n }\n\n iteratePromises(Constructor,arr,function resolver(idx,msg){\n resolve(msg);\n },reject);\n });\n});\n\nvar PromisePolyfill;\nif (typeof Promise !== 'undefined' && Promise.toString().indexOf('[native code]') !== -1) {\n PromisePolyfill = Promise;\n} else {\n PromisePolyfill = NpoPromise;\n}\n\nexport { PromisePolyfill as Promise, NpoPromise };\n","/* eslint camelcase: \"off\", eqeqeq: \"off\" */\nimport Config from './config';\nimport { NpoPromise } from './promise-polyfill';\nimport { window } from './window';\n\n// Maximum allowed session recording length\nvar MAX_RECORDING_MS = 24 * 60 * 60 * 1000; // 24 hours\n// Maximum allowed value for minimum session recording length\nvar MAX_VALUE_FOR_MIN_RECORDING_MS = 8 * 1000; // 8 seconds\n\n/*\n * Saved references to long variable names, so that closure compiler can\n * minimize file size.\n */\n\nvar ArrayProto = Array.prototype,\n FuncProto = Function.prototype,\n ObjProto = Object.prototype,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty,\n windowConsole = window.console,\n navigator = window.navigator,\n document = window.document,\n windowOpera = window.opera,\n screen = window.screen,\n userAgent = navigator.userAgent;\n\nvar nativeBind = FuncProto.bind,\n nativeForEach = ArrayProto.forEach,\n nativeIndexOf = ArrayProto.indexOf,\n nativeMap = ArrayProto.map,\n nativeIsArray = Array.isArray,\n breaker = {};\n\nvar _ = {\n trim: function(str) {\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n }\n};\n\n// Console override\nvar console = {\n /** @type {function(...*)} */\n log: function() {\n if (Config.DEBUG && !_.isUndefined(windowConsole) && windowConsole) {\n try {\n windowConsole.log.apply(windowConsole, arguments);\n } catch (err) {\n _.each(arguments, function(arg) {\n windowConsole.log(arg);\n });\n }\n }\n },\n /** @type {function(...*)} */\n warn: function() {\n if (Config.DEBUG && !_.isUndefined(windowConsole) && windowConsole) {\n var args = ['Mixpanel warning:'].concat(_.toArray(arguments));\n try {\n windowConsole.warn.apply(windowConsole, args);\n } catch (err) {\n _.each(args, function(arg) {\n windowConsole.warn(arg);\n });\n }\n }\n },\n /** @type {function(...*)} */\n error: function() {\n if (Config.DEBUG && !_.isUndefined(windowConsole) && windowConsole) {\n var args = ['Mixpanel error:'].concat(_.toArray(arguments));\n try {\n windowConsole.error.apply(windowConsole, args);\n } catch (err) {\n _.each(args, function(arg) {\n windowConsole.error(arg);\n });\n }\n }\n },\n /** @type {function(...*)} */\n critical: function() {\n if (!_.isUndefined(windowConsole) && windowConsole) {\n var args = ['Mixpanel error:'].concat(_.toArray(arguments));\n try {\n windowConsole.error.apply(windowConsole, args);\n } catch (err) {\n _.each(args, function(arg) {\n windowConsole.error(arg);\n });\n }\n }\n }\n};\n\nvar log_func_with_prefix = function(func, prefix) {\n return function() {\n arguments[0] = '[' + prefix + '] ' + arguments[0];\n return func.apply(console, arguments);\n };\n};\nvar console_with_prefix = function(prefix) {\n return {\n log: log_func_with_prefix(console.log, prefix),\n error: log_func_with_prefix(console.error, prefix),\n critical: log_func_with_prefix(console.critical, prefix)\n };\n};\n\n\n// UNDERSCORE\n// Embed part of the Underscore Library\n_.bind = function(func, context) {\n var args, bound;\n if (nativeBind && func.bind === nativeBind) {\n return nativeBind.apply(func, slice.call(arguments, 1));\n }\n if (!_.isFunction(func)) {\n throw new TypeError();\n }\n args = slice.call(arguments, 2);\n bound = function() {\n if (!(this instanceof bound)) {\n return func.apply(context, args.concat(slice.call(arguments)));\n }\n var ctor = {};\n ctor.prototype = func.prototype;\n var self = new ctor();\n ctor.prototype = null;\n var result = func.apply(self, args.concat(slice.call(arguments)));\n if (Object(result) === result) {\n return result;\n }\n return self;\n };\n return bound;\n};\n\n/**\n * @param {*=} obj\n * @param {function(...*)=} iterator\n * @param {Object=} context\n */\n_.each = function(obj, iterator, context) {\n if (obj === null || obj === undefined) {\n return;\n }\n if (nativeForEach && obj.forEach === nativeForEach) {\n obj.forEach(iterator, context);\n } else if (obj.length === +obj.length) {\n for (var i = 0, l = obj.length; i < l; i++) {\n if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) {\n return;\n }\n }\n } else {\n for (var key in obj) {\n if (hasOwnProperty.call(obj, key)) {\n if (iterator.call(context, obj[key], key, obj) === breaker) {\n return;\n }\n }\n }\n }\n};\n\n_.extend = function(obj) {\n _.each(slice.call(arguments, 1), function(source) {\n for (var prop in source) {\n if (source[prop] !== void 0) {\n obj[prop] = source[prop];\n }\n }\n });\n return obj;\n};\n\n_.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n};\n\n// from a comment on http://dbj.org/dbj/?p=286\n// fails on only one very rare and deliberate custom object:\n// var bomb = { toString : undefined, valueOf: function(o) { return \"function BOMBA!\"; }};\n_.isFunction = function(f) {\n try {\n return /^\\s*\\bfunction\\b/.test(f);\n } catch (x) {\n return false;\n }\n};\n\n_.isArguments = function(obj) {\n return !!(obj && hasOwnProperty.call(obj, 'callee'));\n};\n\n_.toArray = function(iterable) {\n if (!iterable) {\n return [];\n }\n if (iterable.toArray) {\n return iterable.toArray();\n }\n if (_.isArray(iterable)) {\n return slice.call(iterable);\n }\n if (_.isArguments(iterable)) {\n return slice.call(iterable);\n }\n return _.values(iterable);\n};\n\n_.map = function(arr, callback, context) {\n if (nativeMap && arr.map === nativeMap) {\n return arr.map(callback, context);\n } else {\n var results = [];\n _.each(arr, function(item) {\n results.push(callback.call(context, item));\n });\n return results;\n }\n};\n\n_.keys = function(obj) {\n var results = [];\n if (obj === null) {\n return results;\n }\n _.each(obj, function(value, key) {\n results[results.length] = key;\n });\n return results;\n};\n\n_.values = function(obj) {\n var results = [];\n if (obj === null) {\n return results;\n }\n _.each(obj, function(value) {\n results[results.length] = value;\n });\n return results;\n};\n\n_.include = function(obj, target) {\n var found = false;\n if (obj === null) {\n return found;\n }\n if (nativeIndexOf && obj.indexOf === nativeIndexOf) {\n return obj.indexOf(target) != -1;\n }\n _.each(obj, function(value) {\n if (found || (found = (value === target))) {\n return breaker;\n }\n });\n return found;\n};\n\n_.includes = function(str, needle) {\n return str.indexOf(needle) !== -1;\n};\n\n// Underscore Addons\n_.inherit = function(subclass, superclass) {\n subclass.prototype = new superclass();\n subclass.prototype.constructor = subclass;\n subclass.superclass = superclass.prototype;\n return subclass;\n};\n\n_.isObject = function(obj) {\n return (obj === Object(obj) && !_.isArray(obj));\n};\n\n_.isEmptyObject = function(obj) {\n if (_.isObject(obj)) {\n for (var key in obj) {\n if (hasOwnProperty.call(obj, key)) {\n return false;\n }\n }\n return true;\n }\n return false;\n};\n\n_.isUndefined = function(obj) {\n return obj === void 0;\n};\n\n_.isString = function(obj) {\n return toString.call(obj) == '[object String]';\n};\n\n_.isDate = function(obj) {\n return toString.call(obj) == '[object Date]';\n};\n\n_.isNumber = function(obj) {\n return toString.call(obj) == '[object Number]';\n};\n\n_.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n};\n\n_.encodeDates = function(obj) {\n _.each(obj, function(v, k) {\n if (_.isDate(v)) {\n obj[k] = _.formatDate(v);\n } else if (_.isObject(v)) {\n obj[k] = _.encodeDates(v); // recurse\n }\n });\n return obj;\n};\n\n_.timestamp = function() {\n Date.now = Date.now || function() {\n return +new Date;\n };\n return Date.now();\n};\n\n_.formatDate = function(d) {\n // YYYY-MM-DDTHH:MM:SS in UTC\n function pad(n) {\n return n < 10 ? '0' + n : n;\n }\n return d.getUTCFullYear() + '-' +\n pad(d.getUTCMonth() + 1) + '-' +\n pad(d.getUTCDate()) + 'T' +\n pad(d.getUTCHours()) + ':' +\n pad(d.getUTCMinutes()) + ':' +\n pad(d.getUTCSeconds());\n};\n\n_.strip_empty_properties = function(p) {\n var ret = {};\n _.each(p, function(v, k) {\n if (_.isString(v) && v.length > 0) {\n ret[k] = v;\n }\n });\n return ret;\n};\n\n/*\n * this function returns a copy of object after truncating it. If\n * passed an Array or Object it will iterate through obj and\n * truncate all the values recursively.\n */\n_.truncate = function(obj, length) {\n var ret;\n\n if (typeof(obj) === 'string') {\n ret = obj.slice(0, length);\n } else if (_.isArray(obj)) {\n ret = [];\n _.each(obj, function(val) {\n ret.push(_.truncate(val, length));\n });\n } else if (_.isObject(obj)) {\n ret = {};\n _.each(obj, function(val, key) {\n ret[key] = _.truncate(val, length);\n });\n } else {\n ret = obj;\n }\n\n return ret;\n};\n\n_.JSONEncode = (function() {\n return function(mixed_val) {\n var value = mixed_val;\n var quote = function(string) {\n var escapable = /[\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g; // eslint-disable-line no-control-regex\n var meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n };\n\n escapable.lastIndex = 0;\n return escapable.test(string) ?\n '\"' + string.replace(escapable, function(a) {\n var c = meta[a];\n return typeof c === 'string' ? c :\n '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' :\n '\"' + string + '\"';\n };\n\n var str = function(key, holder) {\n var gap = '';\n var indent = ' ';\n var i = 0; // The loop counter.\n var k = ''; // The member key.\n var v = ''; // The member value.\n var length = 0;\n var mind = gap;\n var partial = [];\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n if (value && typeof value === 'object' &&\n typeof value.toJSON === 'function') {\n value = value.toJSON(key);\n }\n\n // What happens next depends on the value's type.\n switch (typeof value) {\n case 'string':\n return quote(value);\n\n case 'number':\n // JSON numbers must be finite. Encode non-finite numbers as null.\n return isFinite(value) ? String(value) : 'null';\n\n case 'boolean':\n case 'null':\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce 'null'. The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n case 'object':\n // If the type is 'object', we might be dealing with an object or an array or\n // null.\n // Due to a specification blunder in ECMAScript, typeof null is 'object',\n // so watch out for that case.\n if (!value) {\n return 'null';\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n gap += indent;\n partial = [];\n\n // Is the value an array?\n if (toString.apply(value) === '[object Array]') {\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n v = partial.length === 0 ? '[]' :\n gap ? '[\\n' + gap +\n partial.join(',\\n' + gap) + '\\n' +\n mind + ']' :\n '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n\n // Iterate through all of the keys in the object.\n for (k in value) {\n if (hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n v = partial.length === 0 ? '{}' :\n gap ? '{' + partial.join(',') + '' +\n mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n };\n\n // Make a fake root object containing our value under the key of ''.\n // Return the result of stringifying the value.\n return str('', {\n '': value\n });\n };\n})();\n\n/**\n * From https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js\n * Slightly modified to throw a real Error rather than a POJO\n */\n_.JSONDecode = (function() {\n var at, // The index of the current character\n ch, // The current character\n escapee = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n 'b': '\\b',\n 'f': '\\f',\n 'n': '\\n',\n 'r': '\\r',\n 't': '\\t'\n },\n text,\n error = function(m) {\n var e = new SyntaxError(m);\n e.at = at;\n e.text = text;\n throw e;\n },\n next = function(c) {\n // If a c parameter is provided, verify that it matches the current character.\n if (c && c !== ch) {\n error('Expected \\'' + c + '\\' instead of \\'' + ch + '\\'');\n }\n // Get the next character. When there are no more characters,\n // return the empty string.\n ch = text.charAt(at);\n at += 1;\n return ch;\n },\n number = function() {\n // Parse a number value.\n var number,\n string = '';\n\n if (ch === '-') {\n string = '-';\n next('-');\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n if (ch === '.') {\n string += '.';\n while (next() && ch >= '0' && ch <= '9') {\n string += ch;\n }\n }\n if (ch === 'e' || ch === 'E') {\n string += ch;\n next();\n if (ch === '-' || ch === '+') {\n string += ch;\n next();\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n }\n number = +string;\n if (!isFinite(number)) {\n error('Bad number');\n } else {\n return number;\n }\n },\n\n string = function() {\n // Parse a string value.\n var hex,\n i,\n string = '',\n uffff;\n // When parsing for string values, we must look for \" and \\ characters.\n if (ch === '\"') {\n while (next()) {\n if (ch === '\"') {\n next();\n return string;\n }\n if (ch === '\\\\') {\n next();\n if (ch === 'u') {\n uffff = 0;\n for (i = 0; i < 4; i += 1) {\n hex = parseInt(next(), 16);\n if (!isFinite(hex)) {\n break;\n }\n uffff = uffff * 16 + hex;\n }\n string += String.fromCharCode(uffff);\n } else if (typeof escapee[ch] === 'string') {\n string += escapee[ch];\n } else {\n break;\n }\n } else {\n string += ch;\n }\n }\n }\n error('Bad string');\n },\n white = function() {\n // Skip whitespace.\n while (ch && ch <= ' ') {\n next();\n }\n },\n word = function() {\n // true, false, or null.\n switch (ch) {\n case 't':\n next('t');\n next('r');\n next('u');\n next('e');\n return true;\n case 'f':\n next('f');\n next('a');\n next('l');\n next('s');\n next('e');\n return false;\n case 'n':\n next('n');\n next('u');\n next('l');\n next('l');\n return null;\n }\n error('Unexpected \"' + ch + '\"');\n },\n value, // Placeholder for the value function.\n array = function() {\n // Parse an array value.\n var array = [];\n\n if (ch === '[') {\n next('[');\n white();\n if (ch === ']') {\n next(']');\n return array; // empty array\n }\n while (ch) {\n array.push(value());\n white();\n if (ch === ']') {\n next(']');\n return array;\n }\n next(',');\n white();\n }\n }\n error('Bad array');\n },\n object = function() {\n // Parse an object value.\n var key,\n object = {};\n\n if (ch === '{') {\n next('{');\n white();\n if (ch === '}') {\n next('}');\n return object; // empty object\n }\n while (ch) {\n key = string();\n white();\n next(':');\n if (Object.hasOwnProperty.call(object, key)) {\n error('Duplicate key \"' + key + '\"');\n }\n object[key] = value();\n white();\n if (ch === '}') {\n next('}');\n return object;\n }\n next(',');\n white();\n }\n }\n error('Bad object');\n };\n\n value = function() {\n // Parse a JSON value. It could be an object, an array, a string,\n // a number, or a word.\n white();\n switch (ch) {\n case '{':\n return object();\n case '[':\n return array();\n case '\"':\n return string();\n case '-':\n return number();\n default:\n return ch >= '0' && ch <= '9' ? number() : word();\n }\n };\n\n // Return the json_parse function. It will have access to all of the\n // above functions and variables.\n return function(source) {\n var result;\n\n text = source;\n at = 0;\n ch = ' ';\n result = value();\n white();\n if (ch) {\n error('Syntax error');\n }\n\n return result;\n };\n})();\n\n_.base64Encode = function(data) {\n var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,\n ac = 0,\n enc = '',\n tmp_arr = [];\n\n if (!data) {\n return data;\n }\n\n data = _.utf8Encode(data);\n\n do { // pack three octets into four hexets\n o1 = data.charCodeAt(i++);\n o2 = data.charCodeAt(i++);\n o3 = data.charCodeAt(i++);\n\n bits = o1 << 16 | o2 << 8 | o3;\n\n h1 = bits >> 18 & 0x3f;\n h2 = bits >> 12 & 0x3f;\n h3 = bits >> 6 & 0x3f;\n h4 = bits & 0x3f;\n\n // use hexets to index into b64, and append result to encoded string\n tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\n } while (i < data.length);\n\n enc = tmp_arr.join('');\n\n switch (data.length % 3) {\n case 1:\n enc = enc.slice(0, -2) + '==';\n break;\n case 2:\n enc = enc.slice(0, -1) + '=';\n break;\n }\n\n return enc;\n};\n\n_.utf8Encode = function(string) {\n string = (string + '').replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n var utftext = '',\n start,\n end;\n var stringl = 0,\n n;\n\n start = end = 0;\n stringl = string.length;\n\n for (n = 0; n < stringl; n++) {\n var c1 = string.charCodeAt(n);\n var enc = null;\n\n if (c1 < 128) {\n end++;\n } else if ((c1 > 127) && (c1 < 2048)) {\n enc = String.fromCharCode((c1 >> 6) | 192, (c1 & 63) | 128);\n } else {\n enc = String.fromCharCode((c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128);\n }\n if (enc !== null) {\n if (end > start) {\n utftext += string.substring(start, end);\n }\n utftext += enc;\n start = end = n + 1;\n }\n }\n\n if (end > start) {\n utftext += string.substring(start, string.length);\n }\n\n return utftext;\n};\n\n_.UUID = (function() {\n\n // Time-based entropy\n var T = function() {\n var time = 1 * new Date(); // cross-browser version of Date.now()\n var ticks;\n if (window.performance && window.performance.now) {\n ticks = window.performance.now();\n } else {\n // fall back to busy loop\n ticks = 0;\n\n // this while loop figures how many browser ticks go by\n // before 1*new Date() returns a new number, ie the amount\n // of ticks that go by per millisecond\n while (time == 1 * new Date()) {\n ticks++;\n }\n }\n return time.toString(16) + Math.floor(ticks).toString(16);\n };\n\n // Math.Random entropy\n var R = function() {\n return Math.random().toString(16).replace('.', '');\n };\n\n // User agent entropy\n // This function takes the user agent string, and then xors\n // together each sequence of 8 bytes. This produces a final\n // sequence of 8 bytes which it returns as hex.\n var UA = function() {\n var ua = userAgent,\n i, ch, buffer = [],\n ret = 0;\n\n function xor(result, byte_array) {\n var j, tmp = 0;\n for (j = 0; j < byte_array.length; j++) {\n tmp |= (buffer[j] << j * 8);\n }\n return result ^ tmp;\n }\n\n for (i = 0; i < ua.length; i++) {\n ch = ua.charCodeAt(i);\n buffer.unshift(ch & 0xFF);\n if (buffer.length >= 4) {\n ret = xor(ret, buffer);\n buffer = [];\n }\n }\n\n if (buffer.length > 0) {\n ret = xor(ret, buffer);\n }\n\n return ret.toString(16);\n };\n\n return function() {\n var se = (screen.height * screen.width).toString(16);\n return (T() + '-' + R() + '-' + UA() + '-' + se + '-' + T());\n };\n})();\n\n// _.isBlockedUA()\n// This is to block various web spiders from executing our JS and\n// sending false tracking data\nvar BLOCKED_UA_STRS = [\n 'ahrefsbot',\n 'ahrefssiteaudit',\n 'baiduspider',\n 'bingbot',\n 'bingpreview',\n 'chrome-lighthouse',\n 'facebookexternal',\n 'petalbot',\n 'pinterest',\n 'screaming frog',\n 'yahoo! slurp',\n 'yandexbot',\n\n // a whole bunch of goog-specific crawlers\n // https://developers.google.com/search/docs/advanced/crawling/overview-google-crawlers\n 'adsbot-google',\n 'apis-google',\n 'duplexweb-google',\n 'feedfetcher-google',\n 'google favicon',\n 'google web preview',\n 'google-read-aloud',\n 'googlebot',\n 'googleweblight',\n 'mediapartners-google',\n 'storebot-google'\n];\n_.isBlockedUA = function(ua) {\n var i;\n ua = ua.toLowerCase();\n for (i = 0; i < BLOCKED_UA_STRS.length; i++) {\n if (ua.indexOf(BLOCKED_UA_STRS[i]) !== -1) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * @param {Object=} formdata\n * @param {string=} arg_separator\n */\n_.HTTPBuildQuery = function(formdata, arg_separator) {\n var use_val, use_key, tmp_arr = [];\n\n if (_.isUndefined(arg_separator)) {\n arg_separator = '&';\n }\n\n _.each(formdata, function(val, key) {\n use_val = encodeURIComponent(val.toString());\n use_key = encodeURIComponent(key);\n tmp_arr[tmp_arr.length] = use_key + '=' + use_val;\n });\n\n return tmp_arr.join(arg_separator);\n};\n\n_.getQueryParam = function(url, param) {\n // Expects a raw URL\n\n param = param.replace(/[[]/g, '\\\\[').replace(/[\\]]/g, '\\\\]');\n var regexS = '[\\\\?&]' + param + '=([^&#]*)',\n regex = new RegExp(regexS),\n results = regex.exec(url);\n if (results === null || (results && typeof(results[1]) !== 'string' && results[1].length)) {\n return '';\n } else {\n var result = results[1];\n try {\n result = decodeURIComponent(result);\n } catch(err) {\n console.error('Skipping decoding for malformed query param: ' + result);\n }\n return result.replace(/\\+/g, ' ');\n }\n};\n\n\n// _.cookie\n// Methods partially borrowed from quirksmode.org/js/cookies.html\n_.cookie = {\n get: function(name) {\n var nameEQ = name + '=';\n var ca = document.cookie.split(';');\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return decodeURIComponent(c.substring(nameEQ.length, c.length));\n }\n }\n return null;\n },\n\n parse: function(name) {\n var cookie;\n try {\n cookie = _.JSONDecode(_.cookie.get(name)) || {};\n } catch (err) {\n // noop\n }\n return cookie;\n },\n\n set_seconds: function(name, value, seconds, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '',\n expires = '',\n secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (seconds) {\n var date = new Date();\n date.setTime(date.getTime() + (seconds * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n document.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n },\n\n set: function(name, value, days, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '', expires = '', secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n var new_cookie_val = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n document.cookie = new_cookie_val;\n return new_cookie_val;\n },\n\n remove: function(name, is_cross_subdomain, domain_override) {\n _.cookie.set(name, '', -1, is_cross_subdomain, false, false, domain_override);\n }\n};\n\nvar _localStorageSupported = null;\nvar localStorageSupported = function(storage, forceCheck) {\n if (_localStorageSupported !== null && !forceCheck) {\n return _localStorageSupported;\n }\n\n var supported = true;\n try {\n storage = storage || window.localStorage;\n var key = '__mplss_' + cheap_guid(8),\n val = 'xyz';\n storage.setItem(key, val);\n if (storage.getItem(key) !== val) {\n supported = false;\n }\n storage.removeItem(key);\n } catch (err) {\n supported = false;\n }\n\n _localStorageSupported = supported;\n return supported;\n};\n\n// _.localStorage\n_.localStorage = {\n is_supported: function(force_check) {\n var supported = localStorageSupported(null, force_check);\n if (!supported) {\n console.error('localStorage unsupported; falling back to cookie store');\n }\n return supported;\n },\n\n error: function(msg) {\n console.error('localStorage error: ' + msg);\n },\n\n get: function(name) {\n try {\n return window.localStorage.getItem(name);\n } catch (err) {\n _.localStorage.error(err);\n }\n return null;\n },\n\n parse: function(name) {\n try {\n return _.JSONDecode(_.localStorage.get(name)) || {};\n } catch (err) {\n // noop\n }\n return null;\n },\n\n set: function(name, value) {\n try {\n window.localStorage.setItem(name, value);\n } catch (err) {\n _.localStorage.error(err);\n }\n },\n\n remove: function(name) {\n try {\n window.localStorage.removeItem(name);\n } catch (err) {\n _.localStorage.error(err);\n }\n }\n};\n\n_.register_event = (function() {\n // written by Dean Edwards, 2005\n // with input from Tino Zijdel - crisp@xs4all.nl\n // with input from Carl Sverre - mail@carlsverre.com\n // with input from Mixpanel\n // http://dean.edwards.name/weblog/2005/10/add-event/\n // https://gist.github.com/1930440\n\n /**\n * @param {Object} element\n * @param {string} type\n * @param {function(...*)} handler\n * @param {boolean=} oldSchool\n * @param {boolean=} useCapture\n */\n var register_event = function(element, type, handler, oldSchool, useCapture) {\n if (!element) {\n console.error('No valid element provided to register_event');\n return;\n }\n\n if (element.addEventListener && !oldSchool) {\n element.addEventListener(type, handler, !!useCapture);\n } else {\n var ontype = 'on' + type;\n var old_handler = element[ontype]; // can be undefined\n element[ontype] = makeHandler(element, handler, old_handler);\n }\n };\n\n function makeHandler(element, new_handler, old_handlers) {\n var handler = function(event) {\n event = event || fixEvent(window.event);\n\n // this basically happens in firefox whenever another script\n // overwrites the onload callback and doesn't pass the event\n // object to previously defined callbacks. All the browsers\n // that don't define window.event implement addEventListener\n // so the dom_loaded handler will still be fired as usual.\n if (!event) {\n return undefined;\n }\n\n var ret = true;\n var old_result, new_result;\n\n if (_.isFunction(old_handlers)) {\n old_result = old_handlers(event);\n }\n new_result = new_handler.call(element, event);\n\n if ((false === old_result) || (false === new_result)) {\n ret = false;\n }\n\n return ret;\n };\n\n return handler;\n }\n\n function fixEvent(event) {\n if (event) {\n event.preventDefault = fixEvent.preventDefault;\n event.stopPropagation = fixEvent.stopPropagation;\n }\n return event;\n }\n fixEvent.preventDefault = function() {\n this.returnValue = false;\n };\n fixEvent.stopPropagation = function() {\n this.cancelBubble = true;\n };\n\n return register_event;\n})();\n\n\nvar TOKEN_MATCH_REGEX = new RegExp('^(\\\\w*)\\\\[(\\\\w+)([=~\\\\|\\\\^\\\\$\\\\*]?)=?\"?([^\\\\]\"]*)\"?\\\\]$');\n\n_.dom_query = (function() {\n /* document.getElementsBySelector(selector)\n - returns an array of element objects from the current document\n matching the CSS selector. Selectors can contain element names,\n class names and ids and can be nested. For example:\n\n elements = document.getElementsBySelector('div#main p a.external')\n\n Will return an array of all 'a' elements with 'external' in their\n class attribute that are contained inside 'p' elements that are\n contained inside the 'div' element which has id=\"main\"\n\n New in version 0.4: Support for CSS2 and CSS3 attribute selectors:\n See http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\n Version 0.4 - Simon Willison, March 25th 2003\n -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows\n -- Opera 7 fails\n\n Version 0.5 - Carl Sverre, Jan 7th 2013\n -- Now uses jQuery-esque `hasClass` for testing class name\n equality. This fixes a bug related to '-' characters being\n considered not part of a 'word' in regex.\n */\n\n function getAllChildren(e) {\n // Returns all children of element. Workaround required for IE5/Windows. Ugh.\n return e.all ? e.all : e.getElementsByTagName('*');\n }\n\n var bad_whitespace = /[\\t\\r\\n]/g;\n\n function hasClass(elem, selector) {\n var className = ' ' + selector + ' ';\n return ((' ' + elem.className + ' ').replace(bad_whitespace, ' ').indexOf(className) >= 0);\n }\n\n function getElementsBySelector(selector) {\n // Attempt to fail gracefully in lesser browsers\n if (!document.getElementsByTagName) {\n return [];\n }\n // Split selector in to tokens\n var tokens = selector.split(' ');\n var token, bits, tagName, found, foundCount, i, j, k, elements, currentContextIndex;\n var currentContext = [document];\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i].replace(/^\\s+/, '').replace(/\\s+$/, '');\n if (token.indexOf('#') > -1) {\n // Token is an ID selector\n bits = token.split('#');\n tagName = bits[0];\n var id = bits[1];\n var element = document.getElementById(id);\n if (!element || (tagName && element.nodeName.toLowerCase() != tagName)) {\n // element not found or tag with that ID not found, return false\n return [];\n }\n // Set currentContext to contain just this element\n currentContext = [element];\n continue; // Skip to next token\n }\n if (token.indexOf('.') > -1) {\n // Token contains a class selector\n bits = token.split('.');\n tagName = bits[0];\n var className = bits[1];\n if (!tagName) {\n tagName = '*';\n }\n // Get elements matching tag, filter them for class selector\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (found[j].className &&\n _.isString(found[j].className) && // some SVG elements have classNames which are not strings\n hasClass(found[j], className)\n ) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n continue; // Skip to next token\n }\n // Code to deal with attribute selectors\n var token_match = token.match(TOKEN_MATCH_REGEX);\n if (token_match) {\n tagName = token_match[1];\n var attrName = token_match[2];\n var attrOperator = token_match[3];\n var attrValue = token_match[4];\n if (!tagName) {\n tagName = '*';\n }\n // Grab all of the tagName elements within current context\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n var checkFunction; // This function will be used to filter the elements\n switch (attrOperator) {\n case '=': // Equality\n checkFunction = function(e) {\n return (e.getAttribute(attrName) == attrValue);\n };\n break;\n case '~': // Match one of space seperated words\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('\\\\b' + attrValue + '\\\\b')));\n };\n break;\n case '|': // Match start with value followed by optional hyphen\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('^' + attrValue + '-?')));\n };\n break;\n case '^': // Match starts with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) === 0);\n };\n break;\n case '$': // Match ends with value - fails with \"Warning\" in Opera 7\n checkFunction = function(e) {\n return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length);\n };\n break;\n case '*': // Match ends with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) > -1);\n };\n break;\n default:\n // Just test for existence of attribute\n checkFunction = function(e) {\n return e.getAttribute(attrName);\n };\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (checkFunction(found[j])) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);\n continue; // Skip to next token\n }\n // If we get here, token is JUST an element (not a class or ID selector)\n tagName = token;\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n elements = currentContext[j].getElementsByTagName(tagName);\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = found;\n }\n return currentContext;\n }\n\n return function(query) {\n if (_.isElement(query)) {\n return [query];\n } else if (_.isObject(query) && !_.isUndefined(query.length)) {\n return query;\n } else {\n return getElementsBySelector.call(this, query);\n }\n };\n})();\n\nvar CAMPAIGN_KEYWORDS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'utm_id', 'utm_source_platform','utm_campaign_id', 'utm_creative_format', 'utm_marketing_tactic'];\nvar CLICK_IDS = ['dclid', 'fbclid', 'gclid', 'ko_click_id', 'li_fat_id', 'msclkid', 'sccid', 'ttclid', 'twclid', 'wbraid'];\n\n_.info = {\n campaignParams: function(default_value) {\n var kw = '',\n params = {};\n _.each(CAMPAIGN_KEYWORDS, function(kwkey) {\n kw = _.getQueryParam(document.URL, kwkey);\n if (kw.length) {\n params[kwkey] = kw;\n } else if (default_value !== undefined) {\n params[kwkey] = default_value;\n }\n });\n\n return params;\n },\n\n clickParams: function() {\n var id = '',\n params = {};\n _.each(CLICK_IDS, function(idkey) {\n id = _.getQueryParam(document.URL, idkey);\n if (id.length) {\n params[idkey] = id;\n }\n });\n\n return params;\n },\n\n marketingParams: function() {\n return _.extend(_.info.campaignParams(), _.info.clickParams());\n },\n\n searchEngine: function(referrer) {\n if (referrer.search('https?://(.*)google.([^/?]*)') === 0) {\n return 'google';\n } else if (referrer.search('https?://(.*)bing.com') === 0) {\n return 'bing';\n } else if (referrer.search('https?://(.*)yahoo.com') === 0) {\n return 'yahoo';\n } else if (referrer.search('https?://(.*)duckduckgo.com') === 0) {\n return 'duckduckgo';\n } else {\n return null;\n }\n },\n\n searchInfo: function(referrer) {\n var search = _.info.searchEngine(referrer),\n param = (search != 'yahoo') ? 'q' : 'p',\n ret = {};\n\n if (search !== null) {\n ret['$search_engine'] = search;\n\n var keyword = _.getQueryParam(referrer, param);\n if (keyword.length) {\n ret['mp_keyword'] = keyword;\n }\n }\n\n return ret;\n },\n\n /**\n * This function detects which browser is running this script.\n * The order of the checks are important since many user agents\n * include key words used in later checks.\n */\n browser: function(user_agent, vendor, opera) {\n vendor = vendor || ''; // vendor is undefined for at least IE9\n if (opera || _.includes(user_agent, ' OPR/')) {\n if (_.includes(user_agent, 'Mini')) {\n return 'Opera Mini';\n }\n return 'Opera';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (_.includes(user_agent, 'IEMobile') || _.includes(user_agent, 'WPDesktop')) {\n return 'Internet Explorer Mobile';\n } else if (_.includes(user_agent, 'SamsungBrowser/')) {\n // https://developer.samsung.com/internet/user-agent-string-format\n return 'Samsung Internet';\n } else if (_.includes(user_agent, 'Edge') || _.includes(user_agent, 'Edg/')) {\n return 'Microsoft Edge';\n } else if (_.includes(user_agent, 'FBIOS')) {\n return 'Facebook Mobile';\n } else if (_.includes(user_agent, 'Chrome')) {\n return 'Chrome';\n } else if (_.includes(user_agent, 'CriOS')) {\n return 'Chrome iOS';\n } else if (_.includes(user_agent, 'UCWEB') || _.includes(user_agent, 'UCBrowser')) {\n return 'UC Browser';\n } else if (_.includes(user_agent, 'FxiOS')) {\n return 'Firefox iOS';\n } else if (_.includes(vendor, 'Apple')) {\n if (_.includes(user_agent, 'Mobile')) {\n return 'Mobile Safari';\n }\n return 'Safari';\n } else if (_.includes(user_agent, 'Android')) {\n return 'Android Mobile';\n } else if (_.includes(user_agent, 'Konqueror')) {\n return 'Konqueror';\n } else if (_.includes(user_agent, 'Firefox')) {\n return 'Firefox';\n } else if (_.includes(user_agent, 'MSIE') || _.includes(user_agent, 'Trident/')) {\n return 'Internet Explorer';\n } else if (_.includes(user_agent, 'Gecko')) {\n return 'Mozilla';\n } else {\n return '';\n }\n },\n\n /**\n * This function detects which browser version is running this script,\n * parsing major and minor version (e.g., 42.1). User agent strings from:\n * http://www.useragentstring.com/pages/useragentstring.php\n */\n browserVersion: function(userAgent, vendor, opera) {\n var browser = _.info.browser(userAgent, vendor, opera);\n var versionRegexs = {\n 'Internet Explorer Mobile': /rv:(\\d+(\\.\\d+)?)/,\n 'Microsoft Edge': /Edge?\\/(\\d+(\\.\\d+)?)/,\n 'Chrome': /Chrome\\/(\\d+(\\.\\d+)?)/,\n 'Chrome iOS': /CriOS\\/(\\d+(\\.\\d+)?)/,\n 'UC Browser' : /(UCBrowser|UCWEB)\\/(\\d+(\\.\\d+)?)/,\n 'Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Mobile Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Opera': /(Opera|OPR)\\/(\\d+(\\.\\d+)?)/,\n 'Firefox': /Firefox\\/(\\d+(\\.\\d+)?)/,\n 'Firefox iOS': /FxiOS\\/(\\d+(\\.\\d+)?)/,\n 'Konqueror': /Konqueror:(\\d+(\\.\\d+)?)/,\n 'BlackBerry': /BlackBerry (\\d+(\\.\\d+)?)/,\n 'Android Mobile': /android\\s(\\d+(\\.\\d+)?)/,\n 'Samsung Internet': /SamsungBrowser\\/(\\d+(\\.\\d+)?)/,\n 'Internet Explorer': /(rv:|MSIE )(\\d+(\\.\\d+)?)/,\n 'Mozilla': /rv:(\\d+(\\.\\d+)?)/\n };\n var regex = versionRegexs[browser];\n if (regex === undefined) {\n return null;\n }\n var matches = userAgent.match(regex);\n if (!matches) {\n return null;\n }\n return parseFloat(matches[matches.length - 2]);\n },\n\n os: function() {\n var a = userAgent;\n if (/Windows/i.test(a)) {\n if (/Phone/.test(a) || /WPDesktop/.test(a)) {\n return 'Windows Phone';\n }\n return 'Windows';\n } else if (/(iPhone|iPad|iPod)/.test(a)) {\n return 'iOS';\n } else if (/Android/.test(a)) {\n return 'Android';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(a)) {\n return 'BlackBerry';\n } else if (/Mac/i.test(a)) {\n return 'Mac OS X';\n } else if (/Linux/.test(a)) {\n return 'Linux';\n } else if (/CrOS/.test(a)) {\n return 'Chrome OS';\n } else {\n return '';\n }\n },\n\n device: function(user_agent) {\n if (/Windows Phone/i.test(user_agent) || /WPDesktop/.test(user_agent)) {\n return 'Windows Phone';\n } else if (/iPad/.test(user_agent)) {\n return 'iPad';\n } else if (/iPod/.test(user_agent)) {\n return 'iPod Touch';\n } else if (/iPhone/.test(user_agent)) {\n return 'iPhone';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (/Android/.test(user_agent)) {\n return 'Android';\n } else {\n return '';\n }\n },\n\n referringDomain: function(referrer) {\n var split = referrer.split('/');\n if (split.length >= 3) {\n return split[2];\n }\n return '';\n },\n\n currentUrl: function() {\n return window.location.href;\n },\n\n properties: function(extra_props) {\n if (typeof extra_props !== 'object') {\n extra_props = {};\n }\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera),\n '$referrer': document.referrer,\n '$referring_domain': _.info.referringDomain(document.referrer),\n '$device': _.info.device(userAgent)\n }), {\n '$current_url': _.info.currentUrl(),\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera),\n '$screen_height': screen.height,\n '$screen_width': screen.width,\n 'mp_lib': 'web',\n '$lib_version': Config.LIB_VERSION,\n '$insert_id': cheap_guid(),\n 'time': _.timestamp() / 1000 // epoch time in seconds\n }, _.strip_empty_properties(extra_props));\n },\n\n people_properties: function() {\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera)\n }), {\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera)\n });\n },\n\n mpPageViewProperties: function() {\n return _.strip_empty_properties({\n 'current_page_title': document.title,\n 'current_domain': window.location.hostname,\n 'current_url_path': window.location.pathname,\n 'current_url_protocol': window.location.protocol,\n 'current_url_search': window.location.search\n });\n }\n};\n\nvar cheap_guid = function(maxlen) {\n var guid = Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10);\n return maxlen ? guid.substring(0, maxlen) : guid;\n};\n\n// naive way to extract domain name (example.com) from full hostname (my.sub.example.com)\nvar SIMPLE_DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]*\\.[a-z]+$/i;\n// this next one attempts to account for some ccSLDs, e.g. extracting oxford.ac.uk from www.oxford.ac.uk\nvar DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]+\\.[a-z.]{2,6}$/i;\n/**\n * Attempts to extract main domain name from full hostname, using a few blunt heuristics. For\n * common TLDs like .com/.org that always have a simple SLD.TLD structure (example.com), we\n * simply extract the last two .-separated parts of the hostname (SIMPLE_DOMAIN_MATCH_REGEX).\n * For others, we attempt to account for short ccSLD+TLD combos (.ac.uk) with the legacy\n * DOMAIN_MATCH_REGEX (kept to maintain backwards compatibility with existing Mixpanel\n * integrations). The only _reliable_ way to extract domain from hostname is with an up-to-date\n * list like at https://publicsuffix.org/ so for cases that this helper fails at, the SDK\n * offers the 'cookie_domain' config option to set it explicitly.\n * @example\n * extract_domain('my.sub.example.com')\n * // 'example.com'\n */\nvar extract_domain = function(hostname) {\n var domain_regex = DOMAIN_MATCH_REGEX;\n var parts = hostname.split('.');\n var tld = parts[parts.length - 1];\n if (tld.length > 4 || tld === 'com' || tld === 'org') {\n domain_regex = SIMPLE_DOMAIN_MATCH_REGEX;\n }\n var matches = hostname.match(domain_regex);\n return matches ? matches[0] : '';\n};\n\n/**\n * Check whether we have network connection. default to true for browsers that don't support navigator.onLine (IE)\n * @returns {boolean}\n */\nvar isOnline = function() {\n var onLine = window.navigator['onLine'];\n return _.isUndefined(onLine) || onLine;\n};\n\nvar JSONStringify = null, JSONParse = null;\nif (typeof JSON !== 'undefined') {\n JSONStringify = JSON.stringify;\n JSONParse = JSON.parse;\n}\nJSONStringify = JSONStringify || _.JSONEncode;\nJSONParse = JSONParse || _.JSONDecode;\n\n// EXPORTS (for closure compiler)\n_['toArray'] = _.toArray;\n_['isObject'] = _.isObject;\n_['JSONEncode'] = _.JSONEncode;\n_['JSONDecode'] = _.JSONDecode;\n_['isBlockedUA'] = _.isBlockedUA;\n_['isEmptyObject'] = _.isEmptyObject;\n_['info'] = _.info;\n_['info']['device'] = _.info.device;\n_['info']['browser'] = _.info.browser;\n_['info']['browserVersion'] = _.info.browserVersion;\n_['info']['properties'] = _.info.properties;\n_['NPO'] = NpoPromise;\n\nexport {\n _,\n cheap_guid,\n console_with_prefix,\n console,\n document,\n extract_domain,\n JSONParse,\n JSONStringify,\n isOnline,\n localStorageSupported,\n MAX_RECORDING_MS,\n MAX_VALUE_FOR_MIN_RECORDING_MS,\n navigator,\n slice,\n userAgent,\n};\n","/**\n * GDPR utils\n *\n * The General Data Protection Regulation (GDPR) is a regulation in EU law on data protection\n * and privacy for all individuals within the European Union. It addresses the export of personal\n * data outside the EU. The GDPR aims primarily to give control back to citizens and residents\n * over their personal data and to simplify the regulatory environment for international business\n * by unifying the regulation within the EU.\n *\n * This set of utilities is intended to enable opt in/out functionality in the Mixpanel JS SDK.\n * These functions are used internally by the SDK and are not intended to be publicly exposed.\n */\n\nimport { _, console } from './utils';\nimport { window } from './window';\n\n/**\n * A function used to track a Mixpanel event (e.g. MixpanelLib.track)\n * @callback trackFunction\n * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc.\n * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself.\n * @param {Function} [callback] If provided, the callback function will be called after tracking the event.\n */\n\n/** Public **/\n\nvar GDPR_DEFAULT_PERSISTENCE_PREFIX = '__mp_opt_in_out_';\n\n/**\n * Opt the user in to data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action\n * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action\n * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not\n */\nexport function optIn(token, options) {\n _optInOut(true, token, options);\n}\n\n/**\n * Opt the user out of data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-out cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-out cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-out cookie is set as secure or not\n */\nexport function optOut(token, options) {\n _optInOut(false, token, options);\n}\n\n/**\n * Check whether the user has opted in to data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @returns {boolean} whether the user has opted in to the given opt type\n */\nexport function hasOptedIn(token, options) {\n return _getStorageValue(token, options) === '1';\n}\n\n/**\n * Check whether the user has opted out of data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false\n * @returns {boolean} whether the user has opted out of the given opt type\n */\nexport function hasOptedOut(token, options) {\n if (_hasDoNotTrackFlagOn(options)) {\n console.warn('This browser has \"Do Not Track\" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the \"Do Not Track\" browser setting, initialize the Mixpanel instance with the config \"ignore_dnt: true\"');\n return true;\n }\n var optedOut = _getStorageValue(token, options) === '0';\n if (optedOut) {\n console.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.');\n }\n return optedOut;\n}\n\n/**\n * Wrap a MixpanelLib method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @param {function} method - wrapped method to be executed if the user has not opted out\n * @returns {*} the result of executing method OR undefined if the user has opted out\n */\nexport function addOptOutCheckMixpanelLib(method) {\n return _addOptOutCheck(method, function(name) {\n return this.get_config(name);\n });\n}\n\n/**\n * Wrap a MixpanelPeople method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @param {function} method - wrapped method to be executed if the user has not opted out\n * @returns {*} the result of executing method OR undefined if the user has opted out\n */\nexport function addOptOutCheckMixpanelPeople(method) {\n return _addOptOutCheck(method, function(name) {\n return this._get_config(name);\n });\n}\n\n/**\n * Wrap a MixpanelGroup method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @param {function} method - wrapped method to be executed if the user has not opted out\n * @returns {*} the result of executing method OR undefined if the user has opted out\n */\nexport function addOptOutCheckMixpanelGroup(method) {\n return _addOptOutCheck(method, function(name) {\n return this._get_config(name);\n });\n}\n\n/**\n * Clear the user's opt in/out status of data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not\n */\nexport function clearOptInOut(token, options) {\n options = options || {};\n _getStorage(options).remove(\n _getStorageKey(token, options), !!options.crossSubdomainCookie, options.cookieDomain\n );\n}\n\n/** Private **/\n\n/**\n * Get storage util\n * @param {Object} [options]\n * @param {string} [options.persistenceType]\n * @returns {object} either _.cookie or _.localstorage\n */\nfunction _getStorage(options) {\n options = options || {};\n return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie;\n}\n\n/**\n * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.)\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @returns {string} the name of the cookie for the given opt type\n */\nfunction _getStorageKey(token, options) {\n options = options || {};\n return (options.persistencePrefix || GDPR_DEFAULT_PERSISTENCE_PREFIX) + token;\n}\n\n/**\n * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.)\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @returns {string} the value of the cookie for the given opt type\n */\nfunction _getStorageValue(token, options) {\n return _getStorage(options).get(_getStorageKey(token, options));\n}\n\n/**\n * Check whether the user has set the DNT/doNotTrack setting to true in their browser\n * @param {Object} [options]\n * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests\n * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false\n * @returns {boolean} whether the DNT setting is true\n */\nfunction _hasDoNotTrackFlagOn(options) {\n if (options && options.ignoreDnt) {\n return false;\n }\n var win = (options && options.window) || window;\n var nav = win['navigator'] || {};\n var hasDntOn = false;\n\n _.each([\n nav['doNotTrack'], // standard\n nav['msDoNotTrack'],\n win['doNotTrack']\n ], function(dntValue) {\n if (_.includes([true, 1, '1', 'yes'], dntValue)) {\n hasDntOn = true;\n }\n });\n\n return hasDntOn;\n}\n\n/**\n * Set cookie/localstorage for the user indicating that they are opted in or out for the given opt type\n * @param {boolean} optValue - whether to opt the user in or out for the given opt type\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action\n * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action\n * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not\n */\nfunction _optInOut(optValue, token, options) {\n if (!_.isString(token) || !token.length) {\n console.error('gdpr.' + (optValue ? 'optIn' : 'optOut') + ' called with an invalid token');\n return;\n }\n\n options = options || {};\n\n _getStorage(options).set(\n _getStorageKey(token, options),\n optValue ? 1 : 0,\n _.isNumber(options.cookieExpiration) ? options.cookieExpiration : null,\n !!options.crossSubdomainCookie,\n !!options.secureCookie,\n !!options.crossSiteCookie,\n options.cookieDomain\n );\n\n if (options.track && optValue) { // only track event if opting in (optValue=true)\n options.track(options.trackEventName || '$opt_in', options.trackProperties, {\n 'send_immediately': true\n });\n }\n}\n\n/**\n * Wrap a method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @param {function} method - wrapped method to be executed if the user has not opted out\n * @param {function} getConfigValue - getter function for the Mixpanel API token and other options to be used with opt-out check\n * @returns {*} the result of executing method OR undefined if the user has opted out\n */\nfunction _addOptOutCheck(method, getConfigValue) {\n return function() {\n var optedOut = false;\n\n try {\n var token = getConfigValue.call(this, 'token');\n var ignoreDnt = getConfigValue.call(this, 'ignore_dnt');\n var persistenceType = getConfigValue.call(this, 'opt_out_tracking_persistence_type');\n var persistencePrefix = getConfigValue.call(this, 'opt_out_tracking_cookie_prefix');\n var win = getConfigValue.call(this, 'window'); // used to override window during browser tests\n\n if (token) { // if there was an issue getting the token, continue method execution as normal\n optedOut = hasOptedOut(token, {\n ignoreDnt: ignoreDnt,\n persistenceType: persistenceType,\n persistencePrefix: persistencePrefix,\n window: win\n });\n }\n } catch(err) {\n console.error('Unexpected error when checking tracking opt-out status: ' + err);\n }\n\n if (!optedOut) {\n return method.apply(this, arguments);\n }\n\n var callback = arguments[arguments.length - 1];\n if (typeof(callback) === 'function') {\n callback(0);\n }\n\n return;\n };\n}\n","import { Promise } from './promise-polyfill';\nimport { console_with_prefix, localStorageSupported, _ } from './utils'; // eslint-disable-line camelcase\n\nvar logger = console_with_prefix('lock');\n\n/**\n * SharedLock: a mutex built on HTML5 localStorage, to ensure that only one browser\n * window/tab at a time will be able to access shared resources.\n *\n * Based on the Alur and Taubenfeld fast lock\n * (http://www.cs.rochester.edu/research/synchronization/pseudocode/fastlock.html)\n * with an added timeout to ensure there will be eventual progress in the event\n * that a window is closed in the middle of the callback.\n *\n * Implementation based on the original version by David Wolever (https://github.com/wolever)\n * at https://gist.github.com/wolever/5fd7573d1ef6166e8f8c4af286a69432.\n *\n * @example\n * const myLock = new SharedLock('some-key');\n * myLock.withLock(function() {\n * console.log('I hold the mutex!');\n * });\n *\n * @constructor\n */\nvar SharedLock = function(key, options) {\n options = options || {};\n\n this.storageKey = key;\n this.storage = options.storage || window.localStorage;\n this.pollIntervalMS = options.pollIntervalMS || 100;\n this.timeoutMS = options.timeoutMS || 2000;\n\n // dependency-inject promise implementation for testing purposes\n this.promiseImpl = options.promiseImpl || Promise;\n};\n\n// pass in a specific pid to test contention scenarios; otherwise\n// it is chosen randomly for each acquisition attempt\nSharedLock.prototype.withLock = function(lockedCB, pid) {\n var Promise = this.promiseImpl;\n return new Promise(_.bind(function (resolve, reject) {\n var i = pid || (new Date().getTime() + '|' + Math.random());\n var startTime = new Date().getTime();\n\n var key = this.storageKey;\n var pollIntervalMS = this.pollIntervalMS;\n var timeoutMS = this.timeoutMS;\n var storage = this.storage;\n\n var keyX = key + ':X';\n var keyY = key + ':Y';\n var keyZ = key + ':Z';\n\n var delay = function(cb) {\n if (new Date().getTime() - startTime > timeoutMS) {\n logger.error('Timeout waiting for mutex on ' + key + '; clearing lock. [' + i + ']');\n storage.removeItem(keyZ);\n storage.removeItem(keyY);\n loop();\n return;\n }\n setTimeout(function() {\n try {\n cb();\n } catch(err) {\n reject(err);\n }\n }, pollIntervalMS * (Math.random() + 0.1));\n };\n\n var waitFor = function(predicate, cb) {\n if (predicate()) {\n cb();\n } else {\n delay(function() {\n waitFor(predicate, cb);\n });\n }\n };\n\n var getSetY = function() {\n var valY = storage.getItem(keyY);\n if (valY && valY !== i) { // if Y == i then this process already has the lock (useful for test cases)\n return false;\n } else {\n storage.setItem(keyY, i);\n if (storage.getItem(keyY) === i) {\n return true;\n } else {\n if (!localStorageSupported(storage, true)) {\n reject(new Error('localStorage support dropped while acquiring lock'));\n }\n return false;\n }\n }\n };\n\n var loop = function() {\n storage.setItem(keyX, i);\n\n waitFor(getSetY, function() {\n if (storage.getItem(keyX) === i) {\n criticalSection();\n return;\n }\n\n delay(function() {\n if (storage.getItem(keyY) !== i) {\n loop();\n return;\n }\n waitFor(function() {\n return !storage.getItem(keyZ);\n }, criticalSection);\n });\n });\n };\n\n var criticalSection = function() {\n storage.setItem(keyZ, '1');\n var removeLock = function () {\n storage.removeItem(keyZ);\n if (storage.getItem(keyY) === i) {\n storage.removeItem(keyY);\n }\n if (storage.getItem(keyX) === i) {\n storage.removeItem(keyX);\n }\n };\n\n lockedCB()\n .then(function (ret) {\n removeLock();\n resolve(ret);\n })\n .catch(function (err) {\n removeLock();\n reject(err);\n });\n };\n\n try {\n if (localStorageSupported(storage, true)) {\n loop();\n } else {\n throw new Error('localStorage support check failed');\n }\n } catch(err) {\n reject(err);\n }\n }, this));\n};\n\nexport { SharedLock };\n","import { Promise } from '../promise-polyfill';\nimport { _ } from '../utils'; // eslint-disable-line camelcase\n\n/**\n * @typedef {import('./wrapper').StorageWrapper}\n */\n\n/**\n * @type {StorageWrapper}\n */\nvar LocalStorageWrapper = function (storageOverride) {\n this.storage = storageOverride || localStorage;\n};\n\nLocalStorageWrapper.prototype.init = function () {\n return Promise.resolve();\n};\n\nLocalStorageWrapper.prototype.setItem = function (key, value) {\n return new Promise(_.bind(function (resolve, reject) {\n try {\n this.storage.setItem(key, value);\n } catch (e) {\n reject(e);\n }\n resolve();\n }, this));\n};\n\nLocalStorageWrapper.prototype.getItem = function (key) {\n return new Promise(_.bind(function (resolve, reject) {\n var item;\n try {\n item = this.storage.getItem(key);\n } catch (e) {\n reject(e);\n }\n resolve(item);\n }, this));\n};\n\nLocalStorageWrapper.prototype.removeItem = function (key) {\n return new Promise(_.bind(function (resolve, reject) {\n try {\n this.storage.removeItem(key);\n } catch (e) {\n reject(e);\n }\n resolve();\n }, this));\n};\n\nexport { LocalStorageWrapper };\n","import { SharedLock } from './shared-lock';\nimport { cheap_guid, console_with_prefix, localStorageSupported, JSONParse, JSONStringify, _ } from './utils'; // eslint-disable-line camelcase\nimport { LocalStorageWrapper } from './storage/local-storage';\nimport { Promise } from './promise-polyfill';\n\nvar logger = console_with_prefix('batch');\n\n/**\n * RequestQueue: queue for batching API requests with localStorage backup for retries.\n * Maintains an in-memory queue which represents the source of truth for the current\n * page, but also writes all items out to a copy in the browser's localStorage, which\n * can be read on subsequent pageloads and retried. For batchability, all the request\n * items in the queue should be of the same type (events, people updates, group updates)\n * so they can be sent in a single request to the same API endpoint.\n *\n * LocalStorage keying and locking: In order for reloads and subsequent pageloads of\n * the same site to access the same persisted data, they must share the same localStorage\n * key (for instance based on project token and queue type). Therefore access to the\n * localStorage entry is guarded by an asynchronous mutex (SharedLock) to prevent\n * simultaneously open windows/tabs from overwriting each other's data (which would lead\n * to data loss in some situations).\n * @constructor\n */\nvar RequestQueue = function (storageKey, options) {\n options = options || {};\n this.storageKey = storageKey;\n this.usePersistence = options.usePersistence;\n if (this.usePersistence) {\n this.queueStorage = options.queueStorage || new LocalStorageWrapper();\n this.lock = new SharedLock(storageKey, { storage: options.sharedLockStorage || window.localStorage });\n this.queueStorage.init();\n }\n this.reportError = options.errorReporter || _.bind(logger.error, logger);\n\n this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios\n\n this.memQueue = [];\n this.initialized = false;\n};\n\nRequestQueue.prototype.ensureInit = function () {\n if (this.initialized) {\n return Promise.resolve();\n }\n\n return this.queueStorage\n .init()\n .then(_.bind(function () {\n this.initialized = true;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error initializing queue persistence. Disabling persistence', err);\n this.initialized = true;\n this.usePersistence = false;\n }, this));\n};\n\n/**\n * Add one item to queues (memory and localStorage). The queued entry includes\n * the given item along with an auto-generated ID and a \"flush-after\" timestamp.\n * It is expected that the item will be sent over the network and dequeued\n * before the flush-after time; if this doesn't happen it is considered orphaned\n * (e.g., the original tab where it was enqueued got closed before it could be\n * sent) and the item can be sent by any tab that finds it in localStorage.\n *\n * The final callback param is called with a param indicating success or\n * failure of the enqueue operation; it is asynchronous because the localStorage\n * lock is asynchronous.\n */\nRequestQueue.prototype.enqueue = function (item, flushInterval) {\n var queueEntry = {\n 'id': cheap_guid(),\n 'flushAfter': new Date().getTime() + flushInterval * 2,\n 'payload': item\n };\n\n if (!this.usePersistence) {\n this.memQueue.push(queueEntry);\n return Promise.resolve(true);\n } else {\n\n var enqueueItem = _.bind(function () {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n storedQueue.push(queueEntry);\n return this.saveToStorage(storedQueue);\n }, this))\n .then(_.bind(function (succeeded) {\n // only add to in-memory queue when storage succeeds\n if (succeeded) {\n this.memQueue.push(queueEntry);\n }\n return succeeded;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error enqueueing item', err, item);\n return false;\n }, this));\n }, this);\n\n return this.lock\n .withLock(enqueueItem, this.pid)\n .catch(_.bind(function (err) {\n this.reportError('Error acquiring storage lock', err);\n return false;\n }, this));\n }\n};\n\n/**\n * Read out the given number of queue entries. If this.memQueue\n * has fewer than batchSize items, then look for \"orphaned\" items\n * in the persisted queue (items where the 'flushAfter' time has\n * already passed).\n */\nRequestQueue.prototype.fillBatch = function (batchSize) {\n var batch = this.memQueue.slice(0, batchSize);\n if (this.usePersistence && batch.length < batchSize) {\n // don't need lock just to read events; localStorage is thread-safe\n // and the worst that could happen is a duplicate send of some\n // orphaned events, which will be deduplicated on the server side\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n if (storedQueue.length) {\n // item IDs already in batch; don't duplicate out of storage\n var idsInBatch = {}; // poor man's Set\n _.each(batch, function (item) {\n idsInBatch[item['id']] = true;\n });\n\n for (var i = 0; i < storedQueue.length; i++) {\n var item = storedQueue[i];\n if (new Date().getTime() > item['flushAfter'] && !idsInBatch[item['id']]) {\n item.orphaned = true;\n batch.push(item);\n if (batch.length >= batchSize) {\n break;\n }\n }\n }\n }\n\n return batch;\n }, this));\n } else {\n return Promise.resolve(batch);\n }\n};\n\n/**\n * Remove items with matching 'id' from array (immutably)\n * also remove any item without a valid id (e.g., malformed\n * storage entries).\n */\nvar filterOutIDsAndInvalid = function (items, idSet) {\n var filteredItems = [];\n _.each(items, function (item) {\n if (item['id'] && !idSet[item['id']]) {\n filteredItems.push(item);\n }\n });\n return filteredItems;\n};\n\n/**\n * Remove items with matching IDs from both in-memory queue\n * and persisted queue\n */\nRequestQueue.prototype.removeItemsByID = function (ids) {\n var idSet = {}; // poor man's Set\n _.each(ids, function (id) {\n idSet[id] = true;\n });\n\n this.memQueue = filterOutIDsAndInvalid(this.memQueue, idSet);\n if (!this.usePersistence) {\n return Promise.resolve(true);\n } else {\n var removeFromStorage = _.bind(function () {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n storedQueue = filterOutIDsAndInvalid(storedQueue, idSet);\n return this.saveToStorage(storedQueue);\n }, this))\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n // an extra check: did storage report success but somehow\n // the items are still there?\n for (var i = 0; i < storedQueue.length; i++) {\n var item = storedQueue[i];\n if (item['id'] && !!idSet[item['id']]) {\n throw new Error('Item not removed from storage');\n }\n }\n return true;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error removing items', err, ids);\n return false;\n }, this));\n }, this);\n\n return this.lock\n .withLock(removeFromStorage, this.pid)\n .catch(_.bind(function (err) {\n this.reportError('Error acquiring storage lock', err);\n if (!localStorageSupported(this.queueStorage.storage, true)) {\n // Looks like localStorage writes have stopped working sometime after\n // initialization (probably full), and so nobody can acquire locks\n // anymore. Consider it temporarily safe to remove items without the\n // lock, since nobody's writing successfully anyway.\n return removeFromStorage()\n .then(_.bind(function (success) {\n if (!success) {\n // OK, we couldn't even write out the smaller queue. Try clearing it\n // entirely.\n return this.queueStorage.removeItem(this.storageKey).then(function () {\n return success;\n });\n }\n return success;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error clearing queue', err);\n return false;\n }, this));\n } else {\n return false;\n }\n }, this));\n }\n};\n\n// internal helper for RequestQueue.updatePayloads\nvar updatePayloads = function (existingItems, itemsToUpdate) {\n var newItems = [];\n _.each(existingItems, function (item) {\n var id = item['id'];\n if (id in itemsToUpdate) {\n var newPayload = itemsToUpdate[id];\n if (newPayload !== null) {\n item['payload'] = newPayload;\n newItems.push(item);\n }\n } else {\n // no update\n newItems.push(item);\n }\n });\n return newItems;\n};\n\n/**\n * Update payloads of given items in both in-memory queue and\n * persisted queue. Items set to null are removed from queues.\n */\nRequestQueue.prototype.updatePayloads = function (itemsToUpdate) {\n this.memQueue = updatePayloads(this.memQueue, itemsToUpdate);\n if (!this.usePersistence) {\n return Promise.resolve(true);\n } else {\n return this.lock\n .withLock(_.bind(function lockAcquired() {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n storedQueue = updatePayloads(storedQueue, itemsToUpdate);\n return this.saveToStorage(storedQueue);\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error updating items', itemsToUpdate, err);\n return false;\n }, this));\n }, this), this.pid)\n .catch(_.bind(function (err) {\n this.reportError('Error acquiring storage lock', err);\n return false;\n }, this));\n }\n};\n\n/**\n * Read and parse items array from localStorage entry, handling\n * malformed/missing data if necessary.\n */\nRequestQueue.prototype.readFromStorage = function () {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.queueStorage.getItem(this.storageKey);\n }, this))\n .then(_.bind(function (storageEntry) {\n if (storageEntry) {\n storageEntry = JSONParse(storageEntry);\n if (!_.isArray(storageEntry)) {\n this.reportError('Invalid storage entry:', storageEntry);\n storageEntry = null;\n }\n }\n return storageEntry || [];\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error retrieving queue', err);\n return [];\n }, this));\n};\n\n/**\n * Serialize the given items array to localStorage.\n */\nRequestQueue.prototype.saveToStorage = function (queue) {\n try {\n var serialized = JSONStringify(queue);\n } catch (err) {\n this.reportError('Error serializing queue', err);\n return Promise.resolve(false);\n }\n\n return this.ensureInit()\n .then(_.bind(function () {\n return this.queueStorage.setItem(this.storageKey, serialized);\n }, this))\n .then(function () {\n return true;\n })\n .catch(_.bind(function (err) {\n this.reportError('Error saving queue', err);\n return false;\n }, this));\n};\n\n/**\n * Clear out queues (memory and localStorage).\n */\nRequestQueue.prototype.clear = function () {\n this.memQueue = [];\n\n if (this.usePersistence) {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.queueStorage.removeItem(this.storageKey);\n }, this));\n } else {\n return Promise.resolve();\n }\n};\n\nexport { RequestQueue };\n","import Config from './config';\nimport { Promise } from './promise-polyfill';\nimport { RequestQueue } from './request-queue';\nimport { console_with_prefix, isOnline, _ } from './utils'; // eslint-disable-line camelcase\n\n// maximum interval between request retries after exponential backoff\nvar MAX_RETRY_INTERVAL_MS = 10 * 60 * 1000; // 10 minutes\n\nvar logger = console_with_prefix('batch');\n\n/**\n * RequestBatcher: manages the queueing, flushing, retry etc of requests of one\n * type (events, people, groups).\n * Uses RequestQueue to manage the backing store.\n * @constructor\n */\nvar RequestBatcher = function(storageKey, options) {\n this.errorReporter = options.errorReporter;\n this.queue = new RequestQueue(storageKey, {\n errorReporter: _.bind(this.reportError, this),\n queueStorage: options.queueStorage,\n sharedLockStorage: options.sharedLockStorage,\n usePersistence: options.usePersistence\n });\n\n this.libConfig = options.libConfig;\n this.sendRequest = options.sendRequestFunc;\n this.beforeSendHook = options.beforeSendHook;\n this.stopAllBatching = options.stopAllBatchingFunc;\n\n // seed variable batch size + flush interval with configured values\n this.batchSize = this.libConfig['batch_size'];\n this.flushInterval = this.libConfig['batch_flush_interval_ms'];\n\n this.stopped = !this.libConfig['batch_autostart'];\n this.consecutiveRemovalFailures = 0;\n\n // extra client-side dedupe\n this.itemIdsSentSuccessfully = {};\n\n // Make the flush occur at the interval specified by flushIntervalMs, default behavior will attempt consecutive flushes\n // as long as the queue is not empty. This is useful for high-frequency events like Session Replay where we might end up\n // in a request loop and get ratelimited by the server.\n this.flushOnlyOnInterval = options.flushOnlyOnInterval || false;\n};\n\n/**\n * Add one item to queue.\n */\nRequestBatcher.prototype.enqueue = function(item) {\n return this.queue.enqueue(item, this.flushInterval);\n};\n\n/**\n * Start flushing batches at the configured time interval. Must call\n * this method upon SDK init in order to send anything over the network.\n */\nRequestBatcher.prototype.start = function() {\n this.stopped = false;\n this.consecutiveRemovalFailures = 0;\n return this.flush();\n};\n\n/**\n * Stop flushing batches. Can be restarted by calling start().\n */\nRequestBatcher.prototype.stop = function() {\n this.stopped = true;\n if (this.timeoutID) {\n clearTimeout(this.timeoutID);\n this.timeoutID = null;\n }\n};\n\n/**\n * Clear out queue.\n */\nRequestBatcher.prototype.clear = function() {\n return this.queue.clear();\n};\n\n/**\n * Restore batch size configuration to whatever is set in the main SDK.\n */\nRequestBatcher.prototype.resetBatchSize = function() {\n this.batchSize = this.libConfig['batch_size'];\n};\n\n/**\n * Restore flush interval time configuration to whatever is set in the main SDK.\n */\nRequestBatcher.prototype.resetFlush = function() {\n this.scheduleFlush(this.libConfig['batch_flush_interval_ms']);\n};\n\n/**\n * Schedule the next flush in the given number of milliseconds.\n */\nRequestBatcher.prototype.scheduleFlush = function(flushMS) {\n this.flushInterval = flushMS;\n if (!this.stopped) { // don't schedule anymore if batching has been stopped\n this.timeoutID = setTimeout(_.bind(function() {\n if (!this.stopped) {\n this.flush();\n }\n }, this), this.flushInterval);\n }\n};\n\n/**\n * Send a request using the sendRequest callback, but promisified.\n * TODO: sendRequest should be promisified in the first place.\n */\nRequestBatcher.prototype.sendRequestPromise = function(data, options) {\n return new Promise(_.bind(function(resolve) {\n this.sendRequest(data, options, resolve);\n }, this));\n};\n\n\n/**\n * Flush one batch to network. Depending on success/failure modes, it will either\n * remove the batch from the queue or leave it in for retry, and schedule the next\n * flush. In cases of most network or API failures, it will back off exponentially\n * when retrying.\n * @param {Object} [options]\n * @param {boolean} [options.sendBeacon] - whether to send batch with\n * navigator.sendBeacon (only useful for sending batches before page unloads, as\n * sendBeacon offers no callbacks or status indications)\n */\nRequestBatcher.prototype.flush = function(options) {\n if (this.requestInProgress) {\n logger.log('Flush: Request already in progress');\n return Promise.resolve();\n }\n\n this.requestInProgress = true;\n\n options = options || {};\n var timeoutMS = this.libConfig['batch_request_timeout_ms'];\n var startTime = new Date().getTime();\n var currentBatchSize = this.batchSize;\n\n return this.queue.fillBatch(currentBatchSize)\n .then(_.bind(function(batch) {\n\n // if there's more items in the queue than the batch size, attempt\n // to flush again after the current batch is done.\n var attemptSecondaryFlush = batch.length === currentBatchSize;\n var dataForRequest = [];\n var transformedItems = {};\n _.each(batch, function(item) {\n var payload = item['payload'];\n if (this.beforeSendHook && !item.orphaned) {\n payload = this.beforeSendHook(payload);\n }\n if (payload) {\n // mp_sent_by_lib_version prop captures which lib version actually\n // sends each event (regardless of which version originally queued\n // it for sending)\n if (payload['event'] && payload['properties']) {\n payload['properties'] = _.extend(\n {},\n payload['properties'],\n {'mp_sent_by_lib_version': Config.LIB_VERSION}\n );\n }\n var addPayload = true;\n var itemId = item['id'];\n if (itemId) {\n if ((this.itemIdsSentSuccessfully[itemId] || 0) > 5) {\n this.reportError('[dupe] item ID sent too many times, not sending', {\n item: item,\n batchSize: batch.length,\n timesSent: this.itemIdsSentSuccessfully[itemId]\n });\n addPayload = false;\n }\n } else {\n this.reportError('[dupe] found item with no ID', {item: item});\n }\n\n if (addPayload) {\n dataForRequest.push(payload);\n }\n }\n transformedItems[item['id']] = payload;\n }, this);\n\n if (dataForRequest.length < 1) {\n this.requestInProgress = false;\n this.resetFlush();\n return Promise.resolve(); // nothing to do\n }\n\n var removeItemsFromQueue = _.bind(function () {\n return this.queue\n .removeItemsByID(\n _.map(batch, function (item) {\n return item['id'];\n })\n )\n .then(_.bind(function (succeeded) {\n // client-side dedupe\n _.each(batch, _.bind(function(item) {\n var itemId = item['id'];\n if (itemId) {\n this.itemIdsSentSuccessfully[itemId] = this.itemIdsSentSuccessfully[itemId] || 0;\n this.itemIdsSentSuccessfully[itemId]++;\n if (this.itemIdsSentSuccessfully[itemId] > 5) {\n this.reportError('[dupe] item ID sent too many times', {\n item: item,\n batchSize: batch.length,\n timesSent: this.itemIdsSentSuccessfully[itemId]\n });\n }\n } else {\n this.reportError('[dupe] found item with no ID while removing', {item: item});\n }\n }, this));\n\n if (succeeded) {\n this.consecutiveRemovalFailures = 0;\n if (this.flushOnlyOnInterval && !attemptSecondaryFlush) {\n this.resetFlush(); // schedule next batch with a delay\n return Promise.resolve();\n } else {\n return this.flush(); // handle next batch if the queue isn't empty\n }\n } else {\n if (++this.consecutiveRemovalFailures > 5) {\n this.reportError('Too many queue failures; disabling batching system.');\n this.stopAllBatching();\n } else {\n this.resetFlush();\n }\n return Promise.resolve();\n }\n }, this));\n }, this);\n\n var batchSendCallback = _.bind(function(res) {\n this.requestInProgress = false;\n\n try {\n\n // handle API response in a try-catch to make sure we can reset the\n // flush operation if something goes wrong\n\n if (options.unloading) {\n // update persisted data to include hook transformations\n return this.queue.updatePayloads(transformedItems);\n } else if (\n _.isObject(res) &&\n res.error === 'timeout' &&\n new Date().getTime() - startTime >= timeoutMS\n ) {\n this.reportError('Network timeout; retrying');\n return this.flush();\n } else if (\n _.isObject(res) &&\n (\n res.httpStatusCode >= 500\n || res.httpStatusCode === 429\n || (res.httpStatusCode <= 0 && !isOnline())\n || res.error === 'timeout'\n )\n ) {\n // network or API error, or 429 Too Many Requests, retry\n var retryMS = this.flushInterval * 2;\n if (res.retryAfter) {\n retryMS = (parseInt(res.retryAfter, 10) * 1000) || retryMS;\n }\n retryMS = Math.min(MAX_RETRY_INTERVAL_MS, retryMS);\n this.reportError('Error; retry in ' + retryMS + ' ms');\n this.scheduleFlush(retryMS);\n return Promise.resolve();\n } else if (_.isObject(res) && res.httpStatusCode === 413) {\n // 413 Payload Too Large\n if (batch.length > 1) {\n var halvedBatchSize = Math.max(1, Math.floor(currentBatchSize / 2));\n this.batchSize = Math.min(this.batchSize, halvedBatchSize, batch.length - 1);\n this.reportError('413 response; reducing batch size to ' + this.batchSize);\n this.resetFlush();\n return Promise.resolve();\n } else {\n this.reportError('Single-event request too large; dropping', batch);\n this.resetBatchSize();\n return removeItemsFromQueue();\n }\n } else {\n // successful network request+response; remove each item in batch from queue\n // (even if it was e.g. a 400, in which case retrying won't help)\n return removeItemsFromQueue();\n }\n } catch(err) {\n this.reportError('Error handling API response', err);\n this.resetFlush();\n }\n }, this);\n var requestOptions = {\n method: 'POST',\n verbose: true,\n ignore_json_errors: true, // eslint-disable-line camelcase\n timeout_ms: timeoutMS // eslint-disable-line camelcase\n };\n if (options.unloading) {\n requestOptions.transport = 'sendBeacon';\n }\n logger.log('MIXPANEL REQUEST:', dataForRequest);\n return this.sendRequestPromise(dataForRequest, requestOptions).then(batchSendCallback);\n }, this))\n .catch(_.bind(function(err) {\n this.reportError('Error flushing request queue', err);\n this.resetFlush();\n }, this));\n};\n\n/**\n * Log error to global logger and optional user-defined logger.\n */\nRequestBatcher.prototype.reportError = function(msg, err) {\n logger.error.apply(logger.error, arguments);\n if (this.errorReporter) {\n try {\n if (!(err instanceof Error)) {\n err = new Error(msg);\n }\n this.errorReporter(msg, err);\n } catch(err) {\n logger.error(err);\n }\n }\n};\n\nexport { RequestBatcher };\n","import { IncrementalSource, EventType } from '@rrweb/types';\n\nimport { MAX_RECORDING_MS, MAX_VALUE_FOR_MIN_RECORDING_MS, console_with_prefix, _} from '../utils'; // eslint-disable-line camelcase\nimport { window } from '../window';\nimport { addOptOutCheckMixpanelLib } from '../gdpr-utils';\nimport { RequestBatcher } from '../request-batcher';\nimport Config from '../config';\n\nvar logger = console_with_prefix('recorder');\nvar CompressionStream = window['CompressionStream'];\n\nvar RECORDER_BATCHER_LIB_CONFIG = {\n 'batch_size': 1000,\n 'batch_flush_interval_ms': 10 * 1000,\n 'batch_request_timeout_ms': 90 * 1000,\n 'batch_autostart': true\n};\n\nvar ACTIVE_SOURCES = new Set([\n IncrementalSource.MouseMove,\n IncrementalSource.MouseInteraction,\n IncrementalSource.Scroll,\n IncrementalSource.ViewportResize,\n IncrementalSource.Input,\n IncrementalSource.TouchMove,\n IncrementalSource.MediaInteraction,\n IncrementalSource.Drag,\n IncrementalSource.Selection,\n]);\n\nfunction isUserEvent(ev) {\n return ev.type === EventType.IncrementalSnapshot && ACTIVE_SOURCES.has(ev.data.source);\n}\n\n/**\n * This class encapsulates a single session recording and its lifecycle.\n * @param {Object} [options.mixpanelInstance] - reference to the core MixpanelLib\n * @param {String} [options.replayId] - unique uuid for a single replay\n * @param {Function} [options.onIdleTimeout] - callback when a recording reaches idle timeout\n * @param {Function} [options.onMaxLengthReached] - callback when a recording reaches its maximum length\n * @param {Function} [options.rrwebRecord] - rrweb's `record` function\n */\nvar SessionRecording = function(options) {\n this._mixpanel = options.mixpanelInstance;\n this._onIdleTimeout = options.onIdleTimeout;\n this._onMaxLengthReached = options.onMaxLengthReached;\n this._rrwebRecord = options.rrwebRecord;\n\n this.replayId = options.replayId;\n\n // internal rrweb stopRecording function\n this._stopRecording = null;\n\n this.seqNo = 0;\n this.replayStartTime = null;\n this.replayStartUrl = null;\n this.batchStartUrl = null;\n\n this.idleTimeoutId = null;\n this.maxTimeoutId = null;\n\n this.recordMaxMs = MAX_RECORDING_MS;\n this.recordMinMs = 0;\n\n // each replay has its own batcher key to avoid conflicts between rrweb events of different recordings\n // this will be important when persistence is introduced\n var batcherKey = '__mprec_' + this.getConfig('token') + '_' + this.replayId;\n this.batcher = new RequestBatcher(batcherKey, {\n errorReporter: _.bind(this.reportError, this),\n flushOnlyOnInterval: true,\n libConfig: RECORDER_BATCHER_LIB_CONFIG,\n sendRequestFunc: _.bind(this.flushEventsWithOptOut, this),\n usePersistence: false\n });\n};\n\nSessionRecording.prototype.getConfig = function(configVar) {\n return this._mixpanel.get_config(configVar);\n};\n\n// Alias for getConfig, used by the common addOptOutCheckMixpanelLib function which\n// reaches into this class instance and expects the snake case version of the function.\n// eslint-disable-next-line camelcase\nSessionRecording.prototype.get_config = function(configVar) {\n return this.getConfig(configVar);\n};\n\nSessionRecording.prototype.startRecording = function (shouldStopBatcher) {\n if (this._stopRecording !== null) {\n logger.log('Recording already in progress, skipping startRecording.');\n return;\n }\n\n this.recordMaxMs = this.getConfig('record_max_ms');\n if (this.recordMaxMs > MAX_RECORDING_MS) {\n this.recordMaxMs = MAX_RECORDING_MS;\n logger.critical('record_max_ms cannot be greater than ' + MAX_RECORDING_MS + 'ms. Capping value.');\n }\n\n this.recordMinMs = this.getConfig('record_min_ms');\n if (this.recordMinMs > MAX_VALUE_FOR_MIN_RECORDING_MS) {\n this.recordMinMs = MAX_VALUE_FOR_MIN_RECORDING_MS;\n logger.critical('record_min_ms cannot be greater than ' + MAX_VALUE_FOR_MIN_RECORDING_MS + 'ms. Capping value.');\n }\n\n this.replayStartTime = new Date().getTime();\n this.batchStartUrl = _.info.currentUrl();\n this.replayStartUrl = _.info.currentUrl();\n\n if (shouldStopBatcher || this.recordMinMs > 0) {\n // the primary case for shouldStopBatcher is when we're starting recording after a reset\n // and don't want to send anything over the network until there's\n // actual user activity\n // this also applies if the minimum recording length has not been hit yet\n // so that we don't send data until we know the recording will be long enough\n this.batcher.stop();\n } else {\n this.batcher.start();\n }\n\n var resetIdleTimeout = _.bind(function () {\n clearTimeout(this.idleTimeoutId);\n this.idleTimeoutId = setTimeout(this._onIdleTimeout, this.getConfig('record_idle_timeout_ms'));\n }, this);\n\n var blockSelector = this.getConfig('record_block_selector');\n if (blockSelector === '' || blockSelector === null) {\n blockSelector = undefined;\n }\n\n this._stopRecording = this._rrwebRecord({\n 'emit': _.bind(function (ev) {\n this.batcher.enqueue(ev);\n if (isUserEvent(ev)) {\n if (this.batcher.stopped && new Date().getTime() - this.replayStartTime >= this.recordMinMs) {\n // start flushing again after user activity\n this.batcher.start();\n }\n resetIdleTimeout();\n }\n }, this),\n 'blockClass': this.getConfig('record_block_class'),\n 'blockSelector': blockSelector,\n 'collectFonts': this.getConfig('record_collect_fonts'),\n 'dataURLOptions': { // canvas image options (https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL)\n 'type': 'image/webp',\n 'quality': 0.6\n },\n 'maskAllInputs': true,\n 'maskTextClass': this.getConfig('record_mask_text_class'),\n 'maskTextSelector': this.getConfig('record_mask_text_selector'),\n 'recordCanvas': this.getConfig('record_canvas'),\n 'sampling': {\n 'canvas': 15\n }\n });\n\n if (typeof this._stopRecording !== 'function') {\n this.reportError('rrweb failed to start, skipping this recording.');\n this._stopRecording = null;\n this.stopRecording(); // stop batcher looping and any timeouts\n return;\n }\n\n resetIdleTimeout();\n\n this.maxTimeoutId = setTimeout(_.bind(this._onMaxLengthReached, this), this.recordMaxMs);\n};\n\nSessionRecording.prototype.stopRecording = function () {\n if (!this.isRrwebStopped()) {\n try {\n this._stopRecording();\n } catch (err) {\n this.reportError('Error with rrweb stopRecording', err);\n }\n this._stopRecording = null;\n }\n\n if (this.batcher.stopped) {\n // never got user activity to flush after reset, so just clear the batcher\n this.batcher.clear();\n } else {\n // flush any remaining events from running batcher\n this.batcher.flush();\n this.batcher.stop();\n }\n\n clearTimeout(this.idleTimeoutId);\n clearTimeout(this.maxTimeoutId);\n};\n\nSessionRecording.prototype.isRrwebStopped = function () {\n return this._stopRecording === null;\n};\n\n/**\n * Flushes the current batch of events to the server, but passes an opt-out callback to make sure\n * we stop recording and dump any queued events if the user has opted out.\n */\nSessionRecording.prototype.flushEventsWithOptOut = function (data, options, cb) {\n this._flushEvents(data, options, cb, _.bind(this._onOptOut, this));\n};\n\nSessionRecording.prototype._onOptOut = function (code) {\n // addOptOutCheckMixpanelLib invokes this function with code=0 when the user has opted out\n if (code === 0) {\n this.stopRecording();\n }\n};\n\nSessionRecording.prototype._sendRequest = function(currentReplayId, reqParams, reqBody, callback) {\n var onSuccess = _.bind(function (response, responseBody) {\n // Update batch specific props only if the request was successful to guarantee ordering.\n // RequestBatcher will always flush the next batch after the previous one succeeds.\n // extra check to see if the replay ID has changed so that we don't increment the seqNo on the wrong replay\n if (response.status === 200 && this.replayId === currentReplayId) {\n this.seqNo++;\n this.batchStartUrl = _.info.currentUrl();\n }\n callback({\n status: 0,\n httpStatusCode: response.status,\n responseBody: responseBody,\n retryAfter: response.headers.get('Retry-After')\n });\n }, this);\n\n window['fetch'](this.getConfig('api_host') + '/' + this.getConfig('api_routes')['record'] + '?' + new URLSearchParams(reqParams), {\n 'method': 'POST',\n 'headers': {\n 'Authorization': 'Basic ' + btoa(this.getConfig('token') + ':'),\n 'Content-Type': 'application/octet-stream'\n },\n 'body': reqBody,\n }).then(function (response) {\n response.json().then(function (responseBody) {\n onSuccess(response, responseBody);\n }).catch(function (error) {\n callback({error: error});\n });\n }).catch(function (error) {\n callback({error: error, httpStatusCode: 0});\n });\n};\n\nSessionRecording.prototype._flushEvents = addOptOutCheckMixpanelLib(function (data, options, callback) {\n const numEvents = data.length;\n\n if (numEvents > 0) {\n var replayId = this.replayId;\n // each rrweb event has a timestamp - leverage those to get time properties\n var batchStartTime = data[0].timestamp;\n if (this.seqNo === 0 || !this.replayStartTime) {\n // extra safety net so that we don't send a null replay start time\n if (this.seqNo !== 0) {\n this.reportError('Replay start time not set but seqNo is not 0. Using current batch start time as a fallback.');\n }\n\n this.replayStartTime = batchStartTime;\n }\n var replayLengthMs = data[numEvents - 1].timestamp - this.replayStartTime;\n\n var reqParams = {\n '$current_url': this.batchStartUrl,\n '$lib_version': Config.LIB_VERSION,\n 'batch_start_time': batchStartTime / 1000,\n 'distinct_id': String(this._mixpanel.get_distinct_id()),\n 'mp_lib': 'web',\n 'replay_id': replayId,\n 'replay_length_ms': replayLengthMs,\n 'replay_start_time': this.replayStartTime / 1000,\n 'replay_start_url': this.replayStartUrl,\n 'seq': this.seqNo\n };\n var eventsJson = _.JSONEncode(data);\n\n // send ID management props if they exist\n var deviceId = this._mixpanel.get_property('$device_id');\n if (deviceId) {\n reqParams['$device_id'] = deviceId;\n }\n var userId = this._mixpanel.get_property('$user_id');\n if (userId) {\n reqParams['$user_id'] = userId;\n }\n\n if (CompressionStream) {\n var jsonStream = new Blob([eventsJson], {type: 'application/json'}).stream();\n var gzipStream = jsonStream.pipeThrough(new CompressionStream('gzip'));\n new Response(gzipStream)\n .blob()\n .then(_.bind(function(compressedBlob) {\n reqParams['format'] = 'gzip';\n this._sendRequest(replayId, reqParams, compressedBlob, callback);\n }, this));\n } else {\n reqParams['format'] = 'body';\n this._sendRequest(replayId, reqParams, eventsJson, callback);\n }\n }\n});\n\n\nSessionRecording.prototype.reportError = function(msg, err) {\n logger.error.apply(logger.error, arguments);\n try {\n if (!err && !(msg instanceof Error)) {\n msg = new Error(msg);\n }\n this.getConfig('error_reporter')(msg, err);\n } catch(err) {\n logger.error(err);\n }\n};\n\nexport { SessionRecording };\n","import {record} from 'rrweb';\n\nimport { SessionRecording } from './session-recording';\nimport { console_with_prefix, _ } from '../utils'; // eslint-disable-line camelcase\nimport { window } from '../window';\n\nvar logger = console_with_prefix('recorder');\n\n/**\n * Recorder API: manages recordings and exposes methods public to the core Mixpanel library.\n * @param {Object} [options.mixpanelInstance] - reference to the core MixpanelLib\n */\nvar MixpanelRecorder = function(mixpanelInstance) {\n this._mixpanel = mixpanelInstance;\n this.activeRecording = null;\n};\n\nMixpanelRecorder.prototype.startRecording = function(shouldStopBatcher) {\n if (this.activeRecording && !this.activeRecording.isRrwebStopped()) {\n logger.log('Recording already in progress, skipping startRecording.');\n return;\n }\n\n var onIdleTimeout = _.bind(function () {\n logger.log('Idle timeout reached, restarting recording.');\n this.resetRecording();\n }, this);\n\n var onMaxLengthReached = _.bind(function () {\n logger.log('Max recording length reached, stopping recording.');\n this.resetRecording();\n }, this);\n\n this.activeRecording = new SessionRecording({\n mixpanelInstance: this._mixpanel,\n onIdleTimeout: onIdleTimeout,\n onMaxLengthReached: onMaxLengthReached,\n replayId: _.UUID(),\n rrwebRecord: record\n });\n\n this.activeRecording.startRecording(shouldStopBatcher);\n};\n\nMixpanelRecorder.prototype.stopRecording = function() {\n if (this.activeRecording) {\n this.activeRecording.stopRecording();\n this.activeRecording = null;\n }\n};\n\nMixpanelRecorder.prototype.resetRecording = function () {\n this.stopRecording();\n this.startRecording(true);\n};\n\nMixpanelRecorder.prototype.getActiveReplayId = function () {\n if (this.activeRecording && !this.activeRecording.isRrwebStopped()) {\n return this.activeRecording.replayId;\n } else {\n return null;\n }\n};\n\n// getter so that older mixpanel-core versions can still retrieve the replay ID\n// when pulling the latest recorder bundle from the CDN\nObject.defineProperty(MixpanelRecorder.prototype, 'replayId', {\n get: function () {\n return this.getActiveReplayId();\n }\n});\n\nwindow['__mp_recorder'] = MixpanelRecorder;\n"],"names":["NodeType","isElement","n","isShadowRoot","host","isNativeShadowDom","shadowRoot","fixBrowserCompatibilityIssuesInCSS","cssText","escapeImportStatement","rule","statement","stringifyStylesheet","s","rules","stringifyRule","importStringified","isCSSImportRule","isCSSStyleRule","fixSafariColons","cssStringified","regex","Mirror","_a","id","childNode","node","meta","oldNode","createMirror","maskInputValue","element","maskInputOptions","tagName","type","value","maskInputFn","text","actualType","toLowerCase","str","ORIGINAL_ATTRIBUTE_NAME","is2DCanvasBlank","canvas","ctx","chunkSize","x","y","getImageData","originalGetImageData","pixel","getInputType","extractFileExtension","path","baseURL","url","match","_id","tagNameRegex","IGNORED_NODE","genId","getValidTagName","processedTagName","extractOrigin","origin","canvasService","canvasCtx","URL_IN_CSS_REF","URL_PROTOCOL_MATCH","URL_WWW_MATCH","DATA_URI","absoluteToStylesheet","href","quote1","path1","quote2","path2","path3","filePath","maybeQuote","stack","parts","part","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","getAbsoluteSrcsetString","doc","attributeValue","pos","collectCharacters","regEx","chars","output","absoluteToDoc","descriptorsStr","inParens","c","a","isSVGElement","el","getHref","transformAttribute","name","ignoreAttribute","_value","_isBlockedElement","blockClass","blockSelector","eIndex","className","classMatchesRegex","checkAncestors","needMaskingText","maskTextClass","maskTextSelector","onceIframeLoaded","iframeEl","listener","iframeLoadTimeout","win","fired","readyState","timer","blankUrl","onceStylesheetLoaded","link","styleSheetLoadTimeout","styleSheetLoaded","serializeNode","options","mirror","needsMask","inlineStylesheet","maskTextFn","dataURLOptions","inlineImages","recordCanvas","keepIframeSrcFn","newlyAddedElement","rootId","getRootId","serializeElementNode","serializeTextNode","docId","parentTagName","textContent","isStyle","isScript","err","needBlock","attributes","len","i","attr","stylesheet","checked","canvasDataURL","blankCanvas","blankCanvasDataURL","image","oldValue","recordInlineImage","mediaAttributes","width","height","isCustomElement","lowerIfExists","maybeAttr","slimDOMExcluded","sn","slimDOMOptions","serializeNodeWithId","skipChild","onSerialize","onIframeLoad","onStylesheetLoad","stylesheetLoadTimeout","preserveWhiteSpace","_serializedNode","serializedNode","recordChild","bypassOptions","childN","serializedChildNode","iframeDoc","serializedIframeNode","serializedLinkNode","snapshot","maskAllInputs","slimDOM","on","fn","target","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","prop","receiver","throttle","func","wait","timeout","previous","args","now","remaining","context","hookSetter","key","d","isRevoked","original","patch","source","replacement","wrapped","nowTimestamp","getWindowScroll","_b","_c","_d","_e","_f","getWindowHeight","getWindowWidth","closestElementOfNode","isBlocked","isSerialized","isIgnored","isAncestorRemoved","legacy_isTouchEvent","event","polyfill","isSerializedIframe","isSerializedStylesheet","hasShadowRoot","StyleSheetMirror","newId","getShadowHost","shadowHost","getRootShadowHost","rootShadowHost","shadowHostInDom","inDom","EventType","EventType2","IncrementalSource","IncrementalSource2","MouseInteractions","MouseInteractions2","PointerTypes","PointerTypes2","CanvasContext","CanvasContext2","isNodeInLinkedList","DoubleLinkedList","position","current","index","moveKey","parentId","MutationBuffer","mutations","adds","addedIds","addList","getNextId","ns","nextId","pushAdd","currentN","iframe","childSn","isParentRemoved","isAncestorInSet","candidate","tailNode","_node","unhandledNode","payload","attribute","diffAsStr","unchangedAsStr","textarea","item","cn","m","attributeName","old","pname","newValue","newPriority","nodeId","deepDelete","targetId","addsSet","removes","_isParentRemoved","parentNode","r","set","_isAncestorInSet","errorHandler","registerErrorHandler","handler","unregisterErrorHandler","callbackWrapper","cb","rest","error","mutationBuffers","getEventTarget","initMutationObserver","rootEl","mutationBuffer","mutationObserverCtor","angularZoneSymbol","observer","initMoveObserver","mousemoveCb","sampling","threshold","callbackThreshold","positions","timeBaseline","wrappedCb","totalOffset","p","updatePosition","evt","clientX","clientY","handlers","h","initMouseInteractionObserver","mouseInteractionCb","disableMap","currentPointerType","getHandler","eventKey","pointerType","thisEventKey","e","eventName","initScrollObserver","scrollCb","scrollLeftTop","initViewportResizeObserver","viewportResizeCb","lastH","lastW","updateDimension","INPUT_TAGS","lastInputValueMap","initInputObserver","inputCb","ignoreClass","ignoreSelector","userTriggeredOnInput","eventHandler","userTriggered","isChecked","cbWithDedup","v","lastInputValue","currentWindow","propertyDescriptor","hookProperties","getNestedCSSRulePositions","recurse","childRule","hasNestedCSSRule","getIdAndStyleId","sheet","styleMirror","styleId","initStyleSheetObserver","styleSheetRuleCb","stylesheetManager","insertRule","thisArg","argumentsList","deleteRule","replace","replaceSync","supportedNestedCSSRuleTypes","canMonkeyPatchNestedCSSRule","unmodifiedFunctions","typeKey","initAdoptedStyleSheetObserver","hostId","patchTarget","originalPropertyDescriptor","sheets","result","initStyleDeclarationObserver","styleDeclarationCb","ignoreCSSAttributes","setProperty","property","priority","removeProperty","initMediaInteractionObserver","mediaInteractionCb","currentTime","volume","muted","playbackRate","loop","initFontObserver","fontCb","fontMap","originalFontFace","family","descriptors","fontFace","restoreHandler","initSelectionObserver","param","selectionCb","collapsed","updateSelection","selection","ranges","count","range","startContainer","startOffset","endContainer","endOffset","initCustomElementObserver","customElementCb","constructor","mergeHooks","o","hooks","mutationCb","canvasMutationCb","initObservers","mutationObserver","mousemoveHandler","mouseInteractionHandler","scrollHandler","viewportResizeHandler","inputHandler","mediaInteractionHandler","styleSheetObserver","adoptedStyleSheetObserver","styleDeclarationObserver","fontObserver","selectionObserver","customElementObserver","pluginHandlers","plugin","b","CrossOriginIframeMirror","generateIdFn","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","remoteIdToIdMap","map","ids","IframeManager","message","crossOriginMessageEvent","transformedEvent","style","iframeMirror","obj","keys","child","ShadowDomManager","iframeElement","manager","option","__rest","t","__awaiter","_arguments","P","generator","adopt","resolve","reject","fulfilled","step","rejected","lookup","encode","arraybuffer","bytes","base64","canvasVarMap","variableListFor","ctor","contextMap","saveWebGLVar","isInstanceOfWebGLObject","list","serializeArg","arg","src","serializeArgs","initCanvas2DMutationObserver","props2D","recordArgs","hookHandler","getNormalizedContextName","contextType","initCanvasContextObserver","setPreserveDrawingBufferToTrue","ctxName","contextAttributes","patchGLPrototype","prototype","props","mutation","initCanvasWebGLMutationObserver","funcToSource","sourcemapArg","sourcemap","lines","blankPrefixLength","createURL","blob","createInlineWorkerFactory","WorkerFactory","lastBlobMap","transparentBlobMap","getTransparentBlobFor","offscreen","arrayBuffer","worker","bitmap","transparentBase64","CanvasManager","fps","canvasContextReset","snapshotInProgressMap","timeBetweenSnapshots","lastSnapshotTime","rafId","getCanvas","matchedCanvas","takeCanvasSnapshots","timestamp","canvas2DReset","canvasWebGL1and2Reset","setLatestRAFTimestamp","values","valuesWithType","StylesheetManager","linkEl","adoptedStyleSheetData","styles","ProcessedNodeManager","thisBuffer","buffers","buffer","wrapEvent","wrappedEmit","takeFullSnapshot","canvasManager","recording","record","emit","checkoutEveryNms","checkoutEveryNth","_maskInputOptions","_slimDOMOptions","packFn","mousemoveWait","recordDOM","recordCrossOriginIframes","recordAfter","collectFonts","plugins","inEmittingFrame","passEmitsToParent","lastFullSnapshotEvent","incrementalSnapshotCount","eventProcessor","isCheckout","buf","exceedCount","exceedTime","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","wrappedAdoptedStyleSheetEmit","iframeManager","processedNodeManager","shadowDomManager","observe","init","tag","Config","loc","setImmediate","window","builtInProp","cycle","schedulingQueue","ToString","val","config","first","last","Item","self","f","schedule","isThenable","_then","oType","notify","notifyIsolated","chain","ret","msg","defWrapper","MakeDefWrapper","iteratePromises","Constructor","arr","resolver","rejecter","idx","MakeDef","NpoPromise","executor","def","success","failure","PromisePrototype","msgs","PromisePolyfill","MAX_RECORDING_MS","MAX_VALUE_FOR_MIN_RECORDING_MS","ArrayProto","FuncProto","ObjProto","slice","toString","hasOwnProperty","windowConsole","navigator","document","windowOpera","screen","userAgent","nativeBind","nativeForEach","nativeIndexOf","nativeMap","nativeIsArray","breaker","_","console","log_func_with_prefix","prefix","console_with_prefix","bound","iterator","l","iterable","callback","results","found","needle","subclass","superclass","k","pad","length","mixed_val","quote","string","escapable","holder","gap","indent","mind","partial","at","ch","escapee","next","number","hex","uffff","white","word","array","object","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","enc","tmp_arr","utftext","start","end","stringl","c1","T","time","ticks","R","UA","ua","xor","byte_array","j","tmp","se","BLOCKED_UA_STRS","formdata","arg_separator","use_val","use_key","regexS","nameEQ","ca","cookie","seconds","is_cross_subdomain","is_secure","is_cross_site","domain_override","cdomain","expires","secure","domain","extract_domain","date","days","new_cookie_val","_localStorageSupported","localStorageSupported","storage","forceCheck","supported","cheap_guid","force_check","register_event","oldSchool","useCapture","ontype","old_handler","makeHandler","new_handler","old_handlers","fixEvent","old_result","new_result","TOKEN_MATCH_REGEX","getAllChildren","bad_whitespace","hasClass","elem","selector","getElementsBySelector","tokens","token","foundCount","elements","currentContextIndex","currentContext","token_match","attrName","attrOperator","attrValue","checkFunction","query","CAMPAIGN_KEYWORDS","CLICK_IDS","default_value","kw","params","kwkey","idkey","referrer","search","keyword","user_agent","vendor","opera","browser","versionRegexs","matches","split","extra_props","maxlen","guid","SIMPLE_DOMAIN_MATCH_REGEX","DOMAIN_MATCH_REGEX","hostname","domain_regex","tld","isOnline","onLine","JSONStringify","JSONParse","GDPR_DEFAULT_PERSISTENCE_PREFIX","hasOptedOut","_hasDoNotTrackFlagOn","optedOut","_getStorageValue","addOptOutCheckMixpanelLib","method","_addOptOutCheck","_getStorage","_getStorageKey","nav","hasDntOn","dntValue","getConfigValue","ignoreDnt","persistenceType","persistencePrefix","logger","SharedLock","Promise","lockedCB","pid","startTime","pollIntervalMS","timeoutMS","keyX","keyY","keyZ","delay","waitFor","predicate","getSetY","valY","criticalSection","removeLock","LocalStorageWrapper","storageOverride","RequestQueue","storageKey","flushInterval","queueEntry","enqueueItem","storedQueue","succeeded","batchSize","batch","idsInBatch","filterOutIDsAndInvalid","items","idSet","filteredItems","removeFromStorage","updatePayloads","existingItems","itemsToUpdate","newItems","newPayload","storageEntry","queue","serialized","MAX_RETRY_INTERVAL_MS","RequestBatcher","flushMS","currentBatchSize","attemptSecondaryFlush","dataForRequest","transformedItems","addPayload","itemId","removeItemsFromQueue","batchSendCallback","res","retryMS","halvedBatchSize","requestOptions","CompressionStream","RECORDER_BATCHER_LIB_CONFIG","ACTIVE_SOURCES","isUserEvent","ev","SessionRecording","batcherKey","configVar","shouldStopBatcher","resetIdleTimeout","code","currentReplayId","reqParams","reqBody","onSuccess","response","responseBody","numEvents","replayId","batchStartTime","replayLengthMs","eventsJson","deviceId","userId","jsonStream","gzipStream","compressedBlob","MixpanelRecorder","mixpanelInstance","onIdleTimeout","onMaxLengthReached"],"mappings":"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"}
1
+ {"version":3,"file":"mixpanel-recorder.min.js","sources":["../node_modules/rrweb/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/utils.js","../node_modules/rrweb/es/rrweb/packages/types/dist/types.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/mutation.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/error-handler.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observer.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/cross-origin-iframe-mirror.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/iframe-manager.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js","../node_modules/rrweb/es/rrweb/ext/tslib/tslib.es6.js","../node_modules/rrweb/es/rrweb/ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/serialize-args.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/2d.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/webgl.js","../node_modules/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__funcToSource.js","../node_modules/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createInlineWorkerFactory.js","../node_modules/rrweb/es/rrweb/_virtual/image-bitmap-data-url-worker.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/stylesheet-manager.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/processed-node-manager.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/index.js","../node_modules/@rrweb/types/dist/types.js","../src/config.js","../src/window.js","../src/promise-polyfill.js","../src/utils.js","../src/gdpr-utils.js","../src/shared-lock.js","../src/storage/local-storage.js","../src/request-queue.js","../src/request-batcher.js","../src/recorder/session-recording.js","../src/recorder/index.js"],"sourcesContent":["var NodeType;\r\n(function (NodeType) {\r\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\r\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\r\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\r\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\r\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\r\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\r\n})(NodeType || (NodeType = {}));\n\nfunction isElement(n) {\r\n return n.nodeType === n.ELEMENT_NODE;\r\n}\r\nfunction isShadowRoot(n) {\r\n const host = n === null || n === void 0 ? void 0 : n.host;\r\n return Boolean((host === null || host === void 0 ? void 0 : host.shadowRoot) === n);\r\n}\r\nfunction isNativeShadowDom(shadowRoot) {\r\n return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\r\n}\r\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\r\n if (cssText.includes(' background-clip: text;') &&\r\n !cssText.includes(' -webkit-background-clip: text;')) {\r\n cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\r\n }\r\n return cssText;\r\n}\r\nfunction escapeImportStatement(rule) {\r\n const { cssText } = rule;\r\n if (cssText.split('\"').length < 3)\r\n return cssText;\r\n const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\r\n if (rule.layerName === '') {\r\n statement.push(`layer`);\r\n }\r\n else if (rule.layerName) {\r\n statement.push(`layer(${rule.layerName})`);\r\n }\r\n if (rule.supportsText) {\r\n statement.push(`supports(${rule.supportsText})`);\r\n }\r\n if (rule.media.length) {\r\n statement.push(rule.media.mediaText);\r\n }\r\n return statement.join(' ') + ';';\r\n}\r\nfunction stringifyStylesheet(s) {\r\n try {\r\n const rules = s.rules || s.cssRules;\r\n return rules\r\n ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join(''))\r\n : null;\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n}\r\nfunction stringifyRule(rule) {\r\n let importStringified;\r\n if (isCSSImportRule(rule)) {\r\n try {\r\n importStringified =\r\n stringifyStylesheet(rule.styleSheet) ||\r\n escapeImportStatement(rule);\r\n }\r\n catch (error) {\r\n }\r\n }\r\n else if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\r\n return fixSafariColons(rule.cssText);\r\n }\r\n return importStringified || rule.cssText;\r\n}\r\nfunction fixSafariColons(cssStringified) {\r\n const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\r\n return cssStringified.replace(regex, '$1\\\\$2');\r\n}\r\nfunction isCSSImportRule(rule) {\r\n return 'styleSheet' in rule;\r\n}\r\nfunction isCSSStyleRule(rule) {\r\n return 'selectorText' in rule;\r\n}\r\nclass Mirror {\r\n constructor() {\r\n this.idNodeMap = new Map();\r\n this.nodeMetaMap = new WeakMap();\r\n }\r\n getId(n) {\r\n var _a;\r\n if (!n)\r\n return -1;\r\n const id = (_a = this.getMeta(n)) === null || _a === void 0 ? void 0 : _a.id;\r\n return id !== null && id !== void 0 ? id : -1;\r\n }\r\n getNode(id) {\r\n return this.idNodeMap.get(id) || null;\r\n }\r\n getIds() {\r\n return Array.from(this.idNodeMap.keys());\r\n }\r\n getMeta(n) {\r\n return this.nodeMetaMap.get(n) || null;\r\n }\r\n removeNodeFromMap(n) {\r\n const id = this.getId(n);\r\n this.idNodeMap.delete(id);\r\n if (n.childNodes) {\r\n n.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\r\n }\r\n }\r\n has(id) {\r\n return this.idNodeMap.has(id);\r\n }\r\n hasNode(node) {\r\n return this.nodeMetaMap.has(node);\r\n }\r\n add(n, meta) {\r\n const id = meta.id;\r\n this.idNodeMap.set(id, n);\r\n this.nodeMetaMap.set(n, meta);\r\n }\r\n replace(id, n) {\r\n const oldNode = this.getNode(id);\r\n if (oldNode) {\r\n const meta = this.nodeMetaMap.get(oldNode);\r\n if (meta)\r\n this.nodeMetaMap.set(n, meta);\r\n }\r\n this.idNodeMap.set(id, n);\r\n }\r\n reset() {\r\n this.idNodeMap = new Map();\r\n this.nodeMetaMap = new WeakMap();\r\n }\r\n}\r\nfunction createMirror() {\r\n return new Mirror();\r\n}\r\nfunction maskInputValue({ element, maskInputOptions, tagName, type, value, maskInputFn, }) {\r\n let text = value || '';\r\n const actualType = type && toLowerCase(type);\r\n if (maskInputOptions[tagName.toLowerCase()] ||\r\n (actualType && maskInputOptions[actualType])) {\r\n if (maskInputFn) {\r\n text = maskInputFn(text, element);\r\n }\r\n else {\r\n text = '*'.repeat(text.length);\r\n }\r\n }\r\n return text;\r\n}\r\nfunction toLowerCase(str) {\r\n return str.toLowerCase();\r\n}\r\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\r\nfunction is2DCanvasBlank(canvas) {\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx)\r\n return true;\r\n const chunkSize = 50;\r\n for (let x = 0; x < canvas.width; x += chunkSize) {\r\n for (let y = 0; y < canvas.height; y += chunkSize) {\r\n const getImageData = ctx.getImageData;\r\n const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\r\n ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\r\n : getImageData;\r\n const pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\r\n if (pixelBuffer.some((pixel) => pixel !== 0))\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction isNodeMetaEqual(a, b) {\r\n if (!a || !b || a.type !== b.type)\r\n return false;\r\n if (a.type === NodeType.Document)\r\n return a.compatMode === b.compatMode;\r\n else if (a.type === NodeType.DocumentType)\r\n return (a.name === b.name &&\r\n a.publicId === b.publicId &&\r\n a.systemId === b.systemId);\r\n else if (a.type === NodeType.Comment ||\r\n a.type === NodeType.Text ||\r\n a.type === NodeType.CDATA)\r\n return a.textContent === b.textContent;\r\n else if (a.type === NodeType.Element)\r\n return (a.tagName === b.tagName &&\r\n JSON.stringify(a.attributes) ===\r\n JSON.stringify(b.attributes) &&\r\n a.isSVG === b.isSVG &&\r\n a.needBlock === b.needBlock);\r\n return false;\r\n}\r\nfunction getInputType(element) {\r\n const type = element.type;\r\n return element.hasAttribute('data-rr-is-password')\r\n ? 'password'\r\n : type\r\n ?\r\n toLowerCase(type)\r\n : null;\r\n}\r\nfunction extractFileExtension(path, baseURL) {\r\n var _a;\r\n let url;\r\n try {\r\n url = new URL(path, baseURL !== null && baseURL !== void 0 ? baseURL : window.location.href);\r\n }\r\n catch (err) {\r\n return null;\r\n }\r\n const regex = /\\.([0-9a-z]+)(?:$)/i;\r\n const match = url.pathname.match(regex);\r\n return (_a = match === null || match === void 0 ? void 0 : match[1]) !== null && _a !== void 0 ? _a : null;\r\n}\n\nlet _id = 1;\r\nconst tagNameRegex = new RegExp('[^a-z0-9-_:]');\r\nconst IGNORED_NODE = -2;\r\nfunction genId() {\r\n return _id++;\r\n}\r\nfunction getValidTagName(element) {\r\n if (element instanceof HTMLFormElement) {\r\n return 'form';\r\n }\r\n const processedTagName = toLowerCase(element.tagName);\r\n if (tagNameRegex.test(processedTagName)) {\r\n return 'div';\r\n }\r\n return processedTagName;\r\n}\r\nfunction extractOrigin(url) {\r\n let origin = '';\r\n if (url.indexOf('//') > -1) {\r\n origin = url.split('/').slice(0, 3).join('/');\r\n }\r\n else {\r\n origin = url.split('/')[0];\r\n }\r\n origin = origin.split('?')[0];\r\n return origin;\r\n}\r\nlet canvasService;\r\nlet canvasCtx;\r\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\r\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\r\nconst URL_WWW_MATCH = /^www\\..*/i;\r\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\r\nfunction absoluteToStylesheet(cssText, href) {\r\n return (cssText || '').replace(URL_IN_CSS_REF, (origin, quote1, path1, quote2, path2, path3) => {\r\n const filePath = path1 || path2 || path3;\r\n const maybeQuote = quote1 || quote2 || '';\r\n if (!filePath) {\r\n return origin;\r\n }\r\n if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\r\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n }\r\n if (DATA_URI.test(filePath)) {\r\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n }\r\n if (filePath[0] === '/') {\r\n return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\r\n }\r\n const stack = href.split('/');\r\n const parts = filePath.split('/');\r\n stack.pop();\r\n for (const part of parts) {\r\n if (part === '.') {\r\n continue;\r\n }\r\n else if (part === '..') {\r\n stack.pop();\r\n }\r\n else {\r\n stack.push(part);\r\n }\r\n }\r\n return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\r\n });\r\n}\r\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\r\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\r\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\r\n if (attributeValue.trim() === '') {\r\n return attributeValue;\r\n }\r\n let pos = 0;\r\n function collectCharacters(regEx) {\r\n let chars;\r\n const match = regEx.exec(attributeValue.substring(pos));\r\n if (match) {\r\n chars = match[0];\r\n pos += chars.length;\r\n return chars;\r\n }\r\n return '';\r\n }\r\n const output = [];\r\n while (true) {\r\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\r\n if (pos >= attributeValue.length) {\r\n break;\r\n }\r\n let url = collectCharacters(SRCSET_NOT_SPACES);\r\n if (url.slice(-1) === ',') {\r\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\r\n output.push(url);\r\n }\r\n else {\r\n let descriptorsStr = '';\r\n url = absoluteToDoc(doc, url);\r\n let inParens = false;\r\n while (true) {\r\n const c = attributeValue.charAt(pos);\r\n if (c === '') {\r\n output.push((url + descriptorsStr).trim());\r\n break;\r\n }\r\n else if (!inParens) {\r\n if (c === ',') {\r\n pos += 1;\r\n output.push((url + descriptorsStr).trim());\r\n break;\r\n }\r\n else if (c === '(') {\r\n inParens = true;\r\n }\r\n }\r\n else {\r\n if (c === ')') {\r\n inParens = false;\r\n }\r\n }\r\n descriptorsStr += c;\r\n pos += 1;\r\n }\r\n }\r\n }\r\n return output.join(', ');\r\n}\r\nfunction absoluteToDoc(doc, attributeValue) {\r\n if (!attributeValue || attributeValue.trim() === '') {\r\n return attributeValue;\r\n }\r\n const a = doc.createElement('a');\r\n a.href = attributeValue;\r\n return a.href;\r\n}\r\nfunction isSVGElement(el) {\r\n return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\r\n}\r\nfunction getHref() {\r\n const a = document.createElement('a');\r\n a.href = '';\r\n return a.href;\r\n}\r\nfunction transformAttribute(doc, tagName, name, value) {\r\n if (!value) {\r\n return value;\r\n }\r\n if (name === 'src' ||\r\n (name === 'href' && !(tagName === 'use' && value[0] === '#'))) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'xlink:href' && value[0] !== '#') {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'background' &&\r\n (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'srcset') {\r\n return getAbsoluteSrcsetString(doc, value);\r\n }\r\n else if (name === 'style') {\r\n return absoluteToStylesheet(value, getHref());\r\n }\r\n else if (tagName === 'object' && name === 'data') {\r\n return absoluteToDoc(doc, value);\r\n }\r\n return value;\r\n}\r\nfunction ignoreAttribute(tagName, name, _value) {\r\n return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\r\n}\r\nfunction _isBlockedElement(element, blockClass, blockSelector) {\r\n try {\r\n if (typeof blockClass === 'string') {\r\n if (element.classList.contains(blockClass)) {\r\n return true;\r\n }\r\n }\r\n else {\r\n for (let eIndex = element.classList.length; eIndex--;) {\r\n const className = element.classList[eIndex];\r\n if (blockClass.test(className)) {\r\n return true;\r\n }\r\n }\r\n }\r\n if (blockSelector) {\r\n return element.matches(blockSelector);\r\n }\r\n }\r\n catch (e) {\r\n }\r\n return false;\r\n}\r\nfunction classMatchesRegex(node, regex, checkAncestors) {\r\n if (!node)\r\n return false;\r\n if (node.nodeType !== node.ELEMENT_NODE) {\r\n if (!checkAncestors)\r\n return false;\r\n return classMatchesRegex(node.parentNode, regex, checkAncestors);\r\n }\r\n for (let eIndex = node.classList.length; eIndex--;) {\r\n const className = node.classList[eIndex];\r\n if (regex.test(className)) {\r\n return true;\r\n }\r\n }\r\n if (!checkAncestors)\r\n return false;\r\n return classMatchesRegex(node.parentNode, regex, checkAncestors);\r\n}\r\nfunction needMaskingText(node, maskTextClass, maskTextSelector, checkAncestors) {\r\n try {\r\n const el = node.nodeType === node.ELEMENT_NODE\r\n ? node\r\n : node.parentElement;\r\n if (el === null)\r\n return false;\r\n if (typeof maskTextClass === 'string') {\r\n if (checkAncestors) {\r\n if (el.closest(`.${maskTextClass}`))\r\n return true;\r\n }\r\n else {\r\n if (el.classList.contains(maskTextClass))\r\n return true;\r\n }\r\n }\r\n else {\r\n if (classMatchesRegex(el, maskTextClass, checkAncestors))\r\n return true;\r\n }\r\n if (maskTextSelector) {\r\n if (checkAncestors) {\r\n if (el.closest(maskTextSelector))\r\n return true;\r\n }\r\n else {\r\n if (el.matches(maskTextSelector))\r\n return true;\r\n }\r\n }\r\n }\r\n catch (e) {\r\n }\r\n return false;\r\n}\r\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\r\n const win = iframeEl.contentWindow;\r\n if (!win) {\r\n return;\r\n }\r\n let fired = false;\r\n let readyState;\r\n try {\r\n readyState = win.document.readyState;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n if (readyState !== 'complete') {\r\n const timer = setTimeout(() => {\r\n if (!fired) {\r\n listener();\r\n fired = true;\r\n }\r\n }, iframeLoadTimeout);\r\n iframeEl.addEventListener('load', () => {\r\n clearTimeout(timer);\r\n fired = true;\r\n listener();\r\n });\r\n return;\r\n }\r\n const blankUrl = 'about:blank';\r\n if (win.location.href !== blankUrl ||\r\n iframeEl.src === blankUrl ||\r\n iframeEl.src === '') {\r\n setTimeout(listener, 0);\r\n return iframeEl.addEventListener('load', listener);\r\n }\r\n iframeEl.addEventListener('load', listener);\r\n}\r\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\r\n let fired = false;\r\n let styleSheetLoaded;\r\n try {\r\n styleSheetLoaded = link.sheet;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n if (styleSheetLoaded)\r\n return;\r\n const timer = setTimeout(() => {\r\n if (!fired) {\r\n listener();\r\n fired = true;\r\n }\r\n }, styleSheetLoadTimeout);\r\n link.addEventListener('load', () => {\r\n clearTimeout(timer);\r\n fired = true;\r\n listener();\r\n });\r\n}\r\nfunction serializeNode(n, options) {\r\n const { doc, mirror, blockClass, blockSelector, needsMask, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, } = options;\r\n const rootId = getRootId(doc, mirror);\r\n switch (n.nodeType) {\r\n case n.DOCUMENT_NODE:\r\n if (n.compatMode !== 'CSS1Compat') {\r\n return {\r\n type: NodeType.Document,\r\n childNodes: [],\r\n compatMode: n.compatMode,\r\n };\r\n }\r\n else {\r\n return {\r\n type: NodeType.Document,\r\n childNodes: [],\r\n };\r\n }\r\n case n.DOCUMENT_TYPE_NODE:\r\n return {\r\n type: NodeType.DocumentType,\r\n name: n.name,\r\n publicId: n.publicId,\r\n systemId: n.systemId,\r\n rootId,\r\n };\r\n case n.ELEMENT_NODE:\r\n return serializeElementNode(n, {\r\n doc,\r\n blockClass,\r\n blockSelector,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskInputFn,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n keepIframeSrcFn,\r\n newlyAddedElement,\r\n rootId,\r\n });\r\n case n.TEXT_NODE:\r\n return serializeTextNode(n, {\r\n needsMask,\r\n maskTextFn,\r\n rootId,\r\n });\r\n case n.CDATA_SECTION_NODE:\r\n return {\r\n type: NodeType.CDATA,\r\n textContent: '',\r\n rootId,\r\n };\r\n case n.COMMENT_NODE:\r\n return {\r\n type: NodeType.Comment,\r\n textContent: n.textContent || '',\r\n rootId,\r\n };\r\n default:\r\n return false;\r\n }\r\n}\r\nfunction getRootId(doc, mirror) {\r\n if (!mirror.hasNode(doc))\r\n return undefined;\r\n const docId = mirror.getId(doc);\r\n return docId === 1 ? undefined : docId;\r\n}\r\nfunction serializeTextNode(n, options) {\r\n var _a;\r\n const { needsMask, maskTextFn, rootId } = options;\r\n const parentTagName = n.parentNode && n.parentNode.tagName;\r\n let textContent = n.textContent;\r\n const isStyle = parentTagName === 'STYLE' ? true : undefined;\r\n const isScript = parentTagName === 'SCRIPT' ? true : undefined;\r\n if (isStyle && textContent) {\r\n try {\r\n if (n.nextSibling || n.previousSibling) {\r\n }\r\n else if ((_a = n.parentNode.sheet) === null || _a === void 0 ? void 0 : _a.cssRules) {\r\n textContent = stringifyStylesheet(n.parentNode.sheet);\r\n }\r\n }\r\n catch (err) {\r\n console.warn(`Cannot get CSS styles from text's parentNode. Error: ${err}`, n);\r\n }\r\n textContent = absoluteToStylesheet(textContent, getHref());\r\n }\r\n if (isScript) {\r\n textContent = 'SCRIPT_PLACEHOLDER';\r\n }\r\n if (!isStyle && !isScript && textContent && needsMask) {\r\n textContent = maskTextFn\r\n ? maskTextFn(textContent, n.parentElement)\r\n : textContent.replace(/[\\S]/g, '*');\r\n }\r\n return {\r\n type: NodeType.Text,\r\n textContent: textContent || '',\r\n isStyle,\r\n rootId,\r\n };\r\n}\r\nfunction serializeElementNode(n, options) {\r\n const { doc, blockClass, blockSelector, inlineStylesheet, maskInputOptions = {}, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, } = options;\r\n const needBlock = _isBlockedElement(n, blockClass, blockSelector);\r\n const tagName = getValidTagName(n);\r\n let attributes = {};\r\n const len = n.attributes.length;\r\n for (let i = 0; i < len; i++) {\r\n const attr = n.attributes[i];\r\n if (!ignoreAttribute(tagName, attr.name, attr.value)) {\r\n attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value);\r\n }\r\n }\r\n if (tagName === 'link' && inlineStylesheet) {\r\n const stylesheet = Array.from(doc.styleSheets).find((s) => {\r\n return s.href === n.href;\r\n });\r\n let cssText = null;\r\n if (stylesheet) {\r\n cssText = stringifyStylesheet(stylesheet);\r\n }\r\n if (cssText) {\r\n delete attributes.rel;\r\n delete attributes.href;\r\n attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\r\n }\r\n }\r\n if (tagName === 'style' &&\r\n n.sheet &&\r\n !(n.innerText || n.textContent || '').trim().length) {\r\n const cssText = stringifyStylesheet(n.sheet);\r\n if (cssText) {\r\n attributes._cssText = absoluteToStylesheet(cssText, getHref());\r\n }\r\n }\r\n if (tagName === 'input' || tagName === 'textarea' || tagName === 'select') {\r\n const value = n.value;\r\n const checked = n.checked;\r\n if (attributes.type !== 'radio' &&\r\n attributes.type !== 'checkbox' &&\r\n attributes.type !== 'submit' &&\r\n attributes.type !== 'button' &&\r\n value) {\r\n attributes.value = maskInputValue({\r\n element: n,\r\n type: getInputType(n),\r\n tagName,\r\n value,\r\n maskInputOptions,\r\n maskInputFn,\r\n });\r\n }\r\n else if (checked) {\r\n attributes.checked = checked;\r\n }\r\n }\r\n if (tagName === 'option') {\r\n if (n.selected && !maskInputOptions['select']) {\r\n attributes.selected = true;\r\n }\r\n else {\r\n delete attributes.selected;\r\n }\r\n }\r\n if (tagName === 'canvas' && recordCanvas) {\r\n if (n.__context === '2d') {\r\n if (!is2DCanvasBlank(n)) {\r\n attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n }\r\n }\r\n else if (!('__context' in n)) {\r\n const canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n const blankCanvas = document.createElement('canvas');\r\n blankCanvas.width = n.width;\r\n blankCanvas.height = n.height;\r\n const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n if (canvasDataURL !== blankCanvasDataURL) {\r\n attributes.rr_dataURL = canvasDataURL;\r\n }\r\n }\r\n }\r\n if (tagName === 'img' && inlineImages) {\r\n if (!canvasService) {\r\n canvasService = doc.createElement('canvas');\r\n canvasCtx = canvasService.getContext('2d');\r\n }\r\n const image = n;\r\n const oldValue = image.crossOrigin;\r\n image.crossOrigin = 'anonymous';\r\n const recordInlineImage = () => {\r\n image.removeEventListener('load', recordInlineImage);\r\n try {\r\n canvasService.width = image.naturalWidth;\r\n canvasService.height = image.naturalHeight;\r\n canvasCtx.drawImage(image, 0, 0);\r\n attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n }\r\n catch (err) {\r\n console.warn(`Cannot inline img src=${image.currentSrc}! Error: ${err}`);\r\n }\r\n oldValue\r\n ? (attributes.crossOrigin = oldValue)\r\n : image.removeAttribute('crossorigin');\r\n };\r\n if (image.complete && image.naturalWidth !== 0)\r\n recordInlineImage();\r\n else\r\n image.addEventListener('load', recordInlineImage);\r\n }\r\n if (tagName === 'audio' || tagName === 'video') {\r\n const mediaAttributes = attributes;\r\n mediaAttributes.rr_mediaState = n.paused\r\n ? 'paused'\r\n : 'played';\r\n mediaAttributes.rr_mediaCurrentTime = n.currentTime;\r\n mediaAttributes.rr_mediaPlaybackRate = n.playbackRate;\r\n mediaAttributes.rr_mediaMuted = n.muted;\r\n mediaAttributes.rr_mediaLoop = n.loop;\r\n mediaAttributes.rr_mediaVolume = n.volume;\r\n }\r\n if (!newlyAddedElement) {\r\n if (n.scrollLeft) {\r\n attributes.rr_scrollLeft = n.scrollLeft;\r\n }\r\n if (n.scrollTop) {\r\n attributes.rr_scrollTop = n.scrollTop;\r\n }\r\n }\r\n if (needBlock) {\r\n const { width, height } = n.getBoundingClientRect();\r\n attributes = {\r\n class: attributes.class,\r\n rr_width: `${width}px`,\r\n rr_height: `${height}px`,\r\n };\r\n }\r\n if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\r\n if (!n.contentDocument) {\r\n attributes.rr_src = attributes.src;\r\n }\r\n delete attributes.src;\r\n }\r\n let isCustomElement;\r\n try {\r\n if (customElements.get(tagName))\r\n isCustomElement = true;\r\n }\r\n catch (e) {\r\n }\r\n return {\r\n type: NodeType.Element,\r\n tagName,\r\n attributes,\r\n childNodes: [],\r\n isSVG: isSVGElement(n) || undefined,\r\n needBlock,\r\n rootId,\r\n isCustom: isCustomElement,\r\n };\r\n}\r\nfunction lowerIfExists(maybeAttr) {\r\n if (maybeAttr === undefined || maybeAttr === null) {\r\n return '';\r\n }\r\n else {\r\n return maybeAttr.toLowerCase();\r\n }\r\n}\r\nfunction slimDOMExcluded(sn, slimDOMOptions) {\r\n if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\r\n return true;\r\n }\r\n else if (sn.type === NodeType.Element) {\r\n if (slimDOMOptions.script &&\r\n (sn.tagName === 'script' ||\r\n (sn.tagName === 'link' &&\r\n (sn.attributes.rel === 'preload' ||\r\n sn.attributes.rel === 'modulepreload') &&\r\n sn.attributes.as === 'script') ||\r\n (sn.tagName === 'link' &&\r\n sn.attributes.rel === 'prefetch' &&\r\n typeof sn.attributes.href === 'string' &&\r\n extractFileExtension(sn.attributes.href) === 'js'))) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headFavicon &&\r\n ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\r\n (sn.tagName === 'meta' &&\r\n (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\r\n lowerIfExists(sn.attributes.name) === 'application-name' ||\r\n lowerIfExists(sn.attributes.rel) === 'icon' ||\r\n lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\r\n lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\r\n return true;\r\n }\r\n else if (sn.tagName === 'meta') {\r\n if (slimDOMOptions.headMetaDescKeywords &&\r\n lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaSocial &&\r\n (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\r\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\r\n lowerIfExists(sn.attributes.name) === 'pinterest')) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaRobots &&\r\n (lowerIfExists(sn.attributes.name) === 'robots' ||\r\n lowerIfExists(sn.attributes.name) === 'googlebot' ||\r\n lowerIfExists(sn.attributes.name) === 'bingbot')) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaHttpEquiv &&\r\n sn.attributes['http-equiv'] !== undefined) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaAuthorship &&\r\n (lowerIfExists(sn.attributes.name) === 'author' ||\r\n lowerIfExists(sn.attributes.name) === 'generator' ||\r\n lowerIfExists(sn.attributes.name) === 'framework' ||\r\n lowerIfExists(sn.attributes.name) === 'publisher' ||\r\n lowerIfExists(sn.attributes.name) === 'progid' ||\r\n lowerIfExists(sn.attributes.property).match(/^article:/) ||\r\n lowerIfExists(sn.attributes.property).match(/^product:/))) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaVerification &&\r\n (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\r\n lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\r\n lowerIfExists(sn.attributes.name) === 'csrf-token' ||\r\n lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\r\n lowerIfExists(sn.attributes.name) === 'verify-v1' ||\r\n lowerIfExists(sn.attributes.name) === 'verification' ||\r\n lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\nfunction serializeNodeWithId(n, options) {\r\n const { doc, mirror, blockClass, blockSelector, maskTextClass, maskTextSelector, skipChild = false, inlineStylesheet = true, maskInputOptions = {}, maskTextFn, maskInputFn, slimDOMOptions, dataURLOptions = {}, inlineImages = false, recordCanvas = false, onSerialize, onIframeLoad, iframeLoadTimeout = 5000, onStylesheetLoad, stylesheetLoadTimeout = 5000, keepIframeSrcFn = () => false, newlyAddedElement = false, } = options;\r\n let { needsMask } = options;\r\n let { preserveWhiteSpace = true } = options;\r\n if (!needsMask &&\r\n n.childNodes) {\r\n const checkAncestors = needsMask === undefined;\r\n needsMask = needMaskingText(n, maskTextClass, maskTextSelector, checkAncestors);\r\n }\r\n const _serializedNode = serializeNode(n, {\r\n doc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n needsMask,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskTextFn,\r\n maskInputFn,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n keepIframeSrcFn,\r\n newlyAddedElement,\r\n });\r\n if (!_serializedNode) {\r\n console.warn(n, 'not serialized');\r\n return null;\r\n }\r\n let id;\r\n if (mirror.hasNode(n)) {\r\n id = mirror.getId(n);\r\n }\r\n else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\r\n (!preserveWhiteSpace &&\r\n _serializedNode.type === NodeType.Text &&\r\n !_serializedNode.isStyle &&\r\n !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\r\n id = IGNORED_NODE;\r\n }\r\n else {\r\n id = genId();\r\n }\r\n const serializedNode = Object.assign(_serializedNode, { id });\r\n mirror.add(n, serializedNode);\r\n if (id === IGNORED_NODE) {\r\n return null;\r\n }\r\n if (onSerialize) {\r\n onSerialize(n);\r\n }\r\n let recordChild = !skipChild;\r\n if (serializedNode.type === NodeType.Element) {\r\n recordChild = recordChild && !serializedNode.needBlock;\r\n delete serializedNode.needBlock;\r\n const shadowRoot = n.shadowRoot;\r\n if (shadowRoot && isNativeShadowDom(shadowRoot))\r\n serializedNode.isShadowHost = true;\r\n }\r\n if ((serializedNode.type === NodeType.Document ||\r\n serializedNode.type === NodeType.Element) &&\r\n recordChild) {\r\n if (slimDOMOptions.headWhitespace &&\r\n serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'head') {\r\n preserveWhiteSpace = false;\r\n }\r\n const bypassOptions = {\r\n doc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n needsMask,\r\n maskTextClass,\r\n maskTextSelector,\r\n skipChild,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n };\r\n if (serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'textarea' &&\r\n serializedNode.attributes.value !== undefined) ;\r\n else {\r\n for (const childN of Array.from(n.childNodes)) {\r\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n if (serializedChildNode) {\r\n serializedNode.childNodes.push(serializedChildNode);\r\n }\r\n }\r\n }\r\n if (isElement(n) && n.shadowRoot) {\r\n for (const childN of Array.from(n.shadowRoot.childNodes)) {\r\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n if (serializedChildNode) {\r\n isNativeShadowDom(n.shadowRoot) &&\r\n (serializedChildNode.isShadow = true);\r\n serializedNode.childNodes.push(serializedChildNode);\r\n }\r\n }\r\n }\r\n }\r\n if (n.parentNode &&\r\n isShadowRoot(n.parentNode) &&\r\n isNativeShadowDom(n.parentNode)) {\r\n serializedNode.isShadow = true;\r\n }\r\n if (serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'iframe') {\r\n onceIframeLoaded(n, () => {\r\n const iframeDoc = n.contentDocument;\r\n if (iframeDoc && onIframeLoad) {\r\n const serializedIframeNode = serializeNodeWithId(iframeDoc, {\r\n doc: iframeDoc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n needsMask,\r\n maskTextClass,\r\n maskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n });\r\n if (serializedIframeNode) {\r\n onIframeLoad(n, serializedIframeNode);\r\n }\r\n }\r\n }, iframeLoadTimeout);\r\n }\r\n if (serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'link' &&\r\n typeof serializedNode.attributes.rel === 'string' &&\r\n (serializedNode.attributes.rel === 'stylesheet' ||\r\n (serializedNode.attributes.rel === 'preload' &&\r\n typeof serializedNode.attributes.href === 'string' &&\r\n extractFileExtension(serializedNode.attributes.href) === 'css'))) {\r\n onceStylesheetLoaded(n, () => {\r\n if (onStylesheetLoad) {\r\n const serializedLinkNode = serializeNodeWithId(n, {\r\n doc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n needsMask,\r\n maskTextClass,\r\n maskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n });\r\n if (serializedLinkNode) {\r\n onStylesheetLoad(n, serializedLinkNode);\r\n }\r\n }\r\n }, stylesheetLoadTimeout);\r\n }\r\n return serializedNode;\r\n}\r\nfunction snapshot(n, options) {\r\n const { mirror = new Mirror(), blockClass = 'rr-block', blockSelector = null, maskTextClass = 'rr-mask', maskTextSelector = null, inlineStylesheet = true, inlineImages = false, recordCanvas = false, maskAllInputs = false, maskTextFn, maskInputFn, slimDOM = false, dataURLOptions, preserveWhiteSpace, onSerialize, onIframeLoad, iframeLoadTimeout, onStylesheetLoad, stylesheetLoadTimeout, keepIframeSrcFn = () => false, } = options || {};\r\n const maskInputOptions = maskAllInputs === true\r\n ? {\r\n color: true,\r\n date: true,\r\n 'datetime-local': true,\r\n email: true,\r\n month: true,\r\n number: true,\r\n range: true,\r\n search: true,\r\n tel: true,\r\n text: true,\r\n time: true,\r\n url: true,\r\n week: true,\r\n textarea: true,\r\n select: true,\r\n password: true,\r\n }\r\n : maskAllInputs === false\r\n ? {\r\n password: true,\r\n }\r\n : maskAllInputs;\r\n const slimDOMOptions = slimDOM === true || slimDOM === 'all'\r\n ?\r\n {\r\n script: true,\r\n comment: true,\r\n headFavicon: true,\r\n headWhitespace: true,\r\n headMetaDescKeywords: slimDOM === 'all',\r\n headMetaSocial: true,\r\n headMetaRobots: true,\r\n headMetaHttpEquiv: true,\r\n headMetaAuthorship: true,\r\n headMetaVerification: true,\r\n }\r\n : slimDOM === false\r\n ? {}\r\n : slimDOM;\r\n return serializeNodeWithId(n, {\r\n doc: n,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n maskTextClass,\r\n maskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n newlyAddedElement: false,\r\n });\r\n}\r\n\nconst commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\r\nfunction parse(css, options = {}) {\r\n let lineno = 1;\r\n let column = 1;\r\n function updatePosition(str) {\r\n const lines = str.match(/\\n/g);\r\n if (lines) {\r\n lineno += lines.length;\r\n }\r\n const i = str.lastIndexOf('\\n');\r\n column = i === -1 ? column + str.length : str.length - i;\r\n }\r\n function position() {\r\n const start = { line: lineno, column };\r\n return (node) => {\r\n node.position = new Position(start);\r\n whitespace();\r\n return node;\r\n };\r\n }\r\n class Position {\r\n constructor(start) {\r\n this.start = start;\r\n this.end = { line: lineno, column };\r\n this.source = options.source;\r\n }\r\n }\r\n Position.prototype.content = css;\r\n const errorsList = [];\r\n function error(msg) {\r\n const err = new Error(`${options.source || ''}:${lineno}:${column}: ${msg}`);\r\n err.reason = msg;\r\n err.filename = options.source;\r\n err.line = lineno;\r\n err.column = column;\r\n err.source = css;\r\n if (options.silent) {\r\n errorsList.push(err);\r\n }\r\n else {\r\n throw err;\r\n }\r\n }\r\n function stylesheet() {\r\n const rulesList = rules();\r\n return {\r\n type: 'stylesheet',\r\n stylesheet: {\r\n source: options.source,\r\n rules: rulesList,\r\n parsingErrors: errorsList,\r\n },\r\n };\r\n }\r\n function open() {\r\n return match(/^{\\s*/);\r\n }\r\n function close() {\r\n return match(/^}/);\r\n }\r\n function rules() {\r\n let node;\r\n const rules = [];\r\n whitespace();\r\n comments(rules);\r\n while (css.length && css.charAt(0) !== '}' && (node = atrule() || rule())) {\r\n if (node) {\r\n rules.push(node);\r\n comments(rules);\r\n }\r\n }\r\n return rules;\r\n }\r\n function match(re) {\r\n const m = re.exec(css);\r\n if (!m) {\r\n return;\r\n }\r\n const str = m[0];\r\n updatePosition(str);\r\n css = css.slice(str.length);\r\n return m;\r\n }\r\n function whitespace() {\r\n match(/^\\s*/);\r\n }\r\n function comments(rules = []) {\r\n let c;\r\n while ((c = comment())) {\r\n if (c) {\r\n rules.push(c);\r\n }\r\n c = comment();\r\n }\r\n return rules;\r\n }\r\n function comment() {\r\n const pos = position();\r\n if ('/' !== css.charAt(0) || '*' !== css.charAt(1)) {\r\n return;\r\n }\r\n let i = 2;\r\n while ('' !== css.charAt(i) &&\r\n ('*' !== css.charAt(i) || '/' !== css.charAt(i + 1))) {\r\n ++i;\r\n }\r\n i += 2;\r\n if ('' === css.charAt(i - 1)) {\r\n return error('End of comment missing');\r\n }\r\n const str = css.slice(2, i - 2);\r\n column += 2;\r\n updatePosition(str);\r\n css = css.slice(i);\r\n column += 2;\r\n return pos({\r\n type: 'comment',\r\n comment: str,\r\n });\r\n }\r\n function selector() {\r\n whitespace();\r\n while (css[0] == '}') {\r\n error('extra closing bracket');\r\n css = css.slice(1);\r\n whitespace();\r\n }\r\n const m = match(/^((\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[^{])+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const cleanedInput = m[0]\r\n .trim()\r\n .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\r\n .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, (m) => {\r\n return m.replace(/,/g, '\\u200C');\r\n });\r\n return customSplit(cleanedInput).map((s) => s.replace(/\\u200C/g, ',').trim());\r\n }\r\n function customSplit(input) {\r\n const result = [];\r\n let currentSegment = '';\r\n let depthParentheses = 0;\r\n let depthBrackets = 0;\r\n for (const char of input) {\r\n if (char === '(') {\r\n depthParentheses++;\r\n }\r\n else if (char === ')') {\r\n depthParentheses--;\r\n }\r\n else if (char === '[') {\r\n depthBrackets++;\r\n }\r\n else if (char === ']') {\r\n depthBrackets--;\r\n }\r\n if (char === ',' && depthParentheses === 0 && depthBrackets === 0) {\r\n result.push(currentSegment);\r\n currentSegment = '';\r\n }\r\n else {\r\n currentSegment += char;\r\n }\r\n }\r\n if (currentSegment) {\r\n result.push(currentSegment);\r\n }\r\n return result;\r\n }\r\n function declaration() {\r\n const pos = position();\r\n const propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\r\n if (!propMatch) {\r\n return;\r\n }\r\n const prop = trim(propMatch[0]);\r\n if (!match(/^:\\s*/)) {\r\n return error(`property missing ':'`);\r\n }\r\n const val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\r\n const ret = pos({\r\n type: 'declaration',\r\n property: prop.replace(commentre, ''),\r\n value: val ? trim(val[0]).replace(commentre, '') : '',\r\n });\r\n match(/^[;\\s]*/);\r\n return ret;\r\n }\r\n function declarations() {\r\n const decls = [];\r\n if (!open()) {\r\n return error(`missing '{'`);\r\n }\r\n comments(decls);\r\n let decl;\r\n while ((decl = declaration())) {\r\n if (decl !== false) {\r\n decls.push(decl);\r\n comments(decls);\r\n }\r\n decl = declaration();\r\n }\r\n if (!close()) {\r\n return error(`missing '}'`);\r\n }\r\n return decls;\r\n }\r\n function keyframe() {\r\n let m;\r\n const vals = [];\r\n const pos = position();\r\n while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\r\n vals.push(m[1]);\r\n match(/^,\\s*/);\r\n }\r\n if (!vals.length) {\r\n return;\r\n }\r\n return pos({\r\n type: 'keyframe',\r\n values: vals,\r\n declarations: declarations(),\r\n });\r\n }\r\n function atkeyframes() {\r\n const pos = position();\r\n let m = match(/^@([-\\w]+)?keyframes\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n const vendor = m[1];\r\n m = match(/^([-\\w]+)\\s*/);\r\n if (!m) {\r\n return error('@keyframes missing name');\r\n }\r\n const name = m[1];\r\n if (!open()) {\r\n return error(`@keyframes missing '{'`);\r\n }\r\n let frame;\r\n let frames = comments();\r\n while ((frame = keyframe())) {\r\n frames.push(frame);\r\n frames = frames.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(`@keyframes missing '}'`);\r\n }\r\n return pos({\r\n type: 'keyframes',\r\n name,\r\n vendor,\r\n keyframes: frames,\r\n });\r\n }\r\n function atsupports() {\r\n const pos = position();\r\n const m = match(/^@supports *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const supports = trim(m[1]);\r\n if (!open()) {\r\n return error(`@supports missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@supports missing '}'`);\r\n }\r\n return pos({\r\n type: 'supports',\r\n supports,\r\n rules: style,\r\n });\r\n }\r\n function athost() {\r\n const pos = position();\r\n const m = match(/^@host\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n if (!open()) {\r\n return error(`@host missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@host missing '}'`);\r\n }\r\n return pos({\r\n type: 'host',\r\n rules: style,\r\n });\r\n }\r\n function atmedia() {\r\n const pos = position();\r\n const m = match(/^@media *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const media = trim(m[1]);\r\n if (!open()) {\r\n return error(`@media missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@media missing '}'`);\r\n }\r\n return pos({\r\n type: 'media',\r\n media,\r\n rules: style,\r\n });\r\n }\r\n function atcustommedia() {\r\n const pos = position();\r\n const m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\r\n if (!m) {\r\n return;\r\n }\r\n return pos({\r\n type: 'custom-media',\r\n name: trim(m[1]),\r\n media: trim(m[2]),\r\n });\r\n }\r\n function atpage() {\r\n const pos = position();\r\n const m = match(/^@page */);\r\n if (!m) {\r\n return;\r\n }\r\n const sel = selector() || [];\r\n if (!open()) {\r\n return error(`@page missing '{'`);\r\n }\r\n let decls = comments();\r\n let decl;\r\n while ((decl = declaration())) {\r\n decls.push(decl);\r\n decls = decls.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(`@page missing '}'`);\r\n }\r\n return pos({\r\n type: 'page',\r\n selectors: sel,\r\n declarations: decls,\r\n });\r\n }\r\n function atdocument() {\r\n const pos = position();\r\n const m = match(/^@([-\\w]+)?document *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const vendor = trim(m[1]);\r\n const doc = trim(m[2]);\r\n if (!open()) {\r\n return error(`@document missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@document missing '}'`);\r\n }\r\n return pos({\r\n type: 'document',\r\n document: doc,\r\n vendor,\r\n rules: style,\r\n });\r\n }\r\n function atfontface() {\r\n const pos = position();\r\n const m = match(/^@font-face\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n if (!open()) {\r\n return error(`@font-face missing '{'`);\r\n }\r\n let decls = comments();\r\n let decl;\r\n while ((decl = declaration())) {\r\n decls.push(decl);\r\n decls = decls.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(`@font-face missing '}'`);\r\n }\r\n return pos({\r\n type: 'font-face',\r\n declarations: decls,\r\n });\r\n }\r\n const atimport = _compileAtrule('import');\r\n const atcharset = _compileAtrule('charset');\r\n const atnamespace = _compileAtrule('namespace');\r\n function _compileAtrule(name) {\r\n const re = new RegExp('^@' + name + '\\\\s*([^;]+);');\r\n return () => {\r\n const pos = position();\r\n const m = match(re);\r\n if (!m) {\r\n return;\r\n }\r\n const ret = { type: name };\r\n ret[name] = m[1].trim();\r\n return pos(ret);\r\n };\r\n }\r\n function atrule() {\r\n if (css[0] !== '@') {\r\n return;\r\n }\r\n return (atkeyframes() ||\r\n atmedia() ||\r\n atcustommedia() ||\r\n atsupports() ||\r\n atimport() ||\r\n atcharset() ||\r\n atnamespace() ||\r\n atdocument() ||\r\n atpage() ||\r\n athost() ||\r\n atfontface());\r\n }\r\n function rule() {\r\n const pos = position();\r\n const sel = selector();\r\n if (!sel) {\r\n return error('selector missing');\r\n }\r\n comments();\r\n return pos({\r\n type: 'rule',\r\n selectors: sel,\r\n declarations: declarations(),\r\n });\r\n }\r\n return addParent(stylesheet());\r\n}\r\nfunction trim(str) {\r\n return str ? str.replace(/^\\s+|\\s+$/g, '') : '';\r\n}\r\nfunction addParent(obj, parent) {\r\n const isNode = obj && typeof obj.type === 'string';\r\n const childParent = isNode ? obj : parent;\r\n for (const k of Object.keys(obj)) {\r\n const value = obj[k];\r\n if (Array.isArray(value)) {\r\n value.forEach((v) => {\r\n addParent(v, childParent);\r\n });\r\n }\r\n else if (value && typeof value === 'object') {\r\n addParent(value, childParent);\r\n }\r\n }\r\n if (isNode) {\r\n Object.defineProperty(obj, 'parent', {\r\n configurable: true,\r\n writable: true,\r\n enumerable: false,\r\n value: parent || null,\r\n });\r\n }\r\n return obj;\r\n}\n\nconst tagMap = {\r\n script: 'noscript',\r\n altglyph: 'altGlyph',\r\n altglyphdef: 'altGlyphDef',\r\n altglyphitem: 'altGlyphItem',\r\n animatecolor: 'animateColor',\r\n animatemotion: 'animateMotion',\r\n animatetransform: 'animateTransform',\r\n clippath: 'clipPath',\r\n feblend: 'feBlend',\r\n fecolormatrix: 'feColorMatrix',\r\n fecomponenttransfer: 'feComponentTransfer',\r\n fecomposite: 'feComposite',\r\n feconvolvematrix: 'feConvolveMatrix',\r\n fediffuselighting: 'feDiffuseLighting',\r\n fedisplacementmap: 'feDisplacementMap',\r\n fedistantlight: 'feDistantLight',\r\n fedropshadow: 'feDropShadow',\r\n feflood: 'feFlood',\r\n fefunca: 'feFuncA',\r\n fefuncb: 'feFuncB',\r\n fefuncg: 'feFuncG',\r\n fefuncr: 'feFuncR',\r\n fegaussianblur: 'feGaussianBlur',\r\n feimage: 'feImage',\r\n femerge: 'feMerge',\r\n femergenode: 'feMergeNode',\r\n femorphology: 'feMorphology',\r\n feoffset: 'feOffset',\r\n fepointlight: 'fePointLight',\r\n fespecularlighting: 'feSpecularLighting',\r\n fespotlight: 'feSpotLight',\r\n fetile: 'feTile',\r\n feturbulence: 'feTurbulence',\r\n foreignobject: 'foreignObject',\r\n glyphref: 'glyphRef',\r\n lineargradient: 'linearGradient',\r\n radialgradient: 'radialGradient',\r\n};\r\nfunction getTagName(n) {\r\n let tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\r\n if (tagName === 'link' && n.attributes._cssText) {\r\n tagName = 'style';\r\n }\r\n return tagName;\r\n}\r\nfunction escapeRegExp(str) {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\nconst MEDIA_SELECTOR = /(max|min)-device-(width|height)/;\r\nconst MEDIA_SELECTOR_GLOBAL = new RegExp(MEDIA_SELECTOR.source, 'g');\r\nconst HOVER_SELECTOR = /([^\\\\]):hover/;\r\nconst HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, 'g');\r\nfunction adaptCssForReplay(cssText, cache) {\r\n const cachedStyle = cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.get(cssText);\r\n if (cachedStyle)\r\n return cachedStyle;\r\n const ast = parse(cssText, {\r\n silent: true,\r\n });\r\n if (!ast.stylesheet) {\r\n return cssText;\r\n }\r\n const selectors = [];\r\n const medias = [];\r\n function getSelectors(rule) {\r\n if ('selectors' in rule && rule.selectors) {\r\n rule.selectors.forEach((selector) => {\r\n if (HOVER_SELECTOR.test(selector)) {\r\n selectors.push(selector);\r\n }\r\n });\r\n }\r\n if ('media' in rule && rule.media && MEDIA_SELECTOR.test(rule.media)) {\r\n medias.push(rule.media);\r\n }\r\n if ('rules' in rule && rule.rules) {\r\n rule.rules.forEach(getSelectors);\r\n }\r\n }\r\n getSelectors(ast.stylesheet);\r\n let result = cssText;\r\n if (selectors.length > 0) {\r\n const selectorMatcher = new RegExp(selectors\r\n .filter((selector, index) => selectors.indexOf(selector) === index)\r\n .sort((a, b) => b.length - a.length)\r\n .map((selector) => {\r\n return escapeRegExp(selector);\r\n })\r\n .join('|'), 'g');\r\n result = result.replace(selectorMatcher, (selector) => {\r\n const newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, '$1.\\\\:hover');\r\n return `${selector}, ${newSelector}`;\r\n });\r\n }\r\n if (medias.length > 0) {\r\n const mediaMatcher = new RegExp(medias\r\n .filter((media, index) => medias.indexOf(media) === index)\r\n .sort((a, b) => b.length - a.length)\r\n .map((media) => {\r\n return escapeRegExp(media);\r\n })\r\n .join('|'), 'g');\r\n result = result.replace(mediaMatcher, (media) => {\r\n return media.replace(MEDIA_SELECTOR_GLOBAL, '$1-$2');\r\n });\r\n }\r\n cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.set(cssText, result);\r\n return result;\r\n}\r\nfunction createCache() {\r\n const stylesWithHoverClass = new Map();\r\n return {\r\n stylesWithHoverClass,\r\n };\r\n}\r\nfunction buildNode(n, options) {\r\n var _a;\r\n const { doc, hackCss, cache } = options;\r\n switch (n.type) {\r\n case NodeType.Document:\r\n return doc.implementation.createDocument(null, '', null);\r\n case NodeType.DocumentType:\r\n return doc.implementation.createDocumentType(n.name || 'html', n.publicId, n.systemId);\r\n case NodeType.Element: {\r\n const tagName = getTagName(n);\r\n let node;\r\n if (n.isSVG) {\r\n node = doc.createElementNS('http://www.w3.org/2000/svg', tagName);\r\n }\r\n else {\r\n if (n.isCustom &&\r\n ((_a = doc.defaultView) === null || _a === void 0 ? void 0 : _a.customElements) &&\r\n !doc.defaultView.customElements.get(n.tagName))\r\n doc.defaultView.customElements.define(n.tagName, class extends doc.defaultView.HTMLElement {\r\n });\r\n node = doc.createElement(tagName);\r\n }\r\n const specialAttributes = {};\r\n for (const name in n.attributes) {\r\n if (!Object.prototype.hasOwnProperty.call(n.attributes, name)) {\r\n continue;\r\n }\r\n let value = n.attributes[name];\r\n if (tagName === 'option' &&\r\n name === 'selected' &&\r\n value === false) {\r\n continue;\r\n }\r\n if (value === null) {\r\n continue;\r\n }\r\n if (value === true)\r\n value = '';\r\n if (name.startsWith('rr_')) {\r\n specialAttributes[name] = value;\r\n continue;\r\n }\r\n const isTextarea = tagName === 'textarea' && name === 'value';\r\n const isRemoteOrDynamicCss = tagName === 'style' && name === '_cssText';\r\n if (isRemoteOrDynamicCss && hackCss && typeof value === 'string') {\r\n value = adaptCssForReplay(value, cache);\r\n }\r\n if ((isTextarea || isRemoteOrDynamicCss) && typeof value === 'string') {\r\n node.appendChild(doc.createTextNode(value));\r\n n.childNodes = [];\r\n continue;\r\n }\r\n try {\r\n if (n.isSVG && name === 'xlink:href') {\r\n node.setAttributeNS('http://www.w3.org/1999/xlink', name, value.toString());\r\n }\r\n else if (name === 'onload' ||\r\n name === 'onclick' ||\r\n name.substring(0, 7) === 'onmouse') {\r\n node.setAttribute('_' + name, value.toString());\r\n }\r\n else if (tagName === 'meta' &&\r\n n.attributes['http-equiv'] === 'Content-Security-Policy' &&\r\n name === 'content') {\r\n node.setAttribute('csp-content', value.toString());\r\n continue;\r\n }\r\n else if (tagName === 'link' &&\r\n (n.attributes.rel === 'preload' ||\r\n n.attributes.rel === 'modulepreload') &&\r\n n.attributes.as === 'script') {\r\n }\r\n else if (tagName === 'link' &&\r\n n.attributes.rel === 'prefetch' &&\r\n typeof n.attributes.href === 'string' &&\r\n n.attributes.href.endsWith('.js')) {\r\n }\r\n else if (tagName === 'img' &&\r\n n.attributes.srcset &&\r\n n.attributes.rr_dataURL) {\r\n node.setAttribute('rrweb-original-srcset', n.attributes.srcset);\r\n }\r\n else {\r\n node.setAttribute(name, value.toString());\r\n }\r\n }\r\n catch (error) {\r\n }\r\n }\r\n for (const name in specialAttributes) {\r\n const value = specialAttributes[name];\r\n if (tagName === 'canvas' && name === 'rr_dataURL') {\r\n const image = document.createElement('img');\r\n image.onload = () => {\r\n const ctx = node.getContext('2d');\r\n if (ctx) {\r\n ctx.drawImage(image, 0, 0, image.width, image.height);\r\n }\r\n };\r\n image.src = value.toString();\r\n if (node.RRNodeType)\r\n node.rr_dataURL = value.toString();\r\n }\r\n else if (tagName === 'img' && name === 'rr_dataURL') {\r\n const image = node;\r\n if (!image.currentSrc.startsWith('data:')) {\r\n image.setAttribute('rrweb-original-src', n.attributes.src);\r\n image.src = value.toString();\r\n }\r\n }\r\n if (name === 'rr_width') {\r\n node.style.width = value.toString();\r\n }\r\n else if (name === 'rr_height') {\r\n node.style.height = value.toString();\r\n }\r\n else if (name === 'rr_mediaCurrentTime' &&\r\n typeof value === 'number') {\r\n node.currentTime = value;\r\n }\r\n else if (name === 'rr_mediaState') {\r\n switch (value) {\r\n case 'played':\r\n node\r\n .play()\r\n .catch((e) => console.warn('media playback error', e));\r\n break;\r\n case 'paused':\r\n node.pause();\r\n break;\r\n }\r\n }\r\n else if (name === 'rr_mediaPlaybackRate' &&\r\n typeof value === 'number') {\r\n node.playbackRate = value;\r\n }\r\n else if (name === 'rr_mediaMuted' && typeof value === 'boolean') {\r\n node.muted = value;\r\n }\r\n else if (name === 'rr_mediaLoop' && typeof value === 'boolean') {\r\n node.loop = value;\r\n }\r\n else if (name === 'rr_mediaVolume' && typeof value === 'number') {\r\n node.volume = value;\r\n }\r\n }\r\n if (n.isShadowHost) {\r\n if (!node.shadowRoot) {\r\n node.attachShadow({ mode: 'open' });\r\n }\r\n else {\r\n while (node.shadowRoot.firstChild) {\r\n node.shadowRoot.removeChild(node.shadowRoot.firstChild);\r\n }\r\n }\r\n }\r\n return node;\r\n }\r\n case NodeType.Text:\r\n return doc.createTextNode(n.isStyle && hackCss\r\n ? adaptCssForReplay(n.textContent, cache)\r\n : n.textContent);\r\n case NodeType.CDATA:\r\n return doc.createCDATASection(n.textContent);\r\n case NodeType.Comment:\r\n return doc.createComment(n.textContent);\r\n default:\r\n return null;\r\n }\r\n}\r\nfunction buildNodeWithSN(n, options) {\r\n const { doc, mirror, skipChild = false, hackCss = true, afterAppend, cache, } = options;\r\n if (mirror.has(n.id)) {\r\n const nodeInMirror = mirror.getNode(n.id);\r\n const meta = mirror.getMeta(nodeInMirror);\r\n if (isNodeMetaEqual(meta, n))\r\n return mirror.getNode(n.id);\r\n }\r\n let node = buildNode(n, { doc, hackCss, cache });\r\n if (!node) {\r\n return null;\r\n }\r\n if (n.rootId && mirror.getNode(n.rootId) !== doc) {\r\n mirror.replace(n.rootId, doc);\r\n }\r\n if (n.type === NodeType.Document) {\r\n doc.close();\r\n doc.open();\r\n if (n.compatMode === 'BackCompat' &&\r\n n.childNodes &&\r\n n.childNodes[0].type !== NodeType.DocumentType) {\r\n if (n.childNodes[0].type === NodeType.Element &&\r\n 'xmlns' in n.childNodes[0].attributes &&\r\n n.childNodes[0].attributes.xmlns === 'http://www.w3.org/1999/xhtml') {\r\n doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">');\r\n }\r\n else {\r\n doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">');\r\n }\r\n }\r\n node = doc;\r\n }\r\n mirror.add(node, n);\r\n if ((n.type === NodeType.Document || n.type === NodeType.Element) &&\r\n !skipChild) {\r\n for (const childN of n.childNodes) {\r\n const childNode = buildNodeWithSN(childN, {\r\n doc,\r\n mirror,\r\n skipChild: false,\r\n hackCss,\r\n afterAppend,\r\n cache,\r\n });\r\n if (!childNode) {\r\n console.warn('Failed to rebuild', childN);\r\n continue;\r\n }\r\n if (childN.isShadow && isElement(node) && node.shadowRoot) {\r\n node.shadowRoot.appendChild(childNode);\r\n }\r\n else if (n.type === NodeType.Document &&\r\n childN.type == NodeType.Element) {\r\n const htmlElement = childNode;\r\n let body = null;\r\n htmlElement.childNodes.forEach((child) => {\r\n if (child.nodeName === 'BODY')\r\n body = child;\r\n });\r\n if (body) {\r\n htmlElement.removeChild(body);\r\n node.appendChild(childNode);\r\n htmlElement.appendChild(body);\r\n }\r\n else {\r\n node.appendChild(childNode);\r\n }\r\n }\r\n else {\r\n node.appendChild(childNode);\r\n }\r\n if (afterAppend) {\r\n afterAppend(childNode, childN.id);\r\n }\r\n }\r\n }\r\n return node;\r\n}\r\nfunction visit(mirror, onVisit) {\r\n function walk(node) {\r\n onVisit(node);\r\n }\r\n for (const id of mirror.getIds()) {\r\n if (mirror.has(id)) {\r\n walk(mirror.getNode(id));\r\n }\r\n }\r\n}\r\nfunction handleScroll(node, mirror) {\r\n const n = mirror.getMeta(node);\r\n if ((n === null || n === void 0 ? void 0 : n.type) !== NodeType.Element) {\r\n return;\r\n }\r\n const el = node;\r\n for (const name in n.attributes) {\r\n if (!(Object.prototype.hasOwnProperty.call(n.attributes, name) &&\r\n name.startsWith('rr_'))) {\r\n continue;\r\n }\r\n const value = n.attributes[name];\r\n if (name === 'rr_scrollLeft') {\r\n el.scrollLeft = value;\r\n }\r\n if (name === 'rr_scrollTop') {\r\n el.scrollTop = value;\r\n }\r\n }\r\n}\r\nfunction rebuild(n, options) {\r\n const { doc, onVisit, hackCss = true, afterAppend, cache, mirror = new Mirror(), } = options;\r\n const node = buildNodeWithSN(n, {\r\n doc,\r\n mirror,\r\n skipChild: false,\r\n hackCss,\r\n afterAppend,\r\n cache,\r\n });\r\n visit(mirror, (visitedNode) => {\r\n if (onVisit) {\r\n onVisit(visitedNode);\r\n }\r\n handleScroll(visitedNode, mirror);\r\n });\r\n return node;\r\n}\n\nexport { IGNORED_NODE, Mirror, NodeType, adaptCssForReplay, buildNodeWithSN, classMatchesRegex, createCache, createMirror, escapeImportStatement, extractFileExtension, fixSafariColons, genId, getInputType, ignoreAttribute, is2DCanvasBlank, isCSSImportRule, isCSSStyleRule, isElement, isNativeShadowDom, isNodeMetaEqual, isShadowRoot, maskInputValue, needMaskingText, rebuild, serializeNodeWithId, snapshot, stringifyRule, stringifyStylesheet, toLowerCase, transformAttribute };\n","import { classMatchesRegex, IGNORED_NODE, isShadowRoot } from '../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nfunction on(type, fn, target = document) {\r\n const options = { capture: true, passive: true };\r\n target.addEventListener(type, fn, options);\r\n return () => target.removeEventListener(type, fn, options);\r\n}\r\nconst DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +\r\n '\\r\\n' +\r\n 'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\r\n '\\r\\n' +\r\n 'or you can use record.mirror to access the mirror instance during recording.';\r\nlet _mirror = {\r\n map: {},\r\n getId() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return -1;\r\n },\r\n getNode() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return null;\r\n },\r\n removeNodeFromMap() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n },\r\n has() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return false;\r\n },\r\n reset() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n },\r\n};\r\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\r\n _mirror = new Proxy(_mirror, {\r\n get(target, prop, receiver) {\r\n if (prop === 'map') {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n }\r\n return Reflect.get(target, prop, receiver);\r\n },\r\n });\r\n}\r\nfunction throttle(func, wait, options = {}) {\r\n let timeout = null;\r\n let previous = 0;\r\n return function (...args) {\r\n const now = Date.now();\r\n if (!previous && options.leading === false) {\r\n previous = now;\r\n }\r\n const remaining = wait - (now - previous);\r\n const context = this;\r\n if (remaining <= 0 || remaining > wait) {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n timeout = null;\r\n }\r\n previous = now;\r\n func.apply(context, args);\r\n }\r\n else if (!timeout && options.trailing !== false) {\r\n timeout = setTimeout(() => {\r\n previous = options.leading === false ? 0 : Date.now();\r\n timeout = null;\r\n func.apply(context, args);\r\n }, remaining);\r\n }\r\n };\r\n}\r\nfunction hookSetter(target, key, d, isRevoked, win = window) {\r\n const original = win.Object.getOwnPropertyDescriptor(target, key);\r\n win.Object.defineProperty(target, key, isRevoked\r\n ? d\r\n : {\r\n set(value) {\r\n setTimeout(() => {\r\n d.set.call(this, value);\r\n }, 0);\r\n if (original && original.set) {\r\n original.set.call(this, value);\r\n }\r\n },\r\n });\r\n return () => hookSetter(target, key, original || {}, true);\r\n}\r\nfunction patch(source, name, replacement) {\r\n try {\r\n if (!(name in source)) {\r\n return () => {\r\n };\r\n }\r\n const original = source[name];\r\n const wrapped = replacement(original);\r\n if (typeof wrapped === 'function') {\r\n wrapped.prototype = wrapped.prototype || {};\r\n Object.defineProperties(wrapped, {\r\n __rrweb_original__: {\r\n enumerable: false,\r\n value: original,\r\n },\r\n });\r\n }\r\n source[name] = wrapped;\r\n return () => {\r\n source[name] = original;\r\n };\r\n }\r\n catch (_a) {\r\n return () => {\r\n };\r\n }\r\n}\r\nlet nowTimestamp = Date.now;\r\nif (!(/[1-9][0-9]{12}/.test(Date.now().toString()))) {\r\n nowTimestamp = () => new Date().getTime();\r\n}\r\nfunction getWindowScroll(win) {\r\n var _a, _b, _c, _d, _e, _f;\r\n const doc = win.document;\r\n return {\r\n left: doc.scrollingElement\r\n ? doc.scrollingElement.scrollLeft\r\n : win.pageXOffset !== undefined\r\n ? win.pageXOffset\r\n : (doc === null || doc === void 0 ? void 0 : doc.documentElement.scrollLeft) ||\r\n ((_b = (_a = doc === null || doc === void 0 ? void 0 : doc.body) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.scrollLeft) ||\r\n ((_c = doc === null || doc === void 0 ? void 0 : doc.body) === null || _c === void 0 ? void 0 : _c.scrollLeft) ||\r\n 0,\r\n top: doc.scrollingElement\r\n ? doc.scrollingElement.scrollTop\r\n : win.pageYOffset !== undefined\r\n ? win.pageYOffset\r\n : (doc === null || doc === void 0 ? void 0 : doc.documentElement.scrollTop) ||\r\n ((_e = (_d = doc === null || doc === void 0 ? void 0 : doc.body) === null || _d === void 0 ? void 0 : _d.parentElement) === null || _e === void 0 ? void 0 : _e.scrollTop) ||\r\n ((_f = doc === null || doc === void 0 ? void 0 : doc.body) === null || _f === void 0 ? void 0 : _f.scrollTop) ||\r\n 0,\r\n };\r\n}\r\nfunction getWindowHeight() {\r\n return (window.innerHeight ||\r\n (document.documentElement && document.documentElement.clientHeight) ||\r\n (document.body && document.body.clientHeight));\r\n}\r\nfunction getWindowWidth() {\r\n return (window.innerWidth ||\r\n (document.documentElement && document.documentElement.clientWidth) ||\r\n (document.body && document.body.clientWidth));\r\n}\r\nfunction closestElementOfNode(node) {\r\n if (!node) {\r\n return null;\r\n }\r\n const el = node.nodeType === node.ELEMENT_NODE\r\n ? node\r\n : node.parentElement;\r\n return el;\r\n}\r\nfunction isBlocked(node, blockClass, blockSelector, checkAncestors) {\r\n if (!node) {\r\n return false;\r\n }\r\n const el = closestElementOfNode(node);\r\n if (!el) {\r\n return false;\r\n }\r\n try {\r\n if (typeof blockClass === 'string') {\r\n if (el.classList.contains(blockClass))\r\n return true;\r\n if (checkAncestors && el.closest('.' + blockClass) !== null)\r\n return true;\r\n }\r\n else {\r\n if (classMatchesRegex(el, blockClass, checkAncestors))\r\n return true;\r\n }\r\n }\r\n catch (e) {\r\n }\r\n if (blockSelector) {\r\n if (el.matches(blockSelector))\r\n return true;\r\n if (checkAncestors && el.closest(blockSelector) !== null)\r\n return true;\r\n }\r\n return false;\r\n}\r\nfunction isSerialized(n, mirror) {\r\n return mirror.getId(n) !== -1;\r\n}\r\nfunction isIgnored(n, mirror) {\r\n return mirror.getId(n) === IGNORED_NODE;\r\n}\r\nfunction isAncestorRemoved(target, mirror) {\r\n if (isShadowRoot(target)) {\r\n return false;\r\n }\r\n const id = mirror.getId(target);\r\n if (!mirror.has(id)) {\r\n return true;\r\n }\r\n if (target.parentNode &&\r\n target.parentNode.nodeType === target.DOCUMENT_NODE) {\r\n return false;\r\n }\r\n if (!target.parentNode) {\r\n return true;\r\n }\r\n return isAncestorRemoved(target.parentNode, mirror);\r\n}\r\nfunction legacy_isTouchEvent(event) {\r\n return Boolean(event.changedTouches);\r\n}\r\nfunction polyfill(win = window) {\r\n if ('NodeList' in win && !win.NodeList.prototype.forEach) {\r\n win.NodeList.prototype.forEach = Array.prototype\r\n .forEach;\r\n }\r\n if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\r\n win.DOMTokenList.prototype.forEach = Array.prototype\r\n .forEach;\r\n }\r\n if (!Node.prototype.contains) {\r\n Node.prototype.contains = (...args) => {\r\n let node = args[0];\r\n if (!(0 in args)) {\r\n throw new TypeError('1 argument is required');\r\n }\r\n do {\r\n if (this === node) {\r\n return true;\r\n }\r\n } while ((node = node && node.parentNode));\r\n return false;\r\n };\r\n }\r\n}\r\nfunction queueToResolveTrees(queue) {\r\n const queueNodeMap = {};\r\n const putIntoMap = (m, parent) => {\r\n const nodeInTree = {\r\n value: m,\r\n parent,\r\n children: [],\r\n };\r\n queueNodeMap[m.node.id] = nodeInTree;\r\n return nodeInTree;\r\n };\r\n const queueNodeTrees = [];\r\n for (const mutation of queue) {\r\n const { nextId, parentId } = mutation;\r\n if (nextId && nextId in queueNodeMap) {\r\n const nextInTree = queueNodeMap[nextId];\r\n if (nextInTree.parent) {\r\n const idx = nextInTree.parent.children.indexOf(nextInTree);\r\n nextInTree.parent.children.splice(idx, 0, putIntoMap(mutation, nextInTree.parent));\r\n }\r\n else {\r\n const idx = queueNodeTrees.indexOf(nextInTree);\r\n queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));\r\n }\r\n continue;\r\n }\r\n if (parentId in queueNodeMap) {\r\n const parentInTree = queueNodeMap[parentId];\r\n parentInTree.children.push(putIntoMap(mutation, parentInTree));\r\n continue;\r\n }\r\n queueNodeTrees.push(putIntoMap(mutation, null));\r\n }\r\n return queueNodeTrees;\r\n}\r\nfunction iterateResolveTree(tree, cb) {\r\n cb(tree.value);\r\n for (let i = tree.children.length - 1; i >= 0; i--) {\r\n iterateResolveTree(tree.children[i], cb);\r\n }\r\n}\r\nfunction isSerializedIframe(n, mirror) {\r\n return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));\r\n}\r\nfunction isSerializedStylesheet(n, mirror) {\r\n return Boolean(n.nodeName === 'LINK' &&\r\n n.nodeType === n.ELEMENT_NODE &&\r\n n.getAttribute &&\r\n n.getAttribute('rel') === 'stylesheet' &&\r\n mirror.getMeta(n));\r\n}\r\nfunction getBaseDimension(node, rootIframe) {\r\n var _a, _b;\r\n const frameElement = (_b = (_a = node.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView) === null || _b === void 0 ? void 0 : _b.frameElement;\r\n if (!frameElement || frameElement === rootIframe) {\r\n return {\r\n x: 0,\r\n y: 0,\r\n relativeScale: 1,\r\n absoluteScale: 1,\r\n };\r\n }\r\n const frameDimension = frameElement.getBoundingClientRect();\r\n const frameBaseDimension = getBaseDimension(frameElement, rootIframe);\r\n const relativeScale = frameDimension.height / frameElement.clientHeight;\r\n return {\r\n x: frameDimension.x * frameBaseDimension.relativeScale +\r\n frameBaseDimension.x,\r\n y: frameDimension.y * frameBaseDimension.relativeScale +\r\n frameBaseDimension.y,\r\n relativeScale,\r\n absoluteScale: frameBaseDimension.absoluteScale * relativeScale,\r\n };\r\n}\r\nfunction hasShadowRoot(n) {\r\n return Boolean(n === null || n === void 0 ? void 0 : n.shadowRoot);\r\n}\r\nfunction getNestedRule(rules, position) {\r\n const rule = rules[position[0]];\r\n if (position.length === 1) {\r\n return rule;\r\n }\r\n else {\r\n return getNestedRule(rule.cssRules[position[1]].cssRules, position.slice(2));\r\n }\r\n}\r\nfunction getPositionsAndIndex(nestedIndex) {\r\n const positions = [...nestedIndex];\r\n const index = positions.pop();\r\n return { positions, index };\r\n}\r\nfunction uniqueTextMutations(mutations) {\r\n const idSet = new Set();\r\n const uniqueMutations = [];\r\n for (let i = mutations.length; i--;) {\r\n const mutation = mutations[i];\r\n if (!idSet.has(mutation.id)) {\r\n uniqueMutations.push(mutation);\r\n idSet.add(mutation.id);\r\n }\r\n }\r\n return uniqueMutations;\r\n}\r\nclass StyleSheetMirror {\r\n constructor() {\r\n this.id = 1;\r\n this.styleIDMap = new WeakMap();\r\n this.idStyleMap = new Map();\r\n }\r\n getId(stylesheet) {\r\n var _a;\r\n return (_a = this.styleIDMap.get(stylesheet)) !== null && _a !== void 0 ? _a : -1;\r\n }\r\n has(stylesheet) {\r\n return this.styleIDMap.has(stylesheet);\r\n }\r\n add(stylesheet, id) {\r\n if (this.has(stylesheet))\r\n return this.getId(stylesheet);\r\n let newId;\r\n if (id === undefined) {\r\n newId = this.id++;\r\n }\r\n else\r\n newId = id;\r\n this.styleIDMap.set(stylesheet, newId);\r\n this.idStyleMap.set(newId, stylesheet);\r\n return newId;\r\n }\r\n getStyle(id) {\r\n return this.idStyleMap.get(id) || null;\r\n }\r\n reset() {\r\n this.styleIDMap = new WeakMap();\r\n this.idStyleMap = new Map();\r\n this.id = 1;\r\n }\r\n generateId() {\r\n return this.id++;\r\n }\r\n}\r\nfunction getShadowHost(n) {\r\n var _a, _b;\r\n let shadowHost = null;\r\n if (((_b = (_a = n.getRootNode) === null || _a === void 0 ? void 0 : _a.call(n)) === null || _b === void 0 ? void 0 : _b.nodeType) === Node.DOCUMENT_FRAGMENT_NODE &&\r\n n.getRootNode().host)\r\n shadowHost = n.getRootNode().host;\r\n return shadowHost;\r\n}\r\nfunction getRootShadowHost(n) {\r\n let rootShadowHost = n;\r\n let shadowHost;\r\n while ((shadowHost = getShadowHost(rootShadowHost)))\r\n rootShadowHost = shadowHost;\r\n return rootShadowHost;\r\n}\r\nfunction shadowHostInDom(n) {\r\n const doc = n.ownerDocument;\r\n if (!doc)\r\n return false;\r\n const shadowHost = getRootShadowHost(n);\r\n return doc.contains(shadowHost);\r\n}\r\nfunction inDom(n) {\r\n const doc = n.ownerDocument;\r\n if (!doc)\r\n return false;\r\n return doc.contains(n) || shadowHostInDom(n);\r\n}\n\nexport { StyleSheetMirror, _mirror, closestElementOfNode, getBaseDimension, getNestedRule, getPositionsAndIndex, getRootShadowHost, getShadowHost, getWindowHeight, getWindowScroll, getWindowWidth, hasShadowRoot, hookSetter, inDom, isAncestorRemoved, isBlocked, isIgnored, isSerialized, isSerializedIframe, isSerializedStylesheet, iterateResolveTree, legacy_isTouchEvent, nowTimestamp, on, patch, polyfill, queueToResolveTrees, shadowHostInDom, throttle, uniqueTextMutations };\n","var EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n})(CanvasContext || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n ReplayerEvents2[\"Start\"] = \"start\";\n ReplayerEvents2[\"Pause\"] = \"pause\";\n ReplayerEvents2[\"Resume\"] = \"resume\";\n ReplayerEvents2[\"Resize\"] = \"resize\";\n ReplayerEvents2[\"Finish\"] = \"finish\";\n ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n ReplayerEvents2[\"Flush\"] = \"flush\";\n ReplayerEvents2[\"StateChange\"] = \"state-change\";\n ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n ReplayerEvents2[\"Destroy\"] = \"destroy\";\n return ReplayerEvents2;\n})(ReplayerEvents || {});\n\nexport { CanvasContext, EventType, IncrementalSource, MouseInteractions, PointerTypes, ReplayerEvents };\n","import { isShadowRoot, isNativeShadowDom, getInputType, maskInputValue, ignoreAttribute, transformAttribute, toLowerCase, needMaskingText, IGNORED_NODE, serializeNodeWithId } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { isIgnored, isBlocked, isSerialized, isAncestorRemoved, closestElementOfNode, hasShadowRoot, inDom, getShadowHost, isSerializedIframe, isSerializedStylesheet } from '../utils.js';\n\nfunction isNodeInLinkedList(n) {\r\n return '__ln' in n;\r\n}\r\nclass DoubleLinkedList {\r\n constructor() {\r\n this.length = 0;\r\n this.head = null;\r\n this.tail = null;\r\n }\r\n get(position) {\r\n if (position >= this.length) {\r\n throw new Error('Position outside of list range');\r\n }\r\n let current = this.head;\r\n for (let index = 0; index < position; index++) {\r\n current = (current === null || current === void 0 ? void 0 : current.next) || null;\r\n }\r\n return current;\r\n }\r\n addNode(n) {\r\n const node = {\r\n value: n,\r\n previous: null,\r\n next: null,\r\n };\r\n n.__ln = node;\r\n if (n.previousSibling && isNodeInLinkedList(n.previousSibling)) {\r\n const current = n.previousSibling.__ln.next;\r\n node.next = current;\r\n node.previous = n.previousSibling.__ln;\r\n n.previousSibling.__ln.next = node;\r\n if (current) {\r\n current.previous = node;\r\n }\r\n }\r\n else if (n.nextSibling &&\r\n isNodeInLinkedList(n.nextSibling) &&\r\n n.nextSibling.__ln.previous) {\r\n const current = n.nextSibling.__ln.previous;\r\n node.previous = current;\r\n node.next = n.nextSibling.__ln;\r\n n.nextSibling.__ln.previous = node;\r\n if (current) {\r\n current.next = node;\r\n }\r\n }\r\n else {\r\n if (this.head) {\r\n this.head.previous = node;\r\n }\r\n node.next = this.head;\r\n this.head = node;\r\n }\r\n if (node.next === null) {\r\n this.tail = node;\r\n }\r\n this.length++;\r\n }\r\n removeNode(n) {\r\n const current = n.__ln;\r\n if (!this.head) {\r\n return;\r\n }\r\n if (!current.previous) {\r\n this.head = current.next;\r\n if (this.head) {\r\n this.head.previous = null;\r\n }\r\n else {\r\n this.tail = null;\r\n }\r\n }\r\n else {\r\n current.previous.next = current.next;\r\n if (current.next) {\r\n current.next.previous = current.previous;\r\n }\r\n else {\r\n this.tail = current.previous;\r\n }\r\n }\r\n if (n.__ln) {\r\n delete n.__ln;\r\n }\r\n this.length--;\r\n }\r\n}\r\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\r\nclass MutationBuffer {\r\n constructor() {\r\n this.frozen = false;\r\n this.locked = false;\r\n this.texts = [];\r\n this.attributes = [];\r\n this.attributeMap = new WeakMap();\r\n this.removes = [];\r\n this.mapRemoves = [];\r\n this.movedMap = {};\r\n this.addedSet = new Set();\r\n this.movedSet = new Set();\r\n this.droppedSet = new Set();\r\n this.processMutations = (mutations) => {\r\n mutations.forEach(this.processMutation);\r\n this.emit();\r\n };\r\n this.emit = () => {\r\n if (this.frozen || this.locked) {\r\n return;\r\n }\r\n const adds = [];\r\n const addedIds = new Set();\r\n const addList = new DoubleLinkedList();\r\n const getNextId = (n) => {\r\n let ns = n;\r\n let nextId = IGNORED_NODE;\r\n while (nextId === IGNORED_NODE) {\r\n ns = ns && ns.nextSibling;\r\n nextId = ns && this.mirror.getId(ns);\r\n }\r\n return nextId;\r\n };\r\n const pushAdd = (n) => {\r\n if (!n.parentNode ||\r\n !inDom(n) ||\r\n n.parentNode.tagName === 'TEXTAREA') {\r\n return;\r\n }\r\n const parentId = isShadowRoot(n.parentNode)\r\n ? this.mirror.getId(getShadowHost(n))\r\n : this.mirror.getId(n.parentNode);\r\n const nextId = getNextId(n);\r\n if (parentId === -1 || nextId === -1) {\r\n return addList.addNode(n);\r\n }\r\n const sn = serializeNodeWithId(n, {\r\n doc: this.doc,\r\n mirror: this.mirror,\r\n blockClass: this.blockClass,\r\n blockSelector: this.blockSelector,\r\n maskTextClass: this.maskTextClass,\r\n maskTextSelector: this.maskTextSelector,\r\n skipChild: true,\r\n newlyAddedElement: true,\r\n inlineStylesheet: this.inlineStylesheet,\r\n maskInputOptions: this.maskInputOptions,\r\n maskTextFn: this.maskTextFn,\r\n maskInputFn: this.maskInputFn,\r\n slimDOMOptions: this.slimDOMOptions,\r\n dataURLOptions: this.dataURLOptions,\r\n recordCanvas: this.recordCanvas,\r\n inlineImages: this.inlineImages,\r\n onSerialize: (currentN) => {\r\n if (isSerializedIframe(currentN, this.mirror)) {\r\n this.iframeManager.addIframe(currentN);\r\n }\r\n if (isSerializedStylesheet(currentN, this.mirror)) {\r\n this.stylesheetManager.trackLinkElement(currentN);\r\n }\r\n if (hasShadowRoot(n)) {\r\n this.shadowDomManager.addShadowRoot(n.shadowRoot, this.doc);\r\n }\r\n },\r\n onIframeLoad: (iframe, childSn) => {\r\n this.iframeManager.attachIframe(iframe, childSn);\r\n this.shadowDomManager.observeAttachShadow(iframe);\r\n },\r\n onStylesheetLoad: (link, childSn) => {\r\n this.stylesheetManager.attachLinkElement(link, childSn);\r\n },\r\n });\r\n if (sn) {\r\n adds.push({\r\n parentId,\r\n nextId,\r\n node: sn,\r\n });\r\n addedIds.add(sn.id);\r\n }\r\n };\r\n while (this.mapRemoves.length) {\r\n this.mirror.removeNodeFromMap(this.mapRemoves.shift());\r\n }\r\n for (const n of this.movedSet) {\r\n if (isParentRemoved(this.removes, n, this.mirror) &&\r\n !this.movedSet.has(n.parentNode)) {\r\n continue;\r\n }\r\n pushAdd(n);\r\n }\r\n for (const n of this.addedSet) {\r\n if (!isAncestorInSet(this.droppedSet, n) &&\r\n !isParentRemoved(this.removes, n, this.mirror)) {\r\n pushAdd(n);\r\n }\r\n else if (isAncestorInSet(this.movedSet, n)) {\r\n pushAdd(n);\r\n }\r\n else {\r\n this.droppedSet.add(n);\r\n }\r\n }\r\n let candidate = null;\r\n while (addList.length) {\r\n let node = null;\r\n if (candidate) {\r\n const parentId = this.mirror.getId(candidate.value.parentNode);\r\n const nextId = getNextId(candidate.value);\r\n if (parentId !== -1 && nextId !== -1) {\r\n node = candidate;\r\n }\r\n }\r\n if (!node) {\r\n let tailNode = addList.tail;\r\n while (tailNode) {\r\n const _node = tailNode;\r\n tailNode = tailNode.previous;\r\n if (_node) {\r\n const parentId = this.mirror.getId(_node.value.parentNode);\r\n const nextId = getNextId(_node.value);\r\n if (nextId === -1)\r\n continue;\r\n else if (parentId !== -1) {\r\n node = _node;\r\n break;\r\n }\r\n else {\r\n const unhandledNode = _node.value;\r\n if (unhandledNode.parentNode &&\r\n unhandledNode.parentNode.nodeType ===\r\n Node.DOCUMENT_FRAGMENT_NODE) {\r\n const shadowHost = unhandledNode.parentNode\r\n .host;\r\n const parentId = this.mirror.getId(shadowHost);\r\n if (parentId !== -1) {\r\n node = _node;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (!node) {\r\n while (addList.head) {\r\n addList.removeNode(addList.head.value);\r\n }\r\n break;\r\n }\r\n candidate = node.previous;\r\n addList.removeNode(node.value);\r\n pushAdd(node.value);\r\n }\r\n const payload = {\r\n texts: this.texts\r\n .map((text) => {\r\n const n = text.node;\r\n if (n.parentNode &&\r\n n.parentNode.tagName === 'TEXTAREA') {\r\n this.genTextAreaValueMutation(n.parentNode);\r\n }\r\n return {\r\n id: this.mirror.getId(n),\r\n value: text.value,\r\n };\r\n })\r\n .filter((text) => !addedIds.has(text.id))\r\n .filter((text) => this.mirror.has(text.id)),\r\n attributes: this.attributes\r\n .map((attribute) => {\r\n const { attributes } = attribute;\r\n if (typeof attributes.style === 'string') {\r\n const diffAsStr = JSON.stringify(attribute.styleDiff);\r\n const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\r\n if (diffAsStr.length < attributes.style.length) {\r\n if ((diffAsStr + unchangedAsStr).split('var(').length ===\r\n attributes.style.split('var(').length) {\r\n attributes.style = attribute.styleDiff;\r\n }\r\n }\r\n }\r\n return {\r\n id: this.mirror.getId(attribute.node),\r\n attributes: attributes,\r\n };\r\n })\r\n .filter((attribute) => !addedIds.has(attribute.id))\r\n .filter((attribute) => this.mirror.has(attribute.id)),\r\n removes: this.removes,\r\n adds,\r\n };\r\n if (!payload.texts.length &&\r\n !payload.attributes.length &&\r\n !payload.removes.length &&\r\n !payload.adds.length) {\r\n return;\r\n }\r\n this.texts = [];\r\n this.attributes = [];\r\n this.attributeMap = new WeakMap();\r\n this.removes = [];\r\n this.addedSet = new Set();\r\n this.movedSet = new Set();\r\n this.droppedSet = new Set();\r\n this.movedMap = {};\r\n this.mutationCb(payload);\r\n };\r\n this.genTextAreaValueMutation = (textarea) => {\r\n let item = this.attributeMap.get(textarea);\r\n if (!item) {\r\n item = {\r\n node: textarea,\r\n attributes: {},\r\n styleDiff: {},\r\n _unchangedStyles: {},\r\n };\r\n this.attributes.push(item);\r\n this.attributeMap.set(textarea, item);\r\n }\r\n item.attributes.value = Array.from(textarea.childNodes, (cn) => cn.textContent || '').join('');\r\n };\r\n this.processMutation = (m) => {\r\n if (isIgnored(m.target, this.mirror)) {\r\n return;\r\n }\r\n switch (m.type) {\r\n case 'characterData': {\r\n const value = m.target.textContent;\r\n if (!isBlocked(m.target, this.blockClass, this.blockSelector, false) &&\r\n value !== m.oldValue) {\r\n this.texts.push({\r\n value: needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, true) && value\r\n ? this.maskTextFn\r\n ? this.maskTextFn(value, closestElementOfNode(m.target))\r\n : value.replace(/[\\S]/g, '*')\r\n : value,\r\n node: m.target,\r\n });\r\n }\r\n break;\r\n }\r\n case 'attributes': {\r\n const target = m.target;\r\n let attributeName = m.attributeName;\r\n let value = m.target.getAttribute(attributeName);\r\n if (attributeName === 'value') {\r\n const type = getInputType(target);\r\n value = maskInputValue({\r\n element: target,\r\n maskInputOptions: this.maskInputOptions,\r\n tagName: target.tagName,\r\n type,\r\n value,\r\n maskInputFn: this.maskInputFn,\r\n });\r\n }\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, false) ||\r\n value === m.oldValue) {\r\n return;\r\n }\r\n let item = this.attributeMap.get(m.target);\r\n if (target.tagName === 'IFRAME' &&\r\n attributeName === 'src' &&\r\n !this.keepIframeSrcFn(value)) {\r\n if (!target.contentDocument) {\r\n attributeName = 'rr_src';\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n if (!item) {\r\n item = {\r\n node: m.target,\r\n attributes: {},\r\n styleDiff: {},\r\n _unchangedStyles: {},\r\n };\r\n this.attributes.push(item);\r\n this.attributeMap.set(m.target, item);\r\n }\r\n if (attributeName === 'type' &&\r\n target.tagName === 'INPUT' &&\r\n (m.oldValue || '').toLowerCase() === 'password') {\r\n target.setAttribute('data-rr-is-password', 'true');\r\n }\r\n if (!ignoreAttribute(target.tagName, attributeName)) {\r\n item.attributes[attributeName] = transformAttribute(this.doc, toLowerCase(target.tagName), toLowerCase(attributeName), value);\r\n if (attributeName === 'style') {\r\n if (!this.unattachedDoc) {\r\n try {\r\n this.unattachedDoc =\r\n document.implementation.createHTMLDocument();\r\n }\r\n catch (e) {\r\n this.unattachedDoc = this.doc;\r\n }\r\n }\r\n const old = this.unattachedDoc.createElement('span');\r\n if (m.oldValue) {\r\n old.setAttribute('style', m.oldValue);\r\n }\r\n for (const pname of Array.from(target.style)) {\r\n const newValue = target.style.getPropertyValue(pname);\r\n const newPriority = target.style.getPropertyPriority(pname);\r\n if (newValue !== old.style.getPropertyValue(pname) ||\r\n newPriority !== old.style.getPropertyPriority(pname)) {\r\n if (newPriority === '') {\r\n item.styleDiff[pname] = newValue;\r\n }\r\n else {\r\n item.styleDiff[pname] = [newValue, newPriority];\r\n }\r\n }\r\n else {\r\n item._unchangedStyles[pname] = [newValue, newPriority];\r\n }\r\n }\r\n for (const pname of Array.from(old.style)) {\r\n if (target.style.getPropertyValue(pname) === '') {\r\n item.styleDiff[pname] = false;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case 'childList': {\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, true))\r\n return;\r\n if (m.target.tagName === 'TEXTAREA') {\r\n this.genTextAreaValueMutation(m.target);\r\n return;\r\n }\r\n m.addedNodes.forEach((n) => this.genAdds(n, m.target));\r\n m.removedNodes.forEach((n) => {\r\n const nodeId = this.mirror.getId(n);\r\n const parentId = isShadowRoot(m.target)\r\n ? this.mirror.getId(m.target.host)\r\n : this.mirror.getId(m.target);\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, false) ||\r\n isIgnored(n, this.mirror) ||\r\n !isSerialized(n, this.mirror)) {\r\n return;\r\n }\r\n if (this.addedSet.has(n)) {\r\n deepDelete(this.addedSet, n);\r\n this.droppedSet.add(n);\r\n }\r\n else if (this.addedSet.has(m.target) && nodeId === -1) ;\r\n else if (isAncestorRemoved(m.target, this.mirror)) ;\r\n else if (this.movedSet.has(n) &&\r\n this.movedMap[moveKey(nodeId, parentId)]) {\r\n deepDelete(this.movedSet, n);\r\n }\r\n else {\r\n this.removes.push({\r\n parentId,\r\n id: nodeId,\r\n isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target)\r\n ? true\r\n : undefined,\r\n });\r\n }\r\n this.mapRemoves.push(n);\r\n });\r\n break;\r\n }\r\n }\r\n };\r\n this.genAdds = (n, target) => {\r\n if (this.processedNodeManager.inOtherBuffer(n, this))\r\n return;\r\n if (this.addedSet.has(n) || this.movedSet.has(n))\r\n return;\r\n if (this.mirror.hasNode(n)) {\r\n if (isIgnored(n, this.mirror)) {\r\n return;\r\n }\r\n this.movedSet.add(n);\r\n let targetId = null;\r\n if (target && this.mirror.hasNode(target)) {\r\n targetId = this.mirror.getId(target);\r\n }\r\n if (targetId && targetId !== -1) {\r\n this.movedMap[moveKey(this.mirror.getId(n), targetId)] = true;\r\n }\r\n }\r\n else {\r\n this.addedSet.add(n);\r\n this.droppedSet.delete(n);\r\n }\r\n if (!isBlocked(n, this.blockClass, this.blockSelector, false)) {\r\n n.childNodes.forEach((childN) => this.genAdds(childN));\r\n if (hasShadowRoot(n)) {\r\n n.shadowRoot.childNodes.forEach((childN) => {\r\n this.processedNodeManager.add(childN, this);\r\n this.genAdds(childN, n);\r\n });\r\n }\r\n }\r\n };\r\n }\r\n init(options) {\r\n [\r\n 'mutationCb',\r\n 'blockClass',\r\n 'blockSelector',\r\n 'maskTextClass',\r\n 'maskTextSelector',\r\n 'inlineStylesheet',\r\n 'maskInputOptions',\r\n 'maskTextFn',\r\n 'maskInputFn',\r\n 'keepIframeSrcFn',\r\n 'recordCanvas',\r\n 'inlineImages',\r\n 'slimDOMOptions',\r\n 'dataURLOptions',\r\n 'doc',\r\n 'mirror',\r\n 'iframeManager',\r\n 'stylesheetManager',\r\n 'shadowDomManager',\r\n 'canvasManager',\r\n 'processedNodeManager',\r\n ].forEach((key) => {\r\n this[key] = options[key];\r\n });\r\n }\r\n freeze() {\r\n this.frozen = true;\r\n this.canvasManager.freeze();\r\n }\r\n unfreeze() {\r\n this.frozen = false;\r\n this.canvasManager.unfreeze();\r\n this.emit();\r\n }\r\n isFrozen() {\r\n return this.frozen;\r\n }\r\n lock() {\r\n this.locked = true;\r\n this.canvasManager.lock();\r\n }\r\n unlock() {\r\n this.locked = false;\r\n this.canvasManager.unlock();\r\n this.emit();\r\n }\r\n reset() {\r\n this.shadowDomManager.reset();\r\n this.canvasManager.reset();\r\n }\r\n}\r\nfunction deepDelete(addsSet, n) {\r\n addsSet.delete(n);\r\n n.childNodes.forEach((childN) => deepDelete(addsSet, childN));\r\n}\r\nfunction isParentRemoved(removes, n, mirror) {\r\n if (removes.length === 0)\r\n return false;\r\n return _isParentRemoved(removes, n, mirror);\r\n}\r\nfunction _isParentRemoved(removes, n, mirror) {\r\n const { parentNode } = n;\r\n if (!parentNode) {\r\n return false;\r\n }\r\n const parentId = mirror.getId(parentNode);\r\n if (removes.some((r) => r.id === parentId)) {\r\n return true;\r\n }\r\n return _isParentRemoved(removes, parentNode, mirror);\r\n}\r\nfunction isAncestorInSet(set, n) {\r\n if (set.size === 0)\r\n return false;\r\n return _isAncestorInSet(set, n);\r\n}\r\nfunction _isAncestorInSet(set, n) {\r\n const { parentNode } = n;\r\n if (!parentNode) {\r\n return false;\r\n }\r\n if (set.has(parentNode)) {\r\n return true;\r\n }\r\n return _isAncestorInSet(set, parentNode);\r\n}\n\nexport { MutationBuffer as default };\n","let errorHandler;\r\nfunction registerErrorHandler(handler) {\r\n errorHandler = handler;\r\n}\r\nfunction unregisterErrorHandler() {\r\n errorHandler = undefined;\r\n}\r\nconst callbackWrapper = (cb) => {\r\n if (!errorHandler) {\r\n return cb;\r\n }\r\n const rrwebWrapped = ((...rest) => {\r\n try {\r\n return cb(...rest);\r\n }\r\n catch (error) {\r\n if (errorHandler && errorHandler(error) === true) {\r\n return;\r\n }\r\n throw error;\r\n }\r\n });\r\n return rrwebWrapped;\r\n};\n\nexport { callbackWrapper, registerErrorHandler, unregisterErrorHandler };\n","import { toLowerCase, getInputType, maskInputValue } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { on, throttle, isBlocked, getWindowScroll, getWindowHeight, getWindowWidth, hookSetter, patch, legacy_isTouchEvent, nowTimestamp } from '../utils.js';\nimport { MouseInteractions, IncrementalSource, PointerTypes } from '../../../types/dist/types.js';\nimport MutationBuffer from './mutation.js';\nimport { callbackWrapper } from './error-handler.js';\n\nconst mutationBuffers = [];\r\nfunction getEventTarget(event) {\r\n try {\r\n if ('composedPath' in event) {\r\n const path = event.composedPath();\r\n if (path.length) {\r\n return path[0];\r\n }\r\n }\r\n else if ('path' in event && event.path.length) {\r\n return event.path[0];\r\n }\r\n }\r\n catch (_a) {\r\n }\r\n return event && event.target;\r\n}\r\nfunction initMutationObserver(options, rootEl) {\r\n var _a, _b;\r\n const mutationBuffer = new MutationBuffer();\r\n mutationBuffers.push(mutationBuffer);\r\n mutationBuffer.init(options);\r\n let mutationObserverCtor = window.MutationObserver ||\r\n window.__rrMutationObserver;\r\n const angularZoneSymbol = (_b = (_a = window === null || window === void 0 ? void 0 : window.Zone) === null || _a === void 0 ? void 0 : _a.__symbol__) === null || _b === void 0 ? void 0 : _b.call(_a, 'MutationObserver');\r\n if (angularZoneSymbol &&\r\n window[angularZoneSymbol]) {\r\n mutationObserverCtor = window[angularZoneSymbol];\r\n }\r\n const observer = new mutationObserverCtor(callbackWrapper(mutationBuffer.processMutations.bind(mutationBuffer)));\r\n observer.observe(rootEl, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n characterData: true,\r\n characterDataOldValue: true,\r\n childList: true,\r\n subtree: true,\r\n });\r\n return observer;\r\n}\r\nfunction initMoveObserver({ mousemoveCb, sampling, doc, mirror, }) {\r\n if (sampling.mousemove === false) {\r\n return () => {\r\n };\r\n }\r\n const threshold = typeof sampling.mousemove === 'number' ? sampling.mousemove : 50;\r\n const callbackThreshold = typeof sampling.mousemoveCallback === 'number'\r\n ? sampling.mousemoveCallback\r\n : 500;\r\n let positions = [];\r\n let timeBaseline;\r\n const wrappedCb = throttle(callbackWrapper((source) => {\r\n const totalOffset = Date.now() - timeBaseline;\r\n mousemoveCb(positions.map((p) => {\r\n p.timeOffset -= totalOffset;\r\n return p;\r\n }), source);\r\n positions = [];\r\n timeBaseline = null;\r\n }), callbackThreshold);\r\n const updatePosition = callbackWrapper(throttle(callbackWrapper((evt) => {\r\n const target = getEventTarget(evt);\r\n const { clientX, clientY } = legacy_isTouchEvent(evt)\r\n ? evt.changedTouches[0]\r\n : evt;\r\n if (!timeBaseline) {\r\n timeBaseline = nowTimestamp();\r\n }\r\n positions.push({\r\n x: clientX,\r\n y: clientY,\r\n id: mirror.getId(target),\r\n timeOffset: nowTimestamp() - timeBaseline,\r\n });\r\n wrappedCb(typeof DragEvent !== 'undefined' && evt instanceof DragEvent\r\n ? IncrementalSource.Drag\r\n : evt instanceof MouseEvent\r\n ? IncrementalSource.MouseMove\r\n : IncrementalSource.TouchMove);\r\n }), threshold, {\r\n trailing: false,\r\n }));\r\n const handlers = [\r\n on('mousemove', updatePosition, doc),\r\n on('touchmove', updatePosition, doc),\r\n on('drag', updatePosition, doc),\r\n ];\r\n return callbackWrapper(() => {\r\n handlers.forEach((h) => h());\r\n });\r\n}\r\nfunction initMouseInteractionObserver({ mouseInteractionCb, doc, mirror, blockClass, blockSelector, sampling, }) {\r\n if (sampling.mouseInteraction === false) {\r\n return () => {\r\n };\r\n }\r\n const disableMap = sampling.mouseInteraction === true ||\r\n sampling.mouseInteraction === undefined\r\n ? {}\r\n : sampling.mouseInteraction;\r\n const handlers = [];\r\n let currentPointerType = null;\r\n const getHandler = (eventKey) => {\r\n return (event) => {\r\n const target = getEventTarget(event);\r\n if (isBlocked(target, blockClass, blockSelector, true)) {\r\n return;\r\n }\r\n let pointerType = null;\r\n let thisEventKey = eventKey;\r\n if ('pointerType' in event) {\r\n switch (event.pointerType) {\r\n case 'mouse':\r\n pointerType = PointerTypes.Mouse;\r\n break;\r\n case 'touch':\r\n pointerType = PointerTypes.Touch;\r\n break;\r\n case 'pen':\r\n pointerType = PointerTypes.Pen;\r\n break;\r\n }\r\n if (pointerType === PointerTypes.Touch) {\r\n if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\r\n thisEventKey = 'TouchStart';\r\n }\r\n else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\r\n thisEventKey = 'TouchEnd';\r\n }\r\n }\r\n else if (pointerType === PointerTypes.Pen) ;\r\n }\r\n else if (legacy_isTouchEvent(event)) {\r\n pointerType = PointerTypes.Touch;\r\n }\r\n if (pointerType !== null) {\r\n currentPointerType = pointerType;\r\n if ((thisEventKey.startsWith('Touch') &&\r\n pointerType === PointerTypes.Touch) ||\r\n (thisEventKey.startsWith('Mouse') &&\r\n pointerType === PointerTypes.Mouse)) {\r\n pointerType = null;\r\n }\r\n }\r\n else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\r\n pointerType = currentPointerType;\r\n currentPointerType = null;\r\n }\r\n const e = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\r\n if (!e) {\r\n return;\r\n }\r\n const id = mirror.getId(target);\r\n const { clientX, clientY } = e;\r\n callbackWrapper(mouseInteractionCb)(Object.assign({ type: MouseInteractions[thisEventKey], id, x: clientX, y: clientY }, (pointerType !== null && { pointerType })));\r\n };\r\n };\r\n Object.keys(MouseInteractions)\r\n .filter((key) => Number.isNaN(Number(key)) &&\r\n !key.endsWith('_Departed') &&\r\n disableMap[key] !== false)\r\n .forEach((eventKey) => {\r\n let eventName = toLowerCase(eventKey);\r\n const handler = getHandler(eventKey);\r\n if (window.PointerEvent) {\r\n switch (MouseInteractions[eventKey]) {\r\n case MouseInteractions.MouseDown:\r\n case MouseInteractions.MouseUp:\r\n eventName = eventName.replace('mouse', 'pointer');\r\n break;\r\n case MouseInteractions.TouchStart:\r\n case MouseInteractions.TouchEnd:\r\n return;\r\n }\r\n }\r\n handlers.push(on(eventName, handler, doc));\r\n });\r\n return callbackWrapper(() => {\r\n handlers.forEach((h) => h());\r\n });\r\n}\r\nfunction initScrollObserver({ scrollCb, doc, mirror, blockClass, blockSelector, sampling, }) {\r\n const updatePosition = callbackWrapper(throttle(callbackWrapper((evt) => {\r\n const target = getEventTarget(evt);\r\n if (!target ||\r\n isBlocked(target, blockClass, blockSelector, true)) {\r\n return;\r\n }\r\n const id = mirror.getId(target);\r\n if (target === doc && doc.defaultView) {\r\n const scrollLeftTop = getWindowScroll(doc.defaultView);\r\n scrollCb({\r\n id,\r\n x: scrollLeftTop.left,\r\n y: scrollLeftTop.top,\r\n });\r\n }\r\n else {\r\n scrollCb({\r\n id,\r\n x: target.scrollLeft,\r\n y: target.scrollTop,\r\n });\r\n }\r\n }), sampling.scroll || 100));\r\n return on('scroll', updatePosition, doc);\r\n}\r\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\r\n let lastH = -1;\r\n let lastW = -1;\r\n const updateDimension = callbackWrapper(throttle(callbackWrapper(() => {\r\n const height = getWindowHeight();\r\n const width = getWindowWidth();\r\n if (lastH !== height || lastW !== width) {\r\n viewportResizeCb({\r\n width: Number(width),\r\n height: Number(height),\r\n });\r\n lastH = height;\r\n lastW = width;\r\n }\r\n }), 200));\r\n return on('resize', updateDimension, win);\r\n}\r\nconst INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];\r\nconst lastInputValueMap = new WeakMap();\r\nfunction initInputObserver({ inputCb, doc, mirror, blockClass, blockSelector, ignoreClass, ignoreSelector, maskInputOptions, maskInputFn, sampling, userTriggeredOnInput, }) {\r\n function eventHandler(event) {\r\n let target = getEventTarget(event);\r\n const userTriggered = event.isTrusted;\r\n const tagName = target && target.tagName;\r\n if (target && tagName === 'OPTION') {\r\n target = target.parentElement;\r\n }\r\n if (!target ||\r\n !tagName ||\r\n INPUT_TAGS.indexOf(tagName) < 0 ||\r\n isBlocked(target, blockClass, blockSelector, true)) {\r\n return;\r\n }\r\n if (target.classList.contains(ignoreClass) ||\r\n (ignoreSelector && target.matches(ignoreSelector))) {\r\n return;\r\n }\r\n let text = target.value;\r\n let isChecked = false;\r\n const type = getInputType(target) || '';\r\n if (type === 'radio' || type === 'checkbox') {\r\n isChecked = target.checked;\r\n }\r\n else if (maskInputOptions[tagName.toLowerCase()] ||\r\n maskInputOptions[type]) {\r\n text = maskInputValue({\r\n element: target,\r\n maskInputOptions,\r\n tagName,\r\n type,\r\n value: text,\r\n maskInputFn,\r\n });\r\n }\r\n cbWithDedup(target, userTriggeredOnInput\r\n ? { text, isChecked, userTriggered }\r\n : { text, isChecked });\r\n const name = target.name;\r\n if (type === 'radio' && name && isChecked) {\r\n doc\r\n .querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`)\r\n .forEach((el) => {\r\n if (el !== target) {\r\n const text = el.value;\r\n cbWithDedup(el, userTriggeredOnInput\r\n ? { text, isChecked: !isChecked, userTriggered: false }\r\n : { text, isChecked: !isChecked });\r\n }\r\n });\r\n }\r\n }\r\n function cbWithDedup(target, v) {\r\n const lastInputValue = lastInputValueMap.get(target);\r\n if (!lastInputValue ||\r\n lastInputValue.text !== v.text ||\r\n lastInputValue.isChecked !== v.isChecked) {\r\n lastInputValueMap.set(target, v);\r\n const id = mirror.getId(target);\r\n callbackWrapper(inputCb)(Object.assign(Object.assign({}, v), { id }));\r\n }\r\n }\r\n const events = sampling.input === 'last' ? ['change'] : ['input', 'change'];\r\n const handlers = events.map((eventName) => on(eventName, callbackWrapper(eventHandler), doc));\r\n const currentWindow = doc.defaultView;\r\n if (!currentWindow) {\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n }\r\n const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, 'value');\r\n const hookProperties = [\r\n [currentWindow.HTMLInputElement.prototype, 'value'],\r\n [currentWindow.HTMLInputElement.prototype, 'checked'],\r\n [currentWindow.HTMLSelectElement.prototype, 'value'],\r\n [currentWindow.HTMLTextAreaElement.prototype, 'value'],\r\n [currentWindow.HTMLSelectElement.prototype, 'selectedIndex'],\r\n [currentWindow.HTMLOptionElement.prototype, 'selected'],\r\n ];\r\n if (propertyDescriptor && propertyDescriptor.set) {\r\n handlers.push(...hookProperties.map((p) => hookSetter(p[0], p[1], {\r\n set() {\r\n callbackWrapper(eventHandler)({\r\n target: this,\r\n isTrusted: false,\r\n });\r\n },\r\n }, false, currentWindow)));\r\n }\r\n return callbackWrapper(() => {\r\n handlers.forEach((h) => h());\r\n });\r\n}\r\nfunction getNestedCSSRulePositions(rule) {\r\n const positions = [];\r\n function recurse(childRule, pos) {\r\n if ((hasNestedCSSRule('CSSGroupingRule') &&\r\n childRule.parentRule instanceof CSSGroupingRule) ||\r\n (hasNestedCSSRule('CSSMediaRule') &&\r\n childRule.parentRule instanceof CSSMediaRule) ||\r\n (hasNestedCSSRule('CSSSupportsRule') &&\r\n childRule.parentRule instanceof CSSSupportsRule) ||\r\n (hasNestedCSSRule('CSSConditionRule') &&\r\n childRule.parentRule instanceof CSSConditionRule)) {\r\n const rules = Array.from(childRule.parentRule.cssRules);\r\n const index = rules.indexOf(childRule);\r\n pos.unshift(index);\r\n }\r\n else if (childRule.parentStyleSheet) {\r\n const rules = Array.from(childRule.parentStyleSheet.cssRules);\r\n const index = rules.indexOf(childRule);\r\n pos.unshift(index);\r\n }\r\n return pos;\r\n }\r\n return recurse(rule, positions);\r\n}\r\nfunction getIdAndStyleId(sheet, mirror, styleMirror) {\r\n let id, styleId;\r\n if (!sheet)\r\n return {};\r\n if (sheet.ownerNode)\r\n id = mirror.getId(sheet.ownerNode);\r\n else\r\n styleId = styleMirror.getId(sheet);\r\n return {\r\n styleId,\r\n id,\r\n };\r\n}\r\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror, stylesheetManager }, { win }) {\r\n if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\r\n return () => {\r\n };\r\n }\r\n const insertRule = win.CSSStyleSheet.prototype.insertRule;\r\n win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [rule, index] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n adds: [{ rule, index }],\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\r\n win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [index] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n removes: [{ index }],\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n let replace;\r\n if (win.CSSStyleSheet.prototype.replace) {\r\n replace = win.CSSStyleSheet.prototype.replace;\r\n win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [text] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n replace: text,\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n }\r\n let replaceSync;\r\n if (win.CSSStyleSheet.prototype.replaceSync) {\r\n replaceSync = win.CSSStyleSheet.prototype.replaceSync;\r\n win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [text] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n replaceSync: text,\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n }\r\n const supportedNestedCSSRuleTypes = {};\r\n if (canMonkeyPatchNestedCSSRule('CSSGroupingRule')) {\r\n supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\r\n }\r\n else {\r\n if (canMonkeyPatchNestedCSSRule('CSSMediaRule')) {\r\n supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\r\n }\r\n if (canMonkeyPatchNestedCSSRule('CSSConditionRule')) {\r\n supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\r\n }\r\n if (canMonkeyPatchNestedCSSRule('CSSSupportsRule')) {\r\n supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\r\n }\r\n }\r\n const unmodifiedFunctions = {};\r\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n unmodifiedFunctions[typeKey] = {\r\n insertRule: type.prototype.insertRule,\r\n deleteRule: type.prototype.deleteRule,\r\n };\r\n type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [rule, index] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n adds: [\r\n {\r\n rule,\r\n index: [\r\n ...getNestedCSSRulePositions(thisArg),\r\n index || 0,\r\n ],\r\n },\r\n ],\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [index] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n removes: [\r\n { index: [...getNestedCSSRulePositions(thisArg), index] },\r\n ],\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n });\r\n return callbackWrapper(() => {\r\n win.CSSStyleSheet.prototype.insertRule = insertRule;\r\n win.CSSStyleSheet.prototype.deleteRule = deleteRule;\r\n replace && (win.CSSStyleSheet.prototype.replace = replace);\r\n replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\r\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\r\n type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\r\n });\r\n });\r\n}\r\nfunction initAdoptedStyleSheetObserver({ mirror, stylesheetManager, }, host) {\r\n var _a, _b, _c;\r\n let hostId = null;\r\n if (host.nodeName === '#document')\r\n hostId = mirror.getId(host);\r\n else\r\n hostId = mirror.getId(host.host);\r\n const patchTarget = host.nodeName === '#document'\r\n ? (_a = host.defaultView) === null || _a === void 0 ? void 0 : _a.Document\r\n : (_c = (_b = host.ownerDocument) === null || _b === void 0 ? void 0 : _b.defaultView) === null || _c === void 0 ? void 0 : _c.ShadowRoot;\r\n const originalPropertyDescriptor = (patchTarget === null || patchTarget === void 0 ? void 0 : patchTarget.prototype)\r\n ? Object.getOwnPropertyDescriptor(patchTarget === null || patchTarget === void 0 ? void 0 : patchTarget.prototype, 'adoptedStyleSheets')\r\n : undefined;\r\n if (hostId === null ||\r\n hostId === -1 ||\r\n !patchTarget ||\r\n !originalPropertyDescriptor)\r\n return () => {\r\n };\r\n Object.defineProperty(host, 'adoptedStyleSheets', {\r\n configurable: originalPropertyDescriptor.configurable,\r\n enumerable: originalPropertyDescriptor.enumerable,\r\n get() {\r\n var _a;\r\n return (_a = originalPropertyDescriptor.get) === null || _a === void 0 ? void 0 : _a.call(this);\r\n },\r\n set(sheets) {\r\n var _a;\r\n const result = (_a = originalPropertyDescriptor.set) === null || _a === void 0 ? void 0 : _a.call(this, sheets);\r\n if (hostId !== null && hostId !== -1) {\r\n try {\r\n stylesheetManager.adoptStyleSheets(sheets, hostId);\r\n }\r\n catch (e) {\r\n }\r\n }\r\n return result;\r\n },\r\n });\r\n return callbackWrapper(() => {\r\n Object.defineProperty(host, 'adoptedStyleSheets', {\r\n configurable: originalPropertyDescriptor.configurable,\r\n enumerable: originalPropertyDescriptor.enumerable,\r\n get: originalPropertyDescriptor.get,\r\n set: originalPropertyDescriptor.set,\r\n });\r\n });\r\n}\r\nfunction initStyleDeclarationObserver({ styleDeclarationCb, mirror, ignoreCSSAttributes, stylesheetManager, }, { win }) {\r\n const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\r\n win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n var _a;\r\n const [property, value, priority] = argumentsList;\r\n if (ignoreCSSAttributes.has(property)) {\r\n return setProperty.apply(thisArg, [property, value, priority]);\r\n }\r\n const { id, styleId } = getIdAndStyleId((_a = thisArg.parentRule) === null || _a === void 0 ? void 0 : _a.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleDeclarationCb({\r\n id,\r\n styleId,\r\n set: {\r\n property,\r\n value,\r\n priority,\r\n },\r\n index: getNestedCSSRulePositions(thisArg.parentRule),\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\r\n win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n var _a;\r\n const [property] = argumentsList;\r\n if (ignoreCSSAttributes.has(property)) {\r\n return removeProperty.apply(thisArg, [property]);\r\n }\r\n const { id, styleId } = getIdAndStyleId((_a = thisArg.parentRule) === null || _a === void 0 ? void 0 : _a.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleDeclarationCb({\r\n id,\r\n styleId,\r\n remove: {\r\n property,\r\n },\r\n index: getNestedCSSRulePositions(thisArg.parentRule),\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n return callbackWrapper(() => {\r\n win.CSSStyleDeclaration.prototype.setProperty = setProperty;\r\n win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\r\n });\r\n}\r\nfunction initMediaInteractionObserver({ mediaInteractionCb, blockClass, blockSelector, mirror, sampling, doc, }) {\r\n const handler = callbackWrapper((type) => throttle(callbackWrapper((event) => {\r\n const target = getEventTarget(event);\r\n if (!target ||\r\n isBlocked(target, blockClass, blockSelector, true)) {\r\n return;\r\n }\r\n const { currentTime, volume, muted, playbackRate, loop } = target;\r\n mediaInteractionCb({\r\n type,\r\n id: mirror.getId(target),\r\n currentTime,\r\n volume,\r\n muted,\r\n playbackRate,\r\n loop,\r\n });\r\n }), sampling.media || 500));\r\n const handlers = [\r\n on('play', handler(0), doc),\r\n on('pause', handler(1), doc),\r\n on('seeked', handler(2), doc),\r\n on('volumechange', handler(3), doc),\r\n on('ratechange', handler(4), doc),\r\n ];\r\n return callbackWrapper(() => {\r\n handlers.forEach((h) => h());\r\n });\r\n}\r\nfunction initFontObserver({ fontCb, doc }) {\r\n const win = doc.defaultView;\r\n if (!win) {\r\n return () => {\r\n };\r\n }\r\n const handlers = [];\r\n const fontMap = new WeakMap();\r\n const originalFontFace = win.FontFace;\r\n win.FontFace = function FontFace(family, source, descriptors) {\r\n const fontFace = new originalFontFace(family, source, descriptors);\r\n fontMap.set(fontFace, {\r\n family,\r\n buffer: typeof source !== 'string',\r\n descriptors,\r\n fontSource: typeof source === 'string'\r\n ? source\r\n : JSON.stringify(Array.from(new Uint8Array(source))),\r\n });\r\n return fontFace;\r\n };\r\n const restoreHandler = patch(doc.fonts, 'add', function (original) {\r\n return function (fontFace) {\r\n setTimeout(callbackWrapper(() => {\r\n const p = fontMap.get(fontFace);\r\n if (p) {\r\n fontCb(p);\r\n fontMap.delete(fontFace);\r\n }\r\n }), 0);\r\n return original.apply(this, [fontFace]);\r\n };\r\n });\r\n handlers.push(() => {\r\n win.FontFace = originalFontFace;\r\n });\r\n handlers.push(restoreHandler);\r\n return callbackWrapper(() => {\r\n handlers.forEach((h) => h());\r\n });\r\n}\r\nfunction initSelectionObserver(param) {\r\n const { doc, mirror, blockClass, blockSelector, selectionCb } = param;\r\n let collapsed = true;\r\n const updateSelection = callbackWrapper(() => {\r\n const selection = doc.getSelection();\r\n if (!selection || (collapsed && (selection === null || selection === void 0 ? void 0 : selection.isCollapsed)))\r\n return;\r\n collapsed = selection.isCollapsed || false;\r\n const ranges = [];\r\n const count = selection.rangeCount || 0;\r\n for (let i = 0; i < count; i++) {\r\n const range = selection.getRangeAt(i);\r\n const { startContainer, startOffset, endContainer, endOffset } = range;\r\n const blocked = isBlocked(startContainer, blockClass, blockSelector, true) ||\r\n isBlocked(endContainer, blockClass, blockSelector, true);\r\n if (blocked)\r\n continue;\r\n ranges.push({\r\n start: mirror.getId(startContainer),\r\n startOffset,\r\n end: mirror.getId(endContainer),\r\n endOffset,\r\n });\r\n }\r\n selectionCb({ ranges });\r\n });\r\n updateSelection();\r\n return on('selectionchange', updateSelection);\r\n}\r\nfunction initCustomElementObserver({ doc, customElementCb, }) {\r\n const win = doc.defaultView;\r\n if (!win || !win.customElements)\r\n return () => { };\r\n const restoreHandler = patch(win.customElements, 'define', function (original) {\r\n return function (name, constructor, options) {\r\n try {\r\n customElementCb({\r\n define: {\r\n name,\r\n },\r\n });\r\n }\r\n catch (e) {\r\n console.warn(`Custom element callback failed for ${name}`);\r\n }\r\n return original.apply(this, [name, constructor, options]);\r\n };\r\n });\r\n return restoreHandler;\r\n}\r\nfunction mergeHooks(o, hooks) {\r\n const { mutationCb, mousemoveCb, mouseInteractionCb, scrollCb, viewportResizeCb, inputCb, mediaInteractionCb, styleSheetRuleCb, styleDeclarationCb, canvasMutationCb, fontCb, selectionCb, customElementCb, } = o;\r\n o.mutationCb = (...p) => {\r\n if (hooks.mutation) {\r\n hooks.mutation(...p);\r\n }\r\n mutationCb(...p);\r\n };\r\n o.mousemoveCb = (...p) => {\r\n if (hooks.mousemove) {\r\n hooks.mousemove(...p);\r\n }\r\n mousemoveCb(...p);\r\n };\r\n o.mouseInteractionCb = (...p) => {\r\n if (hooks.mouseInteraction) {\r\n hooks.mouseInteraction(...p);\r\n }\r\n mouseInteractionCb(...p);\r\n };\r\n o.scrollCb = (...p) => {\r\n if (hooks.scroll) {\r\n hooks.scroll(...p);\r\n }\r\n scrollCb(...p);\r\n };\r\n o.viewportResizeCb = (...p) => {\r\n if (hooks.viewportResize) {\r\n hooks.viewportResize(...p);\r\n }\r\n viewportResizeCb(...p);\r\n };\r\n o.inputCb = (...p) => {\r\n if (hooks.input) {\r\n hooks.input(...p);\r\n }\r\n inputCb(...p);\r\n };\r\n o.mediaInteractionCb = (...p) => {\r\n if (hooks.mediaInteaction) {\r\n hooks.mediaInteaction(...p);\r\n }\r\n mediaInteractionCb(...p);\r\n };\r\n o.styleSheetRuleCb = (...p) => {\r\n if (hooks.styleSheetRule) {\r\n hooks.styleSheetRule(...p);\r\n }\r\n styleSheetRuleCb(...p);\r\n };\r\n o.styleDeclarationCb = (...p) => {\r\n if (hooks.styleDeclaration) {\r\n hooks.styleDeclaration(...p);\r\n }\r\n styleDeclarationCb(...p);\r\n };\r\n o.canvasMutationCb = (...p) => {\r\n if (hooks.canvasMutation) {\r\n hooks.canvasMutation(...p);\r\n }\r\n canvasMutationCb(...p);\r\n };\r\n o.fontCb = (...p) => {\r\n if (hooks.font) {\r\n hooks.font(...p);\r\n }\r\n fontCb(...p);\r\n };\r\n o.selectionCb = (...p) => {\r\n if (hooks.selection) {\r\n hooks.selection(...p);\r\n }\r\n selectionCb(...p);\r\n };\r\n o.customElementCb = (...c) => {\r\n if (hooks.customElement) {\r\n hooks.customElement(...c);\r\n }\r\n customElementCb(...c);\r\n };\r\n}\r\nfunction initObservers(o, hooks = {}) {\r\n const currentWindow = o.doc.defaultView;\r\n if (!currentWindow) {\r\n return () => {\r\n };\r\n }\r\n mergeHooks(o, hooks);\r\n let mutationObserver;\r\n if (o.recordDOM) {\r\n mutationObserver = initMutationObserver(o, o.doc);\r\n }\r\n const mousemoveHandler = initMoveObserver(o);\r\n const mouseInteractionHandler = initMouseInteractionObserver(o);\r\n const scrollHandler = initScrollObserver(o);\r\n const viewportResizeHandler = initViewportResizeObserver(o, {\r\n win: currentWindow,\r\n });\r\n const inputHandler = initInputObserver(o);\r\n const mediaInteractionHandler = initMediaInteractionObserver(o);\r\n let styleSheetObserver = () => { };\r\n let adoptedStyleSheetObserver = () => { };\r\n let styleDeclarationObserver = () => { };\r\n let fontObserver = () => { };\r\n if (o.recordDOM) {\r\n styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });\r\n adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o, o.doc);\r\n styleDeclarationObserver = initStyleDeclarationObserver(o, {\r\n win: currentWindow,\r\n });\r\n if (o.collectFonts) {\r\n fontObserver = initFontObserver(o);\r\n }\r\n }\r\n const selectionObserver = initSelectionObserver(o);\r\n const customElementObserver = initCustomElementObserver(o);\r\n const pluginHandlers = [];\r\n for (const plugin of o.plugins) {\r\n pluginHandlers.push(plugin.observer(plugin.callback, currentWindow, plugin.options));\r\n }\r\n return callbackWrapper(() => {\r\n mutationBuffers.forEach((b) => b.reset());\r\n mutationObserver === null || mutationObserver === void 0 ? void 0 : mutationObserver.disconnect();\r\n mousemoveHandler();\r\n mouseInteractionHandler();\r\n scrollHandler();\r\n viewportResizeHandler();\r\n inputHandler();\r\n mediaInteractionHandler();\r\n styleSheetObserver();\r\n adoptedStyleSheetObserver();\r\n styleDeclarationObserver();\r\n fontObserver();\r\n selectionObserver();\r\n customElementObserver();\r\n pluginHandlers.forEach((h) => h());\r\n });\r\n}\r\nfunction hasNestedCSSRule(prop) {\r\n return typeof window[prop] !== 'undefined';\r\n}\r\nfunction canMonkeyPatchNestedCSSRule(prop) {\r\n return Boolean(typeof window[prop] !== 'undefined' &&\r\n window[prop].prototype &&\r\n 'insertRule' in window[prop].prototype &&\r\n 'deleteRule' in window[prop].prototype);\r\n}\n\nexport { INPUT_TAGS, initAdoptedStyleSheetObserver, initMutationObserver, initObservers, initScrollObserver, mutationBuffers };\n","class CrossOriginIframeMirror {\r\n constructor(generateIdFn) {\r\n this.generateIdFn = generateIdFn;\r\n this.iframeIdToRemoteIdMap = new WeakMap();\r\n this.iframeRemoteIdToIdMap = new WeakMap();\r\n }\r\n getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\r\n const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\r\n const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\r\n let id = idToRemoteIdMap.get(remoteId);\r\n if (!id) {\r\n id = this.generateIdFn();\r\n idToRemoteIdMap.set(remoteId, id);\r\n remoteIdToIdMap.set(id, remoteId);\r\n }\r\n return id;\r\n }\r\n getIds(iframe, remoteId) {\r\n const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\r\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n return remoteId.map((id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap));\r\n }\r\n getRemoteId(iframe, id, map) {\r\n const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\r\n if (typeof id !== 'number')\r\n return id;\r\n const remoteId = remoteIdToIdMap.get(id);\r\n if (!remoteId)\r\n return -1;\r\n return remoteId;\r\n }\r\n getRemoteIds(iframe, ids) {\r\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\r\n }\r\n reset(iframe) {\r\n if (!iframe) {\r\n this.iframeIdToRemoteIdMap = new WeakMap();\r\n this.iframeRemoteIdToIdMap = new WeakMap();\r\n return;\r\n }\r\n this.iframeIdToRemoteIdMap.delete(iframe);\r\n this.iframeRemoteIdToIdMap.delete(iframe);\r\n }\r\n getIdToRemoteIdMap(iframe) {\r\n let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\r\n if (!idToRemoteIdMap) {\r\n idToRemoteIdMap = new Map();\r\n this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\r\n }\r\n return idToRemoteIdMap;\r\n }\r\n getRemoteIdToIdMap(iframe) {\r\n let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\r\n if (!remoteIdToIdMap) {\r\n remoteIdToIdMap = new Map();\r\n this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\r\n }\r\n return remoteIdToIdMap;\r\n }\r\n}\n\nexport { CrossOriginIframeMirror as default };\n","import { genId, NodeType } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport CrossOriginIframeMirror from './cross-origin-iframe-mirror.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/types.js';\n\nclass IframeManager {\r\n constructor(options) {\r\n this.iframes = new WeakMap();\r\n this.crossOriginIframeMap = new WeakMap();\r\n this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\r\n this.crossOriginIframeRootIdMap = new WeakMap();\r\n this.mutationCb = options.mutationCb;\r\n this.wrappedEmit = options.wrappedEmit;\r\n this.stylesheetManager = options.stylesheetManager;\r\n this.recordCrossOriginIframes = options.recordCrossOriginIframes;\r\n this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\r\n this.mirror = options.mirror;\r\n if (this.recordCrossOriginIframes) {\r\n window.addEventListener('message', this.handleMessage.bind(this));\r\n }\r\n }\r\n addIframe(iframeEl) {\r\n this.iframes.set(iframeEl, true);\r\n if (iframeEl.contentWindow)\r\n this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\r\n }\r\n addLoadListener(cb) {\r\n this.loadListener = cb;\r\n }\r\n attachIframe(iframeEl, childSn) {\r\n var _a;\r\n this.mutationCb({\r\n adds: [\r\n {\r\n parentId: this.mirror.getId(iframeEl),\r\n nextId: null,\r\n node: childSn,\r\n },\r\n ],\r\n removes: [],\r\n texts: [],\r\n attributes: [],\r\n isAttachIframe: true,\r\n });\r\n (_a = this.loadListener) === null || _a === void 0 ? void 0 : _a.call(this, iframeEl);\r\n if (iframeEl.contentDocument &&\r\n iframeEl.contentDocument.adoptedStyleSheets &&\r\n iframeEl.contentDocument.adoptedStyleSheets.length > 0)\r\n this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\r\n }\r\n handleMessage(message) {\r\n const crossOriginMessageEvent = message;\r\n if (crossOriginMessageEvent.data.type !== 'rrweb' ||\r\n crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\r\n return;\r\n const iframeSourceWindow = message.source;\r\n if (!iframeSourceWindow)\r\n return;\r\n const iframeEl = this.crossOriginIframeMap.get(message.source);\r\n if (!iframeEl)\r\n return;\r\n const transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event);\r\n if (transformedEvent)\r\n this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout);\r\n }\r\n transformCrossOriginEvent(iframeEl, e) {\r\n var _a;\r\n switch (e.type) {\r\n case EventType.FullSnapshot: {\r\n this.crossOriginIframeMirror.reset(iframeEl);\r\n this.crossOriginIframeStyleMirror.reset(iframeEl);\r\n this.replaceIdOnNode(e.data.node, iframeEl);\r\n const rootId = e.data.node.id;\r\n this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\r\n this.patchRootIdOnNode(e.data.node, rootId);\r\n return {\r\n timestamp: e.timestamp,\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.Mutation,\r\n adds: [\r\n {\r\n parentId: this.mirror.getId(iframeEl),\r\n nextId: null,\r\n node: e.data.node,\r\n },\r\n ],\r\n removes: [],\r\n texts: [],\r\n attributes: [],\r\n isAttachIframe: true,\r\n },\r\n };\r\n }\r\n case EventType.Meta:\r\n case EventType.Load:\r\n case EventType.DomContentLoaded: {\r\n return false;\r\n }\r\n case EventType.Plugin: {\r\n return e;\r\n }\r\n case EventType.Custom: {\r\n this.replaceIds(e.data.payload, iframeEl, ['id', 'parentId', 'previousId', 'nextId']);\r\n return e;\r\n }\r\n case EventType.IncrementalSnapshot: {\r\n switch (e.data.source) {\r\n case IncrementalSource.Mutation: {\r\n e.data.adds.forEach((n) => {\r\n this.replaceIds(n, iframeEl, [\r\n 'parentId',\r\n 'nextId',\r\n 'previousId',\r\n ]);\r\n this.replaceIdOnNode(n.node, iframeEl);\r\n const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\r\n rootId && this.patchRootIdOnNode(n.node, rootId);\r\n });\r\n e.data.removes.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['parentId', 'id']);\r\n });\r\n e.data.attributes.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['id']);\r\n });\r\n e.data.texts.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['id']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.Drag:\r\n case IncrementalSource.TouchMove:\r\n case IncrementalSource.MouseMove: {\r\n e.data.positions.forEach((p) => {\r\n this.replaceIds(p, iframeEl, ['id']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.ViewportResize: {\r\n return false;\r\n }\r\n case IncrementalSource.MediaInteraction:\r\n case IncrementalSource.MouseInteraction:\r\n case IncrementalSource.Scroll:\r\n case IncrementalSource.CanvasMutation:\r\n case IncrementalSource.Input: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n return e;\r\n }\r\n case IncrementalSource.StyleSheetRule:\r\n case IncrementalSource.StyleDeclaration: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n this.replaceStyleIds(e.data, iframeEl, ['styleId']);\r\n return e;\r\n }\r\n case IncrementalSource.Font: {\r\n return e;\r\n }\r\n case IncrementalSource.Selection: {\r\n e.data.ranges.forEach((range) => {\r\n this.replaceIds(range, iframeEl, ['start', 'end']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.AdoptedStyleSheet: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n this.replaceStyleIds(e.data, iframeEl, ['styleIds']);\r\n (_a = e.data.styles) === null || _a === void 0 ? void 0 : _a.forEach((style) => {\r\n this.replaceStyleIds(style, iframeEl, ['styleId']);\r\n });\r\n return e;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n replace(iframeMirror, obj, iframeEl, keys) {\r\n for (const key of keys) {\r\n if (!Array.isArray(obj[key]) && typeof obj[key] !== 'number')\r\n continue;\r\n if (Array.isArray(obj[key])) {\r\n obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\r\n }\r\n else {\r\n obj[key] = iframeMirror.getId(iframeEl, obj[key]);\r\n }\r\n }\r\n return obj;\r\n }\r\n replaceIds(obj, iframeEl, keys) {\r\n return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\r\n }\r\n replaceStyleIds(obj, iframeEl, keys) {\r\n return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\r\n }\r\n replaceIdOnNode(node, iframeEl) {\r\n this.replaceIds(node, iframeEl, ['id', 'rootId']);\r\n if ('childNodes' in node) {\r\n node.childNodes.forEach((child) => {\r\n this.replaceIdOnNode(child, iframeEl);\r\n });\r\n }\r\n }\r\n patchRootIdOnNode(node, rootId) {\r\n if (node.type !== NodeType.Document && !node.rootId)\r\n node.rootId = rootId;\r\n if ('childNodes' in node) {\r\n node.childNodes.forEach((child) => {\r\n this.patchRootIdOnNode(child, rootId);\r\n });\r\n }\r\n }\r\n}\n\nexport { IframeManager };\n","import { initMutationObserver, initScrollObserver, initAdoptedStyleSheetObserver } from './observer.js';\nimport { patch, inDom } from '../utils.js';\nimport { isNativeShadowDom } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nclass ShadowDomManager {\r\n constructor(options) {\r\n this.shadowDoms = new WeakSet();\r\n this.restoreHandlers = [];\r\n this.mutationCb = options.mutationCb;\r\n this.scrollCb = options.scrollCb;\r\n this.bypassOptions = options.bypassOptions;\r\n this.mirror = options.mirror;\r\n this.init();\r\n }\r\n init() {\r\n this.reset();\r\n this.patchAttachShadow(Element, document);\r\n }\r\n addShadowRoot(shadowRoot, doc) {\r\n if (!isNativeShadowDom(shadowRoot))\r\n return;\r\n if (this.shadowDoms.has(shadowRoot))\r\n return;\r\n this.shadowDoms.add(shadowRoot);\r\n const observer = initMutationObserver(Object.assign(Object.assign({}, this.bypassOptions), { doc, mutationCb: this.mutationCb, mirror: this.mirror, shadowDomManager: this }), shadowRoot);\r\n this.restoreHandlers.push(() => observer.disconnect());\r\n this.restoreHandlers.push(initScrollObserver(Object.assign(Object.assign({}, this.bypassOptions), { scrollCb: this.scrollCb, doc: shadowRoot, mirror: this.mirror })));\r\n setTimeout(() => {\r\n if (shadowRoot.adoptedStyleSheets &&\r\n shadowRoot.adoptedStyleSheets.length > 0)\r\n this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot.adoptedStyleSheets, this.mirror.getId(shadowRoot.host));\r\n this.restoreHandlers.push(initAdoptedStyleSheetObserver({\r\n mirror: this.mirror,\r\n stylesheetManager: this.bypassOptions.stylesheetManager,\r\n }, shadowRoot));\r\n }, 0);\r\n }\r\n observeAttachShadow(iframeElement) {\r\n if (!iframeElement.contentWindow || !iframeElement.contentDocument)\r\n return;\r\n this.patchAttachShadow(iframeElement.contentWindow.Element, iframeElement.contentDocument);\r\n }\r\n patchAttachShadow(element, doc) {\r\n const manager = this;\r\n this.restoreHandlers.push(patch(element.prototype, 'attachShadow', function (original) {\r\n return function (option) {\r\n const shadowRoot = original.call(this, option);\r\n if (this.shadowRoot && inDom(this))\r\n manager.addShadowRoot(this.shadowRoot, doc);\r\n return shadowRoot;\r\n };\r\n }));\r\n }\r\n reset() {\r\n this.restoreHandlers.forEach((handler) => {\r\n try {\r\n handler();\r\n }\r\n catch (e) {\r\n }\r\n });\r\n this.restoreHandlers = [];\r\n this.shadowDoms = new WeakSet();\r\n }\r\n}\n\nexport { ShadowDomManager };\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\n\nexport { __awaiter, __rest };\n","/*\n * base64-arraybuffer 1.0.1 <https://github.com/niklasvh/base64-arraybuffer>\n * Copyright (c) 2021 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n var bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nvar decode = function (base64) {\n var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n var arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return arraybuffer;\n};\n\nexport { decode, encode };\n","import { encode } from './../../../../../../ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js';\n\nconst canvasVarMap = new Map();\r\nfunction variableListFor(ctx, ctor) {\r\n let contextMap = canvasVarMap.get(ctx);\r\n if (!contextMap) {\r\n contextMap = new Map();\r\n canvasVarMap.set(ctx, contextMap);\r\n }\r\n if (!contextMap.has(ctor)) {\r\n contextMap.set(ctor, []);\r\n }\r\n return contextMap.get(ctor);\r\n}\r\nconst saveWebGLVar = (value, win, ctx) => {\r\n if (!value ||\r\n !(isInstanceOfWebGLObject(value, win) || typeof value === 'object'))\r\n return;\r\n const name = value.constructor.name;\r\n const list = variableListFor(ctx, name);\r\n let index = list.indexOf(value);\r\n if (index === -1) {\r\n index = list.length;\r\n list.push(value);\r\n }\r\n return index;\r\n};\r\nfunction serializeArg(value, win, ctx) {\r\n if (value instanceof Array) {\r\n return value.map((arg) => serializeArg(arg, win, ctx));\r\n }\r\n else if (value === null) {\r\n return value;\r\n }\r\n else if (value instanceof Float32Array ||\r\n value instanceof Float64Array ||\r\n value instanceof Int32Array ||\r\n value instanceof Uint32Array ||\r\n value instanceof Uint8Array ||\r\n value instanceof Uint16Array ||\r\n value instanceof Int16Array ||\r\n value instanceof Int8Array ||\r\n value instanceof Uint8ClampedArray) {\r\n const name = value.constructor.name;\r\n return {\r\n rr_type: name,\r\n args: [Object.values(value)],\r\n };\r\n }\r\n else if (value instanceof ArrayBuffer) {\r\n const name = value.constructor.name;\r\n const base64 = encode(value);\r\n return {\r\n rr_type: name,\r\n base64,\r\n };\r\n }\r\n else if (value instanceof DataView) {\r\n const name = value.constructor.name;\r\n return {\r\n rr_type: name,\r\n args: [\r\n serializeArg(value.buffer, win, ctx),\r\n value.byteOffset,\r\n value.byteLength,\r\n ],\r\n };\r\n }\r\n else if (value instanceof HTMLImageElement) {\r\n const name = value.constructor.name;\r\n const { src } = value;\r\n return {\r\n rr_type: name,\r\n src,\r\n };\r\n }\r\n else if (value instanceof HTMLCanvasElement) {\r\n const name = 'HTMLImageElement';\r\n const src = value.toDataURL();\r\n return {\r\n rr_type: name,\r\n src,\r\n };\r\n }\r\n else if (value instanceof ImageData) {\r\n const name = value.constructor.name;\r\n return {\r\n rr_type: name,\r\n args: [serializeArg(value.data, win, ctx), value.width, value.height],\r\n };\r\n }\r\n else if (isInstanceOfWebGLObject(value, win) || typeof value === 'object') {\r\n const name = value.constructor.name;\r\n const index = saveWebGLVar(value, win, ctx);\r\n return {\r\n rr_type: name,\r\n index: index,\r\n };\r\n }\r\n return value;\r\n}\r\nconst serializeArgs = (args, win, ctx) => {\r\n return args.map((arg) => serializeArg(arg, win, ctx));\r\n};\r\nconst isInstanceOfWebGLObject = (value, win) => {\r\n const webGLConstructorNames = [\r\n 'WebGLActiveInfo',\r\n 'WebGLBuffer',\r\n 'WebGLFramebuffer',\r\n 'WebGLProgram',\r\n 'WebGLRenderbuffer',\r\n 'WebGLShader',\r\n 'WebGLShaderPrecisionFormat',\r\n 'WebGLTexture',\r\n 'WebGLUniformLocation',\r\n 'WebGLVertexArrayObject',\r\n 'WebGLVertexArrayObjectOES',\r\n ];\r\n const supportedWebGLConstructorNames = webGLConstructorNames.filter((name) => typeof win[name] === 'function');\r\n return Boolean(supportedWebGLConstructorNames.find((name) => value instanceof win[name]));\r\n};\n\nexport { isInstanceOfWebGLObject, saveWebGLVar, serializeArg, serializeArgs, variableListFor };\n","import { CanvasContext } from '../../../../../types/dist/types.js';\nimport { patch, isBlocked, hookSetter } from '../../../utils.js';\nimport { serializeArgs } from './serialize-args.js';\n\nfunction initCanvas2DMutationObserver(cb, win, blockClass, blockSelector) {\r\n const handlers = [];\r\n const props2D = Object.getOwnPropertyNames(win.CanvasRenderingContext2D.prototype);\r\n for (const prop of props2D) {\r\n try {\r\n if (typeof win.CanvasRenderingContext2D.prototype[prop] !== 'function') {\r\n continue;\r\n }\r\n const restoreHandler = patch(win.CanvasRenderingContext2D.prototype, prop, function (original) {\r\n return function (...args) {\r\n if (!isBlocked(this.canvas, blockClass, blockSelector, true)) {\r\n setTimeout(() => {\r\n const recordArgs = serializeArgs(args, win, this);\r\n cb(this.canvas, {\r\n type: CanvasContext['2D'],\r\n property: prop,\r\n args: recordArgs,\r\n });\r\n }, 0);\r\n }\r\n return original.apply(this, args);\r\n };\r\n });\r\n handlers.push(restoreHandler);\r\n }\r\n catch (_a) {\r\n const hookHandler = hookSetter(win.CanvasRenderingContext2D.prototype, prop, {\r\n set(v) {\r\n cb(this.canvas, {\r\n type: CanvasContext['2D'],\r\n property: prop,\r\n args: [v],\r\n setter: true,\r\n });\r\n },\r\n });\r\n handlers.push(hookHandler);\r\n }\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\n\nexport { initCanvas2DMutationObserver as default };\n","import { patch, isBlocked } from '../../../utils.js';\n\nfunction getNormalizedContextName(contextType) {\r\n return contextType === 'experimental-webgl' ? 'webgl' : contextType;\r\n}\r\nfunction initCanvasContextObserver(win, blockClass, blockSelector, setPreserveDrawingBufferToTrue) {\r\n const handlers = [];\r\n try {\r\n const restoreHandler = patch(win.HTMLCanvasElement.prototype, 'getContext', function (original) {\r\n return function (contextType, ...args) {\r\n if (!isBlocked(this, blockClass, blockSelector, true)) {\r\n const ctxName = getNormalizedContextName(contextType);\r\n if (!('__context' in this))\r\n this.__context = ctxName;\r\n if (setPreserveDrawingBufferToTrue &&\r\n ['webgl', 'webgl2'].includes(ctxName)) {\r\n if (args[0] && typeof args[0] === 'object') {\r\n const contextAttributes = args[0];\r\n if (!contextAttributes.preserveDrawingBuffer) {\r\n contextAttributes.preserveDrawingBuffer = true;\r\n }\r\n }\r\n else {\r\n args.splice(0, 1, {\r\n preserveDrawingBuffer: true,\r\n });\r\n }\r\n }\r\n }\r\n return original.apply(this, [contextType, ...args]);\r\n };\r\n });\r\n handlers.push(restoreHandler);\r\n }\r\n catch (_a) {\r\n console.error('failed to patch HTMLCanvasElement.prototype.getContext');\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\n\nexport { initCanvasContextObserver as default };\n","import { CanvasContext } from '../../../../../types/dist/types.js';\nimport { patch, isBlocked, hookSetter } from '../../../utils.js';\nimport { saveWebGLVar, serializeArgs } from './serialize-args.js';\n\nfunction patchGLPrototype(prototype, type, cb, blockClass, blockSelector, mirror, win) {\r\n const handlers = [];\r\n const props = Object.getOwnPropertyNames(prototype);\r\n for (const prop of props) {\r\n if ([\r\n 'isContextLost',\r\n 'canvas',\r\n 'drawingBufferWidth',\r\n 'drawingBufferHeight',\r\n ].includes(prop)) {\r\n continue;\r\n }\r\n try {\r\n if (typeof prototype[prop] !== 'function') {\r\n continue;\r\n }\r\n const restoreHandler = patch(prototype, prop, function (original) {\r\n return function (...args) {\r\n const result = original.apply(this, args);\r\n saveWebGLVar(result, win, this);\r\n if ('tagName' in this.canvas &&\r\n !isBlocked(this.canvas, blockClass, blockSelector, true)) {\r\n const recordArgs = serializeArgs(args, win, this);\r\n const mutation = {\r\n type,\r\n property: prop,\r\n args: recordArgs,\r\n };\r\n cb(this.canvas, mutation);\r\n }\r\n return result;\r\n };\r\n });\r\n handlers.push(restoreHandler);\r\n }\r\n catch (_a) {\r\n const hookHandler = hookSetter(prototype, prop, {\r\n set(v) {\r\n cb(this.canvas, {\r\n type,\r\n property: prop,\r\n args: [v],\r\n setter: true,\r\n });\r\n },\r\n });\r\n handlers.push(hookHandler);\r\n }\r\n }\r\n return handlers;\r\n}\r\nfunction initCanvasWebGLMutationObserver(cb, win, blockClass, blockSelector, mirror) {\r\n const handlers = [];\r\n handlers.push(...patchGLPrototype(win.WebGLRenderingContext.prototype, CanvasContext.WebGL, cb, blockClass, blockSelector, mirror, win));\r\n if (typeof win.WebGL2RenderingContext !== 'undefined') {\r\n handlers.push(...patchGLPrototype(win.WebGL2RenderingContext.prototype, CanvasContext.WebGL2, cb, blockClass, blockSelector, mirror, win));\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\n\nexport { initCanvasWebGLMutationObserver as default };\n","function funcToSource(fn, sourcemapArg) {\n var sourcemap = sourcemapArg === undefined ? null : sourcemapArg;\n var source = fn.toString();\n var lines = source.split('\\n');\n lines.pop();\n lines.shift();\n var blankPrefixLength = lines[0].search(/\\S/);\n var regex = /(['\"])__worker_loader_strict__(['\"])/g;\n for (var i = 0, n = lines.length; i < n; ++i) {\n lines[i] = lines[i].substring(blankPrefixLength).replace(regex, '$1use strict$2') + '\\n';\n }\n if (sourcemap) {\n lines.push('\\/\\/# sourceMappingURL=' + sourcemap + '\\n');\n }\n return lines;\n}\n\nexport { funcToSource };\n","import { funcToSource } from './_rollup-plugin-web-worker-loader__helper__funcToSource.js';\n\nfunction createURL(fn, sourcemapArg) {\n var lines = funcToSource(fn, sourcemapArg);\n var blob = new Blob(lines, { type: 'application/javascript' });\n return URL.createObjectURL(blob);\n}\n\nfunction createInlineWorkerFactory(fn, sourcemapArg) {\n var url;\n return function WorkerFactory(options) {\n url = url || createURL(fn, sourcemapArg);\n return new Worker(url, options);\n };\n}\n\nexport { createInlineWorkerFactory };\n","import { createInlineWorkerFactory } from './_rollup-plugin-web-worker-loader__helper__browser__createInlineWorkerFactory.js';\n\nvar WorkerFactory = createInlineWorkerFactory(/* rollup-plugin-web-worker-loader */function () {\n(function () {\n '__worker_loader_strict__';\n\n /*! *****************************************************************************\r\n Copyright (c) Microsoft Corporation.\r\n\r\n Permission to use, copy, modify, and/or distribute this software for any\r\n purpose with or without fee is hereby granted.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n PERFORMANCE OF THIS SOFTWARE.\r\n ***************************************************************************** */\r\n\r\n function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n }\n\n /*\n * base64-arraybuffer 1.0.1 <https://github.com/niklasvh/base64-arraybuffer>\n * Copyright (c) 2021 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n // Use a lookup table to find the index.\n var lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n for (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n }\n var encode = function (arraybuffer) {\n var bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n };\n\n const lastBlobMap = new Map();\r\n const transparentBlobMap = new Map();\r\n function getTransparentBlobFor(width, height, dataURLOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const id = `${width}-${height}`;\r\n if ('OffscreenCanvas' in globalThis) {\r\n if (transparentBlobMap.has(id))\r\n return transparentBlobMap.get(id);\r\n const offscreen = new OffscreenCanvas(width, height);\r\n offscreen.getContext('2d');\r\n const blob = yield offscreen.convertToBlob(dataURLOptions);\r\n const arrayBuffer = yield blob.arrayBuffer();\r\n const base64 = encode(arrayBuffer);\r\n transparentBlobMap.set(id, base64);\r\n return base64;\r\n }\r\n else {\r\n return '';\r\n }\r\n });\r\n }\r\n const worker = self;\r\n worker.onmessage = function (e) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n if ('OffscreenCanvas' in globalThis) {\r\n const { id, bitmap, width, height, dataURLOptions } = e.data;\r\n const transparentBase64 = getTransparentBlobFor(width, height, dataURLOptions);\r\n const offscreen = new OffscreenCanvas(width, height);\r\n const ctx = offscreen.getContext('2d');\r\n ctx.drawImage(bitmap, 0, 0);\r\n bitmap.close();\r\n const blob = yield offscreen.convertToBlob(dataURLOptions);\r\n const type = blob.type;\r\n const arrayBuffer = yield blob.arrayBuffer();\r\n const base64 = encode(arrayBuffer);\r\n if (!lastBlobMap.has(id) && (yield transparentBase64) === base64) {\r\n lastBlobMap.set(id, base64);\r\n return worker.postMessage({ id });\r\n }\r\n if (lastBlobMap.get(id) === base64)\r\n return worker.postMessage({ id });\r\n worker.postMessage({\r\n id,\r\n type,\r\n base64,\r\n width,\r\n height,\r\n });\r\n lastBlobMap.set(id, base64);\r\n }\r\n else {\r\n return worker.postMessage({ id: e.data.id });\r\n }\r\n });\r\n };\n\n})();\n}, null);\n/* eslint-enable */\n\nexport { WorkerFactory as default };\n","import { __rest, __awaiter } from './../../../../../../ext/tslib/tslib.es6.js';\nimport { isBlocked } from '../../../utils.js';\nimport { CanvasContext } from '../../../../../types/dist/types.js';\nimport initCanvas2DMutationObserver from './2d.js';\nimport initCanvasContextObserver from './canvas.js';\nimport initCanvasWebGLMutationObserver from './webgl.js';\nimport WorkerFactory from '../../../../../../_virtual/image-bitmap-data-url-worker.js';\n\nclass CanvasManager {\r\n reset() {\r\n this.pendingCanvasMutations.clear();\r\n this.resetObservers && this.resetObservers();\r\n }\r\n freeze() {\r\n this.frozen = true;\r\n }\r\n unfreeze() {\r\n this.frozen = false;\r\n }\r\n lock() {\r\n this.locked = true;\r\n }\r\n unlock() {\r\n this.locked = false;\r\n }\r\n constructor(options) {\r\n this.pendingCanvasMutations = new Map();\r\n this.rafStamps = { latestId: 0, invokeId: null };\r\n this.frozen = false;\r\n this.locked = false;\r\n this.processMutation = (target, mutation) => {\r\n const newFrame = this.rafStamps.invokeId &&\r\n this.rafStamps.latestId !== this.rafStamps.invokeId;\r\n if (newFrame || !this.rafStamps.invokeId)\r\n this.rafStamps.invokeId = this.rafStamps.latestId;\r\n if (!this.pendingCanvasMutations.has(target)) {\r\n this.pendingCanvasMutations.set(target, []);\r\n }\r\n this.pendingCanvasMutations.get(target).push(mutation);\r\n };\r\n const { sampling = 'all', win, blockClass, blockSelector, recordCanvas, dataURLOptions, } = options;\r\n this.mutationCb = options.mutationCb;\r\n this.mirror = options.mirror;\r\n if (recordCanvas && sampling === 'all')\r\n this.initCanvasMutationObserver(win, blockClass, blockSelector);\r\n if (recordCanvas && typeof sampling === 'number')\r\n this.initCanvasFPSObserver(sampling, win, blockClass, blockSelector, {\r\n dataURLOptions,\r\n });\r\n }\r\n initCanvasFPSObserver(fps, win, blockClass, blockSelector, options) {\r\n const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, true);\r\n const snapshotInProgressMap = new Map();\r\n const worker = new WorkerFactory();\r\n worker.onmessage = (e) => {\r\n const { id } = e.data;\r\n snapshotInProgressMap.set(id, false);\r\n if (!('base64' in e.data))\r\n return;\r\n const { base64, type, width, height } = e.data;\r\n this.mutationCb({\r\n id,\r\n type: CanvasContext['2D'],\r\n commands: [\r\n {\r\n property: 'clearRect',\r\n args: [0, 0, width, height],\r\n },\r\n {\r\n property: 'drawImage',\r\n args: [\r\n {\r\n rr_type: 'ImageBitmap',\r\n args: [\r\n {\r\n rr_type: 'Blob',\r\n data: [{ rr_type: 'ArrayBuffer', base64 }],\r\n type,\r\n },\r\n ],\r\n },\r\n 0,\r\n 0,\r\n ],\r\n },\r\n ],\r\n });\r\n };\r\n const timeBetweenSnapshots = 1000 / fps;\r\n let lastSnapshotTime = 0;\r\n let rafId;\r\n const getCanvas = () => {\r\n const matchedCanvas = [];\r\n win.document.querySelectorAll('canvas').forEach((canvas) => {\r\n if (!isBlocked(canvas, blockClass, blockSelector, true)) {\r\n matchedCanvas.push(canvas);\r\n }\r\n });\r\n return matchedCanvas;\r\n };\r\n const takeCanvasSnapshots = (timestamp) => {\r\n if (lastSnapshotTime &&\r\n timestamp - lastSnapshotTime < timeBetweenSnapshots) {\r\n rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n return;\r\n }\r\n lastSnapshotTime = timestamp;\r\n getCanvas()\r\n .forEach((canvas) => __awaiter(this, void 0, void 0, function* () {\r\n var _a;\r\n const id = this.mirror.getId(canvas);\r\n if (snapshotInProgressMap.get(id))\r\n return;\r\n if (canvas.width === 0 || canvas.height === 0)\r\n return;\r\n snapshotInProgressMap.set(id, true);\r\n if (['webgl', 'webgl2'].includes(canvas.__context)) {\r\n const context = canvas.getContext(canvas.__context);\r\n if (((_a = context === null || context === void 0 ? void 0 : context.getContextAttributes()) === null || _a === void 0 ? void 0 : _a.preserveDrawingBuffer) === false) {\r\n context.clear(context.COLOR_BUFFER_BIT);\r\n }\r\n }\r\n const bitmap = yield createImageBitmap(canvas);\r\n worker.postMessage({\r\n id,\r\n bitmap,\r\n width: canvas.width,\r\n height: canvas.height,\r\n dataURLOptions: options.dataURLOptions,\r\n }, [bitmap]);\r\n }));\r\n rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n };\r\n rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n this.resetObservers = () => {\r\n canvasContextReset();\r\n cancelAnimationFrame(rafId);\r\n };\r\n }\r\n initCanvasMutationObserver(win, blockClass, blockSelector) {\r\n this.startRAFTimestamping();\r\n this.startPendingCanvasMutationFlusher();\r\n const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, false);\r\n const canvas2DReset = initCanvas2DMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector);\r\n const canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector, this.mirror);\r\n this.resetObservers = () => {\r\n canvasContextReset();\r\n canvas2DReset();\r\n canvasWebGL1and2Reset();\r\n };\r\n }\r\n startPendingCanvasMutationFlusher() {\r\n requestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n }\r\n startRAFTimestamping() {\r\n const setLatestRAFTimestamp = (timestamp) => {\r\n this.rafStamps.latestId = timestamp;\r\n requestAnimationFrame(setLatestRAFTimestamp);\r\n };\r\n requestAnimationFrame(setLatestRAFTimestamp);\r\n }\r\n flushPendingCanvasMutations() {\r\n this.pendingCanvasMutations.forEach((values, canvas) => {\r\n const id = this.mirror.getId(canvas);\r\n this.flushPendingCanvasMutationFor(canvas, id);\r\n });\r\n requestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n }\r\n flushPendingCanvasMutationFor(canvas, id) {\r\n if (this.frozen || this.locked) {\r\n return;\r\n }\r\n const valuesWithType = this.pendingCanvasMutations.get(canvas);\r\n if (!valuesWithType || id === -1)\r\n return;\r\n const values = valuesWithType.map((value) => {\r\n const rest = __rest(value, [\"type\"]);\r\n return rest;\r\n });\r\n const { type } = valuesWithType[0];\r\n this.mutationCb({ id, type, commands: values });\r\n this.pendingCanvasMutations.delete(canvas);\r\n }\r\n}\n\nexport { CanvasManager };\n","import { stringifyRule } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { StyleSheetMirror } from '../utils.js';\n\nclass StylesheetManager {\r\n constructor(options) {\r\n this.trackedLinkElements = new WeakSet();\r\n this.styleMirror = new StyleSheetMirror();\r\n this.mutationCb = options.mutationCb;\r\n this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\r\n }\r\n attachLinkElement(linkEl, childSn) {\r\n if ('_cssText' in childSn.attributes)\r\n this.mutationCb({\r\n adds: [],\r\n removes: [],\r\n texts: [],\r\n attributes: [\r\n {\r\n id: childSn.id,\r\n attributes: childSn\r\n .attributes,\r\n },\r\n ],\r\n });\r\n this.trackLinkElement(linkEl);\r\n }\r\n trackLinkElement(linkEl) {\r\n if (this.trackedLinkElements.has(linkEl))\r\n return;\r\n this.trackedLinkElements.add(linkEl);\r\n this.trackStylesheetInLinkElement(linkEl);\r\n }\r\n adoptStyleSheets(sheets, hostId) {\r\n if (sheets.length === 0)\r\n return;\r\n const adoptedStyleSheetData = {\r\n id: hostId,\r\n styleIds: [],\r\n };\r\n const styles = [];\r\n for (const sheet of sheets) {\r\n let styleId;\r\n if (!this.styleMirror.has(sheet)) {\r\n styleId = this.styleMirror.add(sheet);\r\n styles.push({\r\n styleId,\r\n rules: Array.from(sheet.rules || CSSRule, (r, index) => ({\r\n rule: stringifyRule(r),\r\n index,\r\n })),\r\n });\r\n }\r\n else\r\n styleId = this.styleMirror.getId(sheet);\r\n adoptedStyleSheetData.styleIds.push(styleId);\r\n }\r\n if (styles.length > 0)\r\n adoptedStyleSheetData.styles = styles;\r\n this.adoptedStyleSheetCb(adoptedStyleSheetData);\r\n }\r\n reset() {\r\n this.styleMirror.reset();\r\n this.trackedLinkElements = new WeakSet();\r\n }\r\n trackStylesheetInLinkElement(linkEl) {\r\n }\r\n}\n\nexport { StylesheetManager };\n","class ProcessedNodeManager {\r\n constructor() {\r\n this.nodeMap = new WeakMap();\r\n this.loop = true;\r\n this.periodicallyClear();\r\n }\r\n periodicallyClear() {\r\n requestAnimationFrame(() => {\r\n this.clear();\r\n if (this.loop)\r\n this.periodicallyClear();\r\n });\r\n }\r\n inOtherBuffer(node, thisBuffer) {\r\n const buffers = this.nodeMap.get(node);\r\n return (buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer));\r\n }\r\n add(node, buffer) {\r\n this.nodeMap.set(node, (this.nodeMap.get(node) || new Set()).add(buffer));\r\n }\r\n clear() {\r\n this.nodeMap = new WeakMap();\r\n }\r\n destroy() {\r\n this.loop = false;\r\n }\r\n}\n\nexport { ProcessedNodeManager as default };\n","import { createMirror, snapshot } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { initObservers, mutationBuffers } from './observer.js';\nimport { polyfill, nowTimestamp, on, getWindowWidth, getWindowHeight, getWindowScroll, isSerializedIframe, isSerializedStylesheet, hasShadowRoot } from '../utils.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/types.js';\nimport { IframeManager } from './iframe-manager.js';\nimport { ShadowDomManager } from './shadow-dom-manager.js';\nimport { CanvasManager } from './observers/canvas/canvas-manager.js';\nimport { StylesheetManager } from './stylesheet-manager.js';\nimport ProcessedNodeManager from './processed-node-manager.js';\nimport { callbackWrapper, unregisterErrorHandler, registerErrorHandler } from './error-handler.js';\n\nfunction wrapEvent(e) {\r\n return Object.assign(Object.assign({}, e), { timestamp: nowTimestamp() });\r\n}\r\nlet wrappedEmit;\r\nlet takeFullSnapshot;\r\nlet canvasManager;\r\nlet recording = false;\r\nconst mirror = createMirror();\r\nfunction record(options = {}) {\r\n const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'rr-block', blockSelector = null, ignoreClass = 'rr-ignore', ignoreSelector = null, maskTextClass = 'rr-mask', maskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskInputFn, maskTextFn, hooks, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordDOM = true, recordCanvas = false, recordCrossOriginIframes = false, recordAfter = options.recordAfter === 'DOMContentLoaded'\r\n ? options.recordAfter\r\n : 'load', userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = () => false, ignoreCSSAttributes = new Set([]), errorHandler, } = options;\r\n registerErrorHandler(errorHandler);\r\n const inEmittingFrame = recordCrossOriginIframes\r\n ? window.parent === window\r\n : true;\r\n let passEmitsToParent = false;\r\n if (!inEmittingFrame) {\r\n try {\r\n if (window.parent.document) {\r\n passEmitsToParent = false;\r\n }\r\n }\r\n catch (e) {\r\n passEmitsToParent = true;\r\n }\r\n }\r\n if (inEmittingFrame && !emit) {\r\n throw new Error('emit function is required');\r\n }\r\n if (mousemoveWait !== undefined && sampling.mousemove === undefined) {\r\n sampling.mousemove = mousemoveWait;\r\n }\r\n mirror.reset();\r\n const maskInputOptions = maskAllInputs === true\r\n ? {\r\n color: true,\r\n date: true,\r\n 'datetime-local': true,\r\n email: true,\r\n month: true,\r\n number: true,\r\n range: true,\r\n search: true,\r\n tel: true,\r\n text: true,\r\n time: true,\r\n url: true,\r\n week: true,\r\n textarea: true,\r\n select: true,\r\n password: true,\r\n }\r\n : _maskInputOptions !== undefined\r\n ? _maskInputOptions\r\n : { password: true };\r\n const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'\r\n ? {\r\n script: true,\r\n comment: true,\r\n headFavicon: true,\r\n headWhitespace: true,\r\n headMetaSocial: true,\r\n headMetaRobots: true,\r\n headMetaHttpEquiv: true,\r\n headMetaVerification: true,\r\n headMetaAuthorship: _slimDOMOptions === 'all',\r\n headMetaDescKeywords: _slimDOMOptions === 'all',\r\n }\r\n : _slimDOMOptions\r\n ? _slimDOMOptions\r\n : {};\r\n polyfill();\r\n let lastFullSnapshotEvent;\r\n let incrementalSnapshotCount = 0;\r\n const eventProcessor = (e) => {\r\n for (const plugin of plugins || []) {\r\n if (plugin.eventProcessor) {\r\n e = plugin.eventProcessor(e);\r\n }\r\n }\r\n if (packFn &&\r\n !passEmitsToParent) {\r\n e = packFn(e);\r\n }\r\n return e;\r\n };\r\n wrappedEmit = (e, isCheckout) => {\r\n var _a;\r\n if (((_a = mutationBuffers[0]) === null || _a === void 0 ? void 0 : _a.isFrozen()) &&\r\n e.type !== EventType.FullSnapshot &&\r\n !(e.type === EventType.IncrementalSnapshot &&\r\n e.data.source === IncrementalSource.Mutation)) {\r\n mutationBuffers.forEach((buf) => buf.unfreeze());\r\n }\r\n if (inEmittingFrame) {\r\n emit === null || emit === void 0 ? void 0 : emit(eventProcessor(e), isCheckout);\r\n }\r\n else if (passEmitsToParent) {\r\n const message = {\r\n type: 'rrweb',\r\n event: eventProcessor(e),\r\n origin: window.location.origin,\r\n isCheckout,\r\n };\r\n window.parent.postMessage(message, '*');\r\n }\r\n if (e.type === EventType.FullSnapshot) {\r\n lastFullSnapshotEvent = e;\r\n incrementalSnapshotCount = 0;\r\n }\r\n else if (e.type === EventType.IncrementalSnapshot) {\r\n if (e.data.source === IncrementalSource.Mutation &&\r\n e.data.isAttachIframe) {\r\n return;\r\n }\r\n incrementalSnapshotCount++;\r\n const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\r\n const exceedTime = checkoutEveryNms &&\r\n e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\r\n if (exceedCount || exceedTime) {\r\n takeFullSnapshot(true);\r\n }\r\n }\r\n };\r\n const wrappedMutationEmit = (m) => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Mutation }, m),\r\n }));\r\n };\r\n const wrappedScrollEmit = (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Scroll }, p),\r\n }));\r\n const wrappedCanvasMutationEmit = (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.CanvasMutation }, p),\r\n }));\r\n const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.AdoptedStyleSheet }, a),\r\n }));\r\n const stylesheetManager = new StylesheetManager({\r\n mutationCb: wrappedMutationEmit,\r\n adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit,\r\n });\r\n const iframeManager = new IframeManager({\r\n mirror,\r\n mutationCb: wrappedMutationEmit,\r\n stylesheetManager: stylesheetManager,\r\n recordCrossOriginIframes,\r\n wrappedEmit,\r\n });\r\n for (const plugin of plugins || []) {\r\n if (plugin.getMirror)\r\n plugin.getMirror({\r\n nodeMirror: mirror,\r\n crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\r\n crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror,\r\n });\r\n }\r\n const processedNodeManager = new ProcessedNodeManager();\r\n canvasManager = new CanvasManager({\r\n recordCanvas,\r\n mutationCb: wrappedCanvasMutationEmit,\r\n win: window,\r\n blockClass,\r\n blockSelector,\r\n mirror,\r\n sampling: sampling.canvas,\r\n dataURLOptions,\r\n });\r\n const shadowDomManager = new ShadowDomManager({\r\n mutationCb: wrappedMutationEmit,\r\n scrollCb: wrappedScrollEmit,\r\n bypassOptions: {\r\n blockClass,\r\n blockSelector,\r\n maskTextClass,\r\n maskTextSelector,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n dataURLOptions,\r\n maskTextFn,\r\n maskInputFn,\r\n recordCanvas,\r\n inlineImages,\r\n sampling,\r\n slimDOMOptions,\r\n iframeManager,\r\n stylesheetManager,\r\n canvasManager,\r\n keepIframeSrcFn,\r\n processedNodeManager,\r\n },\r\n mirror,\r\n });\r\n takeFullSnapshot = (isCheckout = false) => {\r\n if (!recordDOM) {\r\n return;\r\n }\r\n wrappedEmit(wrapEvent({\r\n type: EventType.Meta,\r\n data: {\r\n href: window.location.href,\r\n width: getWindowWidth(),\r\n height: getWindowHeight(),\r\n },\r\n }), isCheckout);\r\n stylesheetManager.reset();\r\n shadowDomManager.init();\r\n mutationBuffers.forEach((buf) => buf.lock());\r\n const node = snapshot(document, {\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n maskTextClass,\r\n maskTextSelector,\r\n inlineStylesheet,\r\n maskAllInputs: maskInputOptions,\r\n maskTextFn,\r\n slimDOM: slimDOMOptions,\r\n dataURLOptions,\r\n recordCanvas,\r\n inlineImages,\r\n onSerialize: (n) => {\r\n if (isSerializedIframe(n, mirror)) {\r\n iframeManager.addIframe(n);\r\n }\r\n if (isSerializedStylesheet(n, mirror)) {\r\n stylesheetManager.trackLinkElement(n);\r\n }\r\n if (hasShadowRoot(n)) {\r\n shadowDomManager.addShadowRoot(n.shadowRoot, document);\r\n }\r\n },\r\n onIframeLoad: (iframe, childSn) => {\r\n iframeManager.attachIframe(iframe, childSn);\r\n shadowDomManager.observeAttachShadow(iframe);\r\n },\r\n onStylesheetLoad: (linkEl, childSn) => {\r\n stylesheetManager.attachLinkElement(linkEl, childSn);\r\n },\r\n keepIframeSrcFn,\r\n });\r\n if (!node) {\r\n return console.warn('Failed to snapshot the document');\r\n }\r\n wrappedEmit(wrapEvent({\r\n type: EventType.FullSnapshot,\r\n data: {\r\n node,\r\n initialOffset: getWindowScroll(window),\r\n },\r\n }), isCheckout);\r\n mutationBuffers.forEach((buf) => buf.unlock());\r\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\r\n stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\r\n };\r\n try {\r\n const handlers = [];\r\n const observe = (doc) => {\r\n var _a;\r\n return callbackWrapper(initObservers)({\r\n mutationCb: wrappedMutationEmit,\r\n mousemoveCb: (positions, source) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source,\r\n positions,\r\n },\r\n })),\r\n mouseInteractionCb: (d) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.MouseInteraction }, d),\r\n })),\r\n scrollCb: wrappedScrollEmit,\r\n viewportResizeCb: (d) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.ViewportResize }, d),\r\n })),\r\n inputCb: (v) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Input }, v),\r\n })),\r\n mediaInteractionCb: (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.MediaInteraction }, p),\r\n })),\r\n styleSheetRuleCb: (r) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.StyleSheetRule }, r),\r\n })),\r\n styleDeclarationCb: (r) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.StyleDeclaration }, r),\r\n })),\r\n canvasMutationCb: wrappedCanvasMutationEmit,\r\n fontCb: (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Font }, p),\r\n })),\r\n selectionCb: (p) => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Selection }, p),\r\n }));\r\n },\r\n customElementCb: (c) => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.CustomElement }, c),\r\n }));\r\n },\r\n blockClass,\r\n ignoreClass,\r\n ignoreSelector,\r\n maskTextClass,\r\n maskTextSelector,\r\n maskInputOptions,\r\n inlineStylesheet,\r\n sampling,\r\n recordDOM,\r\n recordCanvas,\r\n inlineImages,\r\n userTriggeredOnInput,\r\n collectFonts,\r\n doc,\r\n maskInputFn,\r\n maskTextFn,\r\n keepIframeSrcFn,\r\n blockSelector,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n mirror,\r\n iframeManager,\r\n stylesheetManager,\r\n shadowDomManager,\r\n processedNodeManager,\r\n canvasManager,\r\n ignoreCSSAttributes,\r\n plugins: ((_a = plugins === null || plugins === void 0 ? void 0 : plugins.filter((p) => p.observer)) === null || _a === void 0 ? void 0 : _a.map((p) => ({\r\n observer: p.observer,\r\n options: p.options,\r\n callback: (payload) => wrappedEmit(wrapEvent({\r\n type: EventType.Plugin,\r\n data: {\r\n plugin: p.name,\r\n payload,\r\n },\r\n })),\r\n }))) || [],\r\n }, hooks);\r\n };\r\n iframeManager.addLoadListener((iframeEl) => {\r\n try {\r\n handlers.push(observe(iframeEl.contentDocument));\r\n }\r\n catch (error) {\r\n console.warn(error);\r\n }\r\n });\r\n const init = () => {\r\n takeFullSnapshot();\r\n handlers.push(observe(document));\r\n recording = true;\r\n };\r\n if (document.readyState === 'interactive' ||\r\n document.readyState === 'complete') {\r\n init();\r\n }\r\n else {\r\n handlers.push(on('DOMContentLoaded', () => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.DomContentLoaded,\r\n data: {},\r\n }));\r\n if (recordAfter === 'DOMContentLoaded')\r\n init();\r\n }));\r\n handlers.push(on('load', () => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.Load,\r\n data: {},\r\n }));\r\n if (recordAfter === 'load')\r\n init();\r\n }, window));\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n processedNodeManager.destroy();\r\n recording = false;\r\n unregisterErrorHandler();\r\n };\r\n }\r\n catch (error) {\r\n console.warn(error);\r\n }\r\n}\r\nrecord.addCustomEvent = (tag, payload) => {\r\n if (!recording) {\r\n throw new Error('please add custom event after start recording');\r\n }\r\n wrappedEmit(wrapEvent({\r\n type: EventType.Custom,\r\n data: {\r\n tag,\r\n payload,\r\n },\r\n }));\r\n};\r\nrecord.freezePage = () => {\r\n mutationBuffers.forEach((buf) => buf.freeze());\r\n};\r\nrecord.takeFullSnapshot = (isCheckout) => {\r\n if (!recording) {\r\n throw new Error('please take full snapshot after start recording');\r\n }\r\n takeFullSnapshot(isCheckout);\r\n};\r\nrecord.mirror = mirror;\n\nexport { record as default };\n","var EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n})(CanvasContext || {});\nvar MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {\n MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n return MediaInteractions2;\n})(MediaInteractions || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n ReplayerEvents2[\"Start\"] = \"start\";\n ReplayerEvents2[\"Pause\"] = \"pause\";\n ReplayerEvents2[\"Resume\"] = \"resume\";\n ReplayerEvents2[\"Resize\"] = \"resize\";\n ReplayerEvents2[\"Finish\"] = \"finish\";\n ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n ReplayerEvents2[\"Flush\"] = \"flush\";\n ReplayerEvents2[\"StateChange\"] = \"state-change\";\n ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n ReplayerEvents2[\"Destroy\"] = \"destroy\";\n return ReplayerEvents2;\n})(ReplayerEvents || {});\nexport {\n CanvasContext,\n EventType,\n IncrementalSource,\n MediaInteractions,\n MouseInteractions,\n PointerTypes,\n ReplayerEvents\n};\n//# sourceMappingURL=types.js.map\n","var Config = {\n DEBUG: false,\n LIB_VERSION: '2.59.0'\n};\n\nexport default Config;\n","// since es6 imports are static and we run unit tests from the console, window won't be defined when importing this file\nvar win;\nif (typeof(window) === 'undefined') {\n var loc = {\n hostname: ''\n };\n win = {\n navigator: { userAgent: '', onLine: true },\n document: {\n createElement: function() { return {}; },\n location: loc,\n referrer: ''\n },\n screen: { width: 0, height: 0 },\n location: loc,\n addEventListener: function() {},\n removeEventListener: function() {}\n };\n} else {\n win = window;\n}\n\nexport { win as window };\n","import { window } from './window';\n/**\n * Promise polyfill sourced from https://github.com/getify/native-promise-only.\n * Modified to\n * - remove UMD wrapper and export as an object, so that we don't globally polyfill Promise.\n * - rename access notation for dynamically referenced props to avoid minification, e.g. this.__NPO__ -> this['__NPO__']\n*/\n\n/*! Native Promise Only\n v0.8.1 (c) Kyle Simpson\n MIT License: http://getify.mit-license.org\n*/\n\n/*jshint validthis:true */\n'use strict';\n\nvar setImmediate = window['setImmediate'];\nvar builtInProp, cycle, schedulingQueue,\n ToString = Object.prototype.toString,\n timer = (typeof setImmediate !== 'undefined') ?\n function timer(fn) { return setImmediate(fn); } :\n setTimeout;\n\n// dammit, IE8.\ntry {\n Object.defineProperty({},'x',{});\n builtInProp = function builtInProp(obj,name,val,config) {\n return Object.defineProperty(obj,name,{\n value: val,\n writable: true,\n configurable: config !== false\n });\n };\n}\ncatch (err) {\n builtInProp = function builtInProp(obj,name,val) {\n obj[name] = val;\n return obj;\n };\n}\n\n// Note: using a queue instead of array for efficiency\nschedulingQueue = (function Queue() {\n var first, last, item;\n\n function Item(fn,self) {\n this.fn = fn;\n this.self = self;\n this.next = void 0;\n }\n\n return {\n add: function add(fn,self) {\n item = new Item(fn,self);\n if (last) {\n last.next = item;\n }\n else {\n first = item;\n }\n last = item;\n item = void 0;\n },\n drain: function drain() {\n var f = first;\n first = last = cycle = void 0;\n\n while (f) {\n f.fn.call(f.self);\n f = f.next;\n }\n }\n };\n})();\n\nfunction schedule(fn,self) {\n schedulingQueue.add(fn,self);\n if (!cycle) {\n cycle = timer(schedulingQueue.drain);\n }\n}\n\n// promise duck typing\nfunction isThenable(o) {\n var _then, oType = typeof o;\n\n if (o !== null && (oType === 'object' || oType === 'function')) {\n _then = o.then;\n }\n return typeof _then === 'function' ? _then : false;\n}\n\nfunction notify() {\n for (var i=0; i<this.chain.length; i++) {\n notifyIsolated(\n this,\n (this.state === 1) ? this.chain[i].success : this.chain[i].failure,\n this.chain[i]\n );\n }\n this.chain.length = 0;\n}\n\n// NOTE: This is a separate function to isolate\n// the `try..catch` so that other code can be\n// optimized better\nfunction notifyIsolated(self,cb,chain) {\n var ret, _then;\n try {\n if (cb === false) {\n chain.reject(self.msg);\n }\n else {\n if (cb === true) {\n ret = self.msg;\n }\n else {\n ret = cb.call(void 0,self.msg);\n }\n\n if (ret === chain.promise) {\n chain.reject(TypeError('Promise-chain cycle'));\n }\n // eslint-disable-next-line no-cond-assign\n else if (_then = isThenable(ret)) {\n _then.call(ret,chain.resolve,chain.reject);\n }\n else {\n chain.resolve(ret);\n }\n }\n }\n catch (err) {\n chain.reject(err);\n }\n}\n\nfunction resolve(msg) {\n var _then, self = this;\n\n // already triggered?\n if (self.triggered) { return; }\n\n self.triggered = true;\n\n // unwrap\n if (self.def) {\n self = self.def;\n }\n\n try {\n // eslint-disable-next-line no-cond-assign\n if (_then = isThenable(msg)) {\n schedule(function(){\n var defWrapper = new MakeDefWrapper(self);\n try {\n _then.call(msg,\n function $resolve$(){ resolve.apply(defWrapper,arguments); },\n function $reject$(){ reject.apply(defWrapper,arguments); }\n );\n }\n catch (err) {\n reject.call(defWrapper,err);\n }\n });\n }\n else {\n self.msg = msg;\n self.state = 1;\n if (self.chain.length > 0) {\n schedule(notify,self);\n }\n }\n }\n catch (err) {\n reject.call(new MakeDefWrapper(self),err);\n }\n}\n\nfunction reject(msg) {\n var self = this;\n\n // already triggered?\n if (self.triggered) { return; }\n\n self.triggered = true;\n\n // unwrap\n if (self.def) {\n self = self.def;\n }\n\n self.msg = msg;\n self.state = 2;\n if (self.chain.length > 0) {\n schedule(notify,self);\n }\n}\n\nfunction iteratePromises(Constructor,arr,resolver,rejecter) {\n for (var idx=0; idx<arr.length; idx++) {\n (function IIFE(idx){\n Constructor.resolve(arr[idx])\n .then(\n function $resolver$(msg){\n resolver(idx,msg);\n },\n rejecter\n );\n })(idx);\n }\n}\n\nfunction MakeDefWrapper(self) {\n this.def = self;\n this.triggered = false;\n}\n\nfunction MakeDef(self) {\n this.promise = self;\n this.state = 0;\n this.triggered = false;\n this.chain = [];\n this.msg = void 0;\n}\n\nfunction NpoPromise(executor) {\n if (typeof executor !== 'function') {\n throw TypeError('Not a function');\n }\n\n if (this['__NPO__'] !== 0) {\n throw TypeError('Not a promise');\n }\n\n // instance shadowing the inherited \"brand\"\n // to signal an already \"initialized\" promise\n this['__NPO__'] = 1;\n\n var def = new MakeDef(this);\n\n this['then'] = function then(success,failure) {\n var o = {\n success: typeof success === 'function' ? success : true,\n failure: typeof failure === 'function' ? failure : false\n };\n // Note: `then(..)` itself can be borrowed to be used against\n // a different promise constructor for making the chained promise,\n // by substituting a different `this` binding.\n o.promise = new this.constructor(function extractChain(resolve,reject) {\n if (typeof resolve !== 'function' || typeof reject !== 'function') {\n throw TypeError('Not a function');\n }\n\n o.resolve = resolve;\n o.reject = reject;\n });\n def.chain.push(o);\n\n if (def.state !== 0) {\n schedule(notify,def);\n }\n\n return o.promise;\n };\n this['catch'] = function $catch$(failure) {\n return this.then(void 0,failure);\n };\n\n try {\n executor.call(\n void 0,\n function publicResolve(msg){\n resolve.call(def,msg);\n },\n function publicReject(msg) {\n reject.call(def,msg);\n }\n );\n }\n catch (err) {\n reject.call(def,err);\n }\n}\n\nvar PromisePrototype = builtInProp({},'constructor',NpoPromise,\n /*configurable=*/false\n);\n\n // Note: Android 4 cannot use `Object.defineProperty(..)` here\nNpoPromise.prototype = PromisePrototype;\n\n// built-in \"brand\" to signal an \"uninitialized\" promise\nbuiltInProp(PromisePrototype,'__NPO__',0,\n /*configurable=*/false\n);\n\nbuiltInProp(NpoPromise,'resolve',function Promise$resolve(msg) {\n var Constructor = this;\n\n // spec mandated checks\n // note: best \"isPromise\" check that's practical for now\n if (msg && typeof msg === 'object' && msg['__NPO__'] === 1) {\n return msg;\n }\n\n return new Constructor(function executor(resolve,reject){\n if (typeof resolve !== 'function' || typeof reject !== 'function') {\n throw TypeError('Not a function');\n }\n\n resolve(msg);\n });\n});\n\nbuiltInProp(NpoPromise,'reject',function Promise$reject(msg) {\n return new this(function executor(resolve,reject){\n if (typeof resolve !== 'function' || typeof reject !== 'function') {\n throw TypeError('Not a function');\n }\n\n reject(msg);\n });\n});\n\nbuiltInProp(NpoPromise,'all',function Promise$all(arr) {\n var Constructor = this;\n\n // spec mandated checks\n if (ToString.call(arr) !== '[object Array]') {\n return Constructor.reject(TypeError('Not an array'));\n }\n if (arr.length === 0) {\n return Constructor.resolve([]);\n }\n\n return new Constructor(function executor(resolve,reject){\n if (typeof resolve !== 'function' || typeof reject !== 'function') {\n throw TypeError('Not a function');\n }\n\n var len = arr.length, msgs = Array(len), count = 0;\n\n iteratePromises(Constructor,arr,function resolver(idx,msg) {\n msgs[idx] = msg;\n if (++count === len) {\n resolve(msgs);\n }\n },reject);\n });\n});\n\nbuiltInProp(NpoPromise,'race',function Promise$race(arr) {\n var Constructor = this;\n\n // spec mandated checks\n if (ToString.call(arr) !== '[object Array]') {\n return Constructor.reject(TypeError('Not an array'));\n }\n\n return new Constructor(function executor(resolve,reject){\n if (typeof resolve !== 'function' || typeof reject !== 'function') {\n throw TypeError('Not a function');\n }\n\n iteratePromises(Constructor,arr,function resolver(idx,msg){\n resolve(msg);\n },reject);\n });\n});\n\nvar PromisePolyfill;\nif (typeof Promise !== 'undefined' && Promise.toString().indexOf('[native code]') !== -1) {\n PromisePolyfill = Promise;\n} else {\n PromisePolyfill = NpoPromise;\n}\n\nexport { PromisePolyfill as Promise, NpoPromise };\n","/* eslint camelcase: \"off\", eqeqeq: \"off\" */\nimport Config from './config';\nimport { NpoPromise } from './promise-polyfill';\nimport { window } from './window';\n\n// Maximum allowed session recording length\nvar MAX_RECORDING_MS = 24 * 60 * 60 * 1000; // 24 hours\n// Maximum allowed value for minimum session recording length\nvar MAX_VALUE_FOR_MIN_RECORDING_MS = 8 * 1000; // 8 seconds\n\n/*\n * Saved references to long variable names, so that closure compiler can\n * minimize file size.\n */\n\nvar ArrayProto = Array.prototype,\n FuncProto = Function.prototype,\n ObjProto = Object.prototype,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty,\n windowConsole = window.console,\n navigator = window.navigator,\n document = window.document,\n windowOpera = window.opera,\n screen = window.screen,\n userAgent = navigator.userAgent;\n\nvar nativeBind = FuncProto.bind,\n nativeForEach = ArrayProto.forEach,\n nativeIndexOf = ArrayProto.indexOf,\n nativeMap = ArrayProto.map,\n nativeIsArray = Array.isArray,\n breaker = {};\n\nvar _ = {\n trim: function(str) {\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n }\n};\n\n// Console override\nvar console = {\n /** @type {function(...*)} */\n log: function() {\n if (Config.DEBUG && !_.isUndefined(windowConsole) && windowConsole) {\n try {\n windowConsole.log.apply(windowConsole, arguments);\n } catch (err) {\n _.each(arguments, function(arg) {\n windowConsole.log(arg);\n });\n }\n }\n },\n /** @type {function(...*)} */\n warn: function() {\n if (Config.DEBUG && !_.isUndefined(windowConsole) && windowConsole) {\n var args = ['Mixpanel warning:'].concat(_.toArray(arguments));\n try {\n windowConsole.warn.apply(windowConsole, args);\n } catch (err) {\n _.each(args, function(arg) {\n windowConsole.warn(arg);\n });\n }\n }\n },\n /** @type {function(...*)} */\n error: function() {\n if (Config.DEBUG && !_.isUndefined(windowConsole) && windowConsole) {\n var args = ['Mixpanel error:'].concat(_.toArray(arguments));\n try {\n windowConsole.error.apply(windowConsole, args);\n } catch (err) {\n _.each(args, function(arg) {\n windowConsole.error(arg);\n });\n }\n }\n },\n /** @type {function(...*)} */\n critical: function() {\n if (!_.isUndefined(windowConsole) && windowConsole) {\n var args = ['Mixpanel error:'].concat(_.toArray(arguments));\n try {\n windowConsole.error.apply(windowConsole, args);\n } catch (err) {\n _.each(args, function(arg) {\n windowConsole.error(arg);\n });\n }\n }\n }\n};\n\nvar log_func_with_prefix = function(func, prefix) {\n return function() {\n arguments[0] = '[' + prefix + '] ' + arguments[0];\n return func.apply(console, arguments);\n };\n};\nvar console_with_prefix = function(prefix) {\n return {\n log: log_func_with_prefix(console.log, prefix),\n error: log_func_with_prefix(console.error, prefix),\n critical: log_func_with_prefix(console.critical, prefix)\n };\n};\n\n\nvar safewrap = function(f) {\n return function() {\n try {\n return f.apply(this, arguments);\n } catch (e) {\n console.critical('Implementation error. Please turn on debug and contact support@mixpanel.com.');\n if (Config.DEBUG){\n console.critical(e);\n }\n }\n };\n};\n\nvar safewrapClass = function(klass) {\n var proto = klass.prototype;\n for (var func in proto) {\n if (typeof(proto[func]) === 'function') {\n proto[func] = safewrap(proto[func]);\n }\n }\n};\n\n\n// UNDERSCORE\n// Embed part of the Underscore Library\n_.bind = function(func, context) {\n var args, bound;\n if (nativeBind && func.bind === nativeBind) {\n return nativeBind.apply(func, slice.call(arguments, 1));\n }\n if (!_.isFunction(func)) {\n throw new TypeError();\n }\n args = slice.call(arguments, 2);\n bound = function() {\n if (!(this instanceof bound)) {\n return func.apply(context, args.concat(slice.call(arguments)));\n }\n var ctor = {};\n ctor.prototype = func.prototype;\n var self = new ctor();\n ctor.prototype = null;\n var result = func.apply(self, args.concat(slice.call(arguments)));\n if (Object(result) === result) {\n return result;\n }\n return self;\n };\n return bound;\n};\n\n/**\n * @param {*=} obj\n * @param {function(...*)=} iterator\n * @param {Object=} context\n */\n_.each = function(obj, iterator, context) {\n if (obj === null || obj === undefined) {\n return;\n }\n if (nativeForEach && obj.forEach === nativeForEach) {\n obj.forEach(iterator, context);\n } else if (obj.length === +obj.length) {\n for (var i = 0, l = obj.length; i < l; i++) {\n if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) {\n return;\n }\n }\n } else {\n for (var key in obj) {\n if (hasOwnProperty.call(obj, key)) {\n if (iterator.call(context, obj[key], key, obj) === breaker) {\n return;\n }\n }\n }\n }\n};\n\n_.extend = function(obj) {\n _.each(slice.call(arguments, 1), function(source) {\n for (var prop in source) {\n if (source[prop] !== void 0) {\n obj[prop] = source[prop];\n }\n }\n });\n return obj;\n};\n\n_.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n};\n\n// from a comment on http://dbj.org/dbj/?p=286\n// fails on only one very rare and deliberate custom object:\n// var bomb = { toString : undefined, valueOf: function(o) { return \"function BOMBA!\"; }};\n_.isFunction = function(f) {\n try {\n return /^\\s*\\bfunction\\b/.test(f);\n } catch (x) {\n return false;\n }\n};\n\n_.isArguments = function(obj) {\n return !!(obj && hasOwnProperty.call(obj, 'callee'));\n};\n\n_.toArray = function(iterable) {\n if (!iterable) {\n return [];\n }\n if (iterable.toArray) {\n return iterable.toArray();\n }\n if (_.isArray(iterable)) {\n return slice.call(iterable);\n }\n if (_.isArguments(iterable)) {\n return slice.call(iterable);\n }\n return _.values(iterable);\n};\n\n_.map = function(arr, callback, context) {\n if (nativeMap && arr.map === nativeMap) {\n return arr.map(callback, context);\n } else {\n var results = [];\n _.each(arr, function(item) {\n results.push(callback.call(context, item));\n });\n return results;\n }\n};\n\n_.keys = function(obj) {\n var results = [];\n if (obj === null) {\n return results;\n }\n _.each(obj, function(value, key) {\n results[results.length] = key;\n });\n return results;\n};\n\n_.values = function(obj) {\n var results = [];\n if (obj === null) {\n return results;\n }\n _.each(obj, function(value) {\n results[results.length] = value;\n });\n return results;\n};\n\n_.include = function(obj, target) {\n var found = false;\n if (obj === null) {\n return found;\n }\n if (nativeIndexOf && obj.indexOf === nativeIndexOf) {\n return obj.indexOf(target) != -1;\n }\n _.each(obj, function(value) {\n if (found || (found = (value === target))) {\n return breaker;\n }\n });\n return found;\n};\n\n_.includes = function(str, needle) {\n return str.indexOf(needle) !== -1;\n};\n\n// Underscore Addons\n_.inherit = function(subclass, superclass) {\n subclass.prototype = new superclass();\n subclass.prototype.constructor = subclass;\n subclass.superclass = superclass.prototype;\n return subclass;\n};\n\n_.isObject = function(obj) {\n return (obj === Object(obj) && !_.isArray(obj));\n};\n\n_.isEmptyObject = function(obj) {\n if (_.isObject(obj)) {\n for (var key in obj) {\n if (hasOwnProperty.call(obj, key)) {\n return false;\n }\n }\n return true;\n }\n return false;\n};\n\n_.isUndefined = function(obj) {\n return obj === void 0;\n};\n\n_.isString = function(obj) {\n return toString.call(obj) == '[object String]';\n};\n\n_.isDate = function(obj) {\n return toString.call(obj) == '[object Date]';\n};\n\n_.isNumber = function(obj) {\n return toString.call(obj) == '[object Number]';\n};\n\n_.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n};\n\n_.encodeDates = function(obj) {\n _.each(obj, function(v, k) {\n if (_.isDate(v)) {\n obj[k] = _.formatDate(v);\n } else if (_.isObject(v)) {\n obj[k] = _.encodeDates(v); // recurse\n }\n });\n return obj;\n};\n\n_.timestamp = function() {\n Date.now = Date.now || function() {\n return +new Date;\n };\n return Date.now();\n};\n\n_.formatDate = function(d) {\n // YYYY-MM-DDTHH:MM:SS in UTC\n function pad(n) {\n return n < 10 ? '0' + n : n;\n }\n return d.getUTCFullYear() + '-' +\n pad(d.getUTCMonth() + 1) + '-' +\n pad(d.getUTCDate()) + 'T' +\n pad(d.getUTCHours()) + ':' +\n pad(d.getUTCMinutes()) + ':' +\n pad(d.getUTCSeconds());\n};\n\n_.strip_empty_properties = function(p) {\n var ret = {};\n _.each(p, function(v, k) {\n if (_.isString(v) && v.length > 0) {\n ret[k] = v;\n }\n });\n return ret;\n};\n\n/*\n * this function returns a copy of object after truncating it. If\n * passed an Array or Object it will iterate through obj and\n * truncate all the values recursively.\n */\n_.truncate = function(obj, length) {\n var ret;\n\n if (typeof(obj) === 'string') {\n ret = obj.slice(0, length);\n } else if (_.isArray(obj)) {\n ret = [];\n _.each(obj, function(val) {\n ret.push(_.truncate(val, length));\n });\n } else if (_.isObject(obj)) {\n ret = {};\n _.each(obj, function(val, key) {\n ret[key] = _.truncate(val, length);\n });\n } else {\n ret = obj;\n }\n\n return ret;\n};\n\n_.JSONEncode = (function() {\n return function(mixed_val) {\n var value = mixed_val;\n var quote = function(string) {\n var escapable = /[\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g; // eslint-disable-line no-control-regex\n var meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n };\n\n escapable.lastIndex = 0;\n return escapable.test(string) ?\n '\"' + string.replace(escapable, function(a) {\n var c = meta[a];\n return typeof c === 'string' ? c :\n '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' :\n '\"' + string + '\"';\n };\n\n var str = function(key, holder) {\n var gap = '';\n var indent = ' ';\n var i = 0; // The loop counter.\n var k = ''; // The member key.\n var v = ''; // The member value.\n var length = 0;\n var mind = gap;\n var partial = [];\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n if (value && typeof value === 'object' &&\n typeof value.toJSON === 'function') {\n value = value.toJSON(key);\n }\n\n // What happens next depends on the value's type.\n switch (typeof value) {\n case 'string':\n return quote(value);\n\n case 'number':\n // JSON numbers must be finite. Encode non-finite numbers as null.\n return isFinite(value) ? String(value) : 'null';\n\n case 'boolean':\n case 'null':\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce 'null'. The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n case 'object':\n // If the type is 'object', we might be dealing with an object or an array or\n // null.\n // Due to a specification blunder in ECMAScript, typeof null is 'object',\n // so watch out for that case.\n if (!value) {\n return 'null';\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n gap += indent;\n partial = [];\n\n // Is the value an array?\n if (toString.apply(value) === '[object Array]') {\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n v = partial.length === 0 ? '[]' :\n gap ? '[\\n' + gap +\n partial.join(',\\n' + gap) + '\\n' +\n mind + ']' :\n '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n\n // Iterate through all of the keys in the object.\n for (k in value) {\n if (hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n v = partial.length === 0 ? '{}' :\n gap ? '{' + partial.join(',') + '' +\n mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n };\n\n // Make a fake root object containing our value under the key of ''.\n // Return the result of stringifying the value.\n return str('', {\n '': value\n });\n };\n})();\n\n/**\n * From https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js\n * Slightly modified to throw a real Error rather than a POJO\n */\n_.JSONDecode = (function() {\n var at, // The index of the current character\n ch, // The current character\n escapee = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n 'b': '\\b',\n 'f': '\\f',\n 'n': '\\n',\n 'r': '\\r',\n 't': '\\t'\n },\n text,\n error = function(m) {\n var e = new SyntaxError(m);\n e.at = at;\n e.text = text;\n throw e;\n },\n next = function(c) {\n // If a c parameter is provided, verify that it matches the current character.\n if (c && c !== ch) {\n error('Expected \\'' + c + '\\' instead of \\'' + ch + '\\'');\n }\n // Get the next character. When there are no more characters,\n // return the empty string.\n ch = text.charAt(at);\n at += 1;\n return ch;\n },\n number = function() {\n // Parse a number value.\n var number,\n string = '';\n\n if (ch === '-') {\n string = '-';\n next('-');\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n if (ch === '.') {\n string += '.';\n while (next() && ch >= '0' && ch <= '9') {\n string += ch;\n }\n }\n if (ch === 'e' || ch === 'E') {\n string += ch;\n next();\n if (ch === '-' || ch === '+') {\n string += ch;\n next();\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n }\n number = +string;\n if (!isFinite(number)) {\n error('Bad number');\n } else {\n return number;\n }\n },\n\n string = function() {\n // Parse a string value.\n var hex,\n i,\n string = '',\n uffff;\n // When parsing for string values, we must look for \" and \\ characters.\n if (ch === '\"') {\n while (next()) {\n if (ch === '\"') {\n next();\n return string;\n }\n if (ch === '\\\\') {\n next();\n if (ch === 'u') {\n uffff = 0;\n for (i = 0; i < 4; i += 1) {\n hex = parseInt(next(), 16);\n if (!isFinite(hex)) {\n break;\n }\n uffff = uffff * 16 + hex;\n }\n string += String.fromCharCode(uffff);\n } else if (typeof escapee[ch] === 'string') {\n string += escapee[ch];\n } else {\n break;\n }\n } else {\n string += ch;\n }\n }\n }\n error('Bad string');\n },\n white = function() {\n // Skip whitespace.\n while (ch && ch <= ' ') {\n next();\n }\n },\n word = function() {\n // true, false, or null.\n switch (ch) {\n case 't':\n next('t');\n next('r');\n next('u');\n next('e');\n return true;\n case 'f':\n next('f');\n next('a');\n next('l');\n next('s');\n next('e');\n return false;\n case 'n':\n next('n');\n next('u');\n next('l');\n next('l');\n return null;\n }\n error('Unexpected \"' + ch + '\"');\n },\n value, // Placeholder for the value function.\n array = function() {\n // Parse an array value.\n var array = [];\n\n if (ch === '[') {\n next('[');\n white();\n if (ch === ']') {\n next(']');\n return array; // empty array\n }\n while (ch) {\n array.push(value());\n white();\n if (ch === ']') {\n next(']');\n return array;\n }\n next(',');\n white();\n }\n }\n error('Bad array');\n },\n object = function() {\n // Parse an object value.\n var key,\n object = {};\n\n if (ch === '{') {\n next('{');\n white();\n if (ch === '}') {\n next('}');\n return object; // empty object\n }\n while (ch) {\n key = string();\n white();\n next(':');\n if (Object.hasOwnProperty.call(object, key)) {\n error('Duplicate key \"' + key + '\"');\n }\n object[key] = value();\n white();\n if (ch === '}') {\n next('}');\n return object;\n }\n next(',');\n white();\n }\n }\n error('Bad object');\n };\n\n value = function() {\n // Parse a JSON value. It could be an object, an array, a string,\n // a number, or a word.\n white();\n switch (ch) {\n case '{':\n return object();\n case '[':\n return array();\n case '\"':\n return string();\n case '-':\n return number();\n default:\n return ch >= '0' && ch <= '9' ? number() : word();\n }\n };\n\n // Return the json_parse function. It will have access to all of the\n // above functions and variables.\n return function(source) {\n var result;\n\n text = source;\n at = 0;\n ch = ' ';\n result = value();\n white();\n if (ch) {\n error('Syntax error');\n }\n\n return result;\n };\n})();\n\n_.base64Encode = function(data) {\n var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,\n ac = 0,\n enc = '',\n tmp_arr = [];\n\n if (!data) {\n return data;\n }\n\n data = _.utf8Encode(data);\n\n do { // pack three octets into four hexets\n o1 = data.charCodeAt(i++);\n o2 = data.charCodeAt(i++);\n o3 = data.charCodeAt(i++);\n\n bits = o1 << 16 | o2 << 8 | o3;\n\n h1 = bits >> 18 & 0x3f;\n h2 = bits >> 12 & 0x3f;\n h3 = bits >> 6 & 0x3f;\n h4 = bits & 0x3f;\n\n // use hexets to index into b64, and append result to encoded string\n tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\n } while (i < data.length);\n\n enc = tmp_arr.join('');\n\n switch (data.length % 3) {\n case 1:\n enc = enc.slice(0, -2) + '==';\n break;\n case 2:\n enc = enc.slice(0, -1) + '=';\n break;\n }\n\n return enc;\n};\n\n_.utf8Encode = function(string) {\n string = (string + '').replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n var utftext = '',\n start,\n end;\n var stringl = 0,\n n;\n\n start = end = 0;\n stringl = string.length;\n\n for (n = 0; n < stringl; n++) {\n var c1 = string.charCodeAt(n);\n var enc = null;\n\n if (c1 < 128) {\n end++;\n } else if ((c1 > 127) && (c1 < 2048)) {\n enc = String.fromCharCode((c1 >> 6) | 192, (c1 & 63) | 128);\n } else {\n enc = String.fromCharCode((c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128);\n }\n if (enc !== null) {\n if (end > start) {\n utftext += string.substring(start, end);\n }\n utftext += enc;\n start = end = n + 1;\n }\n }\n\n if (end > start) {\n utftext += string.substring(start, string.length);\n }\n\n return utftext;\n};\n\n_.UUID = (function() {\n\n // Time-based entropy\n var T = function() {\n var time = 1 * new Date(); // cross-browser version of Date.now()\n var ticks;\n if (window.performance && window.performance.now) {\n ticks = window.performance.now();\n } else {\n // fall back to busy loop\n ticks = 0;\n\n // this while loop figures how many browser ticks go by\n // before 1*new Date() returns a new number, ie the amount\n // of ticks that go by per millisecond\n while (time == 1 * new Date()) {\n ticks++;\n }\n }\n return time.toString(16) + Math.floor(ticks).toString(16);\n };\n\n // Math.Random entropy\n var R = function() {\n return Math.random().toString(16).replace('.', '');\n };\n\n // User agent entropy\n // This function takes the user agent string, and then xors\n // together each sequence of 8 bytes. This produces a final\n // sequence of 8 bytes which it returns as hex.\n var UA = function() {\n var ua = userAgent,\n i, ch, buffer = [],\n ret = 0;\n\n function xor(result, byte_array) {\n var j, tmp = 0;\n for (j = 0; j < byte_array.length; j++) {\n tmp |= (buffer[j] << j * 8);\n }\n return result ^ tmp;\n }\n\n for (i = 0; i < ua.length; i++) {\n ch = ua.charCodeAt(i);\n buffer.unshift(ch & 0xFF);\n if (buffer.length >= 4) {\n ret = xor(ret, buffer);\n buffer = [];\n }\n }\n\n if (buffer.length > 0) {\n ret = xor(ret, buffer);\n }\n\n return ret.toString(16);\n };\n\n return function() {\n var se = (screen.height * screen.width).toString(16);\n return (T() + '-' + R() + '-' + UA() + '-' + se + '-' + T());\n };\n})();\n\n// _.isBlockedUA()\n// This is to block various web spiders from executing our JS and\n// sending false tracking data\nvar BLOCKED_UA_STRS = [\n 'ahrefsbot',\n 'ahrefssiteaudit',\n 'amazonbot',\n 'baiduspider',\n 'bingbot',\n 'bingpreview',\n 'chrome-lighthouse',\n 'facebookexternal',\n 'petalbot',\n 'pinterest',\n 'screaming frog',\n 'yahoo! slurp',\n 'yandex',\n\n // a whole bunch of goog-specific crawlers\n // https://developers.google.com/search/docs/advanced/crawling/overview-google-crawlers\n 'adsbot-google',\n 'apis-google',\n 'duplexweb-google',\n 'feedfetcher-google',\n 'google favicon',\n 'google web preview',\n 'google-read-aloud',\n 'googlebot',\n 'googleweblight',\n 'mediapartners-google',\n 'storebot-google'\n];\n_.isBlockedUA = function(ua) {\n var i;\n ua = ua.toLowerCase();\n for (i = 0; i < BLOCKED_UA_STRS.length; i++) {\n if (ua.indexOf(BLOCKED_UA_STRS[i]) !== -1) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * @param {Object=} formdata\n * @param {string=} arg_separator\n */\n_.HTTPBuildQuery = function(formdata, arg_separator) {\n var use_val, use_key, tmp_arr = [];\n\n if (_.isUndefined(arg_separator)) {\n arg_separator = '&';\n }\n\n _.each(formdata, function(val, key) {\n use_val = encodeURIComponent(val.toString());\n use_key = encodeURIComponent(key);\n tmp_arr[tmp_arr.length] = use_key + '=' + use_val;\n });\n\n return tmp_arr.join(arg_separator);\n};\n\n_.getQueryParam = function(url, param) {\n // Expects a raw URL\n\n param = param.replace(/[[]/g, '\\\\[').replace(/[\\]]/g, '\\\\]');\n var regexS = '[\\\\?&]' + param + '=([^&#]*)',\n regex = new RegExp(regexS),\n results = regex.exec(url);\n if (results === null || (results && typeof(results[1]) !== 'string' && results[1].length)) {\n return '';\n } else {\n var result = results[1];\n try {\n result = decodeURIComponent(result);\n } catch(err) {\n console.error('Skipping decoding for malformed query param: ' + result);\n }\n return result.replace(/\\+/g, ' ');\n }\n};\n\n\n// _.cookie\n// Methods partially borrowed from quirksmode.org/js/cookies.html\n_.cookie = {\n get: function(name) {\n var nameEQ = name + '=';\n var ca = document.cookie.split(';');\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return decodeURIComponent(c.substring(nameEQ.length, c.length));\n }\n }\n return null;\n },\n\n parse: function(name) {\n var cookie;\n try {\n cookie = _.JSONDecode(_.cookie.get(name)) || {};\n } catch (err) {\n // noop\n }\n return cookie;\n },\n\n set_seconds: function(name, value, seconds, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '',\n expires = '',\n secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (seconds) {\n var date = new Date();\n date.setTime(date.getTime() + (seconds * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n document.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n },\n\n set: function(name, value, days, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '', expires = '', secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n var new_cookie_val = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n document.cookie = new_cookie_val;\n return new_cookie_val;\n },\n\n remove: function(name, is_cross_subdomain, domain_override) {\n _.cookie.set(name, '', -1, is_cross_subdomain, false, false, domain_override);\n }\n};\n\nvar _localStorageSupported = null;\nvar localStorageSupported = function(storage, forceCheck) {\n if (_localStorageSupported !== null && !forceCheck) {\n return _localStorageSupported;\n }\n\n var supported = true;\n try {\n storage = storage || window.localStorage;\n var key = '__mplss_' + cheap_guid(8),\n val = 'xyz';\n storage.setItem(key, val);\n if (storage.getItem(key) !== val) {\n supported = false;\n }\n storage.removeItem(key);\n } catch (err) {\n supported = false;\n }\n\n _localStorageSupported = supported;\n return supported;\n};\n\n// _.localStorage\n_.localStorage = {\n is_supported: function(force_check) {\n var supported = localStorageSupported(null, force_check);\n if (!supported) {\n console.error('localStorage unsupported; falling back to cookie store');\n }\n return supported;\n },\n\n error: function(msg) {\n console.error('localStorage error: ' + msg);\n },\n\n get: function(name) {\n try {\n return window.localStorage.getItem(name);\n } catch (err) {\n _.localStorage.error(err);\n }\n return null;\n },\n\n parse: function(name) {\n try {\n return _.JSONDecode(_.localStorage.get(name)) || {};\n } catch (err) {\n // noop\n }\n return null;\n },\n\n set: function(name, value) {\n try {\n window.localStorage.setItem(name, value);\n } catch (err) {\n _.localStorage.error(err);\n }\n },\n\n remove: function(name) {\n try {\n window.localStorage.removeItem(name);\n } catch (err) {\n _.localStorage.error(err);\n }\n }\n};\n\n_.register_event = (function() {\n // written by Dean Edwards, 2005\n // with input from Tino Zijdel - crisp@xs4all.nl\n // with input from Carl Sverre - mail@carlsverre.com\n // with input from Mixpanel\n // http://dean.edwards.name/weblog/2005/10/add-event/\n // https://gist.github.com/1930440\n\n /**\n * @param {Object} element\n * @param {string} type\n * @param {function(...*)} handler\n * @param {boolean=} oldSchool\n * @param {boolean=} useCapture\n */\n var register_event = function(element, type, handler, oldSchool, useCapture) {\n if (!element) {\n console.error('No valid element provided to register_event');\n return;\n }\n\n if (element.addEventListener && !oldSchool) {\n element.addEventListener(type, handler, !!useCapture);\n } else {\n var ontype = 'on' + type;\n var old_handler = element[ontype]; // can be undefined\n element[ontype] = makeHandler(element, handler, old_handler);\n }\n };\n\n function makeHandler(element, new_handler, old_handlers) {\n var handler = function(event) {\n event = event || fixEvent(window.event);\n\n // this basically happens in firefox whenever another script\n // overwrites the onload callback and doesn't pass the event\n // object to previously defined callbacks. All the browsers\n // that don't define window.event implement addEventListener\n // so the dom_loaded handler will still be fired as usual.\n if (!event) {\n return undefined;\n }\n\n var ret = true;\n var old_result, new_result;\n\n if (_.isFunction(old_handlers)) {\n old_result = old_handlers(event);\n }\n new_result = new_handler.call(element, event);\n\n if ((false === old_result) || (false === new_result)) {\n ret = false;\n }\n\n return ret;\n };\n\n return handler;\n }\n\n function fixEvent(event) {\n if (event) {\n event.preventDefault = fixEvent.preventDefault;\n event.stopPropagation = fixEvent.stopPropagation;\n }\n return event;\n }\n fixEvent.preventDefault = function() {\n this.returnValue = false;\n };\n fixEvent.stopPropagation = function() {\n this.cancelBubble = true;\n };\n\n return register_event;\n})();\n\n\nvar TOKEN_MATCH_REGEX = new RegExp('^(\\\\w*)\\\\[(\\\\w+)([=~\\\\|\\\\^\\\\$\\\\*]?)=?\"?([^\\\\]\"]*)\"?\\\\]$');\n\n_.dom_query = (function() {\n /* document.getElementsBySelector(selector)\n - returns an array of element objects from the current document\n matching the CSS selector. Selectors can contain element names,\n class names and ids and can be nested. For example:\n\n elements = document.getElementsBySelector('div#main p a.external')\n\n Will return an array of all 'a' elements with 'external' in their\n class attribute that are contained inside 'p' elements that are\n contained inside the 'div' element which has id=\"main\"\n\n New in version 0.4: Support for CSS2 and CSS3 attribute selectors:\n See http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\n Version 0.4 - Simon Willison, March 25th 2003\n -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows\n -- Opera 7 fails\n\n Version 0.5 - Carl Sverre, Jan 7th 2013\n -- Now uses jQuery-esque `hasClass` for testing class name\n equality. This fixes a bug related to '-' characters being\n considered not part of a 'word' in regex.\n */\n\n function getAllChildren(e) {\n // Returns all children of element. Workaround required for IE5/Windows. Ugh.\n return e.all ? e.all : e.getElementsByTagName('*');\n }\n\n var bad_whitespace = /[\\t\\r\\n]/g;\n\n function hasClass(elem, selector) {\n var className = ' ' + selector + ' ';\n return ((' ' + elem.className + ' ').replace(bad_whitespace, ' ').indexOf(className) >= 0);\n }\n\n function getElementsBySelector(selector) {\n // Attempt to fail gracefully in lesser browsers\n if (!document.getElementsByTagName) {\n return [];\n }\n // Split selector in to tokens\n var tokens = selector.split(' ');\n var token, bits, tagName, found, foundCount, i, j, k, elements, currentContextIndex;\n var currentContext = [document];\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i].replace(/^\\s+/, '').replace(/\\s+$/, '');\n if (token.indexOf('#') > -1) {\n // Token is an ID selector\n bits = token.split('#');\n tagName = bits[0];\n var id = bits[1];\n var element = document.getElementById(id);\n if (!element || (tagName && element.nodeName.toLowerCase() != tagName)) {\n // element not found or tag with that ID not found, return false\n return [];\n }\n // Set currentContext to contain just this element\n currentContext = [element];\n continue; // Skip to next token\n }\n if (token.indexOf('.') > -1) {\n // Token contains a class selector\n bits = token.split('.');\n tagName = bits[0];\n var className = bits[1];\n if (!tagName) {\n tagName = '*';\n }\n // Get elements matching tag, filter them for class selector\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (found[j].className &&\n _.isString(found[j].className) && // some SVG elements have classNames which are not strings\n hasClass(found[j], className)\n ) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n continue; // Skip to next token\n }\n // Code to deal with attribute selectors\n var token_match = token.match(TOKEN_MATCH_REGEX);\n if (token_match) {\n tagName = token_match[1];\n var attrName = token_match[2];\n var attrOperator = token_match[3];\n var attrValue = token_match[4];\n if (!tagName) {\n tagName = '*';\n }\n // Grab all of the tagName elements within current context\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n var checkFunction; // This function will be used to filter the elements\n switch (attrOperator) {\n case '=': // Equality\n checkFunction = function(e) {\n return (e.getAttribute(attrName) == attrValue);\n };\n break;\n case '~': // Match one of space seperated words\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('\\\\b' + attrValue + '\\\\b')));\n };\n break;\n case '|': // Match start with value followed by optional hyphen\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('^' + attrValue + '-?')));\n };\n break;\n case '^': // Match starts with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) === 0);\n };\n break;\n case '$': // Match ends with value - fails with \"Warning\" in Opera 7\n checkFunction = function(e) {\n return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length);\n };\n break;\n case '*': // Match ends with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) > -1);\n };\n break;\n default:\n // Just test for existence of attribute\n checkFunction = function(e) {\n return e.getAttribute(attrName);\n };\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (checkFunction(found[j])) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);\n continue; // Skip to next token\n }\n // If we get here, token is JUST an element (not a class or ID selector)\n tagName = token;\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n elements = currentContext[j].getElementsByTagName(tagName);\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = found;\n }\n return currentContext;\n }\n\n return function(query) {\n if (_.isElement(query)) {\n return [query];\n } else if (_.isObject(query) && !_.isUndefined(query.length)) {\n return query;\n } else {\n return getElementsBySelector.call(this, query);\n }\n };\n})();\n\nvar CAMPAIGN_KEYWORDS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'utm_id', 'utm_source_platform','utm_campaign_id', 'utm_creative_format', 'utm_marketing_tactic'];\nvar CLICK_IDS = ['dclid', 'fbclid', 'gclid', 'ko_click_id', 'li_fat_id', 'msclkid', 'sccid', 'ttclid', 'twclid', 'wbraid'];\n\n_.info = {\n campaignParams: function(default_value) {\n var kw = '',\n params = {};\n _.each(CAMPAIGN_KEYWORDS, function(kwkey) {\n kw = _.getQueryParam(document.URL, kwkey);\n if (kw.length) {\n params[kwkey] = kw;\n } else if (default_value !== undefined) {\n params[kwkey] = default_value;\n }\n });\n\n return params;\n },\n\n clickParams: function() {\n var id = '',\n params = {};\n _.each(CLICK_IDS, function(idkey) {\n id = _.getQueryParam(document.URL, idkey);\n if (id.length) {\n params[idkey] = id;\n }\n });\n\n return params;\n },\n\n marketingParams: function() {\n return _.extend(_.info.campaignParams(), _.info.clickParams());\n },\n\n searchEngine: function(referrer) {\n if (referrer.search('https?://(.*)google.([^/?]*)') === 0) {\n return 'google';\n } else if (referrer.search('https?://(.*)bing.com') === 0) {\n return 'bing';\n } else if (referrer.search('https?://(.*)yahoo.com') === 0) {\n return 'yahoo';\n } else if (referrer.search('https?://(.*)duckduckgo.com') === 0) {\n return 'duckduckgo';\n } else {\n return null;\n }\n },\n\n searchInfo: function(referrer) {\n var search = _.info.searchEngine(referrer),\n param = (search != 'yahoo') ? 'q' : 'p',\n ret = {};\n\n if (search !== null) {\n ret['$search_engine'] = search;\n\n var keyword = _.getQueryParam(referrer, param);\n if (keyword.length) {\n ret['mp_keyword'] = keyword;\n }\n }\n\n return ret;\n },\n\n /**\n * This function detects which browser is running this script.\n * The order of the checks are important since many user agents\n * include key words used in later checks.\n */\n browser: function(user_agent, vendor, opera) {\n vendor = vendor || ''; // vendor is undefined for at least IE9\n if (opera || _.includes(user_agent, ' OPR/')) {\n if (_.includes(user_agent, 'Mini')) {\n return 'Opera Mini';\n }\n return 'Opera';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (_.includes(user_agent, 'IEMobile') || _.includes(user_agent, 'WPDesktop')) {\n return 'Internet Explorer Mobile';\n } else if (_.includes(user_agent, 'SamsungBrowser/')) {\n // https://developer.samsung.com/internet/user-agent-string-format\n return 'Samsung Internet';\n } else if (_.includes(user_agent, 'Edge') || _.includes(user_agent, 'Edg/')) {\n return 'Microsoft Edge';\n } else if (_.includes(user_agent, 'FBIOS')) {\n return 'Facebook Mobile';\n } else if (_.includes(user_agent, 'Chrome')) {\n return 'Chrome';\n } else if (_.includes(user_agent, 'CriOS')) {\n return 'Chrome iOS';\n } else if (_.includes(user_agent, 'UCWEB') || _.includes(user_agent, 'UCBrowser')) {\n return 'UC Browser';\n } else if (_.includes(user_agent, 'FxiOS')) {\n return 'Firefox iOS';\n } else if (_.includes(vendor, 'Apple')) {\n if (_.includes(user_agent, 'Mobile')) {\n return 'Mobile Safari';\n }\n return 'Safari';\n } else if (_.includes(user_agent, 'Android')) {\n return 'Android Mobile';\n } else if (_.includes(user_agent, 'Konqueror')) {\n return 'Konqueror';\n } else if (_.includes(user_agent, 'Firefox')) {\n return 'Firefox';\n } else if (_.includes(user_agent, 'MSIE') || _.includes(user_agent, 'Trident/')) {\n return 'Internet Explorer';\n } else if (_.includes(user_agent, 'Gecko')) {\n return 'Mozilla';\n } else {\n return '';\n }\n },\n\n /**\n * This function detects which browser version is running this script,\n * parsing major and minor version (e.g., 42.1). User agent strings from:\n * http://www.useragentstring.com/pages/useragentstring.php\n */\n browserVersion: function(userAgent, vendor, opera) {\n var browser = _.info.browser(userAgent, vendor, opera);\n var versionRegexs = {\n 'Internet Explorer Mobile': /rv:(\\d+(\\.\\d+)?)/,\n 'Microsoft Edge': /Edge?\\/(\\d+(\\.\\d+)?)/,\n 'Chrome': /Chrome\\/(\\d+(\\.\\d+)?)/,\n 'Chrome iOS': /CriOS\\/(\\d+(\\.\\d+)?)/,\n 'UC Browser' : /(UCBrowser|UCWEB)\\/(\\d+(\\.\\d+)?)/,\n 'Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Mobile Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Opera': /(Opera|OPR)\\/(\\d+(\\.\\d+)?)/,\n 'Firefox': /Firefox\\/(\\d+(\\.\\d+)?)/,\n 'Firefox iOS': /FxiOS\\/(\\d+(\\.\\d+)?)/,\n 'Konqueror': /Konqueror:(\\d+(\\.\\d+)?)/,\n 'BlackBerry': /BlackBerry (\\d+(\\.\\d+)?)/,\n 'Android Mobile': /android\\s(\\d+(\\.\\d+)?)/,\n 'Samsung Internet': /SamsungBrowser\\/(\\d+(\\.\\d+)?)/,\n 'Internet Explorer': /(rv:|MSIE )(\\d+(\\.\\d+)?)/,\n 'Mozilla': /rv:(\\d+(\\.\\d+)?)/\n };\n var regex = versionRegexs[browser];\n if (regex === undefined) {\n return null;\n }\n var matches = userAgent.match(regex);\n if (!matches) {\n return null;\n }\n return parseFloat(matches[matches.length - 2]);\n },\n\n os: function() {\n var a = userAgent;\n if (/Windows/i.test(a)) {\n if (/Phone/.test(a) || /WPDesktop/.test(a)) {\n return 'Windows Phone';\n }\n return 'Windows';\n } else if (/(iPhone|iPad|iPod)/.test(a)) {\n return 'iOS';\n } else if (/Android/.test(a)) {\n return 'Android';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(a)) {\n return 'BlackBerry';\n } else if (/Mac/i.test(a)) {\n return 'Mac OS X';\n } else if (/Linux/.test(a)) {\n return 'Linux';\n } else if (/CrOS/.test(a)) {\n return 'Chrome OS';\n } else {\n return '';\n }\n },\n\n device: function(user_agent) {\n if (/Windows Phone/i.test(user_agent) || /WPDesktop/.test(user_agent)) {\n return 'Windows Phone';\n } else if (/iPad/.test(user_agent)) {\n return 'iPad';\n } else if (/iPod/.test(user_agent)) {\n return 'iPod Touch';\n } else if (/iPhone/.test(user_agent)) {\n return 'iPhone';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (/Android/.test(user_agent)) {\n return 'Android';\n } else {\n return '';\n }\n },\n\n referringDomain: function(referrer) {\n var split = referrer.split('/');\n if (split.length >= 3) {\n return split[2];\n }\n return '';\n },\n\n currentUrl: function() {\n return window.location.href;\n },\n\n properties: function(extra_props) {\n if (typeof extra_props !== 'object') {\n extra_props = {};\n }\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera),\n '$referrer': document.referrer,\n '$referring_domain': _.info.referringDomain(document.referrer),\n '$device': _.info.device(userAgent)\n }), {\n '$current_url': _.info.currentUrl(),\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera),\n '$screen_height': screen.height,\n '$screen_width': screen.width,\n 'mp_lib': 'web',\n '$lib_version': Config.LIB_VERSION,\n '$insert_id': cheap_guid(),\n 'time': _.timestamp() / 1000 // epoch time in seconds\n }, _.strip_empty_properties(extra_props));\n },\n\n people_properties: function() {\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera)\n }), {\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera)\n });\n },\n\n mpPageViewProperties: function() {\n return _.strip_empty_properties({\n 'current_page_title': document.title,\n 'current_domain': window.location.hostname,\n 'current_url_path': window.location.pathname,\n 'current_url_protocol': window.location.protocol,\n 'current_url_search': window.location.search\n });\n }\n};\n\nvar cheap_guid = function(maxlen) {\n var guid = Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10);\n return maxlen ? guid.substring(0, maxlen) : guid;\n};\n\n// naive way to extract domain name (example.com) from full hostname (my.sub.example.com)\nvar SIMPLE_DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]*\\.[a-z]+$/i;\n// this next one attempts to account for some ccSLDs, e.g. extracting oxford.ac.uk from www.oxford.ac.uk\nvar DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]+\\.[a-z.]{2,6}$/i;\n/**\n * Attempts to extract main domain name from full hostname, using a few blunt heuristics. For\n * common TLDs like .com/.org that always have a simple SLD.TLD structure (example.com), we\n * simply extract the last two .-separated parts of the hostname (SIMPLE_DOMAIN_MATCH_REGEX).\n * For others, we attempt to account for short ccSLD+TLD combos (.ac.uk) with the legacy\n * DOMAIN_MATCH_REGEX (kept to maintain backwards compatibility with existing Mixpanel\n * integrations). The only _reliable_ way to extract domain from hostname is with an up-to-date\n * list like at https://publicsuffix.org/ so for cases that this helper fails at, the SDK\n * offers the 'cookie_domain' config option to set it explicitly.\n * @example\n * extract_domain('my.sub.example.com')\n * // 'example.com'\n */\nvar extract_domain = function(hostname) {\n var domain_regex = DOMAIN_MATCH_REGEX;\n var parts = hostname.split('.');\n var tld = parts[parts.length - 1];\n if (tld.length > 4 || tld === 'com' || tld === 'org') {\n domain_regex = SIMPLE_DOMAIN_MATCH_REGEX;\n }\n var matches = hostname.match(domain_regex);\n return matches ? matches[0] : '';\n};\n\n/**\n * Check whether we have network connection. default to true for browsers that don't support navigator.onLine (IE)\n * @returns {boolean}\n */\nvar isOnline = function() {\n var onLine = window.navigator['onLine'];\n return _.isUndefined(onLine) || onLine;\n};\n\nvar JSONStringify = null, JSONParse = null;\nif (typeof JSON !== 'undefined') {\n JSONStringify = JSON.stringify;\n JSONParse = JSON.parse;\n}\nJSONStringify = JSONStringify || _.JSONEncode;\nJSONParse = JSONParse || _.JSONDecode;\n\n// EXPORTS (for closure compiler)\n_['toArray'] = _.toArray;\n_['isObject'] = _.isObject;\n_['JSONEncode'] = _.JSONEncode;\n_['JSONDecode'] = _.JSONDecode;\n_['isBlockedUA'] = _.isBlockedUA;\n_['isEmptyObject'] = _.isEmptyObject;\n_['info'] = _.info;\n_['info']['device'] = _.info.device;\n_['info']['browser'] = _.info.browser;\n_['info']['browserVersion'] = _.info.browserVersion;\n_['info']['properties'] = _.info.properties;\n_['NPO'] = NpoPromise;\n\nexport {\n _,\n cheap_guid,\n console_with_prefix,\n console,\n document,\n extract_domain,\n JSONParse,\n JSONStringify,\n isOnline,\n localStorageSupported,\n MAX_RECORDING_MS,\n MAX_VALUE_FOR_MIN_RECORDING_MS,\n navigator,\n safewrap,\n safewrapClass,\n slice,\n userAgent,\n};\n","/**\n * GDPR utils\n *\n * The General Data Protection Regulation (GDPR) is a regulation in EU law on data protection\n * and privacy for all individuals within the European Union. It addresses the export of personal\n * data outside the EU. The GDPR aims primarily to give control back to citizens and residents\n * over their personal data and to simplify the regulatory environment for international business\n * by unifying the regulation within the EU.\n *\n * This set of utilities is intended to enable opt in/out functionality in the Mixpanel JS SDK.\n * These functions are used internally by the SDK and are not intended to be publicly exposed.\n */\n\nimport { _, console } from './utils';\nimport { window } from './window';\n\n/**\n * A function used to track a Mixpanel event (e.g. MixpanelLib.track)\n * @callback trackFunction\n * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc.\n * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself.\n * @param {Function} [callback] If provided, the callback function will be called after tracking the event.\n */\n\n/** Public **/\n\nvar GDPR_DEFAULT_PERSISTENCE_PREFIX = '__mp_opt_in_out_';\n\n/**\n * Opt the user in to data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action\n * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action\n * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not\n */\nexport function optIn(token, options) {\n _optInOut(true, token, options);\n}\n\n/**\n * Opt the user out of data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-out cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-out cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-out cookie is set as secure or not\n */\nexport function optOut(token, options) {\n _optInOut(false, token, options);\n}\n\n/**\n * Check whether the user has opted in to data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @returns {boolean} whether the user has opted in to the given opt type\n */\nexport function hasOptedIn(token, options) {\n return _getStorageValue(token, options) === '1';\n}\n\n/**\n * Check whether the user has opted out of data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false\n * @returns {boolean} whether the user has opted out of the given opt type\n */\nexport function hasOptedOut(token, options) {\n if (_hasDoNotTrackFlagOn(options)) {\n console.warn('This browser has \"Do Not Track\" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the \"Do Not Track\" browser setting, initialize the Mixpanel instance with the config \"ignore_dnt: true\"');\n return true;\n }\n var optedOut = _getStorageValue(token, options) === '0';\n if (optedOut) {\n console.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.');\n }\n return optedOut;\n}\n\n/**\n * Wrap a MixpanelLib method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @param {function} method - wrapped method to be executed if the user has not opted out\n * @returns {*} the result of executing method OR undefined if the user has opted out\n */\nexport function addOptOutCheckMixpanelLib(method) {\n return _addOptOutCheck(method, function(name) {\n return this.get_config(name);\n });\n}\n\n/**\n * Wrap a MixpanelPeople method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @param {function} method - wrapped method to be executed if the user has not opted out\n * @returns {*} the result of executing method OR undefined if the user has opted out\n */\nexport function addOptOutCheckMixpanelPeople(method) {\n return _addOptOutCheck(method, function(name) {\n return this._get_config(name);\n });\n}\n\n/**\n * Wrap a MixpanelGroup method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @param {function} method - wrapped method to be executed if the user has not opted out\n * @returns {*} the result of executing method OR undefined if the user has opted out\n */\nexport function addOptOutCheckMixpanelGroup(method) {\n return _addOptOutCheck(method, function(name) {\n return this._get_config(name);\n });\n}\n\n/**\n * Clear the user's opt in/out status of data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not\n */\nexport function clearOptInOut(token, options) {\n options = options || {};\n _getStorage(options).remove(\n _getStorageKey(token, options), !!options.crossSubdomainCookie, options.cookieDomain\n );\n}\n\n/** Private **/\n\n/**\n * Get storage util\n * @param {Object} [options]\n * @param {string} [options.persistenceType]\n * @returns {object} either _.cookie or _.localstorage\n */\nfunction _getStorage(options) {\n options = options || {};\n return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie;\n}\n\n/**\n * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.)\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @returns {string} the name of the cookie for the given opt type\n */\nfunction _getStorageKey(token, options) {\n options = options || {};\n return (options.persistencePrefix || GDPR_DEFAULT_PERSISTENCE_PREFIX) + token;\n}\n\n/**\n * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.)\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @returns {string} the value of the cookie for the given opt type\n */\nfunction _getStorageValue(token, options) {\n return _getStorage(options).get(_getStorageKey(token, options));\n}\n\n/**\n * Check whether the user has set the DNT/doNotTrack setting to true in their browser\n * @param {Object} [options]\n * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests\n * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false\n * @returns {boolean} whether the DNT setting is true\n */\nfunction _hasDoNotTrackFlagOn(options) {\n if (options && options.ignoreDnt) {\n return false;\n }\n var win = (options && options.window) || window;\n var nav = win['navigator'] || {};\n var hasDntOn = false;\n\n _.each([\n nav['doNotTrack'], // standard\n nav['msDoNotTrack'],\n win['doNotTrack']\n ], function(dntValue) {\n if (_.includes([true, 1, '1', 'yes'], dntValue)) {\n hasDntOn = true;\n }\n });\n\n return hasDntOn;\n}\n\n/**\n * Set cookie/localstorage for the user indicating that they are opted in or out for the given opt type\n * @param {boolean} optValue - whether to opt the user in or out for the given opt type\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action\n * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action\n * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not\n */\nfunction _optInOut(optValue, token, options) {\n if (!_.isString(token) || !token.length) {\n console.error('gdpr.' + (optValue ? 'optIn' : 'optOut') + ' called with an invalid token');\n return;\n }\n\n options = options || {};\n\n _getStorage(options).set(\n _getStorageKey(token, options),\n optValue ? 1 : 0,\n _.isNumber(options.cookieExpiration) ? options.cookieExpiration : null,\n !!options.crossSubdomainCookie,\n !!options.secureCookie,\n !!options.crossSiteCookie,\n options.cookieDomain\n );\n\n if (options.track && optValue) { // only track event if opting in (optValue=true)\n options.track(options.trackEventName || '$opt_in', options.trackProperties, {\n 'send_immediately': true\n });\n }\n}\n\n/**\n * Wrap a method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @param {function} method - wrapped method to be executed if the user has not opted out\n * @param {function} getConfigValue - getter function for the Mixpanel API token and other options to be used with opt-out check\n * @returns {*} the result of executing method OR undefined if the user has opted out\n */\nfunction _addOptOutCheck(method, getConfigValue) {\n return function() {\n var optedOut = false;\n\n try {\n var token = getConfigValue.call(this, 'token');\n var ignoreDnt = getConfigValue.call(this, 'ignore_dnt');\n var persistenceType = getConfigValue.call(this, 'opt_out_tracking_persistence_type');\n var persistencePrefix = getConfigValue.call(this, 'opt_out_tracking_cookie_prefix');\n var win = getConfigValue.call(this, 'window'); // used to override window during browser tests\n\n if (token) { // if there was an issue getting the token, continue method execution as normal\n optedOut = hasOptedOut(token, {\n ignoreDnt: ignoreDnt,\n persistenceType: persistenceType,\n persistencePrefix: persistencePrefix,\n window: win\n });\n }\n } catch(err) {\n console.error('Unexpected error when checking tracking opt-out status: ' + err);\n }\n\n if (!optedOut) {\n return method.apply(this, arguments);\n }\n\n var callback = arguments[arguments.length - 1];\n if (typeof(callback) === 'function') {\n callback(0);\n }\n\n return;\n };\n}\n","import { Promise } from './promise-polyfill';\nimport { console_with_prefix, localStorageSupported, _ } from './utils'; // eslint-disable-line camelcase\n\nvar logger = console_with_prefix('lock');\n\n/**\n * SharedLock: a mutex built on HTML5 localStorage, to ensure that only one browser\n * window/tab at a time will be able to access shared resources.\n *\n * Based on the Alur and Taubenfeld fast lock\n * (http://www.cs.rochester.edu/research/synchronization/pseudocode/fastlock.html)\n * with an added timeout to ensure there will be eventual progress in the event\n * that a window is closed in the middle of the callback.\n *\n * Implementation based on the original version by David Wolever (https://github.com/wolever)\n * at https://gist.github.com/wolever/5fd7573d1ef6166e8f8c4af286a69432.\n *\n * @example\n * const myLock = new SharedLock('some-key');\n * myLock.withLock(function() {\n * console.log('I hold the mutex!');\n * });\n *\n * @constructor\n */\nvar SharedLock = function(key, options) {\n options = options || {};\n\n this.storageKey = key;\n this.storage = options.storage || window.localStorage;\n this.pollIntervalMS = options.pollIntervalMS || 100;\n this.timeoutMS = options.timeoutMS || 2000;\n\n // dependency-inject promise implementation for testing purposes\n this.promiseImpl = options.promiseImpl || Promise;\n};\n\n// pass in a specific pid to test contention scenarios; otherwise\n// it is chosen randomly for each acquisition attempt\nSharedLock.prototype.withLock = function(lockedCB, pid) {\n var Promise = this.promiseImpl;\n return new Promise(_.bind(function (resolve, reject) {\n var i = pid || (new Date().getTime() + '|' + Math.random());\n var startTime = new Date().getTime();\n\n var key = this.storageKey;\n var pollIntervalMS = this.pollIntervalMS;\n var timeoutMS = this.timeoutMS;\n var storage = this.storage;\n\n var keyX = key + ':X';\n var keyY = key + ':Y';\n var keyZ = key + ':Z';\n\n var delay = function(cb) {\n if (new Date().getTime() - startTime > timeoutMS) {\n logger.error('Timeout waiting for mutex on ' + key + '; clearing lock. [' + i + ']');\n storage.removeItem(keyZ);\n storage.removeItem(keyY);\n loop();\n return;\n }\n setTimeout(function() {\n try {\n cb();\n } catch(err) {\n reject(err);\n }\n }, pollIntervalMS * (Math.random() + 0.1));\n };\n\n var waitFor = function(predicate, cb) {\n if (predicate()) {\n cb();\n } else {\n delay(function() {\n waitFor(predicate, cb);\n });\n }\n };\n\n var getSetY = function() {\n var valY = storage.getItem(keyY);\n if (valY && valY !== i) { // if Y == i then this process already has the lock (useful for test cases)\n return false;\n } else {\n storage.setItem(keyY, i);\n if (storage.getItem(keyY) === i) {\n return true;\n } else {\n if (!localStorageSupported(storage, true)) {\n reject(new Error('localStorage support dropped while acquiring lock'));\n }\n return false;\n }\n }\n };\n\n var loop = function() {\n storage.setItem(keyX, i);\n\n waitFor(getSetY, function() {\n if (storage.getItem(keyX) === i) {\n criticalSection();\n return;\n }\n\n delay(function() {\n if (storage.getItem(keyY) !== i) {\n loop();\n return;\n }\n waitFor(function() {\n return !storage.getItem(keyZ);\n }, criticalSection);\n });\n });\n };\n\n var criticalSection = function() {\n storage.setItem(keyZ, '1');\n var removeLock = function () {\n storage.removeItem(keyZ);\n if (storage.getItem(keyY) === i) {\n storage.removeItem(keyY);\n }\n if (storage.getItem(keyX) === i) {\n storage.removeItem(keyX);\n }\n };\n\n lockedCB()\n .then(function (ret) {\n removeLock();\n resolve(ret);\n })\n .catch(function (err) {\n removeLock();\n reject(err);\n });\n };\n\n try {\n if (localStorageSupported(storage, true)) {\n loop();\n } else {\n throw new Error('localStorage support check failed');\n }\n } catch(err) {\n reject(err);\n }\n }, this));\n};\n\nexport { SharedLock };\n","import { Promise } from '../promise-polyfill';\nimport { _ } from '../utils'; // eslint-disable-line camelcase\n\n/**\n * @typedef {import('./wrapper').StorageWrapper}\n */\n\n/**\n * @type {StorageWrapper}\n */\nvar LocalStorageWrapper = function (storageOverride) {\n this.storage = storageOverride || localStorage;\n};\n\nLocalStorageWrapper.prototype.init = function () {\n return Promise.resolve();\n};\n\nLocalStorageWrapper.prototype.setItem = function (key, value) {\n return new Promise(_.bind(function (resolve, reject) {\n try {\n this.storage.setItem(key, value);\n } catch (e) {\n reject(e);\n }\n resolve();\n }, this));\n};\n\nLocalStorageWrapper.prototype.getItem = function (key) {\n return new Promise(_.bind(function (resolve, reject) {\n var item;\n try {\n item = this.storage.getItem(key);\n } catch (e) {\n reject(e);\n }\n resolve(item);\n }, this));\n};\n\nLocalStorageWrapper.prototype.removeItem = function (key) {\n return new Promise(_.bind(function (resolve, reject) {\n try {\n this.storage.removeItem(key);\n } catch (e) {\n reject(e);\n }\n resolve();\n }, this));\n};\n\nexport { LocalStorageWrapper };\n","import { SharedLock } from './shared-lock';\nimport { cheap_guid, console_with_prefix, localStorageSupported, JSONParse, JSONStringify, _ } from './utils'; // eslint-disable-line camelcase\nimport { LocalStorageWrapper } from './storage/local-storage';\nimport { Promise } from './promise-polyfill';\n\nvar logger = console_with_prefix('batch');\n\n/**\n * RequestQueue: queue for batching API requests with localStorage backup for retries.\n * Maintains an in-memory queue which represents the source of truth for the current\n * page, but also writes all items out to a copy in the browser's localStorage, which\n * can be read on subsequent pageloads and retried. For batchability, all the request\n * items in the queue should be of the same type (events, people updates, group updates)\n * so they can be sent in a single request to the same API endpoint.\n *\n * LocalStorage keying and locking: In order for reloads and subsequent pageloads of\n * the same site to access the same persisted data, they must share the same localStorage\n * key (for instance based on project token and queue type). Therefore access to the\n * localStorage entry is guarded by an asynchronous mutex (SharedLock) to prevent\n * simultaneously open windows/tabs from overwriting each other's data (which would lead\n * to data loss in some situations).\n * @constructor\n */\nvar RequestQueue = function (storageKey, options) {\n options = options || {};\n this.storageKey = storageKey;\n this.usePersistence = options.usePersistence;\n if (this.usePersistence) {\n this.queueStorage = options.queueStorage || new LocalStorageWrapper();\n this.lock = new SharedLock(storageKey, { storage: options.sharedLockStorage || window.localStorage });\n this.queueStorage.init();\n }\n this.reportError = options.errorReporter || _.bind(logger.error, logger);\n\n this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios\n\n this.memQueue = [];\n this.initialized = false;\n};\n\nRequestQueue.prototype.ensureInit = function () {\n if (this.initialized) {\n return Promise.resolve();\n }\n\n return this.queueStorage\n .init()\n .then(_.bind(function () {\n this.initialized = true;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error initializing queue persistence. Disabling persistence', err);\n this.initialized = true;\n this.usePersistence = false;\n }, this));\n};\n\n/**\n * Add one item to queues (memory and localStorage). The queued entry includes\n * the given item along with an auto-generated ID and a \"flush-after\" timestamp.\n * It is expected that the item will be sent over the network and dequeued\n * before the flush-after time; if this doesn't happen it is considered orphaned\n * (e.g., the original tab where it was enqueued got closed before it could be\n * sent) and the item can be sent by any tab that finds it in localStorage.\n *\n * The final callback param is called with a param indicating success or\n * failure of the enqueue operation; it is asynchronous because the localStorage\n * lock is asynchronous.\n */\nRequestQueue.prototype.enqueue = function (item, flushInterval) {\n var queueEntry = {\n 'id': cheap_guid(),\n 'flushAfter': new Date().getTime() + flushInterval * 2,\n 'payload': item\n };\n\n if (!this.usePersistence) {\n this.memQueue.push(queueEntry);\n return Promise.resolve(true);\n } else {\n\n var enqueueItem = _.bind(function () {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n storedQueue.push(queueEntry);\n return this.saveToStorage(storedQueue);\n }, this))\n .then(_.bind(function (succeeded) {\n // only add to in-memory queue when storage succeeds\n if (succeeded) {\n this.memQueue.push(queueEntry);\n }\n return succeeded;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error enqueueing item', err, item);\n return false;\n }, this));\n }, this);\n\n return this.lock\n .withLock(enqueueItem, this.pid)\n .catch(_.bind(function (err) {\n this.reportError('Error acquiring storage lock', err);\n return false;\n }, this));\n }\n};\n\n/**\n * Read out the given number of queue entries. If this.memQueue\n * has fewer than batchSize items, then look for \"orphaned\" items\n * in the persisted queue (items where the 'flushAfter' time has\n * already passed).\n */\nRequestQueue.prototype.fillBatch = function (batchSize) {\n var batch = this.memQueue.slice(0, batchSize);\n if (this.usePersistence && batch.length < batchSize) {\n // don't need lock just to read events; localStorage is thread-safe\n // and the worst that could happen is a duplicate send of some\n // orphaned events, which will be deduplicated on the server side\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n if (storedQueue.length) {\n // item IDs already in batch; don't duplicate out of storage\n var idsInBatch = {}; // poor man's Set\n _.each(batch, function (item) {\n idsInBatch[item['id']] = true;\n });\n\n for (var i = 0; i < storedQueue.length; i++) {\n var item = storedQueue[i];\n if (new Date().getTime() > item['flushAfter'] && !idsInBatch[item['id']]) {\n item.orphaned = true;\n batch.push(item);\n if (batch.length >= batchSize) {\n break;\n }\n }\n }\n }\n\n return batch;\n }, this));\n } else {\n return Promise.resolve(batch);\n }\n};\n\n/**\n * Remove items with matching 'id' from array (immutably)\n * also remove any item without a valid id (e.g., malformed\n * storage entries).\n */\nvar filterOutIDsAndInvalid = function (items, idSet) {\n var filteredItems = [];\n _.each(items, function (item) {\n if (item['id'] && !idSet[item['id']]) {\n filteredItems.push(item);\n }\n });\n return filteredItems;\n};\n\n/**\n * Remove items with matching IDs from both in-memory queue\n * and persisted queue\n */\nRequestQueue.prototype.removeItemsByID = function (ids) {\n var idSet = {}; // poor man's Set\n _.each(ids, function (id) {\n idSet[id] = true;\n });\n\n this.memQueue = filterOutIDsAndInvalid(this.memQueue, idSet);\n if (!this.usePersistence) {\n return Promise.resolve(true);\n } else {\n var removeFromStorage = _.bind(function () {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n storedQueue = filterOutIDsAndInvalid(storedQueue, idSet);\n return this.saveToStorage(storedQueue);\n }, this))\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n // an extra check: did storage report success but somehow\n // the items are still there?\n for (var i = 0; i < storedQueue.length; i++) {\n var item = storedQueue[i];\n if (item['id'] && !!idSet[item['id']]) {\n throw new Error('Item not removed from storage');\n }\n }\n return true;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error removing items', err, ids);\n return false;\n }, this));\n }, this);\n\n return this.lock\n .withLock(removeFromStorage, this.pid)\n .catch(_.bind(function (err) {\n this.reportError('Error acquiring storage lock', err);\n if (!localStorageSupported(this.queueStorage.storage, true)) {\n // Looks like localStorage writes have stopped working sometime after\n // initialization (probably full), and so nobody can acquire locks\n // anymore. Consider it temporarily safe to remove items without the\n // lock, since nobody's writing successfully anyway.\n return removeFromStorage()\n .then(_.bind(function (success) {\n if (!success) {\n // OK, we couldn't even write out the smaller queue. Try clearing it\n // entirely.\n return this.queueStorage.removeItem(this.storageKey).then(function () {\n return success;\n });\n }\n return success;\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error clearing queue', err);\n return false;\n }, this));\n } else {\n return false;\n }\n }, this));\n }\n};\n\n// internal helper for RequestQueue.updatePayloads\nvar updatePayloads = function (existingItems, itemsToUpdate) {\n var newItems = [];\n _.each(existingItems, function (item) {\n var id = item['id'];\n if (id in itemsToUpdate) {\n var newPayload = itemsToUpdate[id];\n if (newPayload !== null) {\n item['payload'] = newPayload;\n newItems.push(item);\n }\n } else {\n // no update\n newItems.push(item);\n }\n });\n return newItems;\n};\n\n/**\n * Update payloads of given items in both in-memory queue and\n * persisted queue. Items set to null are removed from queues.\n */\nRequestQueue.prototype.updatePayloads = function (itemsToUpdate) {\n this.memQueue = updatePayloads(this.memQueue, itemsToUpdate);\n if (!this.usePersistence) {\n return Promise.resolve(true);\n } else {\n return this.lock\n .withLock(_.bind(function lockAcquired() {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.readFromStorage();\n }, this))\n .then(_.bind(function (storedQueue) {\n storedQueue = updatePayloads(storedQueue, itemsToUpdate);\n return this.saveToStorage(storedQueue);\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error updating items', itemsToUpdate, err);\n return false;\n }, this));\n }, this), this.pid)\n .catch(_.bind(function (err) {\n this.reportError('Error acquiring storage lock', err);\n return false;\n }, this));\n }\n};\n\n/**\n * Read and parse items array from localStorage entry, handling\n * malformed/missing data if necessary.\n */\nRequestQueue.prototype.readFromStorage = function () {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.queueStorage.getItem(this.storageKey);\n }, this))\n .then(_.bind(function (storageEntry) {\n if (storageEntry) {\n storageEntry = JSONParse(storageEntry);\n if (!_.isArray(storageEntry)) {\n this.reportError('Invalid storage entry:', storageEntry);\n storageEntry = null;\n }\n }\n return storageEntry || [];\n }, this))\n .catch(_.bind(function (err) {\n this.reportError('Error retrieving queue', err);\n return [];\n }, this));\n};\n\n/**\n * Serialize the given items array to localStorage.\n */\nRequestQueue.prototype.saveToStorage = function (queue) {\n try {\n var serialized = JSONStringify(queue);\n } catch (err) {\n this.reportError('Error serializing queue', err);\n return Promise.resolve(false);\n }\n\n return this.ensureInit()\n .then(_.bind(function () {\n return this.queueStorage.setItem(this.storageKey, serialized);\n }, this))\n .then(function () {\n return true;\n })\n .catch(_.bind(function (err) {\n this.reportError('Error saving queue', err);\n return false;\n }, this));\n};\n\n/**\n * Clear out queues (memory and localStorage).\n */\nRequestQueue.prototype.clear = function () {\n this.memQueue = [];\n\n if (this.usePersistence) {\n return this.ensureInit()\n .then(_.bind(function () {\n return this.queueStorage.removeItem(this.storageKey);\n }, this));\n } else {\n return Promise.resolve();\n }\n};\n\nexport { RequestQueue };\n","import Config from './config';\nimport { Promise } from './promise-polyfill';\nimport { RequestQueue } from './request-queue';\nimport { console_with_prefix, isOnline, _ } from './utils'; // eslint-disable-line camelcase\n\n// maximum interval between request retries after exponential backoff\nvar MAX_RETRY_INTERVAL_MS = 10 * 60 * 1000; // 10 minutes\n\nvar logger = console_with_prefix('batch');\n\n/**\n * RequestBatcher: manages the queueing, flushing, retry etc of requests of one\n * type (events, people, groups).\n * Uses RequestQueue to manage the backing store.\n * @constructor\n */\nvar RequestBatcher = function(storageKey, options) {\n this.errorReporter = options.errorReporter;\n this.queue = new RequestQueue(storageKey, {\n errorReporter: _.bind(this.reportError, this),\n queueStorage: options.queueStorage,\n sharedLockStorage: options.sharedLockStorage,\n usePersistence: options.usePersistence\n });\n\n this.libConfig = options.libConfig;\n this.sendRequest = options.sendRequestFunc;\n this.beforeSendHook = options.beforeSendHook;\n this.stopAllBatching = options.stopAllBatchingFunc;\n\n // seed variable batch size + flush interval with configured values\n this.batchSize = this.libConfig['batch_size'];\n this.flushInterval = this.libConfig['batch_flush_interval_ms'];\n\n this.stopped = !this.libConfig['batch_autostart'];\n this.consecutiveRemovalFailures = 0;\n\n // extra client-side dedupe\n this.itemIdsSentSuccessfully = {};\n\n // Make the flush occur at the interval specified by flushIntervalMs, default behavior will attempt consecutive flushes\n // as long as the queue is not empty. This is useful for high-frequency events like Session Replay where we might end up\n // in a request loop and get ratelimited by the server.\n this.flushOnlyOnInterval = options.flushOnlyOnInterval || false;\n};\n\n/**\n * Add one item to queue.\n */\nRequestBatcher.prototype.enqueue = function(item) {\n return this.queue.enqueue(item, this.flushInterval);\n};\n\n/**\n * Start flushing batches at the configured time interval. Must call\n * this method upon SDK init in order to send anything over the network.\n */\nRequestBatcher.prototype.start = function() {\n this.stopped = false;\n this.consecutiveRemovalFailures = 0;\n return this.flush();\n};\n\n/**\n * Stop flushing batches. Can be restarted by calling start().\n */\nRequestBatcher.prototype.stop = function() {\n this.stopped = true;\n if (this.timeoutID) {\n clearTimeout(this.timeoutID);\n this.timeoutID = null;\n }\n};\n\n/**\n * Clear out queue.\n */\nRequestBatcher.prototype.clear = function() {\n return this.queue.clear();\n};\n\n/**\n * Restore batch size configuration to whatever is set in the main SDK.\n */\nRequestBatcher.prototype.resetBatchSize = function() {\n this.batchSize = this.libConfig['batch_size'];\n};\n\n/**\n * Restore flush interval time configuration to whatever is set in the main SDK.\n */\nRequestBatcher.prototype.resetFlush = function() {\n this.scheduleFlush(this.libConfig['batch_flush_interval_ms']);\n};\n\n/**\n * Schedule the next flush in the given number of milliseconds.\n */\nRequestBatcher.prototype.scheduleFlush = function(flushMS) {\n this.flushInterval = flushMS;\n if (!this.stopped) { // don't schedule anymore if batching has been stopped\n this.timeoutID = setTimeout(_.bind(function() {\n if (!this.stopped) {\n this.flush();\n }\n }, this), this.flushInterval);\n }\n};\n\n/**\n * Send a request using the sendRequest callback, but promisified.\n * TODO: sendRequest should be promisified in the first place.\n */\nRequestBatcher.prototype.sendRequestPromise = function(data, options) {\n return new Promise(_.bind(function(resolve) {\n this.sendRequest(data, options, resolve);\n }, this));\n};\n\n\n/**\n * Flush one batch to network. Depending on success/failure modes, it will either\n * remove the batch from the queue or leave it in for retry, and schedule the next\n * flush. In cases of most network or API failures, it will back off exponentially\n * when retrying.\n * @param {Object} [options]\n * @param {boolean} [options.sendBeacon] - whether to send batch with\n * navigator.sendBeacon (only useful for sending batches before page unloads, as\n * sendBeacon offers no callbacks or status indications)\n */\nRequestBatcher.prototype.flush = function(options) {\n if (this.requestInProgress) {\n logger.log('Flush: Request already in progress');\n return Promise.resolve();\n }\n\n this.requestInProgress = true;\n\n options = options || {};\n var timeoutMS = this.libConfig['batch_request_timeout_ms'];\n var startTime = new Date().getTime();\n var currentBatchSize = this.batchSize;\n\n return this.queue.fillBatch(currentBatchSize)\n .then(_.bind(function(batch) {\n\n // if there's more items in the queue than the batch size, attempt\n // to flush again after the current batch is done.\n var attemptSecondaryFlush = batch.length === currentBatchSize;\n var dataForRequest = [];\n var transformedItems = {};\n _.each(batch, function(item) {\n var payload = item['payload'];\n if (this.beforeSendHook && !item.orphaned) {\n payload = this.beforeSendHook(payload);\n }\n if (payload) {\n // mp_sent_by_lib_version prop captures which lib version actually\n // sends each event (regardless of which version originally queued\n // it for sending)\n if (payload['event'] && payload['properties']) {\n payload['properties'] = _.extend(\n {},\n payload['properties'],\n {'mp_sent_by_lib_version': Config.LIB_VERSION}\n );\n }\n var addPayload = true;\n var itemId = item['id'];\n if (itemId) {\n if ((this.itemIdsSentSuccessfully[itemId] || 0) > 5) {\n this.reportError('[dupe] item ID sent too many times, not sending', {\n item: item,\n batchSize: batch.length,\n timesSent: this.itemIdsSentSuccessfully[itemId]\n });\n addPayload = false;\n }\n } else {\n this.reportError('[dupe] found item with no ID', {item: item});\n }\n\n if (addPayload) {\n dataForRequest.push(payload);\n }\n }\n transformedItems[item['id']] = payload;\n }, this);\n\n if (dataForRequest.length < 1) {\n this.requestInProgress = false;\n this.resetFlush();\n return Promise.resolve(); // nothing to do\n }\n\n var removeItemsFromQueue = _.bind(function () {\n return this.queue\n .removeItemsByID(\n _.map(batch, function (item) {\n return item['id'];\n })\n )\n .then(_.bind(function (succeeded) {\n // client-side dedupe\n _.each(batch, _.bind(function(item) {\n var itemId = item['id'];\n if (itemId) {\n this.itemIdsSentSuccessfully[itemId] = this.itemIdsSentSuccessfully[itemId] || 0;\n this.itemIdsSentSuccessfully[itemId]++;\n if (this.itemIdsSentSuccessfully[itemId] > 5) {\n this.reportError('[dupe] item ID sent too many times', {\n item: item,\n batchSize: batch.length,\n timesSent: this.itemIdsSentSuccessfully[itemId]\n });\n }\n } else {\n this.reportError('[dupe] found item with no ID while removing', {item: item});\n }\n }, this));\n\n if (succeeded) {\n this.consecutiveRemovalFailures = 0;\n if (this.flushOnlyOnInterval && !attemptSecondaryFlush) {\n this.resetFlush(); // schedule next batch with a delay\n return Promise.resolve();\n } else {\n return this.flush(); // handle next batch if the queue isn't empty\n }\n } else {\n if (++this.consecutiveRemovalFailures > 5) {\n this.reportError('Too many queue failures; disabling batching system.');\n this.stopAllBatching();\n } else {\n this.resetFlush();\n }\n return Promise.resolve();\n }\n }, this));\n }, this);\n\n var batchSendCallback = _.bind(function(res) {\n this.requestInProgress = false;\n\n try {\n\n // handle API response in a try-catch to make sure we can reset the\n // flush operation if something goes wrong\n\n if (options.unloading) {\n // update persisted data to include hook transformations\n return this.queue.updatePayloads(transformedItems);\n } else if (\n _.isObject(res) &&\n res.error === 'timeout' &&\n new Date().getTime() - startTime >= timeoutMS\n ) {\n this.reportError('Network timeout; retrying');\n return this.flush();\n } else if (\n _.isObject(res) &&\n (\n res.httpStatusCode >= 500\n || res.httpStatusCode === 429\n || (res.httpStatusCode <= 0 && !isOnline())\n || res.error === 'timeout'\n )\n ) {\n // network or API error, or 429 Too Many Requests, retry\n var retryMS = this.flushInterval * 2;\n if (res.retryAfter) {\n retryMS = (parseInt(res.retryAfter, 10) * 1000) || retryMS;\n }\n retryMS = Math.min(MAX_RETRY_INTERVAL_MS, retryMS);\n this.reportError('Error; retry in ' + retryMS + ' ms');\n this.scheduleFlush(retryMS);\n return Promise.resolve();\n } else if (_.isObject(res) && res.httpStatusCode === 413) {\n // 413 Payload Too Large\n if (batch.length > 1) {\n var halvedBatchSize = Math.max(1, Math.floor(currentBatchSize / 2));\n this.batchSize = Math.min(this.batchSize, halvedBatchSize, batch.length - 1);\n this.reportError('413 response; reducing batch size to ' + this.batchSize);\n this.resetFlush();\n return Promise.resolve();\n } else {\n this.reportError('Single-event request too large; dropping', batch);\n this.resetBatchSize();\n return removeItemsFromQueue();\n }\n } else {\n // successful network request+response; remove each item in batch from queue\n // (even if it was e.g. a 400, in which case retrying won't help)\n return removeItemsFromQueue();\n }\n } catch(err) {\n this.reportError('Error handling API response', err);\n this.resetFlush();\n }\n }, this);\n var requestOptions = {\n method: 'POST',\n verbose: true,\n ignore_json_errors: true, // eslint-disable-line camelcase\n timeout_ms: timeoutMS // eslint-disable-line camelcase\n };\n if (options.unloading) {\n requestOptions.transport = 'sendBeacon';\n }\n logger.log('MIXPANEL REQUEST:', dataForRequest);\n return this.sendRequestPromise(dataForRequest, requestOptions).then(batchSendCallback);\n }, this))\n .catch(_.bind(function(err) {\n this.reportError('Error flushing request queue', err);\n this.resetFlush();\n }, this));\n};\n\n/**\n * Log error to global logger and optional user-defined logger.\n */\nRequestBatcher.prototype.reportError = function(msg, err) {\n logger.error.apply(logger.error, arguments);\n if (this.errorReporter) {\n try {\n if (!(err instanceof Error)) {\n err = new Error(msg);\n }\n this.errorReporter(msg, err);\n } catch(err) {\n logger.error(err);\n }\n }\n};\n\nexport { RequestBatcher };\n","import { IncrementalSource, EventType } from '@rrweb/types';\n\nimport { MAX_RECORDING_MS, MAX_VALUE_FOR_MIN_RECORDING_MS, console_with_prefix, _} from '../utils'; // eslint-disable-line camelcase\nimport { window } from '../window';\nimport { addOptOutCheckMixpanelLib } from '../gdpr-utils';\nimport { RequestBatcher } from '../request-batcher';\nimport Config from '../config';\n\nvar logger = console_with_prefix('recorder');\nvar CompressionStream = window['CompressionStream'];\n\nvar RECORDER_BATCHER_LIB_CONFIG = {\n 'batch_size': 1000,\n 'batch_flush_interval_ms': 10 * 1000,\n 'batch_request_timeout_ms': 90 * 1000,\n 'batch_autostart': true\n};\n\nvar ACTIVE_SOURCES = new Set([\n IncrementalSource.MouseMove,\n IncrementalSource.MouseInteraction,\n IncrementalSource.Scroll,\n IncrementalSource.ViewportResize,\n IncrementalSource.Input,\n IncrementalSource.TouchMove,\n IncrementalSource.MediaInteraction,\n IncrementalSource.Drag,\n IncrementalSource.Selection,\n]);\n\nfunction isUserEvent(ev) {\n return ev.type === EventType.IncrementalSnapshot && ACTIVE_SOURCES.has(ev.data.source);\n}\n\n/**\n * This class encapsulates a single session recording and its lifecycle.\n * @param {Object} [options.mixpanelInstance] - reference to the core MixpanelLib\n * @param {String} [options.replayId] - unique uuid for a single replay\n * @param {Function} [options.onIdleTimeout] - callback when a recording reaches idle timeout\n * @param {Function} [options.onMaxLengthReached] - callback when a recording reaches its maximum length\n * @param {Function} [options.rrwebRecord] - rrweb's `record` function\n */\nvar SessionRecording = function(options) {\n this._mixpanel = options.mixpanelInstance;\n this._onIdleTimeout = options.onIdleTimeout;\n this._onMaxLengthReached = options.onMaxLengthReached;\n this._rrwebRecord = options.rrwebRecord;\n\n this.replayId = options.replayId;\n\n // internal rrweb stopRecording function\n this._stopRecording = null;\n\n this.seqNo = 0;\n this.replayStartTime = null;\n this.replayStartUrl = null;\n this.batchStartUrl = null;\n\n this.idleTimeoutId = null;\n this.maxTimeoutId = null;\n\n this.recordMaxMs = MAX_RECORDING_MS;\n this.recordMinMs = 0;\n\n // each replay has its own batcher key to avoid conflicts between rrweb events of different recordings\n // this will be important when persistence is introduced\n var batcherKey = '__mprec_' + this.getConfig('token') + '_' + this.replayId;\n this.batcher = new RequestBatcher(batcherKey, {\n errorReporter: _.bind(this.reportError, this),\n flushOnlyOnInterval: true,\n libConfig: RECORDER_BATCHER_LIB_CONFIG,\n sendRequestFunc: _.bind(this.flushEventsWithOptOut, this),\n usePersistence: false\n });\n};\n\nSessionRecording.prototype.getConfig = function(configVar) {\n return this._mixpanel.get_config(configVar);\n};\n\n// Alias for getConfig, used by the common addOptOutCheckMixpanelLib function which\n// reaches into this class instance and expects the snake case version of the function.\n// eslint-disable-next-line camelcase\nSessionRecording.prototype.get_config = function(configVar) {\n return this.getConfig(configVar);\n};\n\nSessionRecording.prototype.startRecording = function (shouldStopBatcher) {\n if (this._stopRecording !== null) {\n logger.log('Recording already in progress, skipping startRecording.');\n return;\n }\n\n this.recordMaxMs = this.getConfig('record_max_ms');\n if (this.recordMaxMs > MAX_RECORDING_MS) {\n this.recordMaxMs = MAX_RECORDING_MS;\n logger.critical('record_max_ms cannot be greater than ' + MAX_RECORDING_MS + 'ms. Capping value.');\n }\n\n this.recordMinMs = this.getConfig('record_min_ms');\n if (this.recordMinMs > MAX_VALUE_FOR_MIN_RECORDING_MS) {\n this.recordMinMs = MAX_VALUE_FOR_MIN_RECORDING_MS;\n logger.critical('record_min_ms cannot be greater than ' + MAX_VALUE_FOR_MIN_RECORDING_MS + 'ms. Capping value.');\n }\n\n this.replayStartTime = new Date().getTime();\n this.batchStartUrl = _.info.currentUrl();\n this.replayStartUrl = _.info.currentUrl();\n\n if (shouldStopBatcher || this.recordMinMs > 0) {\n // the primary case for shouldStopBatcher is when we're starting recording after a reset\n // and don't want to send anything over the network until there's\n // actual user activity\n // this also applies if the minimum recording length has not been hit yet\n // so that we don't send data until we know the recording will be long enough\n this.batcher.stop();\n } else {\n this.batcher.start();\n }\n\n var resetIdleTimeout = _.bind(function () {\n clearTimeout(this.idleTimeoutId);\n this.idleTimeoutId = setTimeout(this._onIdleTimeout, this.getConfig('record_idle_timeout_ms'));\n }, this);\n\n var blockSelector = this.getConfig('record_block_selector');\n if (blockSelector === '' || blockSelector === null) {\n blockSelector = undefined;\n }\n\n this._stopRecording = this._rrwebRecord({\n 'emit': _.bind(function (ev) {\n this.batcher.enqueue(ev);\n if (isUserEvent(ev)) {\n if (this.batcher.stopped && new Date().getTime() - this.replayStartTime >= this.recordMinMs) {\n // start flushing again after user activity\n this.batcher.start();\n }\n resetIdleTimeout();\n }\n }, this),\n 'blockClass': this.getConfig('record_block_class'),\n 'blockSelector': blockSelector,\n 'collectFonts': this.getConfig('record_collect_fonts'),\n 'dataURLOptions': { // canvas image options (https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL)\n 'type': 'image/webp',\n 'quality': 0.6\n },\n 'maskAllInputs': true,\n 'maskTextClass': this.getConfig('record_mask_text_class'),\n 'maskTextSelector': this.getConfig('record_mask_text_selector'),\n 'recordCanvas': this.getConfig('record_canvas'),\n 'sampling': {\n 'canvas': 15\n }\n });\n\n if (typeof this._stopRecording !== 'function') {\n this.reportError('rrweb failed to start, skipping this recording.');\n this._stopRecording = null;\n this.stopRecording(); // stop batcher looping and any timeouts\n return;\n }\n\n resetIdleTimeout();\n\n this.maxTimeoutId = setTimeout(_.bind(this._onMaxLengthReached, this), this.recordMaxMs);\n};\n\nSessionRecording.prototype.stopRecording = function () {\n if (!this.isRrwebStopped()) {\n try {\n this._stopRecording();\n } catch (err) {\n this.reportError('Error with rrweb stopRecording', err);\n }\n this._stopRecording = null;\n }\n\n if (this.batcher.stopped) {\n // never got user activity to flush after reset, so just clear the batcher\n this.batcher.clear();\n } else {\n // flush any remaining events from running batcher\n this.batcher.flush();\n this.batcher.stop();\n }\n\n clearTimeout(this.idleTimeoutId);\n clearTimeout(this.maxTimeoutId);\n};\n\nSessionRecording.prototype.isRrwebStopped = function () {\n return this._stopRecording === null;\n};\n\n/**\n * Flushes the current batch of events to the server, but passes an opt-out callback to make sure\n * we stop recording and dump any queued events if the user has opted out.\n */\nSessionRecording.prototype.flushEventsWithOptOut = function (data, options, cb) {\n this._flushEvents(data, options, cb, _.bind(this._onOptOut, this));\n};\n\nSessionRecording.prototype._onOptOut = function (code) {\n // addOptOutCheckMixpanelLib invokes this function with code=0 when the user has opted out\n if (code === 0) {\n this.stopRecording();\n }\n};\n\nSessionRecording.prototype._sendRequest = function(currentReplayId, reqParams, reqBody, callback) {\n var onSuccess = _.bind(function (response, responseBody) {\n // Update batch specific props only if the request was successful to guarantee ordering.\n // RequestBatcher will always flush the next batch after the previous one succeeds.\n // extra check to see if the replay ID has changed so that we don't increment the seqNo on the wrong replay\n if (response.status === 200 && this.replayId === currentReplayId) {\n this.seqNo++;\n this.batchStartUrl = _.info.currentUrl();\n }\n callback({\n status: 0,\n httpStatusCode: response.status,\n responseBody: responseBody,\n retryAfter: response.headers.get('Retry-After')\n });\n }, this);\n\n window['fetch'](this.getConfig('api_host') + '/' + this.getConfig('api_routes')['record'] + '?' + new URLSearchParams(reqParams), {\n 'method': 'POST',\n 'headers': {\n 'Authorization': 'Basic ' + btoa(this.getConfig('token') + ':'),\n 'Content-Type': 'application/octet-stream'\n },\n 'body': reqBody,\n }).then(function (response) {\n response.json().then(function (responseBody) {\n onSuccess(response, responseBody);\n }).catch(function (error) {\n callback({error: error});\n });\n }).catch(function (error) {\n callback({error: error, httpStatusCode: 0});\n });\n};\n\nSessionRecording.prototype._flushEvents = addOptOutCheckMixpanelLib(function (data, options, callback) {\n const numEvents = data.length;\n\n if (numEvents > 0) {\n var replayId = this.replayId;\n // each rrweb event has a timestamp - leverage those to get time properties\n var batchStartTime = data[0].timestamp;\n if (this.seqNo === 0 || !this.replayStartTime) {\n // extra safety net so that we don't send a null replay start time\n if (this.seqNo !== 0) {\n this.reportError('Replay start time not set but seqNo is not 0. Using current batch start time as a fallback.');\n }\n\n this.replayStartTime = batchStartTime;\n }\n var replayLengthMs = data[numEvents - 1].timestamp - this.replayStartTime;\n\n var reqParams = {\n '$current_url': this.batchStartUrl,\n '$lib_version': Config.LIB_VERSION,\n 'batch_start_time': batchStartTime / 1000,\n 'distinct_id': String(this._mixpanel.get_distinct_id()),\n 'mp_lib': 'web',\n 'replay_id': replayId,\n 'replay_length_ms': replayLengthMs,\n 'replay_start_time': this.replayStartTime / 1000,\n 'replay_start_url': this.replayStartUrl,\n 'seq': this.seqNo\n };\n var eventsJson = _.JSONEncode(data);\n\n // send ID management props if they exist\n var deviceId = this._mixpanel.get_property('$device_id');\n if (deviceId) {\n reqParams['$device_id'] = deviceId;\n }\n var userId = this._mixpanel.get_property('$user_id');\n if (userId) {\n reqParams['$user_id'] = userId;\n }\n\n if (CompressionStream) {\n var jsonStream = new Blob([eventsJson], {type: 'application/json'}).stream();\n var gzipStream = jsonStream.pipeThrough(new CompressionStream('gzip'));\n new Response(gzipStream)\n .blob()\n .then(_.bind(function(compressedBlob) {\n reqParams['format'] = 'gzip';\n this._sendRequest(replayId, reqParams, compressedBlob, callback);\n }, this));\n } else {\n reqParams['format'] = 'body';\n this._sendRequest(replayId, reqParams, eventsJson, callback);\n }\n }\n});\n\n\nSessionRecording.prototype.reportError = function(msg, err) {\n logger.error.apply(logger.error, arguments);\n try {\n if (!err && !(msg instanceof Error)) {\n msg = new Error(msg);\n }\n this.getConfig('error_reporter')(msg, err);\n } catch(err) {\n logger.error(err);\n }\n};\n\nexport { SessionRecording };\n","import {record} from 'rrweb';\n\nimport { SessionRecording } from './session-recording';\nimport { console_with_prefix, _ } from '../utils'; // eslint-disable-line camelcase\nimport { window } from '../window';\n\nvar logger = console_with_prefix('recorder');\n\n/**\n * Recorder API: manages recordings and exposes methods public to the core Mixpanel library.\n * @param {Object} [options.mixpanelInstance] - reference to the core MixpanelLib\n */\nvar MixpanelRecorder = function(mixpanelInstance) {\n this._mixpanel = mixpanelInstance;\n this.activeRecording = null;\n};\n\nMixpanelRecorder.prototype.startRecording = function(shouldStopBatcher) {\n if (this.activeRecording && !this.activeRecording.isRrwebStopped()) {\n logger.log('Recording already in progress, skipping startRecording.');\n return;\n }\n\n var onIdleTimeout = _.bind(function () {\n logger.log('Idle timeout reached, restarting recording.');\n this.resetRecording();\n }, this);\n\n var onMaxLengthReached = _.bind(function () {\n logger.log('Max recording length reached, stopping recording.');\n this.resetRecording();\n }, this);\n\n this.activeRecording = new SessionRecording({\n mixpanelInstance: this._mixpanel,\n onIdleTimeout: onIdleTimeout,\n onMaxLengthReached: onMaxLengthReached,\n replayId: _.UUID(),\n rrwebRecord: record\n });\n\n this.activeRecording.startRecording(shouldStopBatcher);\n};\n\nMixpanelRecorder.prototype.stopRecording = function() {\n if (this.activeRecording) {\n this.activeRecording.stopRecording();\n this.activeRecording = null;\n }\n};\n\nMixpanelRecorder.prototype.resetRecording = function () {\n this.stopRecording();\n this.startRecording(true);\n};\n\nMixpanelRecorder.prototype.getActiveReplayId = function () {\n if (this.activeRecording && !this.activeRecording.isRrwebStopped()) {\n return this.activeRecording.replayId;\n } else {\n return null;\n }\n};\n\n// getter so that older mixpanel-core versions can still retrieve the replay ID\n// when pulling the latest recorder bundle from the CDN\nObject.defineProperty(MixpanelRecorder.prototype, 'replayId', {\n get: function () {\n return this.getActiveReplayId();\n }\n});\n\nwindow['__mp_recorder'] = MixpanelRecorder;\n"],"names":["NodeType","isElement","n","isShadowRoot","host","isNativeShadowDom","shadowRoot","fixBrowserCompatibilityIssuesInCSS","cssText","escapeImportStatement","rule","statement","stringifyStylesheet","s","rules","stringifyRule","importStringified","isCSSImportRule","isCSSStyleRule","fixSafariColons","cssStringified","regex","Mirror","_a","id","childNode","node","meta","oldNode","createMirror","maskInputValue","element","maskInputOptions","tagName","type","value","maskInputFn","text","actualType","toLowerCase","str","ORIGINAL_ATTRIBUTE_NAME","is2DCanvasBlank","canvas","ctx","chunkSize","x","y","getImageData","originalGetImageData","pixel","getInputType","extractFileExtension","path","baseURL","url","match","_id","tagNameRegex","IGNORED_NODE","genId","getValidTagName","processedTagName","extractOrigin","origin","canvasService","canvasCtx","URL_IN_CSS_REF","URL_PROTOCOL_MATCH","URL_WWW_MATCH","DATA_URI","absoluteToStylesheet","href","quote1","path1","quote2","path2","path3","filePath","maybeQuote","stack","parts","part","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","getAbsoluteSrcsetString","doc","attributeValue","pos","collectCharacters","regEx","chars","output","absoluteToDoc","descriptorsStr","inParens","c","a","isSVGElement","el","getHref","transformAttribute","name","ignoreAttribute","_value","_isBlockedElement","blockClass","blockSelector","eIndex","className","classMatchesRegex","checkAncestors","needMaskingText","maskTextClass","maskTextSelector","onceIframeLoaded","iframeEl","listener","iframeLoadTimeout","win","fired","readyState","timer","blankUrl","onceStylesheetLoaded","link","styleSheetLoadTimeout","styleSheetLoaded","serializeNode","options","mirror","needsMask","inlineStylesheet","maskTextFn","dataURLOptions","inlineImages","recordCanvas","keepIframeSrcFn","newlyAddedElement","rootId","getRootId","serializeElementNode","serializeTextNode","docId","parentTagName","textContent","isStyle","isScript","err","needBlock","attributes","len","i","attr","stylesheet","checked","canvasDataURL","blankCanvas","blankCanvasDataURL","image","oldValue","recordInlineImage","mediaAttributes","width","height","isCustomElement","lowerIfExists","maybeAttr","slimDOMExcluded","sn","slimDOMOptions","serializeNodeWithId","skipChild","onSerialize","onIframeLoad","onStylesheetLoad","stylesheetLoadTimeout","preserveWhiteSpace","_serializedNode","serializedNode","recordChild","bypassOptions","childN","serializedChildNode","iframeDoc","serializedIframeNode","serializedLinkNode","snapshot","maskAllInputs","slimDOM","on","fn","target","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","prop","receiver","throttle","func","wait","timeout","previous","args","now","remaining","context","hookSetter","key","d","isRevoked","original","patch","source","replacement","wrapped","nowTimestamp","getWindowScroll","_b","_c","_d","_e","_f","getWindowHeight","getWindowWidth","closestElementOfNode","isBlocked","isSerialized","isIgnored","isAncestorRemoved","legacy_isTouchEvent","event","polyfill","isSerializedIframe","isSerializedStylesheet","hasShadowRoot","StyleSheetMirror","newId","getShadowHost","shadowHost","getRootShadowHost","rootShadowHost","shadowHostInDom","inDom","EventType","EventType2","IncrementalSource","IncrementalSource2","MouseInteractions","MouseInteractions2","PointerTypes","PointerTypes2","CanvasContext","CanvasContext2","isNodeInLinkedList","DoubleLinkedList","position","current","index","moveKey","parentId","MutationBuffer","mutations","adds","addedIds","addList","getNextId","ns","nextId","pushAdd","currentN","iframe","childSn","isParentRemoved","isAncestorInSet","candidate","tailNode","_node","unhandledNode","payload","attribute","diffAsStr","unchangedAsStr","textarea","item","cn","m","attributeName","old","pname","newValue","newPriority","nodeId","deepDelete","targetId","addsSet","removes","_isParentRemoved","parentNode","r","set","_isAncestorInSet","errorHandler","registerErrorHandler","handler","unregisterErrorHandler","callbackWrapper","cb","rest","error","mutationBuffers","getEventTarget","initMutationObserver","rootEl","mutationBuffer","mutationObserverCtor","angularZoneSymbol","observer","initMoveObserver","mousemoveCb","sampling","threshold","callbackThreshold","positions","timeBaseline","wrappedCb","totalOffset","p","updatePosition","evt","clientX","clientY","handlers","h","initMouseInteractionObserver","mouseInteractionCb","disableMap","currentPointerType","getHandler","eventKey","pointerType","thisEventKey","e","eventName","initScrollObserver","scrollCb","scrollLeftTop","initViewportResizeObserver","viewportResizeCb","lastH","lastW","updateDimension","INPUT_TAGS","lastInputValueMap","initInputObserver","inputCb","ignoreClass","ignoreSelector","userTriggeredOnInput","eventHandler","userTriggered","isChecked","cbWithDedup","v","lastInputValue","currentWindow","propertyDescriptor","hookProperties","getNestedCSSRulePositions","recurse","childRule","hasNestedCSSRule","getIdAndStyleId","sheet","styleMirror","styleId","initStyleSheetObserver","styleSheetRuleCb","stylesheetManager","insertRule","thisArg","argumentsList","deleteRule","replace","replaceSync","supportedNestedCSSRuleTypes","canMonkeyPatchNestedCSSRule","unmodifiedFunctions","typeKey","initAdoptedStyleSheetObserver","hostId","patchTarget","originalPropertyDescriptor","sheets","result","initStyleDeclarationObserver","styleDeclarationCb","ignoreCSSAttributes","setProperty","property","priority","removeProperty","initMediaInteractionObserver","mediaInteractionCb","currentTime","volume","muted","playbackRate","loop","initFontObserver","fontCb","fontMap","originalFontFace","family","descriptors","fontFace","restoreHandler","initSelectionObserver","param","selectionCb","collapsed","updateSelection","selection","ranges","count","range","startContainer","startOffset","endContainer","endOffset","initCustomElementObserver","customElementCb","constructor","mergeHooks","o","hooks","mutationCb","canvasMutationCb","initObservers","mutationObserver","mousemoveHandler","mouseInteractionHandler","scrollHandler","viewportResizeHandler","inputHandler","mediaInteractionHandler","styleSheetObserver","adoptedStyleSheetObserver","styleDeclarationObserver","fontObserver","selectionObserver","customElementObserver","pluginHandlers","plugin","b","CrossOriginIframeMirror","generateIdFn","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","remoteIdToIdMap","map","ids","IframeManager","message","crossOriginMessageEvent","transformedEvent","style","iframeMirror","obj","keys","child","ShadowDomManager","iframeElement","manager","option","__rest","t","__awaiter","_arguments","P","generator","adopt","resolve","reject","fulfilled","step","rejected","lookup","encode","arraybuffer","bytes","base64","canvasVarMap","variableListFor","ctor","contextMap","saveWebGLVar","isInstanceOfWebGLObject","list","serializeArg","arg","src","serializeArgs","initCanvas2DMutationObserver","props2D","recordArgs","hookHandler","getNormalizedContextName","contextType","initCanvasContextObserver","setPreserveDrawingBufferToTrue","ctxName","contextAttributes","patchGLPrototype","prototype","props","mutation","initCanvasWebGLMutationObserver","funcToSource","sourcemapArg","sourcemap","lines","blankPrefixLength","createURL","blob","createInlineWorkerFactory","WorkerFactory","lastBlobMap","transparentBlobMap","getTransparentBlobFor","offscreen","arrayBuffer","worker","bitmap","transparentBase64","CanvasManager","fps","canvasContextReset","snapshotInProgressMap","timeBetweenSnapshots","lastSnapshotTime","rafId","getCanvas","matchedCanvas","takeCanvasSnapshots","timestamp","canvas2DReset","canvasWebGL1and2Reset","setLatestRAFTimestamp","values","valuesWithType","StylesheetManager","linkEl","adoptedStyleSheetData","styles","ProcessedNodeManager","thisBuffer","buffers","buffer","wrapEvent","wrappedEmit","takeFullSnapshot","canvasManager","recording","record","emit","checkoutEveryNms","checkoutEveryNth","_maskInputOptions","_slimDOMOptions","packFn","mousemoveWait","recordDOM","recordCrossOriginIframes","recordAfter","collectFonts","plugins","inEmittingFrame","passEmitsToParent","lastFullSnapshotEvent","incrementalSnapshotCount","eventProcessor","isCheckout","buf","exceedCount","exceedTime","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","wrappedAdoptedStyleSheetEmit","iframeManager","processedNodeManager","shadowDomManager","observe","init","tag","Config","loc","setImmediate","window","builtInProp","cycle","schedulingQueue","ToString","val","config","first","last","Item","self","f","schedule","isThenable","_then","oType","notify","notifyIsolated","chain","ret","msg","defWrapper","MakeDefWrapper","iteratePromises","Constructor","arr","resolver","rejecter","idx","MakeDef","NpoPromise","executor","def","success","failure","PromisePrototype","msgs","PromisePolyfill","MAX_RECORDING_MS","MAX_VALUE_FOR_MIN_RECORDING_MS","ArrayProto","FuncProto","ObjProto","slice","toString","hasOwnProperty","windowConsole","navigator","document","windowOpera","screen","userAgent","nativeBind","nativeForEach","nativeIndexOf","nativeMap","nativeIsArray","breaker","_","console","log_func_with_prefix","prefix","console_with_prefix","bound","iterator","l","iterable","callback","results","found","needle","subclass","superclass","k","pad","length","mixed_val","quote","string","escapable","holder","gap","indent","mind","partial","at","ch","escapee","next","number","hex","uffff","white","word","array","object","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","enc","tmp_arr","utftext","start","end","stringl","c1","T","time","ticks","R","UA","ua","xor","byte_array","j","tmp","se","BLOCKED_UA_STRS","formdata","arg_separator","use_val","use_key","regexS","nameEQ","ca","cookie","seconds","is_cross_subdomain","is_secure","is_cross_site","domain_override","cdomain","expires","secure","domain","extract_domain","date","days","new_cookie_val","_localStorageSupported","localStorageSupported","storage","forceCheck","supported","cheap_guid","force_check","register_event","oldSchool","useCapture","ontype","old_handler","makeHandler","new_handler","old_handlers","fixEvent","old_result","new_result","TOKEN_MATCH_REGEX","getAllChildren","bad_whitespace","hasClass","elem","selector","getElementsBySelector","tokens","token","foundCount","elements","currentContextIndex","currentContext","token_match","attrName","attrOperator","attrValue","checkFunction","query","CAMPAIGN_KEYWORDS","CLICK_IDS","default_value","kw","params","kwkey","idkey","referrer","search","keyword","user_agent","vendor","opera","browser","versionRegexs","matches","split","extra_props","maxlen","guid","SIMPLE_DOMAIN_MATCH_REGEX","DOMAIN_MATCH_REGEX","hostname","domain_regex","tld","isOnline","onLine","JSONStringify","JSONParse","GDPR_DEFAULT_PERSISTENCE_PREFIX","hasOptedOut","_hasDoNotTrackFlagOn","optedOut","_getStorageValue","addOptOutCheckMixpanelLib","method","_addOptOutCheck","_getStorage","_getStorageKey","nav","hasDntOn","dntValue","getConfigValue","ignoreDnt","persistenceType","persistencePrefix","logger","SharedLock","Promise","lockedCB","pid","startTime","pollIntervalMS","timeoutMS","keyX","keyY","keyZ","delay","waitFor","predicate","getSetY","valY","criticalSection","removeLock","LocalStorageWrapper","storageOverride","RequestQueue","storageKey","flushInterval","queueEntry","enqueueItem","storedQueue","succeeded","batchSize","batch","idsInBatch","filterOutIDsAndInvalid","items","idSet","filteredItems","removeFromStorage","updatePayloads","existingItems","itemsToUpdate","newItems","newPayload","storageEntry","queue","serialized","MAX_RETRY_INTERVAL_MS","RequestBatcher","flushMS","currentBatchSize","attemptSecondaryFlush","dataForRequest","transformedItems","addPayload","itemId","removeItemsFromQueue","batchSendCallback","res","retryMS","halvedBatchSize","requestOptions","CompressionStream","RECORDER_BATCHER_LIB_CONFIG","ACTIVE_SOURCES","isUserEvent","ev","SessionRecording","batcherKey","configVar","shouldStopBatcher","resetIdleTimeout","code","currentReplayId","reqParams","reqBody","onSuccess","response","responseBody","numEvents","replayId","batchStartTime","replayLengthMs","eventsJson","deviceId","userId","jsonStream","gzipStream","compressedBlob","MixpanelRecorder","mixpanelInstance","onIdleTimeout","onMaxLengthReached"],"mappings":"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"}