{"version":3,"file":"static/chunks/396464d2-ebfcbb9af0d67732.js","mappings":"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","sources":["webpack://_N_E/./node_modules/@sentry/replay/esm/index.js","webpack://_N_E/"],"sourcesContent":["import { _nullishCoalesce, _optionalChain } from '@sentry/utils';\nimport { addBreadcrumb, getClient, isSentryRequestUrl, getCurrentScope, addEventProcessor, prepareEvent, getIsolationScope, setContext, captureException, spanToJSON, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '@sentry/core';\nimport { GLOBAL_OBJ, normalize, fill, htmlTreeAsString, browserPerformanceTimeOrigin, logger, uuid4, SENTRY_XHR_DATA_KEY, dropUndefinedKeys, stringMatchesSomePattern, addFetchInstrumentationHandler, addXhrInstrumentationHandler, addClickKeypressInstrumentationHandler, addHistoryInstrumentationHandler, createEnvelope, createEventEnvelopeHeaders, getSdkMetadataForEnvelopeHeader, updateRateLimits, isRateLimited, consoleSandbox, isBrowser } from '@sentry/utils';\nimport { addPerformanceInstrumentationHandler, addLcpInstrumentationHandler } from '@sentry-internal/tracing';\n\n// exporting a separate copy of `WINDOW` rather than exporting the one from `@sentry/browser`\n// prevents the browser package from being bundled in the CDN bundle, and avoids a\n// circular dependency between the browser and replay packages should `@sentry/browser` import\n// from `@sentry/replay` in the future\nconst WINDOW = GLOBAL_OBJ ;\n\nconst REPLAY_SESSION_KEY = 'sentryReplaySession';\nconst REPLAY_EVENT_NAME = 'replay_event';\nconst UNABLE_TO_SEND_REPLAY = 'Unable to send Replay';\n\n// The idle limit for a session after which recording is paused.\nconst SESSION_IDLE_PAUSE_DURATION = 300000; // 5 minutes in ms\n\n// The idle limit for a session after which the session expires.\nconst SESSION_IDLE_EXPIRE_DURATION = 900000; // 15 minutes in ms\n\n/** Default flush delays */\nconst DEFAULT_FLUSH_MIN_DELAY = 5000;\n// XXX: Temp fix for our debounce logic where `maxWait` would never occur if it\n// was the same as `wait`\nconst DEFAULT_FLUSH_MAX_DELAY = 5500;\n\n/* How long to wait for error checkouts */\nconst BUFFER_CHECKOUT_TIME = 60000;\n\nconst RETRY_BASE_INTERVAL = 5000;\nconst RETRY_MAX_COUNT = 3;\n\n/* The max (uncompressed) size in bytes of a network body. Any body larger than this will be truncated. */\nconst NETWORK_BODY_MAX_SIZE = 150000;\n\n/* The max size of a single console arg that is captured. Any arg larger than this will be truncated. */\nconst CONSOLE_ARG_MAX_SIZE = 5000;\n\n/* Min. time to wait before we consider something a slow click. */\nconst SLOW_CLICK_THRESHOLD = 3000;\n/* For scroll actions after a click, we only look for a very short time period to detect programmatic scrolling. */\nconst SLOW_CLICK_SCROLL_TIMEOUT = 300;\n\n/** When encountering a total segment size exceeding this size, stop the replay (as we cannot properly ingest it). */\nconst REPLAY_MAX_EVENT_BUFFER_SIZE = 20000000; // ~20MB\n\n/** Replays must be min. 5s long before we send them. */\nconst MIN_REPLAY_DURATION = 4999;\n/* The max. allowed value that the minReplayDuration can be set to. */\nconst MIN_REPLAY_DURATION_LIMIT = 15000;\n\n/** The max. length of a replay. */\nconst MAX_REPLAY_DURATION = 3600000; // 60 minutes in ms;\n\nfunction _nullishCoalesce$1(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }function _optionalChain$5(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var NodeType$1;\n(function (NodeType) {\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\n})(NodeType$1 || (NodeType$1 = {}));\n\nfunction isElement$1(n) {\n return n.nodeType === n.ELEMENT_NODE;\n}\nfunction isShadowRoot(n) {\n const host = _optionalChain$5([n, 'optionalAccess', _ => _.host]);\n return Boolean(_optionalChain$5([host, 'optionalAccess', _2 => _2.shadowRoot]) === n);\n}\nfunction isNativeShadowDom(shadowRoot) {\n return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n if (cssText.includes(' background-clip: text;') &&\n !cssText.includes(' -webkit-background-clip: text;')) {\n cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\n }\n return cssText;\n}\nfunction escapeImportStatement(rule) {\n const { cssText } = rule;\n if (cssText.split('\"').length < 3)\n return cssText;\n const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\n if (rule.layerName === '') {\n statement.push(`layer`);\n }\n else if (rule.layerName) {\n statement.push(`layer(${rule.layerName})`);\n }\n if (rule.supportsText) {\n statement.push(`supports(${rule.supportsText})`);\n }\n if (rule.media.length) {\n statement.push(rule.media.mediaText);\n }\n return statement.join(' ') + ';';\n}\nfunction stringifyStylesheet(s) {\n try {\n const rules = s.rules || s.cssRules;\n return rules\n ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join(''))\n : null;\n }\n catch (error) {\n return null;\n }\n}\nfunction stringifyRule(rule) {\n let importStringified;\n if (isCSSImportRule(rule)) {\n try {\n importStringified =\n stringifyStylesheet(rule.styleSheet) ||\n escapeImportStatement(rule);\n }\n catch (error) {\n }\n }\n else if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\n return fixSafariColons(rule.cssText);\n }\n return importStringified || rule.cssText;\n}\nfunction fixSafariColons(cssStringified) {\n const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n return cssStringified.replace(regex, '$1\\\\$2');\n}\nfunction isCSSImportRule(rule) {\n return 'styleSheet' in rule;\n}\nfunction isCSSStyleRule(rule) {\n return 'selectorText' in rule;\n}\nclass Mirror {\n constructor() {\n this.idNodeMap = new Map();\n this.nodeMetaMap = new WeakMap();\n }\n getId(n) {\n if (!n)\n return -1;\n const id = _optionalChain$5([this, 'access', _3 => _3.getMeta, 'call', _4 => _4(n), 'optionalAccess', _5 => _5.id]);\n return _nullishCoalesce$1(id, () => ( -1));\n }\n getNode(id) {\n return this.idNodeMap.get(id) || null;\n }\n getIds() {\n return Array.from(this.idNodeMap.keys());\n }\n getMeta(n) {\n return this.nodeMetaMap.get(n) || null;\n }\n removeNodeFromMap(n) {\n const id = this.getId(n);\n this.idNodeMap.delete(id);\n if (n.childNodes) {\n n.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\n }\n }\n has(id) {\n return this.idNodeMap.has(id);\n }\n hasNode(node) {\n return this.nodeMetaMap.has(node);\n }\n add(n, meta) {\n const id = meta.id;\n this.idNodeMap.set(id, n);\n this.nodeMetaMap.set(n, meta);\n }\n replace(id, n) {\n const oldNode = this.getNode(id);\n if (oldNode) {\n const meta = this.nodeMetaMap.get(oldNode);\n if (meta)\n this.nodeMetaMap.set(n, meta);\n }\n this.idNodeMap.set(id, n);\n }\n reset() {\n this.idNodeMap = new Map();\n this.nodeMetaMap = new WeakMap();\n }\n}\nfunction createMirror() {\n return new Mirror();\n}\nfunction shouldMaskInput({ maskInputOptions, tagName, type, }) {\n if (tagName === 'OPTION') {\n tagName = 'SELECT';\n }\n return Boolean(maskInputOptions[tagName.toLowerCase()] ||\n (type && maskInputOptions[type]) ||\n type === 'password' ||\n (tagName === 'INPUT' && !type && maskInputOptions['text']));\n}\nfunction maskInputValue({ isMasked, element, value, maskInputFn, }) {\n let text = value || '';\n if (!isMasked) {\n return text;\n }\n if (maskInputFn) {\n text = maskInputFn(text, element);\n }\n return '*'.repeat(text.length);\n}\nfunction toLowerCase(str) {\n return str.toLowerCase();\n}\nfunction toUpperCase(str) {\n return str.toUpperCase();\n}\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\nfunction is2DCanvasBlank(canvas) {\n const ctx = canvas.getContext('2d');\n if (!ctx)\n return true;\n const chunkSize = 50;\n for (let x = 0; x < canvas.width; x += chunkSize) {\n for (let y = 0; y < canvas.height; y += chunkSize) {\n const getImageData = ctx.getImageData;\n const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\n ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\n : getImageData;\n const pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\n if (pixelBuffer.some((pixel) => pixel !== 0))\n return false;\n }\n }\n return true;\n}\nfunction getInputType(element) {\n const type = element.type;\n return element.hasAttribute('data-rr-is-password')\n ? 'password'\n : type\n ?\n toLowerCase(type)\n : null;\n}\nfunction getInputValue(el, tagName, type) {\n if (tagName === 'INPUT' && (type === 'radio' || type === 'checkbox')) {\n return el.getAttribute('value') || '';\n }\n return el.value;\n}\n\nlet _id = 1;\nconst tagNameRegex = new RegExp('[^a-z0-9-_:]');\nconst IGNORED_NODE = -2;\nfunction genId() {\n return _id++;\n}\nfunction getValidTagName(element) {\n if (element instanceof HTMLFormElement) {\n return 'form';\n }\n const processedTagName = toLowerCase(element.tagName);\n if (tagNameRegex.test(processedTagName)) {\n return 'div';\n }\n return processedTagName;\n}\nfunction extractOrigin(url) {\n let origin = '';\n if (url.indexOf('//') > -1) {\n origin = url.split('/').slice(0, 3).join('/');\n }\n else {\n origin = url.split('/')[0];\n }\n origin = origin.split('?')[0];\n return origin;\n}\nlet canvasService;\nlet canvasCtx;\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nconst URL_WWW_MATCH = /^www\\..*/i;\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absoluteToStylesheet(cssText, href) {\n return (cssText || '').replace(URL_IN_CSS_REF, (origin, quote1, path1, quote2, path2, path3) => {\n const filePath = path1 || path2 || path3;\n const maybeQuote = quote1 || quote2 || '';\n if (!filePath) {\n return origin;\n }\n if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\n }\n if (DATA_URI.test(filePath)) {\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\n }\n if (filePath[0] === '/') {\n return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\n }\n const stack = href.split('/');\n const parts = filePath.split('/');\n stack.pop();\n for (const part of parts) {\n if (part === '.') {\n continue;\n }\n else if (part === '..') {\n stack.pop();\n }\n else {\n stack.push(part);\n }\n }\n return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\n });\n}\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n if (attributeValue.trim() === '') {\n return attributeValue;\n }\n let pos = 0;\n function collectCharacters(regEx) {\n let chars;\n const match = regEx.exec(attributeValue.substring(pos));\n if (match) {\n chars = match[0];\n pos += chars.length;\n return chars;\n }\n return '';\n }\n const output = [];\n while (true) {\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\n if (pos >= attributeValue.length) {\n break;\n }\n let url = collectCharacters(SRCSET_NOT_SPACES);\n if (url.slice(-1) === ',') {\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n output.push(url);\n }\n else {\n let descriptorsStr = '';\n url = absoluteToDoc(doc, url);\n let inParens = false;\n while (true) {\n const c = attributeValue.charAt(pos);\n if (c === '') {\n output.push((url + descriptorsStr).trim());\n break;\n }\n else if (!inParens) {\n if (c === ',') {\n pos += 1;\n output.push((url + descriptorsStr).trim());\n break;\n }\n else if (c === '(') {\n inParens = true;\n }\n }\n else {\n if (c === ')') {\n inParens = false;\n }\n }\n descriptorsStr += c;\n pos += 1;\n }\n }\n }\n return output.join(', ');\n}\nfunction absoluteToDoc(doc, attributeValue) {\n if (!attributeValue || attributeValue.trim() === '') {\n return attributeValue;\n }\n const a = doc.createElement('a');\n a.href = attributeValue;\n return a.href;\n}\nfunction isSVGElement(el) {\n return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\n}\nfunction getHref() {\n const a = document.createElement('a');\n a.href = '';\n return a.href;\n}\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn) {\n if (!value) {\n return value;\n }\n if (name === 'src' ||\n (name === 'href' && !(tagName === 'use' && value[0] === '#'))) {\n return absoluteToDoc(doc, value);\n }\n else if (name === 'xlink:href' && value[0] !== '#') {\n return absoluteToDoc(doc, value);\n }\n else if (name === 'background' &&\n (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\n return absoluteToDoc(doc, value);\n }\n else if (name === 'srcset') {\n return getAbsoluteSrcsetString(doc, value);\n }\n else if (name === 'style') {\n return absoluteToStylesheet(value, getHref());\n }\n else if (tagName === 'object' && name === 'data') {\n return absoluteToDoc(doc, value);\n }\n if (typeof maskAttributeFn === 'function') {\n return maskAttributeFn(name, value, element);\n }\n return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\n}\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\n try {\n if (unblockSelector && element.matches(unblockSelector)) {\n return false;\n }\n if (typeof blockClass === 'string') {\n if (element.classList.contains(blockClass)) {\n return true;\n }\n }\n else {\n for (let eIndex = element.classList.length; eIndex--;) {\n const className = element.classList[eIndex];\n if (blockClass.test(className)) {\n return true;\n }\n }\n }\n if (blockSelector) {\n return element.matches(blockSelector);\n }\n }\n catch (e) {\n }\n return false;\n}\nfunction elementClassMatchesRegex(el, regex) {\n for (let eIndex = el.classList.length; eIndex--;) {\n const className = el.classList[eIndex];\n if (regex.test(className)) {\n return true;\n }\n }\n return false;\n}\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\n if (!node)\n return -1;\n if (node.nodeType !== node.ELEMENT_NODE)\n return -1;\n if (distance > limit)\n return -1;\n if (matchPredicate(node))\n return distance;\n return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\n}\nfunction createMatchPredicate(className, selector) {\n return (node) => {\n const el = node;\n if (el === null)\n return false;\n try {\n if (className) {\n if (typeof className === 'string') {\n if (el.matches(`.${className}`))\n return true;\n }\n else if (elementClassMatchesRegex(el, className)) {\n return true;\n }\n }\n if (selector && el.matches(selector))\n return true;\n return false;\n }\n catch (e2) {\n return false;\n }\n };\n}\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\n try {\n const el = node.nodeType === node.ELEMENT_NODE\n ? node\n : node.parentElement;\n if (el === null)\n return false;\n if (el.tagName === 'INPUT') {\n const autocomplete = el.getAttribute('autocomplete');\n const disallowedAutocompleteValues = [\n 'current-password',\n 'new-password',\n 'cc-number',\n 'cc-exp',\n 'cc-exp-month',\n 'cc-exp-year',\n 'cc-csc',\n ];\n if (disallowedAutocompleteValues.includes(autocomplete)) {\n return true;\n }\n }\n let maskDistance = -1;\n let unmaskDistance = -1;\n if (maskAllText) {\n unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector));\n if (unmaskDistance < 0) {\n return true;\n }\n maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector), unmaskDistance >= 0 ? unmaskDistance : Infinity);\n }\n else {\n maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector));\n if (maskDistance < 0) {\n return false;\n }\n unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector), maskDistance >= 0 ? maskDistance : Infinity);\n }\n return maskDistance >= 0\n ? unmaskDistance >= 0\n ? maskDistance <= unmaskDistance\n : true\n : unmaskDistance >= 0\n ? false\n : !!maskAllText;\n }\n catch (e) {\n }\n return !!maskAllText;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n const win = iframeEl.contentWindow;\n if (!win) {\n return;\n }\n let fired = false;\n let readyState;\n try {\n readyState = win.document.readyState;\n }\n catch (error) {\n return;\n }\n if (readyState !== 'complete') {\n const timer = setTimeout(() => {\n if (!fired) {\n listener();\n fired = true;\n }\n }, iframeLoadTimeout);\n iframeEl.addEventListener('load', () => {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n return;\n }\n const blankUrl = 'about:blank';\n if (win.location.href !== blankUrl ||\n iframeEl.src === blankUrl ||\n iframeEl.src === '') {\n setTimeout(listener, 0);\n return iframeEl.addEventListener('load', listener);\n }\n iframeEl.addEventListener('load', listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n let fired = false;\n let styleSheetLoaded;\n try {\n styleSheetLoaded = link.sheet;\n }\n catch (error) {\n return;\n }\n if (styleSheetLoaded)\n return;\n const timer = setTimeout(() => {\n if (!fired) {\n listener();\n fired = true;\n }\n }, styleSheetLoadTimeout);\n link.addEventListener('load', () => {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n}\nfunction serializeNode(n, options) {\n const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskAttributeFn, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, } = options;\n const rootId = getRootId(doc, mirror);\n switch (n.nodeType) {\n case n.DOCUMENT_NODE:\n if (n.compatMode !== 'CSS1Compat') {\n return {\n type: NodeType$1.Document,\n childNodes: [],\n compatMode: n.compatMode,\n };\n }\n else {\n return {\n type: NodeType$1.Document,\n childNodes: [],\n };\n }\n case n.DOCUMENT_TYPE_NODE:\n return {\n type: NodeType$1.DocumentType,\n name: n.name,\n publicId: n.publicId,\n systemId: n.systemId,\n rootId,\n };\n case n.ELEMENT_NODE:\n return serializeElementNode(n, {\n doc,\n blockClass,\n blockSelector,\n unblockSelector,\n inlineStylesheet,\n maskAttributeFn,\n maskInputOptions,\n maskInputFn,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement,\n rootId,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n });\n case n.TEXT_NODE:\n return serializeTextNode(n, {\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n maskTextFn,\n maskInputOptions,\n maskInputFn,\n rootId,\n });\n case n.CDATA_SECTION_NODE:\n return {\n type: NodeType$1.CDATA,\n textContent: '',\n rootId,\n };\n case n.COMMENT_NODE:\n return {\n type: NodeType$1.Comment,\n textContent: n.textContent || '',\n rootId,\n };\n default:\n return false;\n }\n}\nfunction getRootId(doc, mirror) {\n if (!mirror.hasNode(doc))\n return undefined;\n const docId = mirror.getId(doc);\n return docId === 1 ? undefined : docId;\n}\nfunction serializeTextNode(n, options) {\n const { maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, maskTextFn, maskInputOptions, maskInputFn, rootId, } = options;\n const parentTagName = n.parentNode && n.parentNode.tagName;\n let textContent = n.textContent;\n const isStyle = parentTagName === 'STYLE' ? true : undefined;\n const isScript = parentTagName === 'SCRIPT' ? true : undefined;\n const isTextarea = parentTagName === 'TEXTAREA' ? true : undefined;\n if (isStyle && textContent) {\n try {\n if (n.nextSibling || n.previousSibling) {\n }\n else if (_optionalChain$5([n, 'access', _6 => _6.parentNode, 'access', _7 => _7.sheet, 'optionalAccess', _8 => _8.cssRules])) {\n textContent = stringifyStylesheet(n.parentNode.sheet);\n }\n }\n catch (err) {\n console.warn(`Cannot get CSS styles from text's parentNode. Error: ${err}`, n);\n }\n textContent = absoluteToStylesheet(textContent, getHref());\n }\n if (isScript) {\n textContent = 'SCRIPT_PLACEHOLDER';\n }\n const forceMask = needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText);\n if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\n textContent = maskTextFn\n ? maskTextFn(textContent)\n : textContent.replace(/[\\S]/g, '*');\n }\n if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\n textContent = maskInputFn\n ? maskInputFn(textContent, n.parentNode)\n : textContent.replace(/[\\S]/g, '*');\n }\n if (parentTagName === 'OPTION' && textContent) {\n const isInputMasked = shouldMaskInput({\n type: null,\n tagName: parentTagName,\n maskInputOptions,\n });\n textContent = maskInputValue({\n isMasked: needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked),\n element: n,\n value: textContent,\n maskInputFn,\n });\n }\n return {\n type: NodeType$1.Text,\n textContent: textContent || '',\n isStyle,\n rootId,\n };\n}\nfunction serializeElementNode(n, options) {\n const { doc, blockClass, blockSelector, unblockSelector, inlineStylesheet, maskInputOptions = {}, maskAttributeFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, } = options;\n const needBlock = _isBlockedElement(n, blockClass, blockSelector, unblockSelector);\n const tagName = getValidTagName(n);\n let attributes = {};\n const len = n.attributes.length;\n for (let i = 0; i < len; i++) {\n const attr = n.attributes[i];\n if (attr.name && !ignoreAttribute(tagName, attr.name, attr.value)) {\n attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value, n, maskAttributeFn);\n }\n }\n if (tagName === 'link' && inlineStylesheet) {\n const stylesheet = Array.from(doc.styleSheets).find((s) => {\n return s.href === n.href;\n });\n let cssText = null;\n if (stylesheet) {\n cssText = stringifyStylesheet(stylesheet);\n }\n if (cssText) {\n delete attributes.rel;\n delete attributes.href;\n attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\n }\n }\n if (tagName === 'style' &&\n n.sheet &&\n !(n.innerText || n.textContent || '').trim().length) {\n const cssText = stringifyStylesheet(n.sheet);\n if (cssText) {\n attributes._cssText = absoluteToStylesheet(cssText, getHref());\n }\n }\n if (tagName === 'input' ||\n tagName === 'textarea' ||\n tagName === 'select' ||\n tagName === 'option') {\n const el = n;\n const type = getInputType(el);\n const value = getInputValue(el, toUpperCase(tagName), type);\n const checked = el.checked;\n if (type !== 'submit' && type !== 'button' && value) {\n const forceMask = needMaskingText(el, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, shouldMaskInput({\n type,\n tagName: toUpperCase(tagName),\n maskInputOptions,\n }));\n attributes.value = maskInputValue({\n isMasked: forceMask,\n element: el,\n value,\n maskInputFn,\n });\n }\n if (checked) {\n attributes.checked = checked;\n }\n }\n if (tagName === 'option') {\n if (n.selected && !maskInputOptions['select']) {\n attributes.selected = true;\n }\n else {\n delete attributes.selected;\n }\n }\n if (tagName === 'canvas' && recordCanvas) {\n if (n.__context === '2d') {\n if (!is2DCanvasBlank(n)) {\n attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n }\n }\n else if (!('__context' in n)) {\n const canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n const blankCanvas = document.createElement('canvas');\n blankCanvas.width = n.width;\n blankCanvas.height = n.height;\n const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n if (canvasDataURL !== blankCanvasDataURL) {\n attributes.rr_dataURL = canvasDataURL;\n }\n }\n }\n if (tagName === 'img' && inlineImages) {\n if (!canvasService) {\n canvasService = doc.createElement('canvas');\n canvasCtx = canvasService.getContext('2d');\n }\n const image = n;\n const oldValue = image.crossOrigin;\n image.crossOrigin = 'anonymous';\n const recordInlineImage = () => {\n image.removeEventListener('load', recordInlineImage);\n try {\n canvasService.width = image.naturalWidth;\n canvasService.height = image.naturalHeight;\n canvasCtx.drawImage(image, 0, 0);\n attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n }\n catch (err) {\n console.warn(`Cannot inline img src=${image.currentSrc}! Error: ${err}`);\n }\n oldValue\n ? (attributes.crossOrigin = oldValue)\n : image.removeAttribute('crossorigin');\n };\n if (image.complete && image.naturalWidth !== 0)\n recordInlineImage();\n else\n image.addEventListener('load', recordInlineImage);\n }\n if (tagName === 'audio' || tagName === 'video') {\n attributes.rr_mediaState = n.paused\n ? 'paused'\n : 'played';\n attributes.rr_mediaCurrentTime = n.currentTime;\n }\n if (!newlyAddedElement) {\n if (n.scrollLeft) {\n attributes.rr_scrollLeft = n.scrollLeft;\n }\n if (n.scrollTop) {\n attributes.rr_scrollTop = n.scrollTop;\n }\n }\n if (needBlock) {\n const { width, height } = n.getBoundingClientRect();\n attributes = {\n class: attributes.class,\n rr_width: `${width}px`,\n rr_height: `${height}px`,\n };\n }\n if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\n if (!n.contentDocument) {\n attributes.rr_src = attributes.src;\n }\n delete attributes.src;\n }\n let isCustomElement;\n try {\n if (customElements.get(tagName))\n isCustomElement = true;\n }\n catch (e) {\n }\n return {\n type: NodeType$1.Element,\n tagName,\n attributes,\n childNodes: [],\n isSVG: isSVGElement(n) || undefined,\n needBlock,\n rootId,\n isCustom: isCustomElement,\n };\n}\nfunction lowerIfExists(maybeAttr) {\n if (maybeAttr === undefined || maybeAttr === null) {\n return '';\n }\n else {\n return maybeAttr.toLowerCase();\n }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n if (slimDOMOptions.comment && sn.type === NodeType$1.Comment) {\n return true;\n }\n else if (sn.type === NodeType$1.Element) {\n if (slimDOMOptions.script &&\n (sn.tagName === 'script' ||\n (sn.tagName === 'link' &&\n (sn.attributes.rel === 'preload' ||\n sn.attributes.rel === 'modulepreload') &&\n sn.attributes.as === 'script') ||\n (sn.tagName === 'link' &&\n sn.attributes.rel === 'prefetch' &&\n typeof sn.attributes.href === 'string' &&\n sn.attributes.href.endsWith('.js')))) {\n return true;\n }\n else if (slimDOMOptions.headFavicon &&\n ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\n (sn.tagName === 'meta' &&\n (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\n lowerIfExists(sn.attributes.name) === 'application-name' ||\n lowerIfExists(sn.attributes.rel) === 'icon' ||\n lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\n lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\n return true;\n }\n else if (sn.tagName === 'meta') {\n if (slimDOMOptions.headMetaDescKeywords &&\n lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n return true;\n }\n else if (slimDOMOptions.headMetaSocial &&\n (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\n lowerIfExists(sn.attributes.name) === 'pinterest')) {\n return true;\n }\n else if (slimDOMOptions.headMetaRobots &&\n (lowerIfExists(sn.attributes.name) === 'robots' ||\n lowerIfExists(sn.attributes.name) === 'googlebot' ||\n lowerIfExists(sn.attributes.name) === 'bingbot')) {\n return true;\n }\n else if (slimDOMOptions.headMetaHttpEquiv &&\n sn.attributes['http-equiv'] !== undefined) {\n return true;\n }\n else if (slimDOMOptions.headMetaAuthorship &&\n (lowerIfExists(sn.attributes.name) === 'author' ||\n lowerIfExists(sn.attributes.name) === 'generator' ||\n lowerIfExists(sn.attributes.name) === 'framework' ||\n lowerIfExists(sn.attributes.name) === 'publisher' ||\n lowerIfExists(sn.attributes.name) === 'progid' ||\n lowerIfExists(sn.attributes.property).match(/^article:/) ||\n lowerIfExists(sn.attributes.property).match(/^product:/))) {\n return true;\n }\n else if (slimDOMOptions.headMetaVerification &&\n (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\n lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\n lowerIfExists(sn.attributes.name) === 'csrf-token' ||\n lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\n lowerIfExists(sn.attributes.name) === 'verify-v1' ||\n lowerIfExists(sn.attributes.name) === 'verification' ||\n lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\n return true;\n }\n }\n }\n return false;\n}\nfunction serializeNodeWithId(n, options) {\n const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, skipChild = false, inlineStylesheet = true, maskInputOptions = {}, maskAttributeFn, maskTextFn, maskInputFn, slimDOMOptions, dataURLOptions = {}, inlineImages = false, recordCanvas = false, onSerialize, onIframeLoad, iframeLoadTimeout = 5000, onStylesheetLoad, stylesheetLoadTimeout = 5000, keepIframeSrcFn = () => false, newlyAddedElement = false, } = options;\n let { preserveWhiteSpace = true } = options;\n const _serializedNode = serializeNode(n, {\n doc,\n mirror,\n blockClass,\n blockSelector,\n maskAllText,\n unblockSelector,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement,\n });\n if (!_serializedNode) {\n console.warn(n, 'not serialized');\n return null;\n }\n let id;\n if (mirror.hasNode(n)) {\n id = mirror.getId(n);\n }\n else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\n (!preserveWhiteSpace &&\n _serializedNode.type === NodeType$1.Text &&\n !_serializedNode.isStyle &&\n !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\n id = IGNORED_NODE;\n }\n else {\n id = genId();\n }\n const serializedNode = Object.assign(_serializedNode, { id });\n mirror.add(n, serializedNode);\n if (id === IGNORED_NODE) {\n return null;\n }\n if (onSerialize) {\n onSerialize(n);\n }\n let recordChild = !skipChild;\n if (serializedNode.type === NodeType$1.Element) {\n recordChild = recordChild && !serializedNode.needBlock;\n delete serializedNode.needBlock;\n const shadowRoot = n.shadowRoot;\n if (shadowRoot && isNativeShadowDom(shadowRoot))\n serializedNode.isShadowHost = true;\n }\n if ((serializedNode.type === NodeType$1.Document ||\n serializedNode.type === NodeType$1.Element) &&\n recordChild) {\n if (slimDOMOptions.headWhitespace &&\n serializedNode.type === NodeType$1.Element &&\n serializedNode.tagName === 'head') {\n preserveWhiteSpace = false;\n }\n const bypassOptions = {\n doc,\n mirror,\n blockClass,\n blockSelector,\n maskAllText,\n unblockSelector,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n skipChild,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n };\n for (const childN of Array.from(n.childNodes)) {\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n if (isElement$1(n) && n.shadowRoot) {\n for (const childN of Array.from(n.shadowRoot.childNodes)) {\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n isNativeShadowDom(n.shadowRoot) &&\n (serializedChildNode.isShadow = true);\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n }\n }\n if (n.parentNode &&\n isShadowRoot(n.parentNode) &&\n isNativeShadowDom(n.parentNode)) {\n serializedNode.isShadow = true;\n }\n if (serializedNode.type === NodeType$1.Element &&\n serializedNode.tagName === 'iframe') {\n onceIframeLoaded(n, () => {\n const iframeDoc = n.contentDocument;\n if (iframeDoc && onIframeLoad) {\n const serializedIframeNode = serializeNodeWithId(iframeDoc, {\n doc: iframeDoc,\n mirror,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n });\n if (serializedIframeNode) {\n onIframeLoad(n, serializedIframeNode);\n }\n }\n }, iframeLoadTimeout);\n }\n if (serializedNode.type === NodeType$1.Element &&\n serializedNode.tagName === 'link' &&\n serializedNode.attributes.rel === 'stylesheet') {\n onceStylesheetLoaded(n, () => {\n if (onStylesheetLoad) {\n const serializedLinkNode = serializeNodeWithId(n, {\n doc,\n mirror,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n });\n if (serializedLinkNode) {\n onStylesheetLoad(n, serializedLinkNode);\n }\n }\n }, stylesheetLoadTimeout);\n }\n return serializedNode;\n}\nfunction snapshot(n, options) {\n const { mirror = new Mirror(), blockClass = 'rr-block', blockSelector = null, unblockSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, inlineImages = false, recordCanvas = false, maskAllInputs = false, maskAttributeFn, maskTextFn, maskInputFn, slimDOM = false, dataURLOptions, preserveWhiteSpace, onSerialize, onIframeLoad, iframeLoadTimeout, onStylesheetLoad, stylesheetLoadTimeout, keepIframeSrcFn = () => false, } = options || {};\n const maskInputOptions = maskAllInputs === true\n ? {\n color: true,\n date: true,\n 'datetime-local': true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n }\n : maskAllInputs === false\n ? {}\n : maskAllInputs;\n const slimDOMOptions = slimDOM === true || slimDOM === 'all'\n ?\n {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaDescKeywords: slimDOM === 'all',\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaAuthorship: true,\n headMetaVerification: true,\n }\n : slimDOM === false\n ? {}\n : slimDOM;\n return serializeNodeWithId(n, {\n doc: n,\n mirror,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n newlyAddedElement: false,\n });\n}\n\nfunction _optionalChain$4(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nfunction on(type, fn, target = document) {\n const options = { capture: true, passive: true };\n target.addEventListener(type, fn, options);\n return () => target.removeEventListener(type, fn, options);\n}\nconst DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +\n '\\r\\n' +\n 'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\n '\\r\\n' +\n 'or you can use record.mirror to access the mirror instance during recording.';\nlet _mirror = {\n map: {},\n getId() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return -1;\n },\n getNode() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return null;\n },\n removeNodeFromMap() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n has() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return false;\n },\n reset() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n};\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\n _mirror = new Proxy(_mirror, {\n get(target, prop, receiver) {\n if (prop === 'map') {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n return Reflect.get(target, prop, receiver);\n },\n });\n}\nfunction throttle$1(func, wait, options = {}) {\n let timeout = null;\n let previous = 0;\n return function (...args) {\n const now = Date.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n const remaining = wait - (now - previous);\n const context = this;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n }\n else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(() => {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n}\nfunction hookSetter(target, key, d, isRevoked, win = window) {\n const original = win.Object.getOwnPropertyDescriptor(target, key);\n win.Object.defineProperty(target, key, isRevoked\n ? d\n : {\n set(value) {\n setTimeout(() => {\n d.set.call(this, value);\n }, 0);\n if (original && original.set) {\n original.set.call(this, value);\n }\n },\n });\n return () => hookSetter(target, key, original || {}, true);\n}\nfunction patch(source, name, replacement) {\n try {\n if (!(name in source)) {\n return () => {\n };\n }\n const original = source[name];\n const wrapped = replacement(original);\n if (typeof wrapped === 'function') {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original,\n },\n });\n }\n source[name] = wrapped;\n return () => {\n source[name] = original;\n };\n }\n catch (e2) {\n return () => {\n };\n }\n}\nlet nowTimestamp = Date.now;\nif (!(/[1-9][0-9]{12}/.test(Date.now().toString()))) {\n nowTimestamp = () => new Date().getTime();\n}\nfunction getWindowScroll(win) {\n const doc = win.document;\n return {\n left: doc.scrollingElement\n ? doc.scrollingElement.scrollLeft\n : win.pageXOffset !== undefined\n ? win.pageXOffset\n : _optionalChain$4([doc, 'optionalAccess', _ => _.documentElement, 'access', _2 => _2.scrollLeft]) ||\n _optionalChain$4([doc, 'optionalAccess', _3 => _3.body, 'optionalAccess', _4 => _4.parentElement, 'optionalAccess', _5 => _5.scrollLeft]) ||\n _optionalChain$4([doc, 'optionalAccess', _6 => _6.body, 'optionalAccess', _7 => _7.scrollLeft]) ||\n 0,\n top: doc.scrollingElement\n ? doc.scrollingElement.scrollTop\n : win.pageYOffset !== undefined\n ? win.pageYOffset\n : _optionalChain$4([doc, 'optionalAccess', _8 => _8.documentElement, 'access', _9 => _9.scrollTop]) ||\n _optionalChain$4([doc, 'optionalAccess', _10 => _10.body, 'optionalAccess', _11 => _11.parentElement, 'optionalAccess', _12 => _12.scrollTop]) ||\n _optionalChain$4([doc, 'optionalAccess', _13 => _13.body, 'optionalAccess', _14 => _14.scrollTop]) ||\n 0,\n };\n}\nfunction getWindowHeight() {\n return (window.innerHeight ||\n (document.documentElement && document.documentElement.clientHeight) ||\n (document.body && document.body.clientHeight));\n}\nfunction getWindowWidth() {\n return (window.innerWidth ||\n (document.documentElement && document.documentElement.clientWidth) ||\n (document.body && document.body.clientWidth));\n}\nfunction isBlocked(node, blockClass, blockSelector, unblockSelector, checkAncestors) {\n if (!node) {\n return false;\n }\n const el = node.nodeType === node.ELEMENT_NODE\n ? node\n : node.parentElement;\n if (!el)\n return false;\n const blockedPredicate = createMatchPredicate(blockClass, blockSelector);\n if (!checkAncestors) {\n const isUnblocked = unblockSelector && el.matches(unblockSelector);\n return blockedPredicate(el) && !isUnblocked;\n }\n const blockDistance = distanceToMatch(el, blockedPredicate);\n let unblockDistance = -1;\n if (blockDistance < 0) {\n return false;\n }\n if (unblockSelector) {\n unblockDistance = distanceToMatch(el, createMatchPredicate(null, unblockSelector));\n }\n if (blockDistance > -1 && unblockDistance < 0) {\n return true;\n }\n return blockDistance < unblockDistance;\n}\nfunction isSerialized(n, mirror) {\n return mirror.getId(n) !== -1;\n}\nfunction isIgnored(n, mirror) {\n return mirror.getId(n) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror) {\n if (isShadowRoot(target)) {\n return false;\n }\n const id = mirror.getId(target);\n if (!mirror.has(id)) {\n return true;\n }\n if (target.parentNode &&\n target.parentNode.nodeType === target.DOCUMENT_NODE) {\n return false;\n }\n if (!target.parentNode) {\n return true;\n }\n return isAncestorRemoved(target.parentNode, mirror);\n}\nfunction legacy_isTouchEvent(event) {\n return Boolean(event.changedTouches);\n}\nfunction polyfill(win = window) {\n if ('NodeList' in win && !win.NodeList.prototype.forEach) {\n win.NodeList.prototype.forEach = Array.prototype\n .forEach;\n }\n if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\n win.DOMTokenList.prototype.forEach = Array.prototype\n .forEach;\n }\n if (!Node.prototype.contains) {\n Node.prototype.contains = (...args) => {\n let node = args[0];\n if (!(0 in args)) {\n throw new TypeError('1 argument is required');\n }\n do {\n if (this === node) {\n return true;\n }\n } while ((node = node && node.parentNode));\n return false;\n };\n }\n}\nfunction isSerializedIframe(n, mirror) {\n return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));\n}\nfunction isSerializedStylesheet(n, mirror) {\n return Boolean(n.nodeName === 'LINK' &&\n n.nodeType === n.ELEMENT_NODE &&\n n.getAttribute &&\n n.getAttribute('rel') === 'stylesheet' &&\n mirror.getMeta(n));\n}\nfunction hasShadowRoot(n) {\n return Boolean(_optionalChain$4([n, 'optionalAccess', _18 => _18.shadowRoot]));\n}\nclass StyleSheetMirror {\n constructor() {\n this.id = 1;\n this.styleIDMap = new WeakMap();\n this.idStyleMap = new Map();\n }\n getId(stylesheet) {\n return _nullishCoalesce(this.styleIDMap.get(stylesheet), () => ( -1));\n }\n has(stylesheet) {\n return this.styleIDMap.has(stylesheet);\n }\n add(stylesheet, id) {\n if (this.has(stylesheet))\n return this.getId(stylesheet);\n let newId;\n if (id === undefined) {\n newId = this.id++;\n }\n else\n newId = id;\n this.styleIDMap.set(stylesheet, newId);\n this.idStyleMap.set(newId, stylesheet);\n return newId;\n }\n getStyle(id) {\n return this.idStyleMap.get(id) || null;\n }\n reset() {\n this.styleIDMap = new WeakMap();\n this.idStyleMap = new Map();\n this.id = 1;\n }\n generateId() {\n return this.id++;\n }\n}\nfunction getShadowHost(n) {\n let shadowHost = null;\n if (_optionalChain$4([n, 'access', _19 => _19.getRootNode, 'optionalCall', _20 => _20(), 'optionalAccess', _21 => _21.nodeType]) === Node.DOCUMENT_FRAGMENT_NODE &&\n n.getRootNode().host)\n shadowHost = n.getRootNode().host;\n return shadowHost;\n}\nfunction getRootShadowHost(n) {\n let rootShadowHost = n;\n let shadowHost;\n while ((shadowHost = getShadowHost(rootShadowHost)))\n rootShadowHost = shadowHost;\n return rootShadowHost;\n}\nfunction shadowHostInDom(n) {\n const doc = n.ownerDocument;\n if (!doc)\n return false;\n const shadowHost = getRootShadowHost(n);\n return doc.contains(shadowHost);\n}\nfunction inDom(n) {\n const doc = n.ownerDocument;\n if (!doc)\n return false;\n return doc.contains(n) || shadowHostInDom(n);\n}\nlet cachedRequestAnimationFrameImplementation;\nfunction getRequestAnimationFrameImplementation() {\n if (cachedRequestAnimationFrameImplementation) {\n return cachedRequestAnimationFrameImplementation;\n }\n const document = window.document;\n let requestAnimationFrameImplementation = window.requestAnimationFrame;\n if (document && typeof document.createElement === 'function') {\n try {\n const sandbox = document.createElement('iframe');\n sandbox.hidden = true;\n document.head.appendChild(sandbox);\n const contentWindow = sandbox.contentWindow;\n if (contentWindow && contentWindow.requestAnimationFrame) {\n requestAnimationFrameImplementation =\n contentWindow.requestAnimationFrame;\n }\n document.head.removeChild(sandbox);\n }\n catch (e) {\n }\n }\n return (cachedRequestAnimationFrameImplementation =\n requestAnimationFrameImplementation.bind(window));\n}\nfunction onRequestAnimationFrame(...rest) {\n return getRequestAnimationFrameImplementation()(...rest);\n}\n\nvar 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 || {});\n\nfunction _optionalChain$3(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nfunction isNodeInLinkedList(n) {\n return '__ln' in n;\n}\nclass DoubleLinkedList {\n constructor() {\n this.length = 0;\n this.head = null;\n this.tail = null;\n }\n get(position) {\n if (position >= this.length) {\n throw new Error('Position outside of list range');\n }\n let current = this.head;\n for (let index = 0; index < position; index++) {\n current = _optionalChain$3([current, 'optionalAccess', _ => _.next]) || null;\n }\n return current;\n }\n addNode(n) {\n const node = {\n value: n,\n previous: null,\n next: null,\n };\n n.__ln = node;\n if (n.previousSibling && isNodeInLinkedList(n.previousSibling)) {\n const current = n.previousSibling.__ln.next;\n node.next = current;\n node.previous = n.previousSibling.__ln;\n n.previousSibling.__ln.next = node;\n if (current) {\n current.previous = node;\n }\n }\n else if (n.nextSibling &&\n isNodeInLinkedList(n.nextSibling) &&\n n.nextSibling.__ln.previous) {\n const current = n.nextSibling.__ln.previous;\n node.previous = current;\n node.next = n.nextSibling.__ln;\n n.nextSibling.__ln.previous = node;\n if (current) {\n current.next = node;\n }\n }\n else {\n if (this.head) {\n this.head.previous = node;\n }\n node.next = this.head;\n this.head = node;\n }\n if (node.next === null) {\n this.tail = node;\n }\n this.length++;\n }\n removeNode(n) {\n const current = n.__ln;\n if (!this.head) {\n return;\n }\n if (!current.previous) {\n this.head = current.next;\n if (this.head) {\n this.head.previous = null;\n }\n else {\n this.tail = null;\n }\n }\n else {\n current.previous.next = current.next;\n if (current.next) {\n current.next.previous = current.previous;\n }\n else {\n this.tail = current.previous;\n }\n }\n if (n.__ln) {\n delete n.__ln;\n }\n this.length--;\n }\n}\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\nclass MutationBuffer {\n constructor() {\n this.frozen = false;\n this.locked = false;\n this.texts = [];\n this.attributes = [];\n this.removes = [];\n this.mapRemoves = [];\n this.movedMap = {};\n this.addedSet = new Set();\n this.movedSet = new Set();\n this.droppedSet = new Set();\n this.processMutations = (mutations) => {\n mutations.forEach(this.processMutation);\n this.emit();\n };\n this.emit = () => {\n if (this.frozen || this.locked) {\n return;\n }\n const adds = [];\n const addedIds = new Set();\n const addList = new DoubleLinkedList();\n const getNextId = (n) => {\n let ns = n;\n let nextId = IGNORED_NODE;\n while (nextId === IGNORED_NODE) {\n ns = ns && ns.nextSibling;\n nextId = ns && this.mirror.getId(ns);\n }\n return nextId;\n };\n const pushAdd = (n) => {\n if (!n.parentNode || !inDom(n)) {\n return;\n }\n const parentId = isShadowRoot(n.parentNode)\n ? this.mirror.getId(getShadowHost(n))\n : this.mirror.getId(n.parentNode);\n const nextId = getNextId(n);\n if (parentId === -1 || nextId === -1) {\n return addList.addNode(n);\n }\n const sn = serializeNodeWithId(n, {\n doc: this.doc,\n mirror: this.mirror,\n blockClass: this.blockClass,\n blockSelector: this.blockSelector,\n maskAllText: this.maskAllText,\n unblockSelector: this.unblockSelector,\n maskTextClass: this.maskTextClass,\n unmaskTextClass: this.unmaskTextClass,\n maskTextSelector: this.maskTextSelector,\n unmaskTextSelector: this.unmaskTextSelector,\n skipChild: true,\n newlyAddedElement: true,\n inlineStylesheet: this.inlineStylesheet,\n maskInputOptions: this.maskInputOptions,\n maskAttributeFn: this.maskAttributeFn,\n maskTextFn: this.maskTextFn,\n maskInputFn: this.maskInputFn,\n slimDOMOptions: this.slimDOMOptions,\n dataURLOptions: this.dataURLOptions,\n recordCanvas: this.recordCanvas,\n inlineImages: this.inlineImages,\n onSerialize: (currentN) => {\n if (isSerializedIframe(currentN, this.mirror)) {\n this.iframeManager.addIframe(currentN);\n }\n if (isSerializedStylesheet(currentN, this.mirror)) {\n this.stylesheetManager.trackLinkElement(currentN);\n }\n if (hasShadowRoot(n)) {\n this.shadowDomManager.addShadowRoot(n.shadowRoot, this.doc);\n }\n },\n onIframeLoad: (iframe, childSn) => {\n this.iframeManager.attachIframe(iframe, childSn);\n this.shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: (link, childSn) => {\n this.stylesheetManager.attachLinkElement(link, childSn);\n },\n });\n if (sn) {\n adds.push({\n parentId,\n nextId,\n node: sn,\n });\n addedIds.add(sn.id);\n }\n };\n while (this.mapRemoves.length) {\n this.mirror.removeNodeFromMap(this.mapRemoves.shift());\n }\n for (const n of this.movedSet) {\n if (isParentRemoved(this.removes, n, this.mirror) &&\n !this.movedSet.has(n.parentNode)) {\n continue;\n }\n pushAdd(n);\n }\n for (const n of this.addedSet) {\n if (!isAncestorInSet(this.droppedSet, n) &&\n !isParentRemoved(this.removes, n, this.mirror)) {\n pushAdd(n);\n }\n else if (isAncestorInSet(this.movedSet, n)) {\n pushAdd(n);\n }\n else {\n this.droppedSet.add(n);\n }\n }\n let candidate = null;\n while (addList.length) {\n let node = null;\n if (candidate) {\n const parentId = this.mirror.getId(candidate.value.parentNode);\n const nextId = getNextId(candidate.value);\n if (parentId !== -1 && nextId !== -1) {\n node = candidate;\n }\n }\n if (!node) {\n let tailNode = addList.tail;\n while (tailNode) {\n const _node = tailNode;\n tailNode = tailNode.previous;\n if (_node) {\n const parentId = this.mirror.getId(_node.value.parentNode);\n const nextId = getNextId(_node.value);\n if (nextId === -1)\n continue;\n else if (parentId !== -1) {\n node = _node;\n break;\n }\n else {\n const unhandledNode = _node.value;\n if (unhandledNode.parentNode &&\n unhandledNode.parentNode.nodeType ===\n Node.DOCUMENT_FRAGMENT_NODE) {\n const shadowHost = unhandledNode.parentNode\n .host;\n const parentId = this.mirror.getId(shadowHost);\n if (parentId !== -1) {\n node = _node;\n break;\n }\n }\n }\n }\n }\n }\n if (!node) {\n while (addList.head) {\n addList.removeNode(addList.head.value);\n }\n break;\n }\n candidate = node.previous;\n addList.removeNode(node.value);\n pushAdd(node.value);\n }\n const payload = {\n texts: this.texts\n .map((text) => ({\n id: this.mirror.getId(text.node),\n value: text.value,\n }))\n .filter((text) => !addedIds.has(text.id))\n .filter((text) => this.mirror.has(text.id)),\n attributes: this.attributes\n .map((attribute) => {\n const { attributes } = attribute;\n if (typeof attributes.style === 'string') {\n const diffAsStr = JSON.stringify(attribute.styleDiff);\n const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\n if (diffAsStr.length < attributes.style.length) {\n if ((diffAsStr + unchangedAsStr).split('var(').length ===\n attributes.style.split('var(').length) {\n attributes.style = attribute.styleDiff;\n }\n }\n }\n return {\n id: this.mirror.getId(attribute.node),\n attributes: attributes,\n };\n })\n .filter((attribute) => !addedIds.has(attribute.id))\n .filter((attribute) => this.mirror.has(attribute.id)),\n removes: this.removes,\n adds,\n };\n if (!payload.texts.length &&\n !payload.attributes.length &&\n !payload.removes.length &&\n !payload.adds.length) {\n return;\n }\n this.texts = [];\n this.attributes = [];\n this.removes = [];\n this.addedSet = new Set();\n this.movedSet = new Set();\n this.droppedSet = new Set();\n this.movedMap = {};\n this.mutationCb(payload);\n };\n this.processMutation = (m) => {\n if (isIgnored(m.target, this.mirror)) {\n return;\n }\n let unattachedDoc;\n try {\n unattachedDoc = document.implementation.createHTMLDocument();\n }\n catch (e) {\n unattachedDoc = this.doc;\n }\n switch (m.type) {\n case 'characterData': {\n const value = m.target.textContent;\n if (!isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) &&\n value !== m.oldValue) {\n this.texts.push({\n value: needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, this.maskAllText) && value\n ? this.maskTextFn\n ? this.maskTextFn(value)\n : value.replace(/[\\S]/g, '*')\n : value,\n node: m.target,\n });\n }\n break;\n }\n case 'attributes': {\n const target = m.target;\n let attributeName = m.attributeName;\n let value = m.target.getAttribute(attributeName);\n if (attributeName === 'value') {\n const type = getInputType(target);\n const tagName = target.tagName;\n value = getInputValue(target, tagName, type);\n const isInputMasked = shouldMaskInput({\n maskInputOptions: this.maskInputOptions,\n tagName,\n type,\n });\n const forceMask = needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, isInputMasked);\n value = maskInputValue({\n isMasked: forceMask,\n element: target,\n value,\n maskInputFn: this.maskInputFn,\n });\n }\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\n value === m.oldValue) {\n return;\n }\n let item = this.attributes.find((a) => a.node === m.target);\n if (target.tagName === 'IFRAME' &&\n attributeName === 'src' &&\n !this.keepIframeSrcFn(value)) {\n if (!target.contentDocument) {\n attributeName = 'rr_src';\n }\n else {\n return;\n }\n }\n if (!item) {\n item = {\n node: m.target,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {},\n };\n this.attributes.push(item);\n }\n if (attributeName === 'type' &&\n target.tagName === 'INPUT' &&\n (m.oldValue || '').toLowerCase() === 'password') {\n target.setAttribute('data-rr-is-password', 'true');\n }\n if (!ignoreAttribute(target.tagName, attributeName)) {\n item.attributes[attributeName] = transformAttribute(this.doc, toLowerCase(target.tagName), toLowerCase(attributeName), value, target, this.maskAttributeFn);\n if (attributeName === 'style') {\n const old = unattachedDoc.createElement('span');\n if (m.oldValue) {\n old.setAttribute('style', m.oldValue);\n }\n for (const pname of Array.from(target.style)) {\n const newValue = target.style.getPropertyValue(pname);\n const newPriority = target.style.getPropertyPriority(pname);\n if (newValue !== old.style.getPropertyValue(pname) ||\n newPriority !== old.style.getPropertyPriority(pname)) {\n if (newPriority === '') {\n item.styleDiff[pname] = newValue;\n }\n else {\n item.styleDiff[pname] = [newValue, newPriority];\n }\n }\n else {\n item._unchangedStyles[pname] = [newValue, newPriority];\n }\n }\n for (const pname of Array.from(old.style)) {\n if (target.style.getPropertyValue(pname) === '') {\n item.styleDiff[pname] = false;\n }\n }\n }\n }\n break;\n }\n case 'childList': {\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, true)) {\n return;\n }\n m.addedNodes.forEach((n) => this.genAdds(n, m.target));\n m.removedNodes.forEach((n) => {\n const nodeId = this.mirror.getId(n);\n const parentId = isShadowRoot(m.target)\n ? this.mirror.getId(m.target.host)\n : this.mirror.getId(m.target);\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\n isIgnored(n, this.mirror) ||\n !isSerialized(n, this.mirror)) {\n return;\n }\n if (this.addedSet.has(n)) {\n deepDelete(this.addedSet, n);\n this.droppedSet.add(n);\n }\n else if (this.addedSet.has(m.target) && nodeId === -1) ;\n else if (isAncestorRemoved(m.target, this.mirror)) ;\n else if (this.movedSet.has(n) &&\n this.movedMap[moveKey(nodeId, parentId)]) {\n deepDelete(this.movedSet, n);\n }\n else {\n this.removes.push({\n parentId,\n id: nodeId,\n isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target)\n ? true\n : undefined,\n });\n }\n this.mapRemoves.push(n);\n });\n break;\n }\n }\n };\n this.genAdds = (n, target) => {\n if (this.processedNodeManager.inOtherBuffer(n, this))\n return;\n if (this.addedSet.has(n) || this.movedSet.has(n))\n return;\n if (this.mirror.hasNode(n)) {\n if (isIgnored(n, this.mirror)) {\n return;\n }\n this.movedSet.add(n);\n let targetId = null;\n if (target && this.mirror.hasNode(target)) {\n targetId = this.mirror.getId(target);\n }\n if (targetId && targetId !== -1) {\n this.movedMap[moveKey(this.mirror.getId(n), targetId)] = true;\n }\n }\n else {\n this.addedSet.add(n);\n this.droppedSet.delete(n);\n }\n if (!isBlocked(n, this.blockClass, this.blockSelector, this.unblockSelector, false)) {\n n.childNodes.forEach((childN) => this.genAdds(childN));\n if (hasShadowRoot(n)) {\n n.shadowRoot.childNodes.forEach((childN) => {\n this.processedNodeManager.add(childN, this);\n this.genAdds(childN, n);\n });\n }\n }\n };\n }\n init(options) {\n [\n 'mutationCb',\n 'blockClass',\n 'blockSelector',\n 'unblockSelector',\n 'maskAllText',\n 'maskTextClass',\n 'unmaskTextClass',\n 'maskTextSelector',\n 'unmaskTextSelector',\n 'inlineStylesheet',\n 'maskInputOptions',\n 'maskAttributeFn',\n 'maskTextFn',\n 'maskInputFn',\n 'keepIframeSrcFn',\n 'recordCanvas',\n 'inlineImages',\n 'slimDOMOptions',\n 'dataURLOptions',\n 'doc',\n 'mirror',\n 'iframeManager',\n 'stylesheetManager',\n 'shadowDomManager',\n 'canvasManager',\n 'processedNodeManager',\n ].forEach((key) => {\n this[key] = options[key];\n });\n }\n freeze() {\n this.frozen = true;\n this.canvasManager.freeze();\n }\n unfreeze() {\n this.frozen = false;\n this.canvasManager.unfreeze();\n this.emit();\n }\n isFrozen() {\n return this.frozen;\n }\n lock() {\n this.locked = true;\n this.canvasManager.lock();\n }\n unlock() {\n this.locked = false;\n this.canvasManager.unlock();\n this.emit();\n }\n reset() {\n this.shadowDomManager.reset();\n this.canvasManager.reset();\n }\n}\nfunction deepDelete(addsSet, n) {\n addsSet.delete(n);\n n.childNodes.forEach((childN) => deepDelete(addsSet, childN));\n}\nfunction isParentRemoved(removes, n, mirror) {\n if (removes.length === 0)\n return false;\n return _isParentRemoved(removes, n, mirror);\n}\nfunction _isParentRemoved(removes, n, mirror) {\n const { parentNode } = n;\n if (!parentNode) {\n return false;\n }\n const parentId = mirror.getId(parentNode);\n if (removes.some((r) => r.id === parentId)) {\n return true;\n }\n return _isParentRemoved(removes, parentNode, mirror);\n}\nfunction isAncestorInSet(set, n) {\n if (set.size === 0)\n return false;\n return _isAncestorInSet(set, n);\n}\nfunction _isAncestorInSet(set, n) {\n const { parentNode } = n;\n if (!parentNode) {\n return false;\n }\n if (set.has(parentNode)) {\n return true;\n }\n return _isAncestorInSet(set, parentNode);\n}\n\nlet errorHandler;\nfunction registerErrorHandler(handler) {\n errorHandler = handler;\n}\nfunction unregisterErrorHandler() {\n errorHandler = undefined;\n}\nconst callbackWrapper = (cb) => {\n if (!errorHandler) {\n return cb;\n }\n const rrwebWrapped = ((...rest) => {\n try {\n return cb(...rest);\n }\n catch (error) {\n if (errorHandler && errorHandler(error) === true) {\n return () => {\n };\n }\n throw error;\n }\n });\n return rrwebWrapped;\n};\n\nfunction _optionalChain$2(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nconst mutationBuffers = [];\nfunction getEventTarget(event) {\n try {\n if ('composedPath' in event) {\n const path = event.composedPath();\n if (path.length) {\n return path[0];\n }\n }\n else if ('path' in event && event.path.length) {\n return event.path[0];\n }\n }\n catch (e2) {\n }\n return event && event.target;\n}\nfunction initMutationObserver(options, rootEl) {\n const mutationBuffer = new MutationBuffer();\n mutationBuffers.push(mutationBuffer);\n mutationBuffer.init(options);\n let mutationObserverCtor = window.MutationObserver ||\n window.__rrMutationObserver;\n const angularZoneSymbol = _optionalChain$2([window, 'optionalAccess', _ => _.Zone, 'optionalAccess', _2 => _2.__symbol__, 'optionalCall', _3 => _3('MutationObserver')]);\n if (angularZoneSymbol &&\n window[angularZoneSymbol]) {\n mutationObserverCtor = window[angularZoneSymbol];\n }\n const observer = new mutationObserverCtor(callbackWrapper((mutations) => {\n if (options.onMutation && options.onMutation(mutations) === false) {\n return;\n }\n mutationBuffer.processMutations.bind(mutationBuffer)(mutations);\n }));\n observer.observe(rootEl, {\n attributes: true,\n attributeOldValue: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true,\n });\n return observer;\n}\nfunction initMoveObserver({ mousemoveCb, sampling, doc, mirror, }) {\n if (sampling.mousemove === false) {\n return () => {\n };\n }\n const threshold = typeof sampling.mousemove === 'number' ? sampling.mousemove : 50;\n const callbackThreshold = typeof sampling.mousemoveCallback === 'number'\n ? sampling.mousemoveCallback\n : 500;\n let positions = [];\n let timeBaseline;\n const wrappedCb = throttle$1(callbackWrapper((source) => {\n const totalOffset = Date.now() - timeBaseline;\n mousemoveCb(positions.map((p) => {\n p.timeOffset -= totalOffset;\n return p;\n }), source);\n positions = [];\n timeBaseline = null;\n }), callbackThreshold);\n const updatePosition = callbackWrapper(throttle$1(callbackWrapper((evt) => {\n const target = getEventTarget(evt);\n const { clientX, clientY } = legacy_isTouchEvent(evt)\n ? evt.changedTouches[0]\n : evt;\n if (!timeBaseline) {\n timeBaseline = nowTimestamp();\n }\n positions.push({\n x: clientX,\n y: clientY,\n id: mirror.getId(target),\n timeOffset: nowTimestamp() - timeBaseline,\n });\n wrappedCb(typeof DragEvent !== 'undefined' && evt instanceof DragEvent\n ? IncrementalSource.Drag\n : evt instanceof MouseEvent\n ? IncrementalSource.MouseMove\n : IncrementalSource.TouchMove);\n }), threshold, {\n trailing: false,\n }));\n const handlers = [\n on('mousemove', updatePosition, doc),\n on('touchmove', updatePosition, doc),\n on('drag', updatePosition, doc),\n ];\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initMouseInteractionObserver({ mouseInteractionCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\n if (sampling.mouseInteraction === false) {\n return () => {\n };\n }\n const disableMap = sampling.mouseInteraction === true ||\n sampling.mouseInteraction === undefined\n ? {}\n : sampling.mouseInteraction;\n const handlers = [];\n let currentPointerType = null;\n const getHandler = (eventKey) => {\n return (event) => {\n const target = getEventTarget(event);\n if (isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n return;\n }\n let pointerType = null;\n let thisEventKey = eventKey;\n if ('pointerType' in event) {\n switch (event.pointerType) {\n case 'mouse':\n pointerType = PointerTypes.Mouse;\n break;\n case 'touch':\n pointerType = PointerTypes.Touch;\n break;\n case 'pen':\n pointerType = PointerTypes.Pen;\n break;\n }\n if (pointerType === PointerTypes.Touch) {\n if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\n thisEventKey = 'TouchStart';\n }\n else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\n thisEventKey = 'TouchEnd';\n }\n }\n else if (pointerType === PointerTypes.Pen) ;\n }\n else if (legacy_isTouchEvent(event)) {\n pointerType = PointerTypes.Touch;\n }\n if (pointerType !== null) {\n currentPointerType = pointerType;\n if ((thisEventKey.startsWith('Touch') &&\n pointerType === PointerTypes.Touch) ||\n (thisEventKey.startsWith('Mouse') &&\n pointerType === PointerTypes.Mouse)) {\n pointerType = null;\n }\n }\n else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\n pointerType = currentPointerType;\n currentPointerType = null;\n }\n const e = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\n if (!e) {\n return;\n }\n const id = mirror.getId(target);\n const { clientX, clientY } = e;\n callbackWrapper(mouseInteractionCb)({\n type: MouseInteractions[thisEventKey],\n id,\n x: clientX,\n y: clientY,\n ...(pointerType !== null && { pointerType }),\n });\n };\n };\n Object.keys(MouseInteractions)\n .filter((key) => Number.isNaN(Number(key)) &&\n !key.endsWith('_Departed') &&\n disableMap[key] !== false)\n .forEach((eventKey) => {\n let eventName = toLowerCase(eventKey);\n const handler = getHandler(eventKey);\n if (window.PointerEvent) {\n switch (MouseInteractions[eventKey]) {\n case MouseInteractions.MouseDown:\n case MouseInteractions.MouseUp:\n eventName = eventName.replace('mouse', 'pointer');\n break;\n case MouseInteractions.TouchStart:\n case MouseInteractions.TouchEnd:\n return;\n }\n }\n handlers.push(on(eventName, handler, doc));\n });\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initScrollObserver({ scrollCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\n const updatePosition = callbackWrapper(throttle$1(callbackWrapper((evt) => {\n const target = getEventTarget(evt);\n if (!target ||\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n return;\n }\n const id = mirror.getId(target);\n if (target === doc && doc.defaultView) {\n const scrollLeftTop = getWindowScroll(doc.defaultView);\n scrollCb({\n id,\n x: scrollLeftTop.left,\n y: scrollLeftTop.top,\n });\n }\n else {\n scrollCb({\n id,\n x: target.scrollLeft,\n y: target.scrollTop,\n });\n }\n }), sampling.scroll || 100));\n return on('scroll', updatePosition, doc);\n}\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\n let lastH = -1;\n let lastW = -1;\n const updateDimension = callbackWrapper(throttle$1(callbackWrapper(() => {\n const height = getWindowHeight();\n const width = getWindowWidth();\n if (lastH !== height || lastW !== width) {\n viewportResizeCb({\n width: Number(width),\n height: Number(height),\n });\n lastH = height;\n lastW = width;\n }\n }), 200));\n return on('resize', updateDimension, win);\n}\nconst INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];\nconst lastInputValueMap = new WeakMap();\nfunction initInputObserver({ inputCb, doc, mirror, blockClass, blockSelector, unblockSelector, ignoreClass, ignoreSelector, maskInputOptions, maskInputFn, sampling, userTriggeredOnInput, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, }) {\n function eventHandler(event) {\n let target = getEventTarget(event);\n const userTriggered = event.isTrusted;\n const tagName = target && toUpperCase(target.tagName);\n if (tagName === 'OPTION')\n target = target.parentElement;\n if (!target ||\n !tagName ||\n INPUT_TAGS.indexOf(tagName) < 0 ||\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n return;\n }\n const el = target;\n if (el.classList.contains(ignoreClass) ||\n (ignoreSelector && el.matches(ignoreSelector))) {\n return;\n }\n const type = getInputType(target);\n let text = getInputValue(el, tagName, type);\n let isChecked = false;\n const isInputMasked = shouldMaskInput({\n maskInputOptions,\n tagName,\n type,\n });\n const forceMask = needMaskingText(target, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked);\n if (type === 'radio' || type === 'checkbox') {\n isChecked = target.checked;\n }\n text = maskInputValue({\n isMasked: forceMask,\n element: target,\n value: text,\n maskInputFn,\n });\n cbWithDedup(target, userTriggeredOnInput\n ? { text, isChecked, userTriggered }\n : { text, isChecked });\n const name = target.name;\n if (type === 'radio' && name && isChecked) {\n doc\n .querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`)\n .forEach((el) => {\n if (el !== target) {\n const text = maskInputValue({\n isMasked: forceMask,\n element: el,\n value: getInputValue(el, tagName, type),\n maskInputFn,\n });\n cbWithDedup(el, userTriggeredOnInput\n ? { text, isChecked: !isChecked, userTriggered: false }\n : { text, isChecked: !isChecked });\n }\n });\n }\n }\n function cbWithDedup(target, v) {\n const lastInputValue = lastInputValueMap.get(target);\n if (!lastInputValue ||\n lastInputValue.text !== v.text ||\n lastInputValue.isChecked !== v.isChecked) {\n lastInputValueMap.set(target, v);\n const id = mirror.getId(target);\n callbackWrapper(inputCb)({\n ...v,\n id,\n });\n }\n }\n const events = sampling.input === 'last' ? ['change'] : ['input', 'change'];\n const handlers = events.map((eventName) => on(eventName, callbackWrapper(eventHandler), doc));\n const currentWindow = doc.defaultView;\n if (!currentWindow) {\n return () => {\n handlers.forEach((h) => h());\n };\n }\n const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, 'value');\n const hookProperties = [\n [currentWindow.HTMLInputElement.prototype, 'value'],\n [currentWindow.HTMLInputElement.prototype, 'checked'],\n [currentWindow.HTMLSelectElement.prototype, 'value'],\n [currentWindow.HTMLTextAreaElement.prototype, 'value'],\n [currentWindow.HTMLSelectElement.prototype, 'selectedIndex'],\n [currentWindow.HTMLOptionElement.prototype, 'selected'],\n ];\n if (propertyDescriptor && propertyDescriptor.set) {\n handlers.push(...hookProperties.map((p) => hookSetter(p[0], p[1], {\n set() {\n callbackWrapper(eventHandler)({\n target: this,\n isTrusted: false,\n });\n },\n }, false, currentWindow)));\n }\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction getNestedCSSRulePositions(rule) {\n const positions = [];\n function recurse(childRule, pos) {\n if ((hasNestedCSSRule('CSSGroupingRule') &&\n childRule.parentRule instanceof CSSGroupingRule) ||\n (hasNestedCSSRule('CSSMediaRule') &&\n childRule.parentRule instanceof CSSMediaRule) ||\n (hasNestedCSSRule('CSSSupportsRule') &&\n childRule.parentRule instanceof CSSSupportsRule) ||\n (hasNestedCSSRule('CSSConditionRule') &&\n childRule.parentRule instanceof CSSConditionRule)) {\n const rules = Array.from(childRule.parentRule.cssRules);\n const index = rules.indexOf(childRule);\n pos.unshift(index);\n }\n else if (childRule.parentStyleSheet) {\n const rules = Array.from(childRule.parentStyleSheet.cssRules);\n const index = rules.indexOf(childRule);\n pos.unshift(index);\n }\n return pos;\n }\n return recurse(rule, positions);\n}\nfunction getIdAndStyleId(sheet, mirror, styleMirror) {\n let id, styleId;\n if (!sheet)\n return {};\n if (sheet.ownerNode)\n id = mirror.getId(sheet.ownerNode);\n else\n styleId = styleMirror.getId(sheet);\n return {\n styleId,\n id,\n };\n}\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror, stylesheetManager }, { win }) {\n if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\n return () => {\n };\n }\n const insertRule = win.CSSStyleSheet.prototype.insertRule;\n win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [rule, index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n adds: [{ rule, index }],\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\n win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n removes: [{ index }],\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n let replace;\n if (win.CSSStyleSheet.prototype.replace) {\n replace = win.CSSStyleSheet.prototype.replace;\n win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [text] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n replace: text,\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n }\n let replaceSync;\n if (win.CSSStyleSheet.prototype.replaceSync) {\n replaceSync = win.CSSStyleSheet.prototype.replaceSync;\n win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [text] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n replaceSync: text,\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n }\n const supportedNestedCSSRuleTypes = {};\n if (canMonkeyPatchNestedCSSRule('CSSGroupingRule')) {\n supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\n }\n else {\n if (canMonkeyPatchNestedCSSRule('CSSMediaRule')) {\n supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\n }\n if (canMonkeyPatchNestedCSSRule('CSSConditionRule')) {\n supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\n }\n if (canMonkeyPatchNestedCSSRule('CSSSupportsRule')) {\n supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\n }\n }\n const unmodifiedFunctions = {};\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n unmodifiedFunctions[typeKey] = {\n insertRule: type.prototype.insertRule,\n deleteRule: type.prototype.deleteRule,\n };\n type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [rule, index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n adds: [\n {\n rule,\n index: [\n ...getNestedCSSRulePositions(thisArg),\n index || 0,\n ],\n },\n ],\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n removes: [\n { index: [...getNestedCSSRulePositions(thisArg), index] },\n ],\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n });\n return callbackWrapper(() => {\n win.CSSStyleSheet.prototype.insertRule = insertRule;\n win.CSSStyleSheet.prototype.deleteRule = deleteRule;\n replace && (win.CSSStyleSheet.prototype.replace = replace);\n replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\n type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\n });\n });\n}\nfunction initAdoptedStyleSheetObserver({ mirror, stylesheetManager, }, host) {\n let hostId = null;\n if (host.nodeName === '#document')\n hostId = mirror.getId(host);\n else\n hostId = mirror.getId(host.host);\n const patchTarget = host.nodeName === '#document'\n ? _optionalChain$2([host, 'access', _4 => _4.defaultView, 'optionalAccess', _5 => _5.Document])\n : _optionalChain$2([host, 'access', _6 => _6.ownerDocument, 'optionalAccess', _7 => _7.defaultView, 'optionalAccess', _8 => _8.ShadowRoot]);\n const originalPropertyDescriptor = _optionalChain$2([patchTarget, 'optionalAccess', _9 => _9.prototype])\n ? Object.getOwnPropertyDescriptor(_optionalChain$2([patchTarget, 'optionalAccess', _10 => _10.prototype]), 'adoptedStyleSheets')\n : undefined;\n if (hostId === null ||\n hostId === -1 ||\n !patchTarget ||\n !originalPropertyDescriptor)\n return () => {\n };\n Object.defineProperty(host, 'adoptedStyleSheets', {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n get() {\n return _optionalChain$2([originalPropertyDescriptor, 'access', _11 => _11.get, 'optionalAccess', _12 => _12.call, 'call', _13 => _13(this)]);\n },\n set(sheets) {\n const result = _optionalChain$2([originalPropertyDescriptor, 'access', _14 => _14.set, 'optionalAccess', _15 => _15.call, 'call', _16 => _16(this, sheets)]);\n if (hostId !== null && hostId !== -1) {\n try {\n stylesheetManager.adoptStyleSheets(sheets, hostId);\n }\n catch (e) {\n }\n }\n return result;\n },\n });\n return callbackWrapper(() => {\n Object.defineProperty(host, 'adoptedStyleSheets', {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n get: originalPropertyDescriptor.get,\n set: originalPropertyDescriptor.set,\n });\n });\n}\nfunction initStyleDeclarationObserver({ styleDeclarationCb, mirror, ignoreCSSAttributes, stylesheetManager, }, { win }) {\n const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\n win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [property, value, priority] = argumentsList;\n if (ignoreCSSAttributes.has(property)) {\n return setProperty.apply(thisArg, [property, value, priority]);\n }\n const { id, styleId } = getIdAndStyleId(_optionalChain$2([thisArg, 'access', _17 => _17.parentRule, 'optionalAccess', _18 => _18.parentStyleSheet]), mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleDeclarationCb({\n id,\n styleId,\n set: {\n property,\n value,\n priority,\n },\n index: getNestedCSSRulePositions(thisArg.parentRule),\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [property] = argumentsList;\n if (ignoreCSSAttributes.has(property)) {\n return removeProperty.apply(thisArg, [property]);\n }\n const { id, styleId } = getIdAndStyleId(_optionalChain$2([thisArg, 'access', _19 => _19.parentRule, 'optionalAccess', _20 => _20.parentStyleSheet]), mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleDeclarationCb({\n id,\n styleId,\n remove: {\n property,\n },\n index: getNestedCSSRulePositions(thisArg.parentRule),\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n return callbackWrapper(() => {\n win.CSSStyleDeclaration.prototype.setProperty = setProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\n });\n}\nfunction initMediaInteractionObserver({ mediaInteractionCb, blockClass, blockSelector, unblockSelector, mirror, sampling, doc, }) {\n const handler = callbackWrapper((type) => throttle$1(callbackWrapper((event) => {\n const target = getEventTarget(event);\n if (!target ||\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n return;\n }\n const { currentTime, volume, muted, playbackRate } = target;\n mediaInteractionCb({\n type,\n id: mirror.getId(target),\n currentTime,\n volume,\n muted,\n playbackRate,\n });\n }), sampling.media || 500));\n const handlers = [\n on('play', handler(0), doc),\n on('pause', handler(1), doc),\n on('seeked', handler(2), doc),\n on('volumechange', handler(3), doc),\n on('ratechange', handler(4), doc),\n ];\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initFontObserver({ fontCb, doc }) {\n const win = doc.defaultView;\n if (!win) {\n return () => {\n };\n }\n const handlers = [];\n const fontMap = new WeakMap();\n const originalFontFace = win.FontFace;\n win.FontFace = function FontFace(family, source, descriptors) {\n const fontFace = new originalFontFace(family, source, descriptors);\n fontMap.set(fontFace, {\n family,\n buffer: typeof source !== 'string',\n descriptors,\n fontSource: typeof source === 'string'\n ? source\n : JSON.stringify(Array.from(new Uint8Array(source))),\n });\n return fontFace;\n };\n const restoreHandler = patch(doc.fonts, 'add', function (original) {\n return function (fontFace) {\n setTimeout(callbackWrapper(() => {\n const p = fontMap.get(fontFace);\n if (p) {\n fontCb(p);\n fontMap.delete(fontFace);\n }\n }), 0);\n return original.apply(this, [fontFace]);\n };\n });\n handlers.push(() => {\n win.FontFace = originalFontFace;\n });\n handlers.push(restoreHandler);\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initSelectionObserver(param) {\n const { doc, mirror, blockClass, blockSelector, unblockSelector, selectionCb, } = param;\n let collapsed = true;\n const updateSelection = callbackWrapper(() => {\n const selection = doc.getSelection();\n if (!selection || (collapsed && _optionalChain$2([selection, 'optionalAccess', _21 => _21.isCollapsed])))\n return;\n collapsed = selection.isCollapsed || false;\n const ranges = [];\n const count = selection.rangeCount || 0;\n for (let i = 0; i < count; i++) {\n const range = selection.getRangeAt(i);\n const { startContainer, startOffset, endContainer, endOffset } = range;\n const blocked = isBlocked(startContainer, blockClass, blockSelector, unblockSelector, true) ||\n isBlocked(endContainer, blockClass, blockSelector, unblockSelector, true);\n if (blocked)\n continue;\n ranges.push({\n start: mirror.getId(startContainer),\n startOffset,\n end: mirror.getId(endContainer),\n endOffset,\n });\n }\n selectionCb({ ranges });\n });\n updateSelection();\n return on('selectionchange', updateSelection);\n}\nfunction initCustomElementObserver({ doc, customElementCb, }) {\n const win = doc.defaultView;\n if (!win || !win.customElements)\n return () => { };\n const restoreHandler = patch(win.customElements, 'define', function (original) {\n return function (name, constructor, options) {\n try {\n customElementCb({\n define: {\n name,\n },\n });\n }\n catch (e) {\n }\n return original.apply(this, [name, constructor, options]);\n };\n });\n return restoreHandler;\n}\nfunction initObservers(o, _hooks = {}) {\n const currentWindow = o.doc.defaultView;\n if (!currentWindow) {\n return () => {\n };\n }\n const mutationObserver = initMutationObserver(o, o.doc);\n const mousemoveHandler = initMoveObserver(o);\n const mouseInteractionHandler = initMouseInteractionObserver(o);\n const scrollHandler = initScrollObserver(o);\n const viewportResizeHandler = initViewportResizeObserver(o, {\n win: currentWindow,\n });\n const inputHandler = initInputObserver(o);\n const mediaInteractionHandler = initMediaInteractionObserver(o);\n const styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });\n const adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o, o.doc);\n const styleDeclarationObserver = initStyleDeclarationObserver(o, {\n win: currentWindow,\n });\n const fontObserver = o.collectFonts\n ? initFontObserver(o)\n : () => {\n };\n const selectionObserver = initSelectionObserver(o);\n const customElementObserver = initCustomElementObserver(o);\n const pluginHandlers = [];\n for (const plugin of o.plugins) {\n pluginHandlers.push(plugin.observer(plugin.callback, currentWindow, plugin.options));\n }\n return callbackWrapper(() => {\n mutationBuffers.forEach((b) => b.reset());\n mutationObserver.disconnect();\n mousemoveHandler();\n mouseInteractionHandler();\n scrollHandler();\n viewportResizeHandler();\n inputHandler();\n mediaInteractionHandler();\n styleSheetObserver();\n adoptedStyleSheetObserver();\n styleDeclarationObserver();\n fontObserver();\n selectionObserver();\n customElementObserver();\n pluginHandlers.forEach((h) => h());\n });\n}\nfunction hasNestedCSSRule(prop) {\n return typeof window[prop] !== 'undefined';\n}\nfunction canMonkeyPatchNestedCSSRule(prop) {\n return Boolean(typeof window[prop] !== 'undefined' &&\n window[prop].prototype &&\n 'insertRule' in window[prop].prototype &&\n 'deleteRule' in window[prop].prototype);\n}\n\nclass CrossOriginIframeMirror {\n constructor(generateIdFn) {\n this.generateIdFn = generateIdFn;\n this.iframeIdToRemoteIdMap = new WeakMap();\n this.iframeRemoteIdToIdMap = new WeakMap();\n }\n getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\n const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\n const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\n let id = idToRemoteIdMap.get(remoteId);\n if (!id) {\n id = this.generateIdFn();\n idToRemoteIdMap.set(remoteId, id);\n remoteIdToIdMap.set(id, remoteId);\n }\n return id;\n }\n getIds(iframe, remoteId) {\n const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return remoteId.map((id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap));\n }\n getRemoteId(iframe, id, map) {\n const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\n if (typeof id !== 'number')\n return id;\n const remoteId = remoteIdToIdMap.get(id);\n if (!remoteId)\n return -1;\n return remoteId;\n }\n getRemoteIds(iframe, ids) {\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\n }\n reset(iframe) {\n if (!iframe) {\n this.iframeIdToRemoteIdMap = new WeakMap();\n this.iframeRemoteIdToIdMap = new WeakMap();\n return;\n }\n this.iframeIdToRemoteIdMap.delete(iframe);\n this.iframeRemoteIdToIdMap.delete(iframe);\n }\n getIdToRemoteIdMap(iframe) {\n let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\n if (!idToRemoteIdMap) {\n idToRemoteIdMap = new Map();\n this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\n }\n return idToRemoteIdMap;\n }\n getRemoteIdToIdMap(iframe) {\n let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\n if (!remoteIdToIdMap) {\n remoteIdToIdMap = new Map();\n this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\n }\n return remoteIdToIdMap;\n }\n}\n\nfunction _optionalChain$1(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nclass IframeManagerNoop {\n constructor() {\n this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\n this.crossOriginIframeRootIdMap = new WeakMap();\n }\n addIframe() {\n }\n addLoadListener() {\n }\n attachIframe() {\n }\n}\nclass IframeManager {\n constructor(options) {\n this.iframes = new WeakMap();\n this.crossOriginIframeMap = new WeakMap();\n this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\n this.crossOriginIframeRootIdMap = new WeakMap();\n this.mutationCb = options.mutationCb;\n this.wrappedEmit = options.wrappedEmit;\n this.stylesheetManager = options.stylesheetManager;\n this.recordCrossOriginIframes = options.recordCrossOriginIframes;\n this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\n this.mirror = options.mirror;\n if (this.recordCrossOriginIframes) {\n window.addEventListener('message', this.handleMessage.bind(this));\n }\n }\n addIframe(iframeEl) {\n this.iframes.set(iframeEl, true);\n if (iframeEl.contentWindow)\n this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\n }\n addLoadListener(cb) {\n this.loadListener = cb;\n }\n attachIframe(iframeEl, childSn) {\n this.mutationCb({\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: childSn,\n },\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true,\n });\n _optionalChain$1([this, 'access', _ => _.loadListener, 'optionalCall', _2 => _2(iframeEl)]);\n if (iframeEl.contentDocument &&\n iframeEl.contentDocument.adoptedStyleSheets &&\n iframeEl.contentDocument.adoptedStyleSheets.length > 0)\n this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\n }\n handleMessage(message) {\n const crossOriginMessageEvent = message;\n if (crossOriginMessageEvent.data.type !== 'rrweb' ||\n crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\n return;\n const iframeSourceWindow = message.source;\n if (!iframeSourceWindow)\n return;\n const iframeEl = this.crossOriginIframeMap.get(message.source);\n if (!iframeEl)\n return;\n const transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event);\n if (transformedEvent)\n this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout);\n }\n transformCrossOriginEvent(iframeEl, e) {\n switch (e.type) {\n case EventType.FullSnapshot: {\n this.crossOriginIframeMirror.reset(iframeEl);\n this.crossOriginIframeStyleMirror.reset(iframeEl);\n this.replaceIdOnNode(e.data.node, iframeEl);\n const rootId = e.data.node.id;\n this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\n this.patchRootIdOnNode(e.data.node, rootId);\n return {\n timestamp: e.timestamp,\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: e.data.node,\n },\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true,\n },\n };\n }\n case EventType.Meta:\n case EventType.Load:\n case EventType.DomContentLoaded: {\n return false;\n }\n case EventType.Plugin: {\n return e;\n }\n case EventType.Custom: {\n this.replaceIds(e.data.payload, iframeEl, ['id', 'parentId', 'previousId', 'nextId']);\n return e;\n }\n case EventType.IncrementalSnapshot: {\n switch (e.data.source) {\n case IncrementalSource.Mutation: {\n e.data.adds.forEach((n) => {\n this.replaceIds(n, iframeEl, [\n 'parentId',\n 'nextId',\n 'previousId',\n ]);\n this.replaceIdOnNode(n.node, iframeEl);\n const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\n rootId && this.patchRootIdOnNode(n.node, rootId);\n });\n e.data.removes.forEach((n) => {\n this.replaceIds(n, iframeEl, ['parentId', 'id']);\n });\n e.data.attributes.forEach((n) => {\n this.replaceIds(n, iframeEl, ['id']);\n });\n e.data.texts.forEach((n) => {\n this.replaceIds(n, iframeEl, ['id']);\n });\n return e;\n }\n case IncrementalSource.Drag:\n case IncrementalSource.TouchMove:\n case IncrementalSource.MouseMove: {\n e.data.positions.forEach((p) => {\n this.replaceIds(p, iframeEl, ['id']);\n });\n return e;\n }\n case IncrementalSource.ViewportResize: {\n return false;\n }\n case IncrementalSource.MediaInteraction:\n case IncrementalSource.MouseInteraction:\n case IncrementalSource.Scroll:\n case IncrementalSource.CanvasMutation:\n case IncrementalSource.Input: {\n this.replaceIds(e.data, iframeEl, ['id']);\n return e;\n }\n case IncrementalSource.StyleSheetRule:\n case IncrementalSource.StyleDeclaration: {\n this.replaceIds(e.data, iframeEl, ['id']);\n this.replaceStyleIds(e.data, iframeEl, ['styleId']);\n return e;\n }\n case IncrementalSource.Font: {\n return e;\n }\n case IncrementalSource.Selection: {\n e.data.ranges.forEach((range) => {\n this.replaceIds(range, iframeEl, ['start', 'end']);\n });\n return e;\n }\n case IncrementalSource.AdoptedStyleSheet: {\n this.replaceIds(e.data, iframeEl, ['id']);\n this.replaceStyleIds(e.data, iframeEl, ['styleIds']);\n _optionalChain$1([e, 'access', _3 => _3.data, 'access', _4 => _4.styles, 'optionalAccess', _5 => _5.forEach, 'call', _6 => _6((style) => {\n this.replaceStyleIds(style, iframeEl, ['styleId']);\n })]);\n return e;\n }\n }\n }\n }\n return false;\n }\n replace(iframeMirror, obj, iframeEl, keys) {\n for (const key of keys) {\n if (!Array.isArray(obj[key]) && typeof obj[key] !== 'number')\n continue;\n if (Array.isArray(obj[key])) {\n obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\n }\n else {\n obj[key] = iframeMirror.getId(iframeEl, obj[key]);\n }\n }\n return obj;\n }\n replaceIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\n }\n replaceStyleIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\n }\n replaceIdOnNode(node, iframeEl) {\n this.replaceIds(node, iframeEl, ['id', 'rootId']);\n if ('childNodes' in node) {\n node.childNodes.forEach((child) => {\n this.replaceIdOnNode(child, iframeEl);\n });\n }\n }\n patchRootIdOnNode(node, rootId) {\n if (node.type !== NodeType$1.Document && !node.rootId)\n node.rootId = rootId;\n if ('childNodes' in node) {\n node.childNodes.forEach((child) => {\n this.patchRootIdOnNode(child, rootId);\n });\n }\n }\n}\n\nclass ShadowDomManagerNoop {\n init() {\n }\n addShadowRoot() {\n }\n observeAttachShadow() {\n }\n reset() {\n }\n}\nclass ShadowDomManager {\n constructor(options) {\n this.shadowDoms = new WeakSet();\n this.restoreHandlers = [];\n this.mutationCb = options.mutationCb;\n this.scrollCb = options.scrollCb;\n this.bypassOptions = options.bypassOptions;\n this.mirror = options.mirror;\n this.init();\n }\n init() {\n this.reset();\n this.patchAttachShadow(Element, document);\n }\n addShadowRoot(shadowRoot, doc) {\n if (!isNativeShadowDom(shadowRoot))\n return;\n if (this.shadowDoms.has(shadowRoot))\n return;\n this.shadowDoms.add(shadowRoot);\n const observer = initMutationObserver({\n ...this.bypassOptions,\n doc,\n mutationCb: this.mutationCb,\n mirror: this.mirror,\n shadowDomManager: this,\n }, shadowRoot);\n this.restoreHandlers.push(() => observer.disconnect());\n this.restoreHandlers.push(initScrollObserver({\n ...this.bypassOptions,\n scrollCb: this.scrollCb,\n doc: shadowRoot,\n mirror: this.mirror,\n }));\n setTimeout(() => {\n if (shadowRoot.adoptedStyleSheets &&\n shadowRoot.adoptedStyleSheets.length > 0)\n this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot.adoptedStyleSheets, this.mirror.getId(shadowRoot.host));\n this.restoreHandlers.push(initAdoptedStyleSheetObserver({\n mirror: this.mirror,\n stylesheetManager: this.bypassOptions.stylesheetManager,\n }, shadowRoot));\n }, 0);\n }\n observeAttachShadow(iframeElement) {\n if (!iframeElement.contentWindow || !iframeElement.contentDocument)\n return;\n this.patchAttachShadow(iframeElement.contentWindow.Element, iframeElement.contentDocument);\n }\n patchAttachShadow(element, doc) {\n const manager = this;\n this.restoreHandlers.push(patch(element.prototype, 'attachShadow', function (original) {\n return function (option) {\n const shadowRoot = original.call(this, option);\n if (this.shadowRoot && inDom(this))\n manager.addShadowRoot(this.shadowRoot, doc);\n return shadowRoot;\n };\n }));\n }\n reset() {\n this.restoreHandlers.forEach((handler) => {\n try {\n handler();\n }\n catch (e) {\n }\n });\n this.restoreHandlers = [];\n this.shadowDoms = new WeakSet();\n }\n}\n\nclass CanvasManagerNoop {\n reset() {\n }\n freeze() {\n }\n unfreeze() {\n }\n lock() {\n }\n unlock() {\n }\n snapshot() {\n }\n}\n\nclass StylesheetManager {\n constructor(options) {\n this.trackedLinkElements = new WeakSet();\n this.styleMirror = new StyleSheetMirror();\n this.mutationCb = options.mutationCb;\n this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\n }\n attachLinkElement(linkEl, childSn) {\n if ('_cssText' in childSn.attributes)\n this.mutationCb({\n adds: [],\n removes: [],\n texts: [],\n attributes: [\n {\n id: childSn.id,\n attributes: childSn\n .attributes,\n },\n ],\n });\n this.trackLinkElement(linkEl);\n }\n trackLinkElement(linkEl) {\n if (this.trackedLinkElements.has(linkEl))\n return;\n this.trackedLinkElements.add(linkEl);\n this.trackStylesheetInLinkElement(linkEl);\n }\n adoptStyleSheets(sheets, hostId) {\n if (sheets.length === 0)\n return;\n const adoptedStyleSheetData = {\n id: hostId,\n styleIds: [],\n };\n const styles = [];\n for (const sheet of sheets) {\n let styleId;\n if (!this.styleMirror.has(sheet)) {\n styleId = this.styleMirror.add(sheet);\n styles.push({\n styleId,\n rules: Array.from(sheet.rules || CSSRule, (r, index) => ({\n rule: stringifyRule(r),\n index,\n })),\n });\n }\n else\n styleId = this.styleMirror.getId(sheet);\n adoptedStyleSheetData.styleIds.push(styleId);\n }\n if (styles.length > 0)\n adoptedStyleSheetData.styles = styles;\n this.adoptedStyleSheetCb(adoptedStyleSheetData);\n }\n reset() {\n this.styleMirror.reset();\n this.trackedLinkElements = new WeakSet();\n }\n trackStylesheetInLinkElement(linkEl) {\n }\n}\n\nclass ProcessedNodeManager {\n constructor() {\n this.nodeMap = new WeakMap();\n this.loop = true;\n this.periodicallyClear();\n }\n periodicallyClear() {\n onRequestAnimationFrame(() => {\n this.clear();\n if (this.loop)\n this.periodicallyClear();\n });\n }\n inOtherBuffer(node, thisBuffer) {\n const buffers = this.nodeMap.get(node);\n return (buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer));\n }\n add(node, buffer) {\n this.nodeMap.set(node, (this.nodeMap.get(node) || new Set()).add(buffer));\n }\n clear() {\n this.nodeMap = new WeakMap();\n }\n destroy() {\n this.loop = false;\n }\n}\n\nfunction wrapEvent(e) {\n const eWithTime = e;\n eWithTime.timestamp = nowTimestamp();\n return eWithTime;\n}\nlet _takeFullSnapshot;\nconst mirror = createMirror();\nfunction record(options = {}) {\n const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'rr-block', blockSelector = null, unblockSelector = null, ignoreClass = 'rr-ignore', ignoreSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskAttributeFn, maskInputFn, maskTextFn, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordCanvas = false, recordCrossOriginIframes = false, recordAfter = options.recordAfter === 'DOMContentLoaded'\n ? options.recordAfter\n : 'load', userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = () => false, ignoreCSSAttributes = new Set([]), errorHandler, onMutation, getCanvasManager, } = options;\n registerErrorHandler(errorHandler);\n const inEmittingFrame = recordCrossOriginIframes\n ? window.parent === window\n : true;\n let passEmitsToParent = false;\n if (!inEmittingFrame) {\n try {\n if (window.parent.document) {\n passEmitsToParent = false;\n }\n }\n catch (e) {\n passEmitsToParent = true;\n }\n }\n if (inEmittingFrame && !emit) {\n throw new Error('emit function is required');\n }\n if (mousemoveWait !== undefined && sampling.mousemove === undefined) {\n sampling.mousemove = mousemoveWait;\n }\n mirror.reset();\n const maskInputOptions = maskAllInputs === true\n ? {\n color: true,\n date: true,\n 'datetime-local': true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n radio: true,\n checkbox: true,\n }\n : _maskInputOptions !== undefined\n ? _maskInputOptions\n : {};\n const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'\n ? {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaVerification: true,\n headMetaAuthorship: _slimDOMOptions === 'all',\n headMetaDescKeywords: _slimDOMOptions === 'all',\n }\n : _slimDOMOptions\n ? _slimDOMOptions\n : {};\n polyfill();\n let lastFullSnapshotEvent;\n let incrementalSnapshotCount = 0;\n const eventProcessor = (e) => {\n for (const plugin of plugins || []) {\n if (plugin.eventProcessor) {\n e = plugin.eventProcessor(e);\n }\n }\n if (packFn &&\n !passEmitsToParent) {\n e = packFn(e);\n }\n return e;\n };\n const wrappedEmit = (e, isCheckout) => {\n if (_optionalChain([mutationBuffers, 'access', _ => _[0], 'optionalAccess', _2 => _2.isFrozen, 'call', _3 => _3()]) &&\n e.type !== EventType.FullSnapshot &&\n !(e.type === EventType.IncrementalSnapshot &&\n e.data.source === IncrementalSource.Mutation)) {\n mutationBuffers.forEach((buf) => buf.unfreeze());\n }\n if (inEmittingFrame) {\n _optionalChain([emit, 'optionalCall', _4 => _4(eventProcessor(e), isCheckout)]);\n }\n else if (passEmitsToParent) {\n const message = {\n type: 'rrweb',\n event: eventProcessor(e),\n origin: window.location.origin,\n isCheckout,\n };\n window.parent.postMessage(message, '*');\n }\n if (e.type === EventType.FullSnapshot) {\n lastFullSnapshotEvent = e;\n incrementalSnapshotCount = 0;\n }\n else if (e.type === EventType.IncrementalSnapshot) {\n if (e.data.source === IncrementalSource.Mutation &&\n e.data.isAttachIframe) {\n return;\n }\n incrementalSnapshotCount++;\n const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\n const exceedTime = checkoutEveryNms &&\n e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\n if (exceedCount || exceedTime) {\n takeFullSnapshot(true);\n }\n }\n };\n const wrappedMutationEmit = (m) => {\n wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n ...m,\n },\n }));\n };\n const wrappedScrollEmit = (p) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Scroll,\n ...p,\n },\n }));\n const wrappedCanvasMutationEmit = (p) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CanvasMutation,\n ...p,\n },\n }));\n const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.AdoptedStyleSheet,\n ...a,\n },\n }));\n const stylesheetManager = new StylesheetManager({\n mutationCb: wrappedMutationEmit,\n adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit,\n });\n const iframeManager = typeof __RRWEB_EXCLUDE_IFRAME__ === 'boolean' && __RRWEB_EXCLUDE_IFRAME__\n ? new IframeManagerNoop()\n : new IframeManager({\n mirror,\n mutationCb: wrappedMutationEmit,\n stylesheetManager: stylesheetManager,\n recordCrossOriginIframes,\n wrappedEmit,\n });\n for (const plugin of plugins || []) {\n if (plugin.getMirror)\n plugin.getMirror({\n nodeMirror: mirror,\n crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\n crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror,\n });\n }\n const processedNodeManager = new ProcessedNodeManager();\n const canvasManager = _getCanvasManager(getCanvasManager, {\n mirror,\n win: window,\n mutationCb: (p) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CanvasMutation,\n ...p,\n },\n })),\n recordCanvas,\n blockClass,\n blockSelector,\n unblockSelector,\n sampling: sampling['canvas'],\n dataURLOptions,\n errorHandler,\n });\n const shadowDomManager = typeof __RRWEB_EXCLUDE_SHADOW_DOM__ === 'boolean' &&\n __RRWEB_EXCLUDE_SHADOW_DOM__\n ? new ShadowDomManagerNoop()\n : new ShadowDomManager({\n mutationCb: wrappedMutationEmit,\n scrollCb: wrappedScrollEmit,\n bypassOptions: {\n onMutation,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n inlineStylesheet,\n maskInputOptions,\n dataURLOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n recordCanvas,\n inlineImages,\n sampling,\n slimDOMOptions,\n iframeManager,\n stylesheetManager,\n canvasManager,\n keepIframeSrcFn,\n processedNodeManager,\n },\n mirror,\n });\n const takeFullSnapshot = (isCheckout = false) => {\n wrappedEmit(wrapEvent({\n type: EventType.Meta,\n data: {\n href: window.location.href,\n width: getWindowWidth(),\n height: getWindowHeight(),\n },\n }), isCheckout);\n stylesheetManager.reset();\n shadowDomManager.init();\n mutationBuffers.forEach((buf) => buf.lock());\n const node = snapshot(document, {\n mirror,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n inlineStylesheet,\n maskAllInputs: maskInputOptions,\n maskAttributeFn,\n maskInputFn,\n maskTextFn,\n slimDOM: slimDOMOptions,\n dataURLOptions,\n recordCanvas,\n inlineImages,\n onSerialize: (n) => {\n if (isSerializedIframe(n, mirror)) {\n iframeManager.addIframe(n);\n }\n if (isSerializedStylesheet(n, mirror)) {\n stylesheetManager.trackLinkElement(n);\n }\n if (hasShadowRoot(n)) {\n shadowDomManager.addShadowRoot(n.shadowRoot, document);\n }\n },\n onIframeLoad: (iframe, childSn) => {\n iframeManager.attachIframe(iframe, childSn);\n shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: (linkEl, childSn) => {\n stylesheetManager.attachLinkElement(linkEl, childSn);\n },\n keepIframeSrcFn,\n });\n if (!node) {\n return console.warn('Failed to snapshot the document');\n }\n wrappedEmit(wrapEvent({\n type: EventType.FullSnapshot,\n data: {\n node,\n initialOffset: getWindowScroll(window),\n },\n }));\n mutationBuffers.forEach((buf) => buf.unlock());\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\n stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\n };\n _takeFullSnapshot = takeFullSnapshot;\n try {\n const handlers = [];\n const observe = (doc) => {\n return callbackWrapper(initObservers)({\n onMutation,\n mutationCb: wrappedMutationEmit,\n mousemoveCb: (positions, source) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source,\n positions,\n },\n })),\n mouseInteractionCb: (d) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.MouseInteraction,\n ...d,\n },\n })),\n scrollCb: wrappedScrollEmit,\n viewportResizeCb: (d) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.ViewportResize,\n ...d,\n },\n })),\n inputCb: (v) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Input,\n ...v,\n },\n })),\n mediaInteractionCb: (p) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.MediaInteraction,\n ...p,\n },\n })),\n styleSheetRuleCb: (r) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.StyleSheetRule,\n ...r,\n },\n })),\n styleDeclarationCb: (r) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.StyleDeclaration,\n ...r,\n },\n })),\n canvasMutationCb: wrappedCanvasMutationEmit,\n fontCb: (p) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Font,\n ...p,\n },\n })),\n selectionCb: (p) => {\n wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Selection,\n ...p,\n },\n }));\n },\n customElementCb: (c) => {\n wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CustomElement,\n ...c,\n },\n }));\n },\n blockClass,\n ignoreClass,\n ignoreSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n maskInputOptions,\n inlineStylesheet,\n sampling,\n recordCanvas,\n inlineImages,\n userTriggeredOnInput,\n collectFonts,\n doc,\n maskAttributeFn,\n maskInputFn,\n maskTextFn,\n keepIframeSrcFn,\n blockSelector,\n unblockSelector,\n slimDOMOptions,\n dataURLOptions,\n mirror,\n iframeManager,\n stylesheetManager,\n shadowDomManager,\n processedNodeManager,\n canvasManager,\n ignoreCSSAttributes,\n plugins: _optionalChain([plugins\n, 'optionalAccess', _5 => _5.filter, 'call', _6 => _6((p) => p.observer)\n, 'optionalAccess', _7 => _7.map, 'call', _8 => _8((p) => ({\n observer: p.observer,\n options: p.options,\n callback: (payload) => wrappedEmit(wrapEvent({\n type: EventType.Plugin,\n data: {\n plugin: p.name,\n payload,\n },\n })),\n }))]) || [],\n }, {});\n };\n iframeManager.addLoadListener((iframeEl) => {\n try {\n handlers.push(observe(iframeEl.contentDocument));\n }\n catch (error) {\n console.warn(error);\n }\n });\n const init = () => {\n takeFullSnapshot();\n handlers.push(observe(document));\n };\n if (document.readyState === 'interactive' ||\n document.readyState === 'complete') {\n init();\n }\n else {\n handlers.push(on('DOMContentLoaded', () => {\n wrappedEmit(wrapEvent({\n type: EventType.DomContentLoaded,\n data: {},\n }));\n if (recordAfter === 'DOMContentLoaded')\n init();\n }));\n handlers.push(on('load', () => {\n wrappedEmit(wrapEvent({\n type: EventType.Load,\n data: {},\n }));\n if (recordAfter === 'load')\n init();\n }, window));\n }\n return () => {\n handlers.forEach((h) => h());\n processedNodeManager.destroy();\n _takeFullSnapshot = undefined;\n unregisterErrorHandler();\n };\n }\n catch (error) {\n console.warn(error);\n }\n}\nfunction takeFullSnapshot(isCheckout) {\n if (!_takeFullSnapshot) {\n throw new Error('please take full snapshot after start recording');\n }\n _takeFullSnapshot(isCheckout);\n}\nrecord.mirror = mirror;\nrecord.takeFullSnapshot = takeFullSnapshot;\nfunction _getCanvasManager(getCanvasManagerFn, options) {\n try {\n return getCanvasManagerFn\n ? getCanvasManagerFn(options)\n : new CanvasManagerNoop();\n }\n catch (e2) {\n console.warn('Unable to initialize CanvasManager');\n return new CanvasManagerNoop();\n }\n}\n\nconst ReplayEventTypeIncrementalSnapshot = 3;\nconst ReplayEventTypeCustom = 5;\n\n/**\n * Converts a timestamp to ms, if it was in s, or keeps it as ms.\n */\nfunction timestampToMs(timestamp) {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp : timestamp * 1000;\n}\n\n/**\n * Converts a timestamp to s, if it was in ms, or keeps it as s.\n */\nfunction timestampToS(timestamp) {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Add a breadcrumb event to replay.\n */\nfunction addBreadcrumbEvent(replay, breadcrumb) {\n if (breadcrumb.category === 'sentry.transaction') {\n return;\n }\n\n if (['ui.click', 'ui.input'].includes(breadcrumb.category )) {\n replay.triggerUserActivity();\n } else {\n replay.checkAndHandleExpiredSession();\n }\n\n replay.addUpdate(() => {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n replay.throttledAddEvent({\n type: EventType.Custom,\n // TODO: We were converting from ms to seconds for breadcrumbs, spans,\n // but maybe we should just keep them as milliseconds\n timestamp: (breadcrumb.timestamp || 0) * 1000,\n data: {\n tag: 'breadcrumb',\n // normalize to max. 10 depth and 1_000 properties per object\n payload: normalize(breadcrumb, 10, 1000),\n },\n });\n\n // Do not flush after console log messages\n return breadcrumb.category === 'console';\n });\n}\n\nconst INTERACTIVE_SELECTOR = 'button,a';\n\n/** Get the closest interactive parent element, or else return the given element. */\nfunction getClosestInteractive(element) {\n const closestInteractive = element.closest(INTERACTIVE_SELECTOR);\n return closestInteractive || element;\n}\n\n/**\n * For clicks, we check if the target is inside of a button or link\n * If so, we use this as the target instead\n * This is useful because if you click on the image in ,\n * The target will be the image, not the button, which we don't want here\n */\nfunction getClickTargetNode(event) {\n const target = getTargetNode(event);\n\n if (!target || !(target instanceof Element)) {\n return target;\n }\n\n return getClosestInteractive(target);\n}\n\n/** Get the event target node. */\nfunction getTargetNode(event) {\n if (isEventWithTarget(event)) {\n return event.target ;\n }\n\n return event;\n}\n\nfunction isEventWithTarget(event) {\n return typeof event === 'object' && !!event && 'target' in event;\n}\n\nlet handlers;\n\n/**\n * Register a handler to be called when `window.open()` is called.\n * Returns a cleanup function.\n */\nfunction onWindowOpen(cb) {\n // Ensure to only register this once\n if (!handlers) {\n handlers = [];\n monkeyPatchWindowOpen();\n }\n\n handlers.push(cb);\n\n return () => {\n const pos = handlers ? handlers.indexOf(cb) : -1;\n if (pos > -1) {\n (handlers ).splice(pos, 1);\n }\n };\n}\n\nfunction monkeyPatchWindowOpen() {\n fill(WINDOW, 'open', function (originalWindowOpen) {\n return function (...args) {\n if (handlers) {\n try {\n handlers.forEach(handler => handler());\n } catch (e) {\n // ignore errors in here\n }\n }\n\n return originalWindowOpen.apply(WINDOW, args);\n };\n });\n}\n\n/** Handle a click. */\nfunction handleClick(clickDetector, clickBreadcrumb, node) {\n clickDetector.handleClick(clickBreadcrumb, node);\n}\n\n/** A click detector class that can be used to detect slow or rage clicks on elements. */\nclass ClickDetector {\n // protected for testing\n\n constructor(\n replay,\n slowClickConfig,\n // Just for easier testing\n _addBreadcrumbEvent = addBreadcrumbEvent,\n ) {\n this._lastMutation = 0;\n this._lastScroll = 0;\n this._clicks = [];\n\n // We want everything in s, but options are in ms\n this._timeout = slowClickConfig.timeout / 1000;\n this._threshold = slowClickConfig.threshold / 1000;\n this._scollTimeout = slowClickConfig.scrollTimeout / 1000;\n this._replay = replay;\n this._ignoreSelector = slowClickConfig.ignoreSelector;\n this._addBreadcrumbEvent = _addBreadcrumbEvent;\n }\n\n /** Register click detection handlers on mutation or scroll. */\n addListeners() {\n const cleanupWindowOpen = onWindowOpen(() => {\n // Treat window.open as mutation\n this._lastMutation = nowInSeconds();\n });\n\n this._teardown = () => {\n cleanupWindowOpen();\n\n this._clicks = [];\n this._lastMutation = 0;\n this._lastScroll = 0;\n };\n }\n\n /** Clean up listeners. */\n removeListeners() {\n if (this._teardown) {\n this._teardown();\n }\n\n if (this._checkClickTimeout) {\n clearTimeout(this._checkClickTimeout);\n }\n }\n\n /** @inheritDoc */\n handleClick(breadcrumb, node) {\n if (ignoreElement(node, this._ignoreSelector) || !isClickBreadcrumb(breadcrumb)) {\n return;\n }\n\n const newClick = {\n timestamp: timestampToS(breadcrumb.timestamp),\n clickBreadcrumb: breadcrumb,\n // Set this to 0 so we know it originates from the click breadcrumb\n clickCount: 0,\n node,\n };\n\n // If there was a click in the last 1s on the same element, ignore it - only keep a single reference per second\n if (\n this._clicks.some(click => click.node === newClick.node && Math.abs(click.timestamp - newClick.timestamp) < 1)\n ) {\n return;\n }\n\n this._clicks.push(newClick);\n\n // If this is the first new click, set a timeout to check for multi clicks\n if (this._clicks.length === 1) {\n this._scheduleCheckClicks();\n }\n }\n\n /** @inheritDoc */\n registerMutation(timestamp = Date.now()) {\n this._lastMutation = timestampToS(timestamp);\n }\n\n /** @inheritDoc */\n registerScroll(timestamp = Date.now()) {\n this._lastScroll = timestampToS(timestamp);\n }\n\n /** @inheritDoc */\n registerClick(element) {\n const node = getClosestInteractive(element);\n this._handleMultiClick(node );\n }\n\n /** Count multiple clicks on elements. */\n _handleMultiClick(node) {\n this._getClicks(node).forEach(click => {\n click.clickCount++;\n });\n }\n\n /** Get all pending clicks for a given node. */\n _getClicks(node) {\n return this._clicks.filter(click => click.node === node);\n }\n\n /** Check the clicks that happened. */\n _checkClicks() {\n const timedOutClicks = [];\n\n const now = nowInSeconds();\n\n this._clicks.forEach(click => {\n if (!click.mutationAfter && this._lastMutation) {\n click.mutationAfter = click.timestamp <= this._lastMutation ? this._lastMutation - click.timestamp : undefined;\n }\n if (!click.scrollAfter && this._lastScroll) {\n click.scrollAfter = click.timestamp <= this._lastScroll ? this._lastScroll - click.timestamp : undefined;\n }\n\n // All of these are in seconds!\n if (click.timestamp + this._timeout <= now) {\n timedOutClicks.push(click);\n }\n });\n\n // Remove \"old\" clicks\n for (const click of timedOutClicks) {\n const pos = this._clicks.indexOf(click);\n\n if (pos > -1) {\n this._generateBreadcrumbs(click);\n this._clicks.splice(pos, 1);\n }\n }\n\n // Trigger new check, unless no clicks left\n if (this._clicks.length) {\n this._scheduleCheckClicks();\n }\n }\n\n /** Generate matching breadcrumb(s) for the click. */\n _generateBreadcrumbs(click) {\n const replay = this._replay;\n const hadScroll = click.scrollAfter && click.scrollAfter <= this._scollTimeout;\n const hadMutation = click.mutationAfter && click.mutationAfter <= this._threshold;\n\n const isSlowClick = !hadScroll && !hadMutation;\n const { clickCount, clickBreadcrumb } = click;\n\n // Slow click\n if (isSlowClick) {\n // If `mutationAfter` is set, it means a mutation happened after the threshold, but before the timeout\n // If not, it means we just timed out without scroll & mutation\n const timeAfterClickMs = Math.min(click.mutationAfter || this._timeout, this._timeout) * 1000;\n const endReason = timeAfterClickMs < this._timeout * 1000 ? 'mutation' : 'timeout';\n\n const breadcrumb = {\n type: 'default',\n message: clickBreadcrumb.message,\n timestamp: clickBreadcrumb.timestamp,\n category: 'ui.slowClickDetected',\n data: {\n ...clickBreadcrumb.data,\n url: WINDOW.location.href,\n route: replay.getCurrentRoute(),\n timeAfterClickMs,\n endReason,\n // If clickCount === 0, it means multiClick was not correctly captured here\n // - we still want to send 1 in this case\n clickCount: clickCount || 1,\n },\n };\n\n this._addBreadcrumbEvent(replay, breadcrumb);\n return;\n }\n\n // Multi click\n if (clickCount > 1) {\n const breadcrumb = {\n type: 'default',\n message: clickBreadcrumb.message,\n timestamp: clickBreadcrumb.timestamp,\n category: 'ui.multiClick',\n data: {\n ...clickBreadcrumb.data,\n url: WINDOW.location.href,\n route: replay.getCurrentRoute(),\n clickCount,\n metric: true,\n },\n };\n\n this._addBreadcrumbEvent(replay, breadcrumb);\n }\n }\n\n /** Schedule to check current clicks. */\n _scheduleCheckClicks() {\n if (this._checkClickTimeout) {\n clearTimeout(this._checkClickTimeout);\n }\n\n this._checkClickTimeout = setTimeout(() => this._checkClicks(), 1000);\n }\n}\n\nconst SLOW_CLICK_TAGS = ['A', 'BUTTON', 'INPUT'];\n\n/** exported for tests only */\nfunction ignoreElement(node, ignoreSelector) {\n if (!SLOW_CLICK_TAGS.includes(node.tagName)) {\n return true;\n }\n\n // If tag, we only want to consider input[type='submit'] & input[type='button']\n if (node.tagName === 'INPUT' && !['submit', 'button'].includes(node.getAttribute('type') || '')) {\n return true;\n }\n\n // If tag, detect special variants that may not lead to an action\n // If target !== _self, we may open the link somewhere else, which would lead to no action\n // Also, when downloading a file, we may not leave the page, but still not trigger an action\n if (\n node.tagName === 'A' &&\n (node.hasAttribute('download') || (node.hasAttribute('target') && node.getAttribute('target') !== '_self'))\n ) {\n return true;\n }\n\n if (ignoreSelector && node.matches(ignoreSelector)) {\n return true;\n }\n\n return false;\n}\n\nfunction isClickBreadcrumb(breadcrumb) {\n return !!(breadcrumb.data && typeof breadcrumb.data.nodeId === 'number' && breadcrumb.timestamp);\n}\n\n// This is good enough for us, and is easier to test/mock than `timestampInSeconds`\nfunction nowInSeconds() {\n return Date.now() / 1000;\n}\n\n/** Update the click detector based on a recording event of rrweb. */\nfunction updateClickDetectorForRecordingEvent(clickDetector, event) {\n try {\n // note: We only consider incremental snapshots here\n // This means that any full snapshot is ignored for mutation detection - the reason is that we simply cannot know if a mutation happened here.\n // E.g. think that we are buffering, an error happens and we take a full snapshot because we switched to session mode -\n // in this scenario, we would not know if a dead click happened because of the error, which is a key dead click scenario.\n // Instead, by ignoring full snapshots, we have the risk that we generate a false positive\n // (if a mutation _did_ happen but was \"swallowed\" by the full snapshot)\n // But this should be more unlikely as we'd generally capture the incremental snapshot right away\n\n if (!isIncrementalEvent(event)) {\n return;\n }\n\n const { source } = event.data;\n if (source === IncrementalSource.Mutation) {\n clickDetector.registerMutation(event.timestamp);\n }\n\n if (source === IncrementalSource.Scroll) {\n clickDetector.registerScroll(event.timestamp);\n }\n\n if (isIncrementalMouseInteraction(event)) {\n const { type, id } = event.data;\n const node = record.mirror.getNode(id);\n\n if (node instanceof HTMLElement && type === MouseInteractions.Click) {\n clickDetector.registerClick(node);\n }\n }\n } catch (e) {\n // ignore errors here, e.g. if accessing something that does not exist\n }\n}\n\nfunction isIncrementalEvent(event) {\n return event.type === ReplayEventTypeIncrementalSnapshot;\n}\n\nfunction isIncrementalMouseInteraction(\n event,\n) {\n return event.data.source === IncrementalSource.MouseInteraction;\n}\n\n/**\n * Create a breadcrumb for a replay.\n */\nfunction createBreadcrumb(\n breadcrumb,\n) {\n return {\n timestamp: Date.now() / 1000,\n type: 'default',\n ...breadcrumb,\n };\n}\n\nvar NodeType;\n(function (NodeType) {\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\n})(NodeType || (NodeType = {}));\n\n// Note that these are the serialized attributes and not attributes directly on\n// the DOM Node. Attributes we are interested in:\nconst ATTRIBUTES_TO_RECORD = new Set([\n 'id',\n 'class',\n 'aria-label',\n 'role',\n 'name',\n 'alt',\n 'title',\n 'data-test-id',\n 'data-testid',\n 'disabled',\n 'aria-disabled',\n 'data-sentry-component',\n]);\n\n/**\n * Inclusion list of attributes that we want to record from the DOM element\n */\nfunction getAttributesToRecord(attributes) {\n const obj = {};\n for (const key in attributes) {\n if (ATTRIBUTES_TO_RECORD.has(key)) {\n let normalizedKey = key;\n\n if (key === 'data-testid' || key === 'data-test-id') {\n normalizedKey = 'testId';\n }\n\n obj[normalizedKey] = attributes[key];\n }\n }\n\n return obj;\n}\n\nconst handleDomListener = (\n replay,\n) => {\n return (handlerData) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleDom(handlerData);\n\n if (!result) {\n return;\n }\n\n const isClick = handlerData.name === 'click';\n const event = isClick ? (handlerData.event ) : undefined;\n // Ignore clicks if ctrl/alt/meta/shift keys are held down as they alter behavior of clicks (e.g. open in new tab)\n if (\n isClick &&\n replay.clickDetector &&\n event &&\n event.target &&\n !event.altKey &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey\n ) {\n handleClick(\n replay.clickDetector,\n result ,\n getClickTargetNode(handlerData.event ) ,\n );\n }\n\n addBreadcrumbEvent(replay, result);\n };\n};\n\n/** Get the base DOM breadcrumb. */\nfunction getBaseDomBreadcrumb(target, message) {\n const nodeId = record.mirror.getId(target);\n const node = nodeId && record.mirror.getNode(nodeId);\n const meta = node && record.mirror.getMeta(node);\n const element = meta && isElement(meta) ? meta : null;\n\n return {\n message,\n data: element\n ? {\n nodeId,\n node: {\n id: nodeId,\n tagName: element.tagName,\n textContent: Array.from(element.childNodes)\n .map((node) => node.type === NodeType.Text && node.textContent)\n .filter(Boolean) // filter out empty values\n .map(text => (text ).trim())\n .join(''),\n attributes: getAttributesToRecord(element.attributes),\n },\n }\n : {},\n };\n}\n\n/**\n * An event handler to react to DOM events.\n * Exported for tests.\n */\nfunction handleDom(handlerData) {\n const { target, message } = getDomTarget(handlerData);\n\n return createBreadcrumb({\n category: `ui.${handlerData.name}`,\n ...getBaseDomBreadcrumb(target, message),\n });\n}\n\nfunction getDomTarget(handlerData) {\n const isClick = handlerData.name === 'click';\n\n let message;\n let target = null;\n\n // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n try {\n target = isClick ? getClickTargetNode(handlerData.event ) : getTargetNode(handlerData.event );\n message = htmlTreeAsString(target, { maxStringLength: 200 }) || '';\n } catch (e) {\n message = '';\n }\n\n return { target, message };\n}\n\nfunction isElement(node) {\n return node.type === NodeType.Element;\n}\n\n/** Handle keyboard events & create breadcrumbs. */\nfunction handleKeyboardEvent(replay, event) {\n if (!replay.isEnabled()) {\n return;\n }\n\n // Update user activity, but do not restart recording as it can create\n // noisy/low-value replays (e.g. user comes back from idle, hits alt-tab, new\n // session with a single \"keydown\" breadcrumb is created)\n replay.updateUserActivity();\n\n const breadcrumb = getKeyboardBreadcrumb(event);\n\n if (!breadcrumb) {\n return;\n }\n\n addBreadcrumbEvent(replay, breadcrumb);\n}\n\n/** exported only for tests */\nfunction getKeyboardBreadcrumb(event) {\n const { metaKey, shiftKey, ctrlKey, altKey, key, target } = event;\n\n // never capture for input fields\n if (!target || isInputElement(target ) || !key) {\n return null;\n }\n\n // Note: We do not consider shift here, as that means \"uppercase\"\n const hasModifierKey = metaKey || ctrlKey || altKey;\n const isCharacterKey = key.length === 1; // other keys like Escape, Tab, etc have a longer length\n\n // Do not capture breadcrumb if only a word key is pressed\n // This could leak e.g. user input\n if (!hasModifierKey && isCharacterKey) {\n return null;\n }\n\n const message = htmlTreeAsString(target, { maxStringLength: 200 }) || '';\n const baseBreadcrumb = getBaseDomBreadcrumb(target , message);\n\n return createBreadcrumb({\n category: 'ui.keyDown',\n message,\n data: {\n ...baseBreadcrumb.data,\n metaKey,\n shiftKey,\n ctrlKey,\n altKey,\n key,\n },\n });\n}\n\nfunction isInputElement(target) {\n return target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n}\n\n// Map entryType -> function to normalize data for event\nconst ENTRY_TYPES\n\n = {\n // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n resource: createResourceEntry,\n paint: createPaintEntry,\n // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n navigation: createNavigationEntry,\n};\n\n/**\n * Create replay performance entries from the browser performance entries.\n */\nfunction createPerformanceEntries(\n entries,\n) {\n return entries.map(createPerformanceEntry).filter(Boolean) ;\n}\n\nfunction createPerformanceEntry(entry) {\n if (!ENTRY_TYPES[entry.entryType]) {\n return null;\n }\n\n return ENTRY_TYPES[entry.entryType](entry);\n}\n\nfunction getAbsoluteTime(time) {\n // browserPerformanceTimeOrigin can be undefined if `performance` or\n // `performance.now` doesn't exist, but this is already checked by this integration\n return ((browserPerformanceTimeOrigin || WINDOW.performance.timeOrigin) + time) / 1000;\n}\n\nfunction createPaintEntry(entry) {\n const { duration, entryType, name, startTime } = entry;\n\n const start = getAbsoluteTime(startTime);\n return {\n type: entryType,\n name,\n start,\n end: start + duration,\n data: undefined,\n };\n}\n\nfunction createNavigationEntry(entry) {\n const {\n entryType,\n name,\n decodedBodySize,\n duration,\n domComplete,\n encodedBodySize,\n domContentLoadedEventStart,\n domContentLoadedEventEnd,\n domInteractive,\n loadEventStart,\n loadEventEnd,\n redirectCount,\n startTime,\n transferSize,\n type,\n } = entry;\n\n // Ignore entries with no duration, they do not seem to be useful and cause dupes\n if (duration === 0) {\n return null;\n }\n\n return {\n type: `${entryType}.${type}`,\n start: getAbsoluteTime(startTime),\n end: getAbsoluteTime(domComplete),\n name,\n data: {\n size: transferSize,\n decodedBodySize,\n encodedBodySize,\n duration,\n domInteractive,\n domContentLoadedEventStart,\n domContentLoadedEventEnd,\n loadEventStart,\n loadEventEnd,\n domComplete,\n redirectCount,\n },\n };\n}\n\nfunction createResourceEntry(\n entry,\n) {\n const {\n entryType,\n initiatorType,\n name,\n responseEnd,\n startTime,\n decodedBodySize,\n encodedBodySize,\n responseStatus,\n transferSize,\n } = entry;\n\n // Core SDK handles these\n if (['fetch', 'xmlhttprequest'].includes(initiatorType)) {\n return null;\n }\n\n return {\n type: `${entryType}.${initiatorType}`,\n start: getAbsoluteTime(startTime),\n end: getAbsoluteTime(responseEnd),\n name,\n data: {\n size: transferSize,\n statusCode: responseStatus,\n decodedBodySize,\n encodedBodySize,\n },\n };\n}\n\n/**\n * Add a LCP event to the replay based on an LCP metric.\n */\nfunction getLargestContentfulPaint(metric\n\n) {\n const entries = metric.entries;\n const lastEntry = entries[entries.length - 1] ;\n const element = lastEntry ? lastEntry.element : undefined;\n\n const value = metric.value;\n\n const end = getAbsoluteTime(value);\n\n const data = {\n type: 'largest-contentful-paint',\n name: 'largest-contentful-paint',\n start: end,\n end,\n data: {\n value,\n size: value,\n nodeId: element ? record.mirror.getId(element) : undefined,\n },\n };\n\n return data;\n}\n\n/**\n * Sets up a PerformanceObserver to listen to all performance entry types.\n * Returns a callback to stop observing.\n */\nfunction setupPerformanceObserver(replay) {\n function addPerformanceEntry(entry) {\n // It is possible for entries to come up multiple times\n if (!replay.performanceEntries.includes(entry)) {\n replay.performanceEntries.push(entry);\n }\n }\n\n function onEntries({ entries }) {\n entries.forEach(addPerformanceEntry);\n }\n\n const clearCallbacks = [];\n\n (['navigation', 'paint', 'resource'] ).forEach(type => {\n clearCallbacks.push(addPerformanceInstrumentationHandler(type, onEntries));\n });\n\n clearCallbacks.push(\n addLcpInstrumentationHandler(({ metric }) => {\n replay.replayPerformanceEntries.push(getLargestContentfulPaint(metric));\n }),\n );\n\n // A callback to cleanup all handlers\n return () => {\n clearCallbacks.forEach(clearCallback => clearCallback());\n };\n}\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nconst r = `var t=Uint8Array,n=Uint16Array,r=Int32Array,e=new t([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),i=new t([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),a=new t([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),s=function(t,e){for(var i=new n(31),a=0;a<31;++a)i[a]=e+=1<>1|(21845&c)<<1;v=(61680&(v=(52428&v)>>2|(13107&v)<<2))>>4|(3855&v)<<4,u[c]=((65280&v)>>8|(255&v)<<8)>>1}var d=function(t,r,e){for(var i=t.length,a=0,s=new n(r);a>h]=l}else for(o=new n(i),a=0;a>15-t[a]);return o},g=new t(288);for(c=0;c<144;++c)g[c]=8;for(c=144;c<256;++c)g[c]=9;for(c=256;c<280;++c)g[c]=7;for(c=280;c<288;++c)g[c]=8;var w=new t(32);for(c=0;c<32;++c)w[c]=5;var p=d(g,9,0),y=d(w,5,0),m=function(t){return(t+7)/8|0},b=function(n,r,e){return(null==r||r<0)&&(r=0),(null==e||e>n.length)&&(e=n.length),new t(n.subarray(r,e))},M=[\"unexpected EOF\",\"invalid block type\",\"invalid length/literal\",\"invalid distance\",\"stream finished\",\"no stream handler\",,\"no callback\",\"invalid UTF-8 data\",\"extra field too long\",\"date not in range 1980-2099\",\"filename too long\",\"stream finishing\",\"invalid zip data\"],E=function(t,n,r){var e=new Error(n||M[t]);if(e.code=t,Error.captureStackTrace&&Error.captureStackTrace(e,E),!r)throw e;return e},z=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8},A=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8,t[e+2]|=r>>16},_=function(r,e){for(var i=[],a=0;ad&&(d=o[a].s);var g=new n(d+1),w=x(i[c-1],g,0);if(w>e){a=0;var p=0,y=w-e,m=1<e))break;p+=m-(1<>=y;p>0;){var M=o[a].s;g[M]=0&&p;--a){var E=o[a].s;g[E]==e&&(--g[E],++p)}w=e}return{t:new t(g),l:w}},x=function(t,n,r){return-1==t.s?Math.max(x(t.l,n,r+1),x(t.r,n,r+1)):n[t.s]=r},D=function(t){for(var r=t.length;r&&!t[--r];);for(var e=new n(++r),i=0,a=t[0],s=1,o=function(t){e[i++]=t},f=1;f<=r;++f)if(t[f]==a&&f!=r)++s;else{if(!a&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(a),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(a);s=1,a=t[f]}return{c:e.subarray(0,i),n:r}},T=function(t,n){for(var r=0,e=0;e>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var a=0;a4&&!H[a[K-1]];--K);var N,P,Q,R,V=v+5<<3,W=T(f,g)+T(h,w)+l,X=T(f,M)+T(h,C)+l+14+3*K+T(q,H)+2*q[16]+3*q[17]+7*q[18];if(c>=0&&V<=W&&V<=X)return k(r,m,t.subarray(c,c+v));if(z(r,m,1+(X15&&(z(r,m,tt[B]>>5&127),m+=tt[B]>>12)}}}else N=p,P=g,Q=y,R=w;for(B=0;B255){A(r,m,N[(nt=rt>>18&31)+257]),m+=P[nt+257],nt>7&&(z(r,m,rt>>23&31),m+=e[nt]);var et=31&rt;A(r,m,Q[et]),m+=R[et],et>3&&(A(r,m,rt>>5&8191),m+=i[et])}else A(r,m,N[rt]),m+=P[rt]}return A(r,m,N[256]),m+P[256]},U=new r([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),F=new t(0),I=function(){for(var t=new Int32Array(256),n=0;n<256;++n){for(var r=n,e=9;--e;)r=(1&r&&-306674912)^r>>>1;t[n]=r}return t}(),S=function(){var t=1,n=0;return{p:function(r){for(var e=t,i=n,a=0|r.length,s=0;s!=a;){for(var o=Math.min(s+2655,a);s>16),i=(65535&i)+15*(i>>16)}t=e,n=i},d:function(){return(255&(t%=65521))<<24|(65280&t)<<8|(255&(n%=65521))<<8|n>>8}}},L=function(a,s,o,f,u){if(!u&&(u={l:1},s.dictionary)){var c=s.dictionary.subarray(-32768),v=new t(c.length+a.length);v.set(c),v.set(a,c.length),a=v,u.w=c.length}return function(a,s,o,f,u,c){var v=c.z||a.length,d=new t(f+v+5*(1+Math.ceil(v/7e3))+u),g=d.subarray(f,d.length-u),w=c.l,p=7&(c.r||0);if(s){p&&(g[0]=c.r>>3);for(var y=U[s-1],M=y>>13,E=8191&y,z=(1<7e3||q>24576)&&(N>423||!w)){p=C(a,g,0,F,I,S,O,q,G,j-G,p),q=L=O=0,G=j;for(var P=0;P<286;++P)I[P]=0;for(P=0;P<30;++P)S[P]=0}var Q=2,R=0,V=E,W=J-K&32767;if(N>2&&H==T(j-W))for(var X=Math.min(M,N)-1,Y=Math.min(32767,j),Z=Math.min(258,N);W<=Y&&--V&&J!=K;){if(a[j+Q]==a[j+Q-W]){for(var $=0;$Q){if(Q=$,R=W,$>X)break;var tt=Math.min(W,$-2),nt=0;for(P=0;Pnt&&(nt=et,K=rt)}}}W+=(J=K)-(K=A[J])&32767}if(R){F[q++]=268435456|h[Q]<<18|l[R];var it=31&h[Q],at=31&l[R];O+=e[it]+i[at],++I[257+it],++S[at],B=j+Q,++L}else F[q++]=a[j],++I[a[j]]}}for(j=Math.max(j,B);j=v&&(g[p/8|0]=w,st=v),p=k(g,p+1,a.subarray(j,st))}c.i=v}return b(d,0,f+m(p)+u)}(a,null==s.level?6:s.level,null==s.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(a.length)))):12+s.mem,o,f,u)},O=function(t,n,r){for(;r;++n)t[n]=r,r>>>=8},j=function(){function n(n,r){if(\"function\"==typeof n&&(r=n,n={}),this.ondata=r,this.o=n||{},this.s={l:0,i:32768,w:32768,z:32768},this.b=new t(98304),this.o.dictionary){var e=this.o.dictionary.subarray(-32768);this.b.set(e,32768-e.length),this.s.i=32768-e.length}}return n.prototype.p=function(t,n){this.ondata(L(t,this.o,0,0,this.s),n)},n.prototype.push=function(n,r){this.ondata||E(5),this.s.l&&E(4);var e=n.length+this.s.z;if(e>this.b.length){if(e>2*this.b.length-32768){var i=new t(-32768&e);i.set(this.b.subarray(0,this.s.z)),this.b=i}var a=this.b.length-this.s.z;a&&(this.b.set(n.subarray(0,a),this.s.z),this.s.z=this.b.length,this.p(this.b,!1)),this.b.set(this.b.subarray(-32768)),this.b.set(n.subarray(a),32768),this.s.z=n.length-a+32768,this.s.i=32766,this.s.w=32768}else this.b.set(n,this.s.z),this.s.z+=n.length;this.s.l=1&r,(this.s.z>this.s.w+8191||r)&&(this.p(this.b,r||!1),this.s.w=this.s.i,this.s.i-=2)},n}();function q(t,n){n||(n={});var r=function(){var t=-1;return{p:function(n){for(var r=t,e=0;e>>8;t=r},d:function(){return~t}}}(),e=t.length;r.p(t);var i,a=L(t,n,10+((i=n).filename?i.filename.length+1:0),8),s=a.length;return function(t,n){var r=n.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=n.level<2?4:9==n.level?2:0,t[9]=3,0!=n.mtime&&O(t,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),r){t[3]=8;for(var e=0;e<=r.length;++e)t[e+10]=r.charCodeAt(e)}}(a,n),O(a,s-8,r.d()),O(a,s-4,e),a}var B=function(){function t(t,n){this.c=S(),this.v=1,j.call(this,t,n)}return t.prototype.push=function(t,n){this.c.p(t),j.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){var r=L(t,this.o,this.v&&(this.o.dictionary?6:2),n&&4,this.s);this.v&&(function(t,n){var r=n.level,e=0==r?0:r<6?1:9==r?3:2;if(t[0]=120,t[1]=e<<6|(n.dictionary&&32),t[1]|=31-(t[0]<<8|t[1])%31,n.dictionary){var i=S();i.p(n.dictionary),O(t,2,i.d())}}(r,this.o),this.v=0),n&&O(r,r.length-4,this.c.d()),this.ondata(r,n)},t}(),G=\"undefined\"!=typeof TextEncoder&&new TextEncoder,H=\"undefined\"!=typeof TextDecoder&&new TextDecoder;try{H.decode(F,{stream:!0})}catch(t){}var J=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,n){this.ondata||E(5),this.d&&E(4),this.ondata(K(t),this.d=n||!1)},t}();function K(n,r){if(r){for(var e=new t(n.length),i=0;i>1)),o=0,f=function(t){s[o++]=t};for(i=0;is.length){var h=new t(o+8+(a-i<<1));h.set(s),s=h}var l=n.charCodeAt(i);l<128||r?f(l):l<2048?(f(192|l>>6),f(128|63&l)):l>55295&&l<57344?(f(240|(l=65536+(1047552&l)|1023&n.charCodeAt(++i))>>18),f(128|l>>12&63),f(128|l>>6&63),f(128|63&l)):(f(224|l>>12),f(128|l>>6&63),f(128|63&l))}return b(s,0,o)}const N=new class{constructor(){this._init()}clear(){this._init()}addEvent(t){if(!t)throw new Error(\"Adding invalid event\");const n=this._hasEvents?\",\":\"\";this.stream.push(n+t),this._hasEvents=!0}finish(){this.stream.push(\"]\",!0);const t=function(t){let n=0;for(let r=0,e=t.length;r{this._deflatedData.push(t)},this.stream=new J(((t,n)=>{this.deflate.push(t,n)})),this.stream.push(\"[\")}},P={clear:()=>{N.clear()},addEvent:t=>N.addEvent(t),finish:()=>N.finish(),compress:t=>function(t){return q(K(t))}(t)};addEventListener(\"message\",(function(t){const n=t.data.method,r=t.data.id,e=t.data.arg;if(n in P&&\"function\"==typeof P[n])try{const t=P[n](e);postMessage({id:r,method:n,success:!0,response:t})}catch(t){postMessage({id:r,method:n,success:!1,response:t.message}),console.error(t)}})),postMessage({id:void 0,method:\"init\",success:!0,response:void 0});`;\n\nfunction e(){const e=new Blob([r]);return URL.createObjectURL(e)}\n\n/**\n * Log a message in debug mode, and add a breadcrumb when _experiment.traceInternals is enabled.\n */\nfunction logInfo(message, shouldAddBreadcrumb) {\n if (!DEBUG_BUILD) {\n return;\n }\n\n logger.info(message);\n\n if (shouldAddBreadcrumb) {\n addLogBreadcrumb(message);\n }\n}\n\n/**\n * Log a message, and add a breadcrumb in the next tick.\n * This is necessary when the breadcrumb may be added before the replay is initialized.\n */\nfunction logInfoNextTick(message, shouldAddBreadcrumb) {\n if (!DEBUG_BUILD) {\n return;\n }\n\n logger.info(message);\n\n if (shouldAddBreadcrumb) {\n // Wait a tick here to avoid race conditions for some initial logs\n // which may be added before replay is initialized\n setTimeout(() => {\n addLogBreadcrumb(message);\n }, 0);\n }\n}\n\nfunction addLogBreadcrumb(message) {\n addBreadcrumb(\n {\n category: 'console',\n data: {\n logger: 'replay',\n },\n level: 'info',\n message,\n },\n { level: 'info' },\n );\n}\n\n/** This error indicates that the event buffer size exceeded the limit.. */\nclass EventBufferSizeExceededError extends Error {\n constructor() {\n super(`Event buffer exceeded maximum size of ${REPLAY_MAX_EVENT_BUFFER_SIZE}.`);\n }\n}\n\n/**\n * A basic event buffer that does not do any compression.\n * Used as fallback if the compression worker cannot be loaded or is disabled.\n */\nclass EventBufferArray {\n /** All the events that are buffered to be sent. */\n\n /** @inheritdoc */\n\n constructor() {\n this.events = [];\n this._totalSize = 0;\n this.hasCheckout = false;\n }\n\n /** @inheritdoc */\n get hasEvents() {\n return this.events.length > 0;\n }\n\n /** @inheritdoc */\n get type() {\n return 'sync';\n }\n\n /** @inheritdoc */\n destroy() {\n this.events = [];\n }\n\n /** @inheritdoc */\n async addEvent(event) {\n const eventSize = JSON.stringify(event).length;\n this._totalSize += eventSize;\n if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n throw new EventBufferSizeExceededError();\n }\n\n this.events.push(event);\n }\n\n /** @inheritdoc */\n finish() {\n return new Promise(resolve => {\n // Make a copy of the events array reference and immediately clear the\n // events member so that we do not lose new events while uploading\n // attachment.\n const eventsRet = this.events;\n this.clear();\n resolve(JSON.stringify(eventsRet));\n });\n }\n\n /** @inheritdoc */\n clear() {\n this.events = [];\n this._totalSize = 0;\n this.hasCheckout = false;\n }\n\n /** @inheritdoc */\n getEarliestTimestamp() {\n const timestamp = this.events.map(event => event.timestamp).sort()[0];\n\n if (!timestamp) {\n return null;\n }\n\n return timestampToMs(timestamp);\n }\n}\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nclass WorkerHandler {\n\n constructor(worker) {\n this._worker = worker;\n this._id = 0;\n }\n\n /**\n * Ensure the worker is ready (or not).\n * This will either resolve when the worker is ready, or reject if an error occured.\n */\n ensureReady() {\n // Ensure we only check once\n if (this._ensureReadyPromise) {\n return this._ensureReadyPromise;\n }\n\n this._ensureReadyPromise = new Promise((resolve, reject) => {\n this._worker.addEventListener(\n 'message',\n ({ data }) => {\n if ((data ).success) {\n resolve();\n } else {\n reject();\n }\n },\n { once: true },\n );\n\n this._worker.addEventListener(\n 'error',\n error => {\n reject(error);\n },\n { once: true },\n );\n });\n\n return this._ensureReadyPromise;\n }\n\n /**\n * Destroy the worker.\n */\n destroy() {\n logInfo('[Replay] Destroying compression worker');\n this._worker.terminate();\n }\n\n /**\n * Post message to worker and wait for response before resolving promise.\n */\n postMessage(method, arg) {\n const id = this._getAndIncrementId();\n\n return new Promise((resolve, reject) => {\n const listener = ({ data }) => {\n const response = data ;\n if (response.method !== method) {\n return;\n }\n\n // There can be multiple listeners for a single method, the id ensures\n // that the response matches the caller.\n if (response.id !== id) {\n return;\n }\n\n // At this point, we'll always want to remove listener regardless of result status\n this._worker.removeEventListener('message', listener);\n\n if (!response.success) {\n // TODO: Do some error handling, not sure what\n DEBUG_BUILD && logger.error('[Replay]', response.response);\n\n reject(new Error('Error in compression worker'));\n return;\n }\n\n resolve(response.response );\n };\n\n // Note: we can't use `once` option because it's possible it needs to\n // listen to multiple messages\n this._worker.addEventListener('message', listener);\n this._worker.postMessage({ id, method, arg });\n });\n }\n\n /** Get the current ID and increment it for the next call. */\n _getAndIncrementId() {\n return this._id++;\n }\n}\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nclass EventBufferCompressionWorker {\n /** @inheritdoc */\n\n constructor(worker) {\n this._worker = new WorkerHandler(worker);\n this._earliestTimestamp = null;\n this._totalSize = 0;\n this.hasCheckout = false;\n }\n\n /** @inheritdoc */\n get hasEvents() {\n return !!this._earliestTimestamp;\n }\n\n /** @inheritdoc */\n get type() {\n return 'worker';\n }\n\n /**\n * Ensure the worker is ready (or not).\n * This will either resolve when the worker is ready, or reject if an error occured.\n */\n ensureReady() {\n return this._worker.ensureReady();\n }\n\n /**\n * Destroy the event buffer.\n */\n destroy() {\n this._worker.destroy();\n }\n\n /**\n * Add an event to the event buffer.\n *\n * Returns true if event was successfuly received and processed by worker.\n */\n addEvent(event) {\n const timestamp = timestampToMs(event.timestamp);\n if (!this._earliestTimestamp || timestamp < this._earliestTimestamp) {\n this._earliestTimestamp = timestamp;\n }\n\n const data = JSON.stringify(event);\n this._totalSize += data.length;\n\n if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n return Promise.reject(new EventBufferSizeExceededError());\n }\n\n return this._sendEventToWorker(data);\n }\n\n /**\n * Finish the event buffer and return the compressed data.\n */\n finish() {\n return this._finishRequest();\n }\n\n /** @inheritdoc */\n clear() {\n this._earliestTimestamp = null;\n this._totalSize = 0;\n this.hasCheckout = false;\n\n // We do not wait on this, as we assume the order of messages is consistent for the worker\n this._worker.postMessage('clear').then(null, e => {\n DEBUG_BUILD && logger.warn('[Replay] Sending \"clear\" message to worker failed', e);\n });\n }\n\n /** @inheritdoc */\n getEarliestTimestamp() {\n return this._earliestTimestamp;\n }\n\n /**\n * Send the event to the worker.\n */\n _sendEventToWorker(data) {\n return this._worker.postMessage('addEvent', data);\n }\n\n /**\n * Finish the request and return the compressed data from the worker.\n */\n async _finishRequest() {\n const response = await this._worker.postMessage('finish');\n\n this._earliestTimestamp = null;\n this._totalSize = 0;\n\n return response;\n }\n}\n\n/**\n * This proxy will try to use the compression worker, and fall back to use the simple buffer if an error occurs there.\n * This can happen e.g. if the worker cannot be loaded.\n * Exported only for testing.\n */\nclass EventBufferProxy {\n\n constructor(worker) {\n this._fallback = new EventBufferArray();\n this._compression = new EventBufferCompressionWorker(worker);\n this._used = this._fallback;\n\n this._ensureWorkerIsLoadedPromise = this._ensureWorkerIsLoaded();\n }\n\n /** @inheritdoc */\n get type() {\n return this._used.type;\n }\n\n /** @inheritDoc */\n get hasEvents() {\n return this._used.hasEvents;\n }\n\n /** @inheritdoc */\n get hasCheckout() {\n return this._used.hasCheckout;\n }\n /** @inheritdoc */\n set hasCheckout(value) {\n this._used.hasCheckout = value;\n }\n\n /** @inheritDoc */\n destroy() {\n this._fallback.destroy();\n this._compression.destroy();\n }\n\n /** @inheritdoc */\n clear() {\n return this._used.clear();\n }\n\n /** @inheritdoc */\n getEarliestTimestamp() {\n return this._used.getEarliestTimestamp();\n }\n\n /**\n * Add an event to the event buffer.\n *\n * Returns true if event was successfully added.\n */\n addEvent(event) {\n return this._used.addEvent(event);\n }\n\n /** @inheritDoc */\n async finish() {\n // Ensure the worker is loaded, so the sent event is compressed\n await this.ensureWorkerIsLoaded();\n\n return this._used.finish();\n }\n\n /** Ensure the worker has loaded. */\n ensureWorkerIsLoaded() {\n return this._ensureWorkerIsLoadedPromise;\n }\n\n /** Actually check if the worker has been loaded. */\n async _ensureWorkerIsLoaded() {\n try {\n await this._compression.ensureReady();\n } catch (error) {\n // If the worker fails to load, we fall back to the simple buffer.\n // Nothing more to do from our side here\n logInfo('[Replay] Failed to load the compression worker, falling back to simple buffer');\n return;\n }\n\n // Now we need to switch over the array buffer to the compression worker\n await this._switchToCompressionWorker();\n }\n\n /** Switch the used buffer to the compression worker. */\n async _switchToCompressionWorker() {\n const { events, hasCheckout } = this._fallback;\n\n const addEventPromises = [];\n for (const event of events) {\n addEventPromises.push(this._compression.addEvent(event));\n }\n\n this._compression.hasCheckout = hasCheckout;\n\n // We switch over to the new buffer immediately - any further events will be added\n // after the previously buffered ones\n this._used = this._compression;\n\n // Wait for original events to be re-added before resolving\n try {\n await Promise.all(addEventPromises);\n } catch (error) {\n DEBUG_BUILD && logger.warn('[Replay] Failed to add events when switching buffers.', error);\n }\n }\n}\n\n/**\n * Create an event buffer for replays.\n */\nfunction createEventBuffer({\n useCompression,\n workerUrl: customWorkerUrl,\n}) {\n if (\n useCompression &&\n // eslint-disable-next-line no-restricted-globals\n window.Worker\n ) {\n const worker = _loadWorker(customWorkerUrl);\n\n if (worker) {\n return worker;\n }\n }\n\n logInfo('[Replay] Using simple buffer');\n return new EventBufferArray();\n}\n\nfunction _loadWorker(customWorkerUrl) {\n try {\n const workerUrl = customWorkerUrl || _getWorkerUrl();\n\n if (!workerUrl) {\n return;\n }\n\n logInfo(`[Replay] Using compression worker${customWorkerUrl ? ` from ${customWorkerUrl}` : ''}`);\n const worker = new Worker(workerUrl);\n return new EventBufferProxy(worker);\n } catch (error) {\n logInfo('[Replay] Failed to create compression worker');\n // Fall back to use simple event buffer array\n }\n}\n\nfunction _getWorkerUrl() {\n if (typeof __SENTRY_EXCLUDE_REPLAY_WORKER__ === 'undefined' || !__SENTRY_EXCLUDE_REPLAY_WORKER__) {\n return e();\n }\n\n return '';\n}\n\n/** If sessionStorage is available. */\nfunction hasSessionStorage() {\n try {\n // This can throw, e.g. when being accessed in a sandboxed iframe\n return 'sessionStorage' in WINDOW && !!WINDOW.sessionStorage;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Removes the session from Session Storage and unsets session in replay instance\n */\nfunction clearSession(replay) {\n deleteSession();\n replay.session = undefined;\n}\n\n/**\n * Deletes a session from storage\n */\nfunction deleteSession() {\n if (!hasSessionStorage()) {\n return;\n }\n\n try {\n WINDOW.sessionStorage.removeItem(REPLAY_SESSION_KEY);\n } catch (e) {\n // Ignore potential SecurityError exceptions\n }\n}\n\n/**\n * Given a sample rate, returns true if replay should be sampled.\n *\n * 1.0 = 100% sampling\n * 0.0 = 0% sampling\n */\nfunction isSampled(sampleRate) {\n if (sampleRate === undefined) {\n return false;\n }\n\n // Math.random() returns a number in range of 0 to 1 (inclusive of 0, but not 1)\n return Math.random() < sampleRate;\n}\n\n/**\n * Get a session with defaults & applied sampling.\n */\nfunction makeSession(session) {\n const now = Date.now();\n const id = session.id || uuid4();\n // Note that this means we cannot set a started/lastActivity of `0`, but this should not be relevant outside of tests.\n const started = session.started || now;\n const lastActivity = session.lastActivity || now;\n const segmentId = session.segmentId || 0;\n const sampled = session.sampled;\n const previousSessionId = session.previousSessionId;\n\n return {\n id,\n started,\n lastActivity,\n segmentId,\n sampled,\n previousSessionId,\n };\n}\n\n/**\n * Save a session to session storage.\n */\nfunction saveSession(session) {\n if (!hasSessionStorage()) {\n return;\n }\n\n try {\n WINDOW.sessionStorage.setItem(REPLAY_SESSION_KEY, JSON.stringify(session));\n } catch (e) {\n // Ignore potential SecurityError exceptions\n }\n}\n\n/**\n * Get the sampled status for a session based on sample rates & current sampled status.\n */\nfunction getSessionSampleType(sessionSampleRate, allowBuffering) {\n return isSampled(sessionSampleRate) ? 'session' : allowBuffering ? 'buffer' : false;\n}\n\n/**\n * Create a new session, which in its current implementation is a Sentry event\n * that all replays will be saved to as attachments. Currently, we only expect\n * one of these Sentry events per \"replay session\".\n */\nfunction createSession(\n { sessionSampleRate, allowBuffering, stickySession = false },\n { previousSessionId } = {},\n) {\n const sampled = getSessionSampleType(sessionSampleRate, allowBuffering);\n const session = makeSession({\n sampled,\n previousSessionId,\n });\n\n if (stickySession) {\n saveSession(session);\n }\n\n return session;\n}\n\n/**\n * Fetches a session from storage\n */\nfunction fetchSession(traceInternals) {\n if (!hasSessionStorage()) {\n return null;\n }\n\n try {\n // This can throw if cookies are disabled\n const sessionStringFromStorage = WINDOW.sessionStorage.getItem(REPLAY_SESSION_KEY);\n\n if (!sessionStringFromStorage) {\n return null;\n }\n\n const sessionObj = JSON.parse(sessionStringFromStorage) ;\n\n logInfoNextTick('[Replay] Loading existing session', traceInternals);\n\n return makeSession(sessionObj);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Given an initial timestamp and an expiry duration, checks to see if current\n * time should be considered as expired.\n */\nfunction isExpired(\n initialTime,\n expiry,\n targetTime = +new Date(),\n) {\n // Always expired if < 0\n if (initialTime === null || expiry === undefined || expiry < 0) {\n return true;\n }\n\n // Never expires if == 0\n if (expiry === 0) {\n return false;\n }\n\n return initialTime + expiry <= targetTime;\n}\n\n/**\n * Checks to see if session is expired\n */\nfunction isSessionExpired(\n session,\n {\n maxReplayDuration,\n sessionIdleExpire,\n targetTime = Date.now(),\n },\n) {\n return (\n // First, check that maximum session length has not been exceeded\n isExpired(session.started, maxReplayDuration, targetTime) ||\n // check that the idle timeout has not been exceeded (i.e. user has\n // performed an action within the last `sessionIdleExpire` ms)\n isExpired(session.lastActivity, sessionIdleExpire, targetTime)\n );\n}\n\n/** If the session should be refreshed or not. */\nfunction shouldRefreshSession(\n session,\n { sessionIdleExpire, maxReplayDuration },\n) {\n // If not expired, all good, just keep the session\n if (!isSessionExpired(session, { sessionIdleExpire, maxReplayDuration })) {\n return false;\n }\n\n // If we are buffering & haven't ever flushed yet, always continue\n if (session.sampled === 'buffer' && session.segmentId === 0) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Get or create a session, when initializing the replay.\n * Returns a session that may be unsampled.\n */\nfunction loadOrCreateSession(\n {\n traceInternals,\n sessionIdleExpire,\n maxReplayDuration,\n previousSessionId,\n }\n\n,\n sessionOptions,\n) {\n const existingSession = sessionOptions.stickySession && fetchSession(traceInternals);\n\n // No session exists yet, just create a new one\n if (!existingSession) {\n logInfoNextTick('[Replay] Creating new session', traceInternals);\n return createSession(sessionOptions, { previousSessionId });\n }\n\n if (!shouldRefreshSession(existingSession, { sessionIdleExpire, maxReplayDuration })) {\n return existingSession;\n }\n\n logInfoNextTick('[Replay] Session in sessionStorage is expired, creating new one...');\n return createSession(sessionOptions, { previousSessionId: existingSession.id });\n}\n\nfunction isCustomEvent(event) {\n return event.type === EventType.Custom;\n}\n\n/**\n * Add an event to the event buffer.\n * In contrast to `addEvent`, this does not return a promise & does not wait for the adding of the event to succeed/fail.\n * Instead this returns `true` if we tried to add the event, else false.\n * It returns `false` e.g. if we are paused, disabled, or out of the max replay duration.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nfunction addEventSync(replay, event, isCheckout) {\n if (!shouldAddEvent(replay, event)) {\n return false;\n }\n\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n _addEvent(replay, event, isCheckout);\n\n return true;\n}\n\n/**\n * Add an event to the event buffer.\n * Resolves to `null` if no event was added, else to `void`.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nfunction addEvent(\n replay,\n event,\n isCheckout,\n) {\n if (!shouldAddEvent(replay, event)) {\n return Promise.resolve(null);\n }\n\n return _addEvent(replay, event, isCheckout);\n}\n\nasync function _addEvent(\n replay,\n event,\n isCheckout,\n) {\n if (!replay.eventBuffer) {\n return null;\n }\n\n try {\n if (isCheckout && replay.recordingMode === 'buffer') {\n replay.eventBuffer.clear();\n }\n\n if (isCheckout) {\n replay.eventBuffer.hasCheckout = true;\n }\n\n const replayOptions = replay.getOptions();\n\n const eventAfterPossibleCallback = maybeApplyCallback(event, replayOptions.beforeAddRecordingEvent);\n\n if (!eventAfterPossibleCallback) {\n return;\n }\n\n return await replay.eventBuffer.addEvent(eventAfterPossibleCallback);\n } catch (error) {\n const reason = error && error instanceof EventBufferSizeExceededError ? 'addEventSizeExceeded' : 'addEvent';\n\n DEBUG_BUILD && logger.error(error);\n await replay.stop({ reason });\n\n const client = getClient();\n\n if (client) {\n client.recordDroppedEvent('internal_sdk_error', 'replay');\n }\n }\n}\n\n/** Exported only for tests. */\nfunction shouldAddEvent(replay, event) {\n if (!replay.eventBuffer || replay.isPaused() || !replay.isEnabled()) {\n return false;\n }\n\n const timestampInMs = timestampToMs(event.timestamp);\n\n // Throw out events that happen more than 5 minutes ago. This can happen if\n // page has been left open and idle for a long period of time and user\n // comes back to trigger a new session. The performance entries rely on\n // `performance.timeOrigin`, which is when the page first opened.\n if (timestampInMs + replay.timeouts.sessionIdlePause < Date.now()) {\n return false;\n }\n\n // Throw out events that are +60min from the initial timestamp\n if (timestampInMs > replay.getContext().initialTimestamp + replay.getOptions().maxReplayDuration) {\n logInfo(\n `[Replay] Skipping event with timestamp ${timestampInMs} because it is after maxReplayDuration`,\n replay.getOptions()._experiments.traceInternals,\n );\n return false;\n }\n\n return true;\n}\n\nfunction maybeApplyCallback(\n event,\n callback,\n) {\n try {\n if (typeof callback === 'function' && isCustomEvent(event)) {\n return callback(event);\n }\n } catch (error) {\n DEBUG_BUILD &&\n logger.error('[Replay] An error occured in the `beforeAddRecordingEvent` callback, skipping the event...', error);\n return null;\n }\n\n return event;\n}\n\n/** If the event is an error event */\nfunction isErrorEvent(event) {\n return !event.type;\n}\n\n/** If the event is a transaction event */\nfunction isTransactionEvent(event) {\n return event.type === 'transaction';\n}\n\n/** If the event is an replay event */\nfunction isReplayEvent(event) {\n return event.type === 'replay_event';\n}\n\n/** If the event is a feedback event */\nfunction isFeedbackEvent(event) {\n return event.type === 'feedback';\n}\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nfunction handleAfterSendEvent(replay) {\n // Custom transports may still be returning `Promise`, which means we cannot expect the status code to be available there\n // TODO (v8): remove this check as it will no longer be necessary\n const enforceStatusCode = isBaseTransportSend();\n\n return (event, sendResponse) => {\n if (!replay.isEnabled() || (!isErrorEvent(event) && !isTransactionEvent(event))) {\n return;\n }\n\n const statusCode = sendResponse && sendResponse.statusCode;\n\n // We only want to do stuff on successful error sending, otherwise you get error replays without errors attached\n // If not using the base transport, we allow `undefined` response (as a custom transport may not implement this correctly yet)\n // If we do use the base transport, we skip if we encountered an non-OK status code\n if (enforceStatusCode && (!statusCode || statusCode < 200 || statusCode >= 300)) {\n return;\n }\n\n if (isTransactionEvent(event)) {\n handleTransactionEvent(replay, event);\n return;\n }\n\n handleErrorEvent(replay, event);\n };\n}\n\nfunction handleTransactionEvent(replay, event) {\n const replayContext = replay.getContext();\n\n // Collect traceIds in _context regardless of `recordingMode`\n // In error mode, _context gets cleared on every checkout\n // We limit to max. 100 transactions linked\n if (event.contexts && event.contexts.trace && event.contexts.trace.trace_id && replayContext.traceIds.size < 100) {\n replayContext.traceIds.add(event.contexts.trace.trace_id );\n }\n}\n\nfunction handleErrorEvent(replay, event) {\n const replayContext = replay.getContext();\n\n // Add error to list of errorIds of replay. This is ok to do even if not\n // sampled because context will get reset at next checkout.\n // XXX: There is also a race condition where it's possible to capture an\n // error to Sentry before Replay SDK has loaded, but response returns after\n // it was loaded, and this gets called.\n // We limit to max. 100 errors linked\n if (event.event_id && replayContext.errorIds.size < 100) {\n replayContext.errorIds.add(event.event_id);\n }\n\n // If error event is tagged with replay id it means it was sampled (when in buffer mode)\n // Need to be very careful that this does not cause an infinite loop\n if (replay.recordingMode !== 'buffer' || !event.tags || !event.tags.replayId) {\n return;\n }\n\n const { beforeErrorSampling } = replay.getOptions();\n if (typeof beforeErrorSampling === 'function' && !beforeErrorSampling(event)) {\n return;\n }\n\n setTimeout(() => {\n // Capture current event buffer as new replay\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n replay.sendBufferedReplayOrFlush();\n });\n}\n\nfunction isBaseTransportSend() {\n const client = getClient();\n if (!client) {\n return false;\n }\n\n const transport = client.getTransport();\n if (!transport) {\n return false;\n }\n\n return (\n (transport.send ).__sentry__baseTransport__ || false\n );\n}\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nfunction handleBeforeSendEvent(replay) {\n return (event) => {\n if (!replay.isEnabled() || !isErrorEvent(event)) {\n return;\n }\n\n handleHydrationError(replay, event);\n };\n}\n\nfunction handleHydrationError(replay, event) {\n const exceptionValue = event.exception && event.exception.values && event.exception.values[0].value;\n if (typeof exceptionValue !== 'string') {\n return;\n }\n\n if (\n // Only matches errors in production builds of react-dom\n // Example https://reactjs.org/docs/error-decoder.html?invariant=423\n exceptionValue.match(/reactjs\\.org\\/docs\\/error-decoder\\.html\\?invariant=(418|419|422|423|425)/) ||\n // Development builds of react-dom\n // Error 1: Hydration failed because the initial UI does not match what was rendered on the server.\n // Error 2: Text content does not match server-rendered HTML. Warning: Text content did not match.\n exceptionValue.match(/(does not match server-rendered HTML|Hydration failed because)/i)\n ) {\n const breadcrumb = createBreadcrumb({\n category: 'replay.hydrate-error',\n });\n addBreadcrumbEvent(replay, breadcrumb);\n }\n}\n\n/**\n * Returns true if we think the given event is an error originating inside of rrweb.\n */\nfunction isRrwebError(event, hint) {\n if (event.type || !event.exception || !event.exception.values || !event.exception.values.length) {\n return false;\n }\n\n // @ts-expect-error this may be set by rrweb when it finds errors\n if (hint.originalException && hint.originalException.__rrweb__) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Add a feedback breadcrumb event to replay.\n */\nfunction addFeedbackBreadcrumb(replay, event) {\n replay.triggerUserActivity();\n replay.addUpdate(() => {\n if (!event.timestamp) {\n // Ignore events that don't have timestamps (this shouldn't happen, more of a typing issue)\n // Return true here so that we don't flush\n return true;\n }\n\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n replay.throttledAddEvent({\n type: EventType.Custom,\n timestamp: event.timestamp * 1000,\n data: {\n tag: 'breadcrumb',\n payload: {\n timestamp: event.timestamp,\n type: 'default',\n category: 'sentry.feedback',\n data: {\n feedbackId: event.event_id,\n },\n },\n },\n } );\n\n return false;\n });\n}\n\n/**\n * Determine if event should be sampled (only applies in buffer mode).\n * When an event is captured by `hanldleGlobalEvent`, when in buffer mode\n * we determine if we want to sample the error or not.\n */\nfunction shouldSampleForBufferEvent(replay, event) {\n if (replay.recordingMode !== 'buffer') {\n return false;\n }\n\n // ignore this error because otherwise we could loop indefinitely with\n // trying to capture replay and failing\n if (event.message === UNABLE_TO_SEND_REPLAY) {\n return false;\n }\n\n // Require the event to be an error event & to have an exception\n if (!event.exception || event.type) {\n return false;\n }\n\n return isSampled(replay.getOptions().errorSampleRate);\n}\n\n/**\n * Returns a listener to be added to `addEventProcessor(listener)`.\n */\nfunction handleGlobalEventListener(\n replay,\n includeAfterSendEventHandling = false,\n) {\n const afterSendHandler = includeAfterSendEventHandling ? handleAfterSendEvent(replay) : undefined;\n\n return Object.assign(\n (event, hint) => {\n // Do nothing if replay has been disabled\n if (!replay.isEnabled()) {\n return event;\n }\n\n if (isReplayEvent(event)) {\n // Replays have separate set of breadcrumbs, do not include breadcrumbs\n // from core SDK\n delete event.breadcrumbs;\n return event;\n }\n\n // We only want to handle errors, transactions, and feedbacks, nothing else\n if (!isErrorEvent(event) && !isTransactionEvent(event) && !isFeedbackEvent(event)) {\n return event;\n }\n\n // Ensure we do not add replay_id if the session is expired\n const isSessionActive = replay.checkAndHandleExpiredSession();\n if (!isSessionActive) {\n return event;\n }\n\n if (isFeedbackEvent(event)) {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n replay.flush();\n event.contexts.feedback.replay_id = replay.getSessionId();\n // Add a replay breadcrumb for this piece of feedback\n addFeedbackBreadcrumb(replay, event);\n return event;\n }\n\n // Unless `captureExceptions` is enabled, we want to ignore errors coming from rrweb\n // As there can be a bunch of stuff going wrong in internals there, that we don't want to bubble up to users\n if (isRrwebError(event, hint) && !replay.getOptions()._experiments.captureExceptions) {\n DEBUG_BUILD && logger.log('[Replay] Ignoring error from rrweb internals', event);\n return null;\n }\n\n // When in buffer mode, we decide to sample here.\n // Later, in `handleAfterSendEvent`, if the replayId is set, we know that we sampled\n // And convert the buffer session to a full session\n const isErrorEventSampled = shouldSampleForBufferEvent(replay, event);\n\n // Tag errors if it has been sampled in buffer mode, or if it is session mode\n // Only tag transactions if in session mode\n const shouldTagReplayId = isErrorEventSampled || replay.recordingMode === 'session';\n\n if (shouldTagReplayId) {\n event.tags = { ...event.tags, replayId: replay.getSessionId() };\n }\n\n // In cases where a custom client is used that does not support the new hooks (yet),\n // we manually call this hook method here\n if (afterSendHandler) {\n // Pretend the error had a 200 response so we always capture it\n afterSendHandler(event, { statusCode: 200 });\n }\n\n return event;\n },\n { id: 'Replay' },\n );\n}\n\n/**\n * Create a \"span\" for each performance entry.\n */\nfunction createPerformanceSpans(\n replay,\n entries,\n) {\n return entries.map(({ type, start, end, name, data }) => {\n const response = replay.throttledAddEvent({\n type: EventType.Custom,\n timestamp: start,\n data: {\n tag: 'performanceSpan',\n payload: {\n op: type,\n description: name,\n startTimestamp: start,\n endTimestamp: end,\n data,\n },\n },\n });\n\n // If response is a string, it means its either THROTTLED or SKIPPED\n return typeof response === 'string' ? Promise.resolve(null) : response;\n });\n}\n\nfunction handleHistory(handlerData) {\n const { from, to } = handlerData;\n\n const now = Date.now() / 1000;\n\n return {\n type: 'navigation.push',\n start: now,\n end: now,\n name: to,\n data: {\n previous: from,\n },\n };\n}\n\n/**\n * Returns a listener to be added to `addHistoryInstrumentationHandler(listener)`.\n */\nfunction handleHistorySpanListener(replay) {\n return (handlerData) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleHistory(handlerData);\n\n if (result === null) {\n return;\n }\n\n // Need to collect visited URLs\n replay.getContext().urls.push(result.name);\n replay.triggerUserActivity();\n\n replay.addUpdate(() => {\n createPerformanceSpans(replay, [result]);\n // Returning false to flush\n return false;\n });\n };\n}\n\n/**\n * Check whether a given request URL should be filtered out. This is so we\n * don't log Sentry ingest requests.\n */\nfunction shouldFilterRequest(replay, url) {\n // If we enabled the `traceInternals` experiment, we want to trace everything\n if (DEBUG_BUILD && replay.getOptions()._experiments.traceInternals) {\n return false;\n }\n\n return isSentryRequestUrl(url, getClient());\n}\n\n/** Add a performance entry breadcrumb */\nfunction addNetworkBreadcrumb(\n replay,\n result,\n) {\n if (!replay.isEnabled()) {\n return;\n }\n\n if (result === null) {\n return;\n }\n\n if (shouldFilterRequest(replay, result.name)) {\n return;\n }\n\n replay.addUpdate(() => {\n createPerformanceSpans(replay, [result]);\n // Returning true will cause `addUpdate` to not flush\n // We do not want network requests to cause a flush. This will prevent\n // recurring/polling requests from keeping the replay session alive.\n return true;\n });\n}\n\n/** only exported for tests */\nfunction handleFetch(handlerData) {\n const { startTimestamp, endTimestamp, fetchData, response } = handlerData;\n\n if (!endTimestamp) {\n return null;\n }\n\n // This is only used as a fallback, so we know the body sizes are never set here\n const { method, url } = fetchData;\n\n return {\n type: 'resource.fetch',\n start: startTimestamp / 1000,\n end: endTimestamp / 1000,\n name: url,\n data: {\n method,\n statusCode: response ? (response ).status : undefined,\n },\n };\n}\n\n/**\n * Returns a listener to be added to `addFetchInstrumentationHandler(listener)`.\n */\nfunction handleFetchSpanListener(replay) {\n return (handlerData) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleFetch(handlerData);\n\n addNetworkBreadcrumb(replay, result);\n };\n}\n\n/** only exported for tests */\nfunction handleXhr(handlerData) {\n const { startTimestamp, endTimestamp, xhr } = handlerData;\n\n const sentryXhrData = xhr[SENTRY_XHR_DATA_KEY];\n\n if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n return null;\n }\n\n // This is only used as a fallback, so we know the body sizes are never set here\n const { method, url, status_code: statusCode } = sentryXhrData;\n\n if (url === undefined) {\n return null;\n }\n\n return {\n type: 'resource.xhr',\n name: url,\n start: startTimestamp / 1000,\n end: endTimestamp / 1000,\n data: {\n method,\n statusCode,\n },\n };\n}\n\n/**\n * Returns a listener to be added to `addXhrInstrumentationHandler(listener)`.\n */\nfunction handleXhrSpanListener(replay) {\n return (handlerData) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleXhr(handlerData);\n\n addNetworkBreadcrumb(replay, result);\n };\n}\n\n/** Get the size of a body. */\nfunction getBodySize(\n body,\n textEncoder,\n) {\n if (!body) {\n return undefined;\n }\n\n try {\n if (typeof body === 'string') {\n return textEncoder.encode(body).length;\n }\n\n if (body instanceof URLSearchParams) {\n return textEncoder.encode(body.toString()).length;\n }\n\n if (body instanceof FormData) {\n const formDataStr = _serializeFormData(body);\n return textEncoder.encode(formDataStr).length;\n }\n\n if (body instanceof Blob) {\n return body.size;\n }\n\n if (body instanceof ArrayBuffer) {\n return body.byteLength;\n }\n\n // Currently unhandled types: ArrayBufferView, ReadableStream\n } catch (e) {\n // just return undefined\n }\n\n return undefined;\n}\n\n/** Convert a Content-Length header to number/undefined. */\nfunction parseContentLengthHeader(header) {\n if (!header) {\n return undefined;\n }\n\n const size = parseInt(header, 10);\n return isNaN(size) ? undefined : size;\n}\n\n/** Get the string representation of a body. */\nfunction getBodyString(body) {\n try {\n if (typeof body === 'string') {\n return [body];\n }\n\n if (body instanceof URLSearchParams) {\n return [body.toString()];\n }\n\n if (body instanceof FormData) {\n return [_serializeFormData(body)];\n }\n\n if (!body) {\n return [undefined];\n }\n } catch (e2) {\n DEBUG_BUILD && logger.warn('[Replay] Failed to serialize body', body);\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n\n DEBUG_BUILD && logger.info('[Replay] Skipping network body because of body type', body);\n\n return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\n/** Merge a warning into an existing network request/response. */\nfunction mergeWarning(\n info,\n warning,\n) {\n if (!info) {\n return {\n headers: {},\n size: undefined,\n _meta: {\n warnings: [warning],\n },\n };\n }\n\n const newMeta = { ...info._meta };\n const existingWarnings = newMeta.warnings || [];\n newMeta.warnings = [...existingWarnings, warning];\n\n info._meta = newMeta;\n return info;\n}\n\n/** Convert ReplayNetworkRequestData to a PerformanceEntry. */\nfunction makeNetworkReplayBreadcrumb(\n type,\n data,\n) {\n if (!data) {\n return null;\n }\n\n const { startTimestamp, endTimestamp, url, method, statusCode, request, response } = data;\n\n const result = {\n type,\n start: startTimestamp / 1000,\n end: endTimestamp / 1000,\n name: url,\n data: dropUndefinedKeys({\n method,\n statusCode,\n request,\n response,\n }),\n };\n\n return result;\n}\n\n/** Build the request or response part of a replay network breadcrumb that was skipped. */\nfunction buildSkippedNetworkRequestOrResponse(bodySize) {\n return {\n headers: {},\n size: bodySize,\n _meta: {\n warnings: ['URL_SKIPPED'],\n },\n };\n}\n\n/** Build the request or response part of a replay network breadcrumb. */\nfunction buildNetworkRequestOrResponse(\n headers,\n bodySize,\n body,\n) {\n if (!bodySize && Object.keys(headers).length === 0) {\n return undefined;\n }\n\n if (!bodySize) {\n return {\n headers,\n };\n }\n\n if (!body) {\n return {\n headers,\n size: bodySize,\n };\n }\n\n const info = {\n headers,\n size: bodySize,\n };\n\n const { body: normalizedBody, warnings } = normalizeNetworkBody(body);\n info.body = normalizedBody;\n if (warnings && warnings.length > 0) {\n info._meta = {\n warnings,\n };\n }\n\n return info;\n}\n\n/** Filter a set of headers */\nfunction getAllowedHeaders(headers, allowedHeaders) {\n return Object.keys(headers).reduce((filteredHeaders, key) => {\n const normalizedKey = key.toLowerCase();\n // Avoid putting empty strings into the headers\n if (allowedHeaders.includes(normalizedKey) && headers[key]) {\n filteredHeaders[normalizedKey] = headers[key];\n }\n return filteredHeaders;\n }, {});\n}\n\nfunction _serializeFormData(formData) {\n // This is a bit simplified, but gives us a decent estimate\n // This converts e.g. { name: 'Anne Smith', age: 13 } to 'name=Anne+Smith&age=13'\n // @ts-expect-error passing FormData to URLSearchParams actually works\n return new URLSearchParams(formData).toString();\n}\n\nfunction normalizeNetworkBody(body)\n\n {\n if (!body || typeof body !== 'string') {\n return {\n body,\n };\n }\n\n const exceedsSizeLimit = body.length > NETWORK_BODY_MAX_SIZE;\n const isProbablyJson = _strIsProbablyJson(body);\n\n if (exceedsSizeLimit) {\n const truncatedBody = body.slice(0, NETWORK_BODY_MAX_SIZE);\n\n if (isProbablyJson) {\n return {\n body: truncatedBody,\n warnings: ['MAYBE_JSON_TRUNCATED'],\n };\n }\n\n return {\n body: `${truncatedBody}…`,\n warnings: ['TEXT_TRUNCATED'],\n };\n }\n\n if (isProbablyJson) {\n try {\n const jsonBody = JSON.parse(body);\n return {\n body: jsonBody,\n };\n } catch (e3) {\n // fall back to just send the body as string\n }\n }\n\n return {\n body,\n };\n}\n\nfunction _strIsProbablyJson(str) {\n const first = str[0];\n const last = str[str.length - 1];\n\n // Simple check: If this does not start & end with {} or [], it's not JSON\n return (first === '[' && last === ']') || (first === '{' && last === '}');\n}\n\n/** Match an URL against a list of strings/Regex. */\nfunction urlMatches(url, urls) {\n const fullUrl = getFullUrl(url);\n\n return stringMatchesSomePattern(fullUrl, urls);\n}\n\n/** exported for tests */\nfunction getFullUrl(url, baseURI = WINDOW.document.baseURI) {\n // Short circuit for common cases:\n if (url.startsWith('http://') || url.startsWith('https://') || url.startsWith(WINDOW.location.origin)) {\n return url;\n }\n const fixedUrl = new URL(url, baseURI);\n\n // If these do not match, we are not dealing with a relative URL, so just return it\n if (fixedUrl.origin !== new URL(baseURI).origin) {\n return url;\n }\n\n const fullUrl = fixedUrl.href;\n\n // Remove trailing slashes, if they don't match the original URL\n if (!url.endsWith('/') && fullUrl.endsWith('/')) {\n return fullUrl.slice(0, -1);\n }\n\n return fullUrl;\n}\n\n/**\n * Capture a fetch breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nasync function captureFetchBreadcrumbToReplay(\n breadcrumb,\n hint,\n options\n\n,\n) {\n try {\n const data = await _prepareFetchData(breadcrumb, hint, options);\n\n // Create a replay performance entry from this breadcrumb\n const result = makeNetworkReplayBreadcrumb('resource.fetch', data);\n addNetworkBreadcrumb(options.replay, result);\n } catch (error) {\n DEBUG_BUILD && logger.error('[Replay] Failed to capture fetch breadcrumb', error);\n }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nfunction enrichFetchBreadcrumb(\n breadcrumb,\n hint,\n options,\n) {\n const { input, response } = hint;\n\n const body = input ? _getFetchRequestArgBody(input) : undefined;\n const reqSize = getBodySize(body, options.textEncoder);\n\n const resSize = response ? parseContentLengthHeader(response.headers.get('content-length')) : undefined;\n\n if (reqSize !== undefined) {\n breadcrumb.data.request_body_size = reqSize;\n }\n if (resSize !== undefined) {\n breadcrumb.data.response_body_size = resSize;\n }\n}\n\nasync function _prepareFetchData(\n breadcrumb,\n hint,\n options\n\n,\n) {\n const now = Date.now();\n const { startTimestamp = now, endTimestamp = now } = hint;\n\n const {\n url,\n method,\n status_code: statusCode = 0,\n request_body_size: requestBodySize,\n response_body_size: responseBodySize,\n } = breadcrumb.data;\n\n const captureDetails =\n urlMatches(url, options.networkDetailAllowUrls) && !urlMatches(url, options.networkDetailDenyUrls);\n\n const request = captureDetails\n ? _getRequestInfo(options, hint.input, requestBodySize)\n : buildSkippedNetworkRequestOrResponse(requestBodySize);\n const response = await _getResponseInfo(captureDetails, options, hint.response, responseBodySize);\n\n return {\n startTimestamp,\n endTimestamp,\n url,\n method,\n statusCode,\n request,\n response,\n };\n}\n\nfunction _getRequestInfo(\n { networkCaptureBodies, networkRequestHeaders },\n input,\n requestBodySize,\n) {\n const headers = input ? getRequestHeaders(input, networkRequestHeaders) : {};\n\n if (!networkCaptureBodies) {\n return buildNetworkRequestOrResponse(headers, requestBodySize, undefined);\n }\n\n // We only want to transmit string or string-like bodies\n const requestBody = _getFetchRequestArgBody(input);\n const [bodyStr, warning] = getBodyString(requestBody);\n const data = buildNetworkRequestOrResponse(headers, requestBodySize, bodyStr);\n\n if (warning) {\n return mergeWarning(data, warning);\n }\n\n return data;\n}\n\n/** Exported only for tests. */\nasync function _getResponseInfo(\n captureDetails,\n {\n networkCaptureBodies,\n textEncoder,\n networkResponseHeaders,\n }\n\n,\n response,\n responseBodySize,\n) {\n if (!captureDetails && responseBodySize !== undefined) {\n return buildSkippedNetworkRequestOrResponse(responseBodySize);\n }\n\n const headers = response ? getAllHeaders(response.headers, networkResponseHeaders) : {};\n\n if (!response || (!networkCaptureBodies && responseBodySize !== undefined)) {\n return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n }\n\n const [bodyText, warning] = await _parseFetchResponseBody(response);\n const result = getResponseData(bodyText, {\n networkCaptureBodies,\n textEncoder,\n responseBodySize,\n captureDetails,\n headers,\n });\n\n if (warning) {\n return mergeWarning(result, warning);\n }\n\n return result;\n}\n\nfunction getResponseData(\n bodyText,\n {\n networkCaptureBodies,\n textEncoder,\n responseBodySize,\n captureDetails,\n headers,\n }\n\n,\n) {\n try {\n const size =\n bodyText && bodyText.length && responseBodySize === undefined\n ? getBodySize(bodyText, textEncoder)\n : responseBodySize;\n\n if (!captureDetails) {\n return buildSkippedNetworkRequestOrResponse(size);\n }\n\n if (networkCaptureBodies) {\n return buildNetworkRequestOrResponse(headers, size, bodyText);\n }\n\n return buildNetworkRequestOrResponse(headers, size, undefined);\n } catch (error) {\n DEBUG_BUILD && logger.warn('[Replay] Failed to serialize response body', error);\n // fallback\n return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n }\n}\n\nasync function _parseFetchResponseBody(response) {\n const res = _tryCloneResponse(response);\n\n if (!res) {\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n\n try {\n const text = await _tryGetResponseText(res);\n return [text];\n } catch (error) {\n DEBUG_BUILD && logger.warn('[Replay] Failed to get text body from response', error);\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n}\n\nfunction _getFetchRequestArgBody(fetchArgs = []) {\n // We only support getting the body from the fetch options\n if (fetchArgs.length !== 2 || typeof fetchArgs[1] !== 'object') {\n return undefined;\n }\n\n return (fetchArgs[1] ).body;\n}\n\nfunction getAllHeaders(headers, allowedHeaders) {\n const allHeaders = {};\n\n allowedHeaders.forEach(header => {\n if (headers.get(header)) {\n allHeaders[header] = headers.get(header) ;\n }\n });\n\n return allHeaders;\n}\n\nfunction getRequestHeaders(fetchArgs, allowedHeaders) {\n if (fetchArgs.length === 1 && typeof fetchArgs[0] !== 'string') {\n return getHeadersFromOptions(fetchArgs[0] , allowedHeaders);\n }\n\n if (fetchArgs.length === 2) {\n return getHeadersFromOptions(fetchArgs[1] , allowedHeaders);\n }\n\n return {};\n}\n\nfunction getHeadersFromOptions(\n input,\n allowedHeaders,\n) {\n if (!input) {\n return {};\n }\n\n const headers = input.headers;\n\n if (!headers) {\n return {};\n }\n\n if (headers instanceof Headers) {\n return getAllHeaders(headers, allowedHeaders);\n }\n\n // We do not support this, as it is not really documented (anymore?)\n if (Array.isArray(headers)) {\n return {};\n }\n\n return getAllowedHeaders(headers, allowedHeaders);\n}\n\nfunction _tryCloneResponse(response) {\n try {\n // We have to clone this, as the body can only be read once\n return response.clone();\n } catch (error) {\n // this can throw if the response was already consumed before\n DEBUG_BUILD && logger.warn('[Replay] Failed to clone response body', error);\n }\n}\n\n/**\n * Get the response body of a fetch request, or timeout after 500ms.\n * Fetch can return a streaming body, that may not resolve (or not for a long time).\n * If that happens, we rather abort after a short time than keep waiting for this.\n */\nfunction _tryGetResponseText(response) {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => reject(new Error('Timeout while trying to read response body')), 500);\n\n _getResponseText(response)\n .then(\n txt => resolve(txt),\n reason => reject(reason),\n )\n .finally(() => clearTimeout(timeout));\n });\n}\n\nasync function _getResponseText(response) {\n // Force this to be a promise, just to be safe\n // eslint-disable-next-line no-return-await\n return await response.text();\n}\n\n/**\n * Capture an XHR breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nasync function captureXhrBreadcrumbToReplay(\n breadcrumb,\n hint,\n options,\n) {\n try {\n const data = _prepareXhrData(breadcrumb, hint, options);\n\n // Create a replay performance entry from this breadcrumb\n const result = makeNetworkReplayBreadcrumb('resource.xhr', data);\n addNetworkBreadcrumb(options.replay, result);\n } catch (error) {\n DEBUG_BUILD && logger.error('[Replay] Failed to capture xhr breadcrumb', error);\n }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nfunction enrichXhrBreadcrumb(\n breadcrumb,\n hint,\n options,\n) {\n const { xhr, input } = hint;\n\n if (!xhr) {\n return;\n }\n\n const reqSize = getBodySize(input, options.textEncoder);\n const resSize = xhr.getResponseHeader('content-length')\n ? parseContentLengthHeader(xhr.getResponseHeader('content-length'))\n : _getBodySize(xhr.response, xhr.responseType, options.textEncoder);\n\n if (reqSize !== undefined) {\n breadcrumb.data.request_body_size = reqSize;\n }\n if (resSize !== undefined) {\n breadcrumb.data.response_body_size = resSize;\n }\n}\n\nfunction _prepareXhrData(\n breadcrumb,\n hint,\n options,\n) {\n const now = Date.now();\n const { startTimestamp = now, endTimestamp = now, input, xhr } = hint;\n\n const {\n url,\n method,\n status_code: statusCode = 0,\n request_body_size: requestBodySize,\n response_body_size: responseBodySize,\n } = breadcrumb.data;\n\n if (!url) {\n return null;\n }\n\n if (!xhr || !urlMatches(url, options.networkDetailAllowUrls) || urlMatches(url, options.networkDetailDenyUrls)) {\n const request = buildSkippedNetworkRequestOrResponse(requestBodySize);\n const response = buildSkippedNetworkRequestOrResponse(responseBodySize);\n return {\n startTimestamp,\n endTimestamp,\n url,\n method,\n statusCode,\n request,\n response,\n };\n }\n\n const xhrInfo = xhr[SENTRY_XHR_DATA_KEY];\n const networkRequestHeaders = xhrInfo\n ? getAllowedHeaders(xhrInfo.request_headers, options.networkRequestHeaders)\n : {};\n const networkResponseHeaders = getAllowedHeaders(getResponseHeaders(xhr), options.networkResponseHeaders);\n\n const [requestBody, requestWarning] = options.networkCaptureBodies ? getBodyString(input) : [undefined];\n const [responseBody, responseWarning] = options.networkCaptureBodies ? _getXhrResponseBody(xhr) : [undefined];\n\n const request = buildNetworkRequestOrResponse(networkRequestHeaders, requestBodySize, requestBody);\n const response = buildNetworkRequestOrResponse(networkResponseHeaders, responseBodySize, responseBody);\n\n return {\n startTimestamp,\n endTimestamp,\n url,\n method,\n statusCode,\n request: requestWarning ? mergeWarning(request, requestWarning) : request,\n response: responseWarning ? mergeWarning(response, responseWarning) : response,\n };\n}\n\nfunction getResponseHeaders(xhr) {\n const headers = xhr.getAllResponseHeaders();\n\n if (!headers) {\n return {};\n }\n\n return headers.split('\\r\\n').reduce((acc, line) => {\n const [key, value] = line.split(': ');\n acc[key.toLowerCase()] = value;\n return acc;\n }, {});\n}\n\nfunction _getXhrResponseBody(xhr) {\n // We collect errors that happen, but only log them if we can't get any response body\n const errors = [];\n\n try {\n return [xhr.responseText];\n } catch (e) {\n errors.push(e);\n }\n\n // Try to manually parse the response body, if responseText fails\n try {\n return _parseXhrResponse(xhr.response, xhr.responseType);\n } catch (e) {\n errors.push(e);\n }\n\n DEBUG_BUILD && logger.warn('[Replay] Failed to get xhr response body', ...errors);\n\n return [undefined];\n}\n\n/**\n * Get the string representation of the XHR response.\n * Based on MDN, these are the possible types of the response:\n * string\n * ArrayBuffer\n * Blob\n * Document\n * POJO\n *\n * Exported only for tests.\n */\nfunction _parseXhrResponse(\n body,\n responseType,\n) {\n try {\n if (typeof body === 'string') {\n return [body];\n }\n\n if (body instanceof Document) {\n return [body.body.outerHTML];\n }\n\n if (responseType === 'json' && body && typeof body === 'object') {\n return [JSON.stringify(body)];\n }\n\n if (!body) {\n return [undefined];\n }\n } catch (e2) {\n DEBUG_BUILD && logger.warn('[Replay] Failed to serialize body', body);\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n\n DEBUG_BUILD && logger.info('[Replay] Skipping network body because of body type', body);\n\n return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\nfunction _getBodySize(\n body,\n responseType,\n textEncoder,\n) {\n try {\n const bodyStr = responseType === 'json' && body && typeof body === 'object' ? JSON.stringify(body) : body;\n return getBodySize(bodyStr, textEncoder);\n } catch (e3) {\n return undefined;\n }\n}\n\n/**\n * This method does two things:\n * - It enriches the regular XHR/fetch breadcrumbs with request/response size data\n * - It captures the XHR/fetch breadcrumbs to the replay\n * (enriching it with further data that is _not_ added to the regular breadcrumbs)\n */\nfunction handleNetworkBreadcrumbs(replay) {\n const client = getClient();\n\n try {\n const textEncoder = new TextEncoder();\n\n const {\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders,\n networkResponseHeaders,\n } = replay.getOptions();\n\n const options = {\n replay,\n textEncoder,\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders,\n networkResponseHeaders,\n };\n\n if (client && client.on) {\n client.on('beforeAddBreadcrumb', (breadcrumb, hint) => beforeAddNetworkBreadcrumb(options, breadcrumb, hint));\n } else {\n // Fallback behavior\n addFetchInstrumentationHandler(handleFetchSpanListener(replay));\n addXhrInstrumentationHandler(handleXhrSpanListener(replay));\n }\n } catch (e2) {\n // Do nothing\n }\n}\n\n/** just exported for tests */\nfunction beforeAddNetworkBreadcrumb(\n options,\n breadcrumb,\n hint,\n) {\n if (!breadcrumb.data) {\n return;\n }\n\n try {\n if (_isXhrBreadcrumb(breadcrumb) && _isXhrHint(hint)) {\n // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n // So any async mutations to it will not be reflected in the final breadcrumb\n enrichXhrBreadcrumb(breadcrumb, hint, options);\n\n // This call should not reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n captureXhrBreadcrumbToReplay(breadcrumb, hint, options);\n }\n\n if (_isFetchBreadcrumb(breadcrumb) && _isFetchHint(hint)) {\n // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n // So any async mutations to it will not be reflected in the final breadcrumb\n enrichFetchBreadcrumb(breadcrumb, hint, options);\n\n // This call should not reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n captureFetchBreadcrumbToReplay(breadcrumb, hint, options);\n }\n } catch (e) {\n DEBUG_BUILD && logger.warn('Error when enriching network breadcrumb');\n }\n}\n\nfunction _isXhrBreadcrumb(breadcrumb) {\n return breadcrumb.category === 'xhr';\n}\n\nfunction _isFetchBreadcrumb(breadcrumb) {\n return breadcrumb.category === 'fetch';\n}\n\nfunction _isXhrHint(hint) {\n return hint && hint.xhr;\n}\n\nfunction _isFetchHint(hint) {\n return hint && hint.response;\n}\n\nlet _LAST_BREADCRUMB = null;\n\nfunction isBreadcrumbWithCategory(breadcrumb) {\n return !!breadcrumb.category;\n}\n\nconst handleScopeListener =\n (replay) =>\n (scope) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleScope(scope);\n\n if (!result) {\n return;\n }\n\n addBreadcrumbEvent(replay, result);\n };\n\n/**\n * An event handler to handle scope changes.\n */\nfunction handleScope(scope) {\n // TODO (v8): Remove this guard. This was put in place because we introduced\n // Scope.getLastBreadcrumb mid-v7 which caused incompatibilities with older SDKs.\n // For now, we'll just return null if the method doesn't exist but we should eventually\n // get rid of this guard.\n const newBreadcrumb = scope.getLastBreadcrumb && scope.getLastBreadcrumb();\n\n // Listener can be called when breadcrumbs have not changed, so we store the\n // reference to the last crumb and only return a crumb if it has changed\n if (_LAST_BREADCRUMB === newBreadcrumb || !newBreadcrumb) {\n return null;\n }\n\n _LAST_BREADCRUMB = newBreadcrumb;\n\n if (\n !isBreadcrumbWithCategory(newBreadcrumb) ||\n ['fetch', 'xhr', 'sentry.event', 'sentry.transaction'].includes(newBreadcrumb.category) ||\n newBreadcrumb.category.startsWith('ui.')\n ) {\n return null;\n }\n\n if (newBreadcrumb.category === 'console') {\n return normalizeConsoleBreadcrumb(newBreadcrumb);\n }\n\n return createBreadcrumb(newBreadcrumb);\n}\n\n/** exported for tests only */\nfunction normalizeConsoleBreadcrumb(\n breadcrumb,\n) {\n const args = breadcrumb.data && breadcrumb.data.arguments;\n\n if (!Array.isArray(args) || args.length === 0) {\n return createBreadcrumb(breadcrumb);\n }\n\n let isTruncated = false;\n\n // Avoid giant args captures\n const normalizedArgs = args.map(arg => {\n if (!arg) {\n return arg;\n }\n if (typeof arg === 'string') {\n if (arg.length > CONSOLE_ARG_MAX_SIZE) {\n isTruncated = true;\n return `${arg.slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n }\n\n return arg;\n }\n if (typeof arg === 'object') {\n try {\n const normalizedArg = normalize(arg, 7);\n const stringified = JSON.stringify(normalizedArg);\n if (stringified.length > CONSOLE_ARG_MAX_SIZE) {\n isTruncated = true;\n // We use the pretty printed JSON string here as a base\n return `${JSON.stringify(normalizedArg, null, 2).slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n }\n return normalizedArg;\n } catch (e) {\n // fall back to default\n }\n }\n\n return arg;\n });\n\n return createBreadcrumb({\n ...breadcrumb,\n data: {\n ...breadcrumb.data,\n arguments: normalizedArgs,\n ...(isTruncated ? { _meta: { warnings: ['CONSOLE_ARG_TRUNCATED'] } } : {}),\n },\n });\n}\n\n/**\n * Add global listeners that cannot be removed.\n */\nfunction addGlobalListeners(replay) {\n // Listeners from core SDK //\n const scope = getCurrentScope();\n const client = getClient();\n\n scope.addScopeListener(handleScopeListener(replay));\n addClickKeypressInstrumentationHandler(handleDomListener(replay));\n addHistoryInstrumentationHandler(handleHistorySpanListener(replay));\n handleNetworkBreadcrumbs(replay);\n\n // Tag all (non replay) events that get sent to Sentry with the current\n // replay ID so that we can reference them later in the UI\n const eventProcessor = handleGlobalEventListener(replay, !hasHooks(client));\n if (client && client.addEventProcessor) {\n client.addEventProcessor(eventProcessor);\n } else {\n addEventProcessor(eventProcessor);\n }\n\n // If a custom client has no hooks yet, we continue to use the \"old\" implementation\n if (hasHooks(client)) {\n client.on('beforeSendEvent', handleBeforeSendEvent(replay));\n client.on('afterSendEvent', handleAfterSendEvent(replay));\n client.on('createDsc', (dsc) => {\n const replayId = replay.getSessionId();\n // We do not want to set the DSC when in buffer mode, as that means the replay has not been sent (yet)\n if (replayId && replay.isEnabled() && replay.recordingMode === 'session') {\n // Ensure to check that the session is still active - it could have expired in the meanwhile\n const isSessionActive = replay.checkAndHandleExpiredSession();\n if (isSessionActive) {\n dsc.replay_id = replayId;\n }\n }\n });\n\n client.on('startTransaction', transaction => {\n replay.lastTransaction = transaction;\n });\n\n // We may be missing the initial startTransaction due to timing issues,\n // so we capture it on finish again.\n client.on('finishTransaction', transaction => {\n replay.lastTransaction = transaction;\n });\n\n // We want to flush replay\n client.on('beforeSendFeedback', (feedbackEvent, options) => {\n const replayId = replay.getSessionId();\n if (options && options.includeReplay && replay.isEnabled() && replayId) {\n // This should never reject\n if (feedbackEvent.contexts && feedbackEvent.contexts.feedback) {\n feedbackEvent.contexts.feedback.replay_id = replayId;\n }\n }\n });\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction hasHooks(client) {\n return !!(client && client.on);\n}\n\n/**\n * Create a \"span\" for the total amount of memory being used by JS objects\n * (including v8 internal objects).\n */\nasync function addMemoryEntry(replay) {\n // window.performance.memory is a non-standard API and doesn't work on all browsers, so we try-catch this\n try {\n return Promise.all(\n createPerformanceSpans(replay, [\n // @ts-expect-error memory doesn't exist on type Performance as the API is non-standard (we check that it exists above)\n createMemoryEntry(WINDOW.performance.memory),\n ]),\n );\n } catch (error) {\n // Do nothing\n return [];\n }\n}\n\nfunction createMemoryEntry(memoryEntry) {\n const { jsHeapSizeLimit, totalJSHeapSize, usedJSHeapSize } = memoryEntry;\n // we don't want to use `getAbsoluteTime` because it adds the event time to the\n // time origin, so we get the current timestamp instead\n const time = Date.now() / 1000;\n return {\n type: 'memory',\n name: 'memory',\n start: time,\n end: time,\n data: {\n memory: {\n jsHeapSizeLimit,\n totalJSHeapSize,\n usedJSHeapSize,\n },\n },\n };\n}\n\n/**\n * Heavily simplified debounce function based on lodash.debounce.\n *\n * This function takes a callback function (@param fun) and delays its invocation\n * by @param wait milliseconds. Optionally, a maxWait can be specified in @param options,\n * which ensures that the callback is invoked at least once after the specified max. wait time.\n *\n * @param func the function whose invocation is to be debounced\n * @param wait the minimum time until the function is invoked after it was called once\n * @param options the options object, which can contain the `maxWait` property\n *\n * @returns the debounced version of the function, which needs to be called at least once to start the\n * debouncing process. Subsequent calls will reset the debouncing timer and, in case @paramfunc\n * was already invoked in the meantime, return @param func's return value.\n * The debounced function has two additional properties:\n * - `flush`: Invokes the debounced function immediately and returns its return value\n * - `cancel`: Cancels the debouncing process and resets the debouncing timer\n */\nfunction debounce(func, wait, options) {\n let callbackReturnValue;\n\n let timerId;\n let maxTimerId;\n\n const maxWait = options && options.maxWait ? Math.max(options.maxWait, wait) : 0;\n\n function invokeFunc() {\n cancelTimers();\n callbackReturnValue = func();\n return callbackReturnValue;\n }\n\n function cancelTimers() {\n timerId !== undefined && clearTimeout(timerId);\n maxTimerId !== undefined && clearTimeout(maxTimerId);\n timerId = maxTimerId = undefined;\n }\n\n function flush() {\n if (timerId !== undefined || maxTimerId !== undefined) {\n return invokeFunc();\n }\n return callbackReturnValue;\n }\n\n function debounced() {\n if (timerId) {\n clearTimeout(timerId);\n }\n timerId = setTimeout(invokeFunc, wait);\n\n if (maxWait && maxTimerId === undefined) {\n maxTimerId = setTimeout(invokeFunc, maxWait);\n }\n\n return callbackReturnValue;\n }\n\n debounced.cancel = cancelTimers;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Handler for recording events.\n *\n * Adds to event buffer, and has varying flushing behaviors if the event was a checkout.\n */\nfunction getHandleRecordingEmit(replay) {\n let hadFirstEvent = false;\n\n return (event, _isCheckout) => {\n // If this is false, it means session is expired, create and a new session and wait for checkout\n if (!replay.checkAndHandleExpiredSession()) {\n DEBUG_BUILD && logger.warn('[Replay] Received replay event after session expired.');\n\n return;\n }\n\n // `_isCheckout` is only set when the checkout is due to `checkoutEveryNms`\n // We also want to treat the first event as a checkout, so we handle this specifically here\n const isCheckout = _isCheckout || !hadFirstEvent;\n hadFirstEvent = true;\n\n if (replay.clickDetector) {\n updateClickDetectorForRecordingEvent(replay.clickDetector, event);\n }\n\n // The handler returns `true` if we do not want to trigger debounced flush, `false` if we want to debounce flush.\n replay.addUpdate(() => {\n // The session is always started immediately on pageload/init, but for\n // error-only replays, it should reflect the most recent checkout\n // when an error occurs. Clear any state that happens before this current\n // checkout. This needs to happen before `addEvent()` which updates state\n // dependent on this reset.\n if (replay.recordingMode === 'buffer' && isCheckout) {\n replay.setInitialState();\n }\n\n // If the event is not added (e.g. due to being paused, disabled, or out of the max replay duration),\n // Skip all further steps\n if (!addEventSync(replay, event, isCheckout)) {\n // Return true to skip scheduling a debounced flush\n return true;\n }\n\n // Different behavior for full snapshots (type=2), ignore other event types\n // See https://github.com/rrweb-io/rrweb/blob/d8f9290ca496712aa1e7d472549480c4e7876594/packages/rrweb/src/types.ts#L16\n if (!isCheckout) {\n return false;\n }\n\n // Additionally, create a meta event that will capture certain SDK settings.\n // In order to handle buffer mode, this needs to either be done when we\n // receive checkout events or at flush time.\n //\n // `isCheckout` is always true, but want to be explicit that it should\n // only be added for checkouts\n addSettingsEvent(replay, isCheckout);\n\n // If there is a previousSessionId after a full snapshot occurs, then\n // the replay session was started due to session expiration. The new session\n // is started before triggering a new checkout and contains the id\n // of the previous session. Do not immediately flush in this case\n // to avoid capturing only the checkout and instead the replay will\n // be captured if they perform any follow-up actions.\n if (replay.session && replay.session.previousSessionId) {\n return true;\n }\n\n // When in buffer mode, make sure we adjust the session started date to the current earliest event of the buffer\n // this should usually be the timestamp of the checkout event, but to be safe...\n if (replay.recordingMode === 'buffer' && replay.session && replay.eventBuffer) {\n const earliestEvent = replay.eventBuffer.getEarliestTimestamp();\n if (earliestEvent) {\n logInfo(\n `[Replay] Updating session start time to earliest event in buffer to ${new Date(earliestEvent)}`,\n replay.getOptions()._experiments.traceInternals,\n );\n\n replay.session.started = earliestEvent;\n\n if (replay.getOptions().stickySession) {\n saveSession(replay.session);\n }\n }\n }\n\n if (replay.recordingMode === 'session') {\n // If the full snapshot is due to an initial load, we will not have\n // a previous session ID. In this case, we want to buffer events\n // for a set amount of time before flushing. This can help avoid\n // capturing replays of users that immediately close the window.\n\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n void replay.flush();\n }\n\n return true;\n });\n };\n}\n\n/**\n * Exported for tests\n */\nfunction createOptionsEvent(replay) {\n const options = replay.getOptions();\n return {\n type: EventType.Custom,\n timestamp: Date.now(),\n data: {\n tag: 'options',\n payload: {\n shouldRecordCanvas: replay.isRecordingCanvas(),\n sessionSampleRate: options.sessionSampleRate,\n errorSampleRate: options.errorSampleRate,\n useCompressionOption: options.useCompression,\n blockAllMedia: options.blockAllMedia,\n maskAllText: options.maskAllText,\n maskAllInputs: options.maskAllInputs,\n useCompression: replay.eventBuffer ? replay.eventBuffer.type === 'worker' : false,\n networkDetailHasUrls: options.networkDetailAllowUrls.length > 0,\n networkCaptureBodies: options.networkCaptureBodies,\n networkRequestHasHeaders: options.networkRequestHeaders.length > 0,\n networkResponseHasHeaders: options.networkResponseHeaders.length > 0,\n },\n },\n };\n}\n\n/**\n * Add a \"meta\" event that contains a simplified view on current configuration\n * options. This should only be included on the first segment of a recording.\n */\nfunction addSettingsEvent(replay, isCheckout) {\n // Only need to add this event when sending the first segment\n if (!isCheckout || !replay.session || replay.session.segmentId !== 0) {\n return;\n }\n\n addEventSync(replay, createOptionsEvent(replay), false);\n}\n\n/**\n * Create a replay envelope ready to be sent.\n * This includes both the replay event, as well as the recording data.\n */\nfunction createReplayEnvelope(\n replayEvent,\n recordingData,\n dsn,\n tunnel,\n) {\n return createEnvelope(\n createEventEnvelopeHeaders(replayEvent, getSdkMetadataForEnvelopeHeader(replayEvent), tunnel, dsn),\n [\n [{ type: 'replay_event' }, replayEvent],\n [\n {\n type: 'replay_recording',\n // If string then we need to encode to UTF8, otherwise will have\n // wrong size. TextEncoder has similar browser support to\n // MutationObserver, although it does not accept IE11.\n length:\n typeof recordingData === 'string' ? new TextEncoder().encode(recordingData).length : recordingData.length,\n },\n recordingData,\n ],\n ],\n );\n}\n\n/**\n * Prepare the recording data ready to be sent.\n */\nfunction prepareRecordingData({\n recordingData,\n headers,\n}\n\n) {\n let payloadWithSequence;\n\n // XXX: newline is needed to separate sequence id from events\n const replayHeaders = `${JSON.stringify(headers)}\n`;\n\n if (typeof recordingData === 'string') {\n payloadWithSequence = `${replayHeaders}${recordingData}`;\n } else {\n const enc = new TextEncoder();\n // XXX: newline is needed to separate sequence id from events\n const sequence = enc.encode(replayHeaders);\n // Merge the two Uint8Arrays\n payloadWithSequence = new Uint8Array(sequence.length + recordingData.length);\n payloadWithSequence.set(sequence);\n payloadWithSequence.set(recordingData, sequence.length);\n }\n\n return payloadWithSequence;\n}\n\n/**\n * Prepare a replay event & enrich it with the SDK metadata.\n */\nasync function prepareReplayEvent({\n client,\n scope,\n replayId: event_id,\n event,\n}\n\n) {\n const integrations =\n typeof client._integrations === 'object' && client._integrations !== null && !Array.isArray(client._integrations)\n ? Object.keys(client._integrations)\n : undefined;\n\n const eventHint = { event_id, integrations };\n\n if (client.emit) {\n client.emit('preprocessEvent', event, eventHint);\n }\n\n const preparedEvent = (await prepareEvent(\n client.getOptions(),\n event,\n eventHint,\n scope,\n client,\n getIsolationScope(),\n )) ;\n\n // If e.g. a global event processor returned null\n if (!preparedEvent) {\n return null;\n }\n\n // This normally happens in browser client \"_prepareEvent\"\n // but since we do not use this private method from the client, but rather the plain import\n // we need to do this manually.\n preparedEvent.platform = preparedEvent.platform || 'javascript';\n\n // extract the SDK name because `client._prepareEvent` doesn't add it to the event\n const metadata = client.getSdkMetadata && client.getSdkMetadata();\n const { name, version } = (metadata && metadata.sdk) || {};\n\n preparedEvent.sdk = {\n ...preparedEvent.sdk,\n name: name || 'sentry.javascript.unknown',\n version: version || '0.0.0',\n };\n\n return preparedEvent;\n}\n\n/**\n * Send replay attachment using `fetch()`\n */\nasync function sendReplayRequest({\n recordingData,\n replayId,\n segmentId: segment_id,\n eventContext,\n timestamp,\n session,\n}) {\n const preparedRecordingData = prepareRecordingData({\n recordingData,\n headers: {\n segment_id,\n },\n });\n\n const { urls, errorIds, traceIds, initialTimestamp } = eventContext;\n\n const client = getClient();\n const scope = getCurrentScope();\n const transport = client && client.getTransport();\n const dsn = client && client.getDsn();\n\n if (!client || !transport || !dsn || !session.sampled) {\n return;\n }\n\n const baseEvent = {\n type: REPLAY_EVENT_NAME,\n replay_start_timestamp: initialTimestamp / 1000,\n timestamp: timestamp / 1000,\n error_ids: errorIds,\n trace_ids: traceIds,\n urls,\n replay_id: replayId,\n segment_id,\n replay_type: session.sampled,\n };\n\n const replayEvent = await prepareReplayEvent({ scope, client, replayId, event: baseEvent });\n\n if (!replayEvent) {\n // Taken from baseclient's `_processEvent` method, where this is handled for errors/transactions\n client.recordDroppedEvent('event_processor', 'replay', baseEvent);\n logInfo('An event processor returned `null`, will not send event.');\n return;\n }\n\n /*\n For reference, the fully built event looks something like this:\n {\n \"type\": \"replay_event\",\n \"timestamp\": 1670837008.634,\n \"error_ids\": [\n \"errorId\"\n ],\n \"trace_ids\": [\n \"traceId\"\n ],\n \"urls\": [\n \"https://example.com\"\n ],\n \"replay_id\": \"eventId\",\n \"segment_id\": 3,\n \"replay_type\": \"error\",\n \"platform\": \"javascript\",\n \"event_id\": \"eventId\",\n \"environment\": \"production\",\n \"sdk\": {\n \"integrations\": [\n \"BrowserTracing\",\n \"Replay\"\n ],\n \"name\": \"sentry.javascript.browser\",\n \"version\": \"7.25.0\"\n },\n \"sdkProcessingMetadata\": {},\n \"contexts\": {\n },\n }\n */\n\n // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n delete replayEvent.sdkProcessingMetadata;\n\n const envelope = createReplayEnvelope(replayEvent, preparedRecordingData, dsn, client.getOptions().tunnel);\n\n let response;\n\n try {\n response = await transport.send(envelope);\n } catch (err) {\n const error = new Error(UNABLE_TO_SEND_REPLAY);\n\n try {\n // In case browsers don't allow this property to be writable\n // @ts-expect-error This needs lib es2022 and newer\n error.cause = err;\n } catch (e) {\n // nothing to do\n }\n throw error;\n }\n\n // TODO (v8): we can remove this guard once transport.send's type signature doesn't include void anymore\n if (!response) {\n return response;\n }\n\n // If the status code is invalid, we want to immediately stop & not retry\n if (typeof response.statusCode === 'number' && (response.statusCode < 200 || response.statusCode >= 300)) {\n throw new TransportStatusCodeError(response.statusCode);\n }\n\n const rateLimits = updateRateLimits({}, response);\n if (isRateLimited(rateLimits, 'replay')) {\n throw new RateLimitError(rateLimits);\n }\n\n return response;\n}\n\n/**\n * This error indicates that the transport returned an invalid status code.\n */\nclass TransportStatusCodeError extends Error {\n constructor(statusCode) {\n super(`Transport returned status code ${statusCode}`);\n }\n}\n\n/**\n * This error indicates that we hit a rate limit API error.\n */\nclass RateLimitError extends Error {\n\n constructor(rateLimits) {\n super('Rate limit hit');\n this.rateLimits = rateLimits;\n }\n}\n\n/**\n * Finalize and send the current replay event to Sentry\n */\nasync function sendReplay(\n replayData,\n retryConfig = {\n count: 0,\n interval: RETRY_BASE_INTERVAL,\n },\n) {\n const { recordingData, options } = replayData;\n\n // short circuit if there's no events to upload (this shouldn't happen as _runFlush makes this check)\n if (!recordingData.length) {\n return;\n }\n\n try {\n await sendReplayRequest(replayData);\n return true;\n } catch (err) {\n if (err instanceof TransportStatusCodeError || err instanceof RateLimitError) {\n throw err;\n }\n\n // Capture error for every failed replay\n setContext('Replays', {\n _retryCount: retryConfig.count,\n });\n\n if (DEBUG_BUILD && options._experiments && options._experiments.captureExceptions) {\n captureException(err);\n }\n\n // If an error happened here, it's likely that uploading the attachment\n // failed, we'll can retry with the same events payload\n if (retryConfig.count >= RETRY_MAX_COUNT) {\n const error = new Error(`${UNABLE_TO_SEND_REPLAY} - max retries exceeded`);\n\n try {\n // In case browsers don't allow this property to be writable\n // @ts-expect-error This needs lib es2022 and newer\n error.cause = err;\n } catch (e) {\n // nothing to do\n }\n\n throw error;\n }\n\n // will retry in intervals of 5, 10, 30\n retryConfig.interval *= ++retryConfig.count;\n\n return new Promise((resolve, reject) => {\n setTimeout(async () => {\n try {\n await sendReplay(replayData, retryConfig);\n resolve(true);\n } catch (err) {\n reject(err);\n }\n }, retryConfig.interval);\n });\n }\n}\n\nconst THROTTLED = '__THROTTLED';\nconst SKIPPED = '__SKIPPED';\n\n/**\n * Create a throttled function off a given function.\n * When calling the throttled function, it will call the original function only\n * if it hasn't been called more than `maxCount` times in the last `durationSeconds`.\n *\n * Returns `THROTTLED` if throttled for the first time, after that `SKIPPED`,\n * or else the return value of the original function.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction throttle(\n fn,\n maxCount,\n durationSeconds,\n) {\n const counter = new Map();\n\n const _cleanup = (now) => {\n const threshold = now - durationSeconds;\n counter.forEach((_value, key) => {\n if (key < threshold) {\n counter.delete(key);\n }\n });\n };\n\n const _getTotalCount = () => {\n return [...counter.values()].reduce((a, b) => a + b, 0);\n };\n\n let isThrottled = false;\n\n return (...rest) => {\n // Date in second-precision, which we use as basis for the throttling\n const now = Math.floor(Date.now() / 1000);\n\n // First, make sure to delete any old entries\n _cleanup(now);\n\n // If already over limit, do nothing\n if (_getTotalCount() >= maxCount) {\n const wasThrottled = isThrottled;\n isThrottled = true;\n return wasThrottled ? SKIPPED : THROTTLED;\n }\n\n isThrottled = false;\n const count = counter.get(now) || 0;\n counter.set(now, count + 1);\n\n return fn(...rest);\n };\n}\n\n/* eslint-disable max-lines */ // TODO: We might want to split this file up\n\n/**\n * The main replay container class, which holds all the state and methods for recording and sending replays.\n */\nclass ReplayContainer {\n\n /**\n * Recording can happen in one of three modes:\n * - session: Record the whole session, sending it continuously\n * - buffer: Always keep the last 60s of recording, requires:\n * - having replaysOnErrorSampleRate > 0 to capture replay when an error occurs\n * - or calling `flush()` to send the replay\n */\n\n /**\n * The current or last active transcation.\n * This is only available when performance is enabled.\n */\n\n /**\n * These are here so we can overwrite them in tests etc.\n * @hidden\n */\n\n /**\n * Options to pass to `rrweb.record()`\n */\n\n /**\n * Timestamp of the last user activity. This lives across sessions.\n */\n\n /**\n * Is the integration currently active?\n */\n\n /**\n * Paused is a state where:\n * - DOM Recording is not listening at all\n * - Nothing will be added to event buffer (e.g. core SDK events)\n */\n\n /**\n * Have we attached listeners to the core SDK?\n * Note we have to track this as there is no way to remove instrumentation handlers.\n */\n\n /**\n * Function to stop recording\n */\n\n /**\n * Internal use for canvas recording options\n */\n\n constructor({\n options,\n recordingOptions,\n }\n\n) {ReplayContainer.prototype.__init.call(this);ReplayContainer.prototype.__init2.call(this);ReplayContainer.prototype.__init3.call(this);ReplayContainer.prototype.__init4.call(this);ReplayContainer.prototype.__init5.call(this);ReplayContainer.prototype.__init6.call(this);\n this.eventBuffer = null;\n this.performanceEntries = [];\n this.replayPerformanceEntries = [];\n this.recordingMode = 'session';\n this.timeouts = {\n sessionIdlePause: SESSION_IDLE_PAUSE_DURATION,\n sessionIdleExpire: SESSION_IDLE_EXPIRE_DURATION,\n } ;\n this._lastActivity = Date.now();\n this._isEnabled = false;\n this._isPaused = false;\n this._hasInitializedCoreListeners = false;\n this._context = {\n errorIds: new Set(),\n traceIds: new Set(),\n urls: [],\n initialTimestamp: Date.now(),\n initialUrl: '',\n };\n\n this._recordingOptions = recordingOptions;\n this._options = options;\n\n this._debouncedFlush = debounce(() => this._flush(), this._options.flushMinDelay, {\n maxWait: this._options.flushMaxDelay,\n });\n\n this._throttledAddEvent = throttle(\n (event, isCheckout) => addEvent(this, event, isCheckout),\n // Max 300 events...\n 300,\n // ... per 5s\n 5,\n );\n\n const { slowClickTimeout, slowClickIgnoreSelectors } = this.getOptions();\n\n const slowClickConfig = slowClickTimeout\n ? {\n threshold: Math.min(SLOW_CLICK_THRESHOLD, slowClickTimeout),\n timeout: slowClickTimeout,\n scrollTimeout: SLOW_CLICK_SCROLL_TIMEOUT,\n ignoreSelector: slowClickIgnoreSelectors ? slowClickIgnoreSelectors.join(',') : '',\n }\n : undefined;\n\n if (slowClickConfig) {\n this.clickDetector = new ClickDetector(this, slowClickConfig);\n }\n }\n\n /** Get the event context. */\n getContext() {\n return this._context;\n }\n\n /** If recording is currently enabled. */\n isEnabled() {\n return this._isEnabled;\n }\n\n /** If recording is currently paused. */\n isPaused() {\n return this._isPaused;\n }\n\n /**\n * Determine if canvas recording is enabled\n */\n isRecordingCanvas() {\n return Boolean(this._canvas);\n }\n\n /** Get the replay integration options. */\n getOptions() {\n return this._options;\n }\n\n /**\n * Initializes the plugin based on sampling configuration. Should not be\n * called outside of constructor.\n */\n initializeSampling(previousSessionId) {\n const { errorSampleRate, sessionSampleRate } = this._options;\n\n // If neither sample rate is > 0, then do nothing - user will need to call one of\n // `start()` or `startBuffering` themselves.\n if (errorSampleRate <= 0 && sessionSampleRate <= 0) {\n return;\n }\n\n // Otherwise if there is _any_ sample rate set, try to load an existing\n // session, or create a new one.\n this._initializeSessionForSampling(previousSessionId);\n\n if (!this.session) {\n // This should not happen, something wrong has occurred\n this._handleException(new Error('Unable to initialize and create session'));\n return;\n }\n\n if (this.session.sampled === false) {\n // This should only occur if `errorSampleRate` is 0 and was unsampled for\n // session-based replay. In this case there is nothing to do.\n return;\n }\n\n // If segmentId > 0, it means we've previously already captured this session\n // In this case, we still want to continue in `session` recording mode\n this.recordingMode = this.session.sampled === 'buffer' && this.session.segmentId === 0 ? 'buffer' : 'session';\n\n logInfoNextTick(\n `[Replay] Starting replay in ${this.recordingMode} mode`,\n this._options._experiments.traceInternals,\n );\n\n this._initializeRecording();\n }\n\n /**\n * Start a replay regardless of sampling rate. Calling this will always\n * create a new session. Will throw an error if replay is already in progress.\n *\n * Creates or loads a session, attaches listeners to varying events (DOM,\n * _performanceObserver, Recording, Sentry SDK, etc)\n */\n start() {\n if (this._isEnabled && this.recordingMode === 'session') {\n throw new Error('Replay recording is already in progress');\n }\n\n if (this._isEnabled && this.recordingMode === 'buffer') {\n throw new Error('Replay buffering is in progress, call `flush()` to save the replay');\n }\n\n logInfoNextTick('[Replay] Starting replay in session mode', this._options._experiments.traceInternals);\n\n const session = loadOrCreateSession(\n {\n maxReplayDuration: this._options.maxReplayDuration,\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n traceInternals: this._options._experiments.traceInternals,\n },\n {\n stickySession: this._options.stickySession,\n // This is intentional: create a new session-based replay when calling `start()`\n sessionSampleRate: 1,\n allowBuffering: false,\n },\n );\n\n this.session = session;\n\n this._initializeRecording();\n }\n\n /**\n * Start replay buffering. Buffers until `flush()` is called or, if\n * `replaysOnErrorSampleRate` > 0, an error occurs.\n */\n startBuffering() {\n if (this._isEnabled) {\n throw new Error('Replay recording is already in progress');\n }\n\n logInfoNextTick('[Replay] Starting replay in buffer mode', this._options._experiments.traceInternals);\n\n const session = loadOrCreateSession(\n {\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n maxReplayDuration: this._options.maxReplayDuration,\n traceInternals: this._options._experiments.traceInternals,\n },\n {\n stickySession: this._options.stickySession,\n sessionSampleRate: 0,\n allowBuffering: true,\n },\n );\n\n this.session = session;\n\n this.recordingMode = 'buffer';\n this._initializeRecording();\n }\n\n /**\n * Start recording.\n *\n * Note that this will cause a new DOM checkout\n */\n startRecording() {\n try {\n const canvasOptions = this._canvas;\n\n this._stopRecording = record({\n ...this._recordingOptions,\n // When running in error sampling mode, we need to overwrite `checkoutEveryNms`\n // Without this, it would record forever, until an error happens, which we don't want\n // instead, we'll always keep the last 60 seconds of replay before an error happened\n ...(this.recordingMode === 'buffer' && { checkoutEveryNms: BUFFER_CHECKOUT_TIME }),\n emit: getHandleRecordingEmit(this),\n onMutation: this._onMutationHandler,\n ...(canvasOptions\n ? {\n recordCanvas: canvasOptions.recordCanvas,\n getCanvasManager: canvasOptions.getCanvasManager,\n sampling: canvasOptions.sampling,\n dataURLOptions: canvasOptions.dataURLOptions,\n }\n : {}),\n });\n } catch (err) {\n this._handleException(err);\n }\n }\n\n /**\n * Stops the recording, if it was running.\n *\n * Returns true if it was previously stopped, or is now stopped,\n * otherwise false.\n */\n stopRecording() {\n try {\n if (this._stopRecording) {\n this._stopRecording();\n this._stopRecording = undefined;\n }\n\n return true;\n } catch (err) {\n this._handleException(err);\n return false;\n }\n }\n\n /**\n * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n * does not support a teardown\n */\n async stop({ forceFlush = false, reason } = {}) {\n if (!this._isEnabled) {\n return;\n }\n\n // We can't move `_isEnabled` after awaiting a flush, otherwise we can\n // enter into an infinite loop when `stop()` is called while flushing.\n this._isEnabled = false;\n\n try {\n logInfo(\n `[Replay] Stopping Replay${reason ? ` triggered by ${reason}` : ''}`,\n this._options._experiments.traceInternals,\n );\n\n this._removeListeners();\n this.stopRecording();\n\n this._debouncedFlush.cancel();\n // See comment above re: `_isEnabled`, we \"force\" a flush, ignoring the\n // `_isEnabled` state of the plugin since it was disabled above.\n if (forceFlush) {\n await this._flush({ force: true });\n }\n\n // After flush, destroy event buffer\n this.eventBuffer && this.eventBuffer.destroy();\n this.eventBuffer = null;\n\n // Clear session from session storage, note this means if a new session\n // is started after, it will not have `previousSessionId`\n clearSession(this);\n } catch (err) {\n this._handleException(err);\n }\n }\n\n /**\n * Pause some replay functionality. See comments for `_isPaused`.\n * This differs from stop as this only stops DOM recording, it is\n * not as thorough of a shutdown as `stop()`.\n */\n pause() {\n if (this._isPaused) {\n return;\n }\n\n this._isPaused = true;\n this.stopRecording();\n\n logInfo('[Replay] Pausing replay', this._options._experiments.traceInternals);\n }\n\n /**\n * Resumes recording, see notes for `pause().\n *\n * Note that calling `startRecording()` here will cause a\n * new DOM checkout.`\n */\n resume() {\n if (!this._isPaused || !this._checkSession()) {\n return;\n }\n\n this._isPaused = false;\n this.startRecording();\n\n logInfo('[Replay] Resuming replay', this._options._experiments.traceInternals);\n }\n\n /**\n * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n * Unless `continueRecording` is false, the replay will continue to record and\n * behave as a \"session\"-based replay.\n *\n * Otherwise, queue up a flush.\n */\n async sendBufferedReplayOrFlush({ continueRecording = true } = {}) {\n if (this.recordingMode === 'session') {\n return this.flushImmediate();\n }\n\n const activityTime = Date.now();\n\n logInfo('[Replay] Converting buffer to session', this._options._experiments.traceInternals);\n\n // Allow flush to complete before resuming as a session recording, otherwise\n // the checkout from `startRecording` may be included in the payload.\n // Prefer to keep the error replay as a separate (and smaller) segment\n // than the session replay.\n await this.flushImmediate();\n\n const hasStoppedRecording = this.stopRecording();\n\n if (!continueRecording || !hasStoppedRecording) {\n return;\n }\n\n // To avoid race conditions where this is called multiple times, we check here again that we are still buffering\n if ((this.recordingMode ) === 'session') {\n return;\n }\n\n // Re-start recording in session-mode\n this.recordingMode = 'session';\n\n // Once this session ends, we do not want to refresh it\n if (this.session) {\n this._updateUserActivity(activityTime);\n this._updateSessionActivity(activityTime);\n this._maybeSaveSession();\n }\n\n this.startRecording();\n }\n\n /**\n * We want to batch uploads of replay events. Save events only if\n * `` milliseconds have elapsed since the last event\n * *OR* if `` milliseconds have elapsed.\n *\n * Accepts a callback to perform side-effects and returns true to stop batch\n * processing and hand back control to caller.\n */\n addUpdate(cb) {\n // We need to always run `cb` (e.g. in the case of `this.recordingMode == 'buffer'`)\n const cbResult = cb();\n\n // If this option is turned on then we will only want to call `flush`\n // explicitly\n if (this.recordingMode === 'buffer') {\n return;\n }\n\n // If callback is true, we do not want to continue with flushing -- the\n // caller will need to handle it.\n if (cbResult === true) {\n return;\n }\n\n // addUpdate is called quite frequently - use _debouncedFlush so that it\n // respects the flush delays and does not flush immediately\n this._debouncedFlush();\n }\n\n /**\n * Updates the user activity timestamp and resumes recording. This should be\n * called in an event handler for a user action that we consider as the user\n * being \"active\" (e.g. a mouse click).\n */\n triggerUserActivity() {\n this._updateUserActivity();\n\n // This case means that recording was once stopped due to inactivity.\n // Ensure that recording is resumed.\n if (!this._stopRecording) {\n // Create a new session, otherwise when the user action is flushed, it\n // will get rejected due to an expired session.\n if (!this._checkSession()) {\n return;\n }\n\n // Note: This will cause a new DOM checkout\n this.resume();\n return;\n }\n\n // Otherwise... recording was never suspended, continue as normalish\n this.checkAndHandleExpiredSession();\n\n this._updateSessionActivity();\n }\n\n /**\n * Updates the user activity timestamp *without* resuming\n * recording. Some user events (e.g. keydown) can be create\n * low-value replays that only contain the keypress as a\n * breadcrumb. Instead this would require other events to\n * create a new replay after a session has expired.\n */\n updateUserActivity() {\n this._updateUserActivity();\n this._updateSessionActivity();\n }\n\n /**\n * Only flush if `this.recordingMode === 'session'`\n */\n conditionalFlush() {\n if (this.recordingMode === 'buffer') {\n return Promise.resolve();\n }\n\n return this.flushImmediate();\n }\n\n /**\n * Flush using debounce flush\n */\n flush() {\n return this._debouncedFlush() ;\n }\n\n /**\n * Always flush via `_debouncedFlush` so that we do not have flushes triggered\n * from calling both `flush` and `_debouncedFlush`. Otherwise, there could be\n * cases of mulitple flushes happening closely together.\n */\n flushImmediate() {\n this._debouncedFlush();\n // `.flush` is provided by the debounced function, analogously to lodash.debounce\n return this._debouncedFlush.flush() ;\n }\n\n /**\n * Cancels queued up flushes.\n */\n cancelFlush() {\n this._debouncedFlush.cancel();\n }\n\n /** Get the current sesion (=replay) ID */\n getSessionId() {\n return this.session && this.session.id;\n }\n\n /**\n * Checks if recording should be stopped due to user inactivity. Otherwise\n * check if session is expired and create a new session if so. Triggers a new\n * full snapshot on new session.\n *\n * Returns true if session is not expired, false otherwise.\n * @hidden\n */\n checkAndHandleExpiredSession() {\n // Prevent starting a new session if the last user activity is older than\n // SESSION_IDLE_PAUSE_DURATION. Otherwise non-user activity can trigger a new\n // session+recording. This creates noisy replays that do not have much\n // content in them.\n if (\n this._lastActivity &&\n isExpired(this._lastActivity, this.timeouts.sessionIdlePause) &&\n this.session &&\n this.session.sampled === 'session'\n ) {\n // Pause recording only for session-based replays. Otherwise, resuming\n // will create a new replay and will conflict with users who only choose\n // to record error-based replays only. (e.g. the resumed replay will not\n // contain a reference to an error)\n this.pause();\n return;\n }\n\n // --- There is recent user activity --- //\n // This will create a new session if expired, based on expiry length\n if (!this._checkSession()) {\n // Check session handles the refreshing itself\n return false;\n }\n\n return true;\n }\n\n /**\n * Capture some initial state that can change throughout the lifespan of the\n * replay. This is required because otherwise they would be captured at the\n * first flush.\n */\n setInitialState() {\n const urlPath = `${WINDOW.location.pathname}${WINDOW.location.hash}${WINDOW.location.search}`;\n const url = `${WINDOW.location.origin}${urlPath}`;\n\n this.performanceEntries = [];\n this.replayPerformanceEntries = [];\n\n // Reset _context as well\n this._clearContext();\n\n this._context.initialUrl = url;\n this._context.initialTimestamp = Date.now();\n this._context.urls.push(url);\n }\n\n /**\n * Add a breadcrumb event, that may be throttled.\n * If it was throttled, we add a custom breadcrumb to indicate that.\n */\n throttledAddEvent(\n event,\n isCheckout,\n ) {\n const res = this._throttledAddEvent(event, isCheckout);\n\n // If this is THROTTLED, it means we have throttled the event for the first time\n // In this case, we want to add a breadcrumb indicating that something was skipped\n if (res === THROTTLED) {\n const breadcrumb = createBreadcrumb({\n category: 'replay.throttled',\n });\n\n this.addUpdate(() => {\n // Return `false` if the event _was_ added, as that means we schedule a flush\n return !addEventSync(this, {\n type: ReplayEventTypeCustom,\n timestamp: breadcrumb.timestamp || 0,\n data: {\n tag: 'breadcrumb',\n payload: breadcrumb,\n metric: true,\n },\n });\n });\n }\n\n return res;\n }\n\n /**\n * This will get the parametrized route name of the current page.\n * This is only available if performance is enabled, and if an instrumented router is used.\n */\n getCurrentRoute() {\n // eslint-disable-next-line deprecation/deprecation\n const lastTransaction = this.lastTransaction || getCurrentScope().getTransaction();\n\n const attributes = (lastTransaction && spanToJSON(lastTransaction).data) || {};\n const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n if (!lastTransaction || !source || !['route', 'custom'].includes(source)) {\n return undefined;\n }\n\n return spanToJSON(lastTransaction).description;\n }\n\n /**\n * Initialize and start all listeners to varying events (DOM,\n * Performance Observer, Recording, Sentry SDK, etc)\n */\n _initializeRecording() {\n this.setInitialState();\n\n // this method is generally called on page load or manually - in both cases\n // we should treat it as an activity\n this._updateSessionActivity();\n\n this.eventBuffer = createEventBuffer({\n useCompression: this._options.useCompression,\n workerUrl: this._options.workerUrl,\n });\n\n this._removeListeners();\n this._addListeners();\n\n // Need to set as enabled before we start recording, as `record()` can trigger a flush with a new checkout\n this._isEnabled = true;\n this._isPaused = false;\n\n this.startRecording();\n }\n\n /** A wrapper to conditionally capture exceptions. */\n _handleException(error) {\n DEBUG_BUILD && logger.error('[Replay]', error);\n\n if (DEBUG_BUILD && this._options._experiments && this._options._experiments.captureExceptions) {\n captureException(error);\n }\n }\n\n /**\n * Loads (or refreshes) the current session.\n */\n _initializeSessionForSampling(previousSessionId) {\n // Whenever there is _any_ error sample rate, we always allow buffering\n // Because we decide on sampling when an error occurs, we need to buffer at all times if sampling for errors\n const allowBuffering = this._options.errorSampleRate > 0;\n\n const session = loadOrCreateSession(\n {\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n maxReplayDuration: this._options.maxReplayDuration,\n traceInternals: this._options._experiments.traceInternals,\n previousSessionId,\n },\n {\n stickySession: this._options.stickySession,\n sessionSampleRate: this._options.sessionSampleRate,\n allowBuffering,\n },\n );\n\n this.session = session;\n }\n\n /**\n * Checks and potentially refreshes the current session.\n * Returns false if session is not recorded.\n */\n _checkSession() {\n // If there is no session yet, we do not want to refresh anything\n // This should generally not happen, but to be safe....\n if (!this.session) {\n return false;\n }\n\n const currentSession = this.session;\n\n if (\n shouldRefreshSession(currentSession, {\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n maxReplayDuration: this._options.maxReplayDuration,\n })\n ) {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._refreshSession(currentSession);\n return false;\n }\n\n return true;\n }\n\n /**\n * Refresh a session with a new one.\n * This stops the current session (without forcing a flush, as that would never work since we are expired),\n * and then does a new sampling based on the refreshed session.\n */\n async _refreshSession(session) {\n if (!this._isEnabled) {\n return;\n }\n await this.stop({ reason: 'refresh session' });\n this.initializeSampling(session.id);\n }\n\n /**\n * Adds listeners to record events for the replay\n */\n _addListeners() {\n try {\n WINDOW.document.addEventListener('visibilitychange', this._handleVisibilityChange);\n WINDOW.addEventListener('blur', this._handleWindowBlur);\n WINDOW.addEventListener('focus', this._handleWindowFocus);\n WINDOW.addEventListener('keydown', this._handleKeyboardEvent);\n\n if (this.clickDetector) {\n this.clickDetector.addListeners();\n }\n\n // There is no way to remove these listeners, so ensure they are only added once\n if (!this._hasInitializedCoreListeners) {\n addGlobalListeners(this);\n\n this._hasInitializedCoreListeners = true;\n }\n } catch (err) {\n this._handleException(err);\n }\n\n this._performanceCleanupCallback = setupPerformanceObserver(this);\n }\n\n /**\n * Cleans up listeners that were created in `_addListeners`\n */\n _removeListeners() {\n try {\n WINDOW.document.removeEventListener('visibilitychange', this._handleVisibilityChange);\n\n WINDOW.removeEventListener('blur', this._handleWindowBlur);\n WINDOW.removeEventListener('focus', this._handleWindowFocus);\n WINDOW.removeEventListener('keydown', this._handleKeyboardEvent);\n\n if (this.clickDetector) {\n this.clickDetector.removeListeners();\n }\n\n if (this._performanceCleanupCallback) {\n this._performanceCleanupCallback();\n }\n } catch (err) {\n this._handleException(err);\n }\n }\n\n /**\n * Handle when visibility of the page content changes. Opening a new tab will\n * cause the state to change to hidden because of content of current page will\n * be hidden. Likewise, moving a different window to cover the contents of the\n * page will also trigger a change to a hidden state.\n */\n __init() {this._handleVisibilityChange = () => {\n if (WINDOW.document.visibilityState === 'visible') {\n this._doChangeToForegroundTasks();\n } else {\n this._doChangeToBackgroundTasks();\n }\n };}\n\n /**\n * Handle when page is blurred\n */\n __init2() {this._handleWindowBlur = () => {\n const breadcrumb = createBreadcrumb({\n category: 'ui.blur',\n });\n\n // Do not count blur as a user action -- it's part of the process of them\n // leaving the page\n this._doChangeToBackgroundTasks(breadcrumb);\n };}\n\n /**\n * Handle when page is focused\n */\n __init3() {this._handleWindowFocus = () => {\n const breadcrumb = createBreadcrumb({\n category: 'ui.focus',\n });\n\n // Do not count focus as a user action -- instead wait until they focus and\n // interactive with page\n this._doChangeToForegroundTasks(breadcrumb);\n };}\n\n /** Ensure page remains active when a key is pressed. */\n __init4() {this._handleKeyboardEvent = (event) => {\n handleKeyboardEvent(this, event);\n };}\n\n /**\n * Tasks to run when we consider a page to be hidden (via blurring and/or visibility)\n */\n _doChangeToBackgroundTasks(breadcrumb) {\n if (!this.session) {\n return;\n }\n\n const expired = isSessionExpired(this.session, {\n maxReplayDuration: this._options.maxReplayDuration,\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n });\n\n if (expired) {\n return;\n }\n\n if (breadcrumb) {\n this._createCustomBreadcrumb(breadcrumb);\n }\n\n // Send replay when the page/tab becomes hidden. There is no reason to send\n // replay if it becomes visible, since no actions we care about were done\n // while it was hidden\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n void this.conditionalFlush();\n }\n\n /**\n * Tasks to run when we consider a page to be visible (via focus and/or visibility)\n */\n _doChangeToForegroundTasks(breadcrumb) {\n if (!this.session) {\n return;\n }\n\n const isSessionActive = this.checkAndHandleExpiredSession();\n\n if (!isSessionActive) {\n // If the user has come back to the page within SESSION_IDLE_PAUSE_DURATION\n // ms, we will re-use the existing session, otherwise create a new\n // session\n logInfo('[Replay] Document has become active, but session has expired');\n return;\n }\n\n if (breadcrumb) {\n this._createCustomBreadcrumb(breadcrumb);\n }\n }\n\n /**\n * Update user activity (across session lifespans)\n */\n _updateUserActivity(_lastActivity = Date.now()) {\n this._lastActivity = _lastActivity;\n }\n\n /**\n * Updates the session's last activity timestamp\n */\n _updateSessionActivity(_lastActivity = Date.now()) {\n if (this.session) {\n this.session.lastActivity = _lastActivity;\n this._maybeSaveSession();\n }\n }\n\n /**\n * Helper to create (and buffer) a replay breadcrumb from a core SDK breadcrumb\n */\n _createCustomBreadcrumb(breadcrumb) {\n this.addUpdate(() => {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.throttledAddEvent({\n type: EventType.Custom,\n timestamp: breadcrumb.timestamp || 0,\n data: {\n tag: 'breadcrumb',\n payload: breadcrumb,\n },\n });\n });\n }\n\n /**\n * Observed performance events are added to `this.performanceEntries`. These\n * are included in the replay event before it is finished and sent to Sentry.\n */\n _addPerformanceEntries() {\n const performanceEntries = createPerformanceEntries(this.performanceEntries).concat(this.replayPerformanceEntries);\n\n this.performanceEntries = [];\n this.replayPerformanceEntries = [];\n\n return Promise.all(createPerformanceSpans(this, performanceEntries));\n }\n\n /**\n * Clear _context\n */\n _clearContext() {\n // XXX: `initialTimestamp` and `initialUrl` do not get cleared\n this._context.errorIds.clear();\n this._context.traceIds.clear();\n this._context.urls = [];\n }\n\n /** Update the initial timestamp based on the buffer content. */\n _updateInitialTimestampFromEventBuffer() {\n const { session, eventBuffer } = this;\n if (!session || !eventBuffer) {\n return;\n }\n\n // we only ever update this on the initial segment\n if (session.segmentId) {\n return;\n }\n\n const earliestEvent = eventBuffer.getEarliestTimestamp();\n if (earliestEvent && earliestEvent < this._context.initialTimestamp) {\n this._context.initialTimestamp = earliestEvent;\n }\n }\n\n /**\n * Return and clear _context\n */\n _popEventContext() {\n const _context = {\n initialTimestamp: this._context.initialTimestamp,\n initialUrl: this._context.initialUrl,\n errorIds: Array.from(this._context.errorIds),\n traceIds: Array.from(this._context.traceIds),\n urls: this._context.urls,\n };\n\n this._clearContext();\n\n return _context;\n }\n\n /**\n * Flushes replay event buffer to Sentry.\n *\n * Performance events are only added right before flushing - this is\n * due to the buffered performance observer events.\n *\n * Should never be called directly, only by `flush`\n */\n async _runFlush() {\n const replayId = this.getSessionId();\n\n if (!this.session || !this.eventBuffer || !replayId) {\n DEBUG_BUILD && logger.error('[Replay] No session or eventBuffer found to flush.');\n return;\n }\n\n await this._addPerformanceEntries();\n\n // Check eventBuffer again, as it could have been stopped in the meanwhile\n if (!this.eventBuffer || !this.eventBuffer.hasEvents) {\n return;\n }\n\n // Only attach memory event if eventBuffer is not empty\n await addMemoryEntry(this);\n\n // Check eventBuffer again, as it could have been stopped in the meanwhile\n if (!this.eventBuffer) {\n return;\n }\n\n // if this changed in the meanwhile, e.g. because the session was refreshed or similar, we abort here\n if (replayId !== this.getSessionId()) {\n return;\n }\n\n try {\n // This uses the data from the eventBuffer, so we need to call this before `finish()\n this._updateInitialTimestampFromEventBuffer();\n\n const timestamp = Date.now();\n\n // Check total duration again, to avoid sending outdated stuff\n // We leave 30s wiggle room to accomodate late flushing etc.\n // This _could_ happen when the browser is suspended during flushing, in which case we just want to stop\n if (timestamp - this._context.initialTimestamp > this._options.maxReplayDuration + 30000) {\n throw new Error('Session is too long, not sending replay');\n }\n\n const eventContext = this._popEventContext();\n // Always increment segmentId regardless of outcome of sending replay\n const segmentId = this.session.segmentId++;\n this._maybeSaveSession();\n\n // Note this empties the event buffer regardless of outcome of sending replay\n const recordingData = await this.eventBuffer.finish();\n\n await sendReplay({\n replayId,\n recordingData,\n segmentId,\n eventContext,\n session: this.session,\n options: this.getOptions(),\n timestamp,\n });\n } catch (err) {\n this._handleException(err);\n\n // This means we retried 3 times and all of them failed,\n // or we ran into a problem we don't want to retry, like rate limiting.\n // In this case, we want to completely stop the replay - otherwise, we may get inconsistent segments\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.stop({ reason: 'sendReplay' });\n\n const client = getClient();\n\n if (client) {\n client.recordDroppedEvent('send_error', 'replay');\n }\n }\n }\n\n /**\n * Flush recording data to Sentry. Creates a lock so that only a single flush\n * can be active at a time. Do not call this directly.\n */\n __init5() {this._flush = async ({\n force = false,\n }\n\n = {}) => {\n if (!this._isEnabled && !force) {\n // This can happen if e.g. the replay was stopped because of exceeding the retry limit\n return;\n }\n\n if (!this.checkAndHandleExpiredSession()) {\n DEBUG_BUILD && logger.error('[Replay] Attempting to finish replay event after session expired.');\n return;\n }\n\n if (!this.session) {\n // should never happen, as we would have bailed out before\n return;\n }\n\n const start = this.session.started;\n const now = Date.now();\n const duration = now - start;\n\n // A flush is about to happen, cancel any queued flushes\n this._debouncedFlush.cancel();\n\n // If session is too short, or too long (allow some wiggle room over maxReplayDuration), do not send it\n // This _should_ not happen, but it may happen if flush is triggered due to a page activity change or similar\n const tooShort = duration < this._options.minReplayDuration;\n const tooLong = duration > this._options.maxReplayDuration + 5000;\n if (tooShort || tooLong) {\n logInfo(\n `[Replay] Session duration (${Math.floor(duration / 1000)}s) is too ${\n tooShort ? 'short' : 'long'\n }, not sending replay.`,\n this._options._experiments.traceInternals,\n );\n\n if (tooShort) {\n this._debouncedFlush();\n }\n return;\n }\n\n const eventBuffer = this.eventBuffer;\n if (eventBuffer && this.session.segmentId === 0 && !eventBuffer.hasCheckout) {\n logInfo('[Replay] Flushing initial segment without checkout.', this._options._experiments.traceInternals);\n // TODO FN: Evaluate if we want to stop here, or remove this again?\n }\n\n // this._flushLock acts as a lock so that future calls to `_flush()`\n // will be blocked until this promise resolves\n if (!this._flushLock) {\n this._flushLock = this._runFlush();\n await this._flushLock;\n this._flushLock = undefined;\n return;\n }\n\n // Wait for previous flush to finish, then call the debounced `_flush()`.\n // It's possible there are other flush requests queued and waiting for it\n // to resolve. We want to reduce all outstanding requests (as well as any\n // new flush requests that occur within a second of the locked flush\n // completing) into a single flush.\n\n try {\n await this._flushLock;\n } catch (err) {\n DEBUG_BUILD && logger.error(err);\n } finally {\n this._debouncedFlush();\n }\n };}\n\n /** Save the session, if it is sticky */\n _maybeSaveSession() {\n if (this.session && this._options.stickySession) {\n saveSession(this.session);\n }\n }\n\n /** Handler for rrweb.record.onMutation */\n __init6() {this._onMutationHandler = (mutations) => {\n const count = mutations.length;\n\n const mutationLimit = this._options.mutationLimit;\n const mutationBreadcrumbLimit = this._options.mutationBreadcrumbLimit;\n const overMutationLimit = mutationLimit && count > mutationLimit;\n\n // Create a breadcrumb if a lot of mutations happen at the same time\n // We can show this in the UI as an information with potential performance improvements\n if (count > mutationBreadcrumbLimit || overMutationLimit) {\n const breadcrumb = createBreadcrumb({\n category: 'replay.mutations',\n data: {\n count,\n limit: overMutationLimit,\n },\n });\n this._createCustomBreadcrumb(breadcrumb);\n }\n\n // Stop replay if over the mutation limit\n if (overMutationLimit) {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.stop({ reason: 'mutationLimit', forceFlush: this.recordingMode === 'session' });\n return false;\n }\n\n // `true` means we use the regular mutation handling by rrweb\n return true;\n };}\n}\n\nfunction getOption(\n selectors,\n defaultSelectors,\n deprecatedClassOption,\n deprecatedSelectorOption,\n) {\n const deprecatedSelectors = typeof deprecatedSelectorOption === 'string' ? deprecatedSelectorOption.split(',') : [];\n\n const allSelectors = [\n ...selectors,\n // @deprecated\n ...deprecatedSelectors,\n\n // sentry defaults\n ...defaultSelectors,\n ];\n\n // @deprecated\n if (typeof deprecatedClassOption !== 'undefined') {\n // NOTE: No support for RegExp\n if (typeof deprecatedClassOption === 'string') {\n allSelectors.push(`.${deprecatedClassOption}`);\n }\n\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n '[Replay] You are using a deprecated configuration item for privacy. Read the documentation on how to use the new privacy configuration.',\n );\n });\n }\n\n return allSelectors.join(',');\n}\n\n/**\n * Returns privacy related configuration for use in rrweb\n */\nfunction getPrivacyOptions({\n mask,\n unmask,\n block,\n unblock,\n ignore,\n\n // eslint-disable-next-line deprecation/deprecation\n blockClass,\n // eslint-disable-next-line deprecation/deprecation\n blockSelector,\n // eslint-disable-next-line deprecation/deprecation\n maskTextClass,\n // eslint-disable-next-line deprecation/deprecation\n maskTextSelector,\n // eslint-disable-next-line deprecation/deprecation\n ignoreClass,\n}) {\n const defaultBlockedElements = ['base[href=\"/\"]'];\n\n const maskSelector = getOption(mask, ['.sentry-mask', '[data-sentry-mask]'], maskTextClass, maskTextSelector);\n const unmaskSelector = getOption(unmask, ['.sentry-unmask', '[data-sentry-unmask]']);\n\n const options = {\n // We are making the decision to make text and input selectors the same\n maskTextSelector: maskSelector,\n unmaskTextSelector: unmaskSelector,\n\n blockSelector: getOption(\n block,\n ['.sentry-block', '[data-sentry-block]', ...defaultBlockedElements],\n blockClass,\n blockSelector,\n ),\n unblockSelector: getOption(unblock, ['.sentry-unblock', '[data-sentry-unblock]']),\n ignoreSelector: getOption(ignore, ['.sentry-ignore', '[data-sentry-ignore]', 'input[type=\"file\"]'], ignoreClass),\n };\n\n if (blockClass instanceof RegExp) {\n options.blockClass = blockClass;\n }\n\n if (maskTextClass instanceof RegExp) {\n options.maskTextClass = maskTextClass;\n }\n\n return options;\n}\n\n/**\n * Masks an attribute if necessary, otherwise return attribute value as-is.\n */\nfunction maskAttribute({\n el,\n key,\n maskAttributes,\n maskAllText,\n privacyOptions,\n value,\n}) {\n // We only mask attributes if `maskAllText` is true\n if (!maskAllText) {\n return value;\n }\n\n // unmaskTextSelector takes precendence\n if (privacyOptions.unmaskTextSelector && el.matches(privacyOptions.unmaskTextSelector)) {\n return value;\n }\n\n if (\n maskAttributes.includes(key) ||\n // Need to mask `value` attribute for `` if it's a button-like\n // type\n (key === 'value' && el.tagName === 'INPUT' && ['submit', 'button'].includes(el.getAttribute('type') || ''))\n ) {\n return value.replace(/[\\S]/g, '*');\n }\n\n return value;\n}\n\nconst MEDIA_SELECTORS =\n 'img,image,svg,video,object,picture,embed,map,audio,link[rel=\"icon\"],link[rel=\"apple-touch-icon\"]';\n\nconst DEFAULT_NETWORK_HEADERS = ['content-length', 'content-type', 'accept'];\n\nlet _initialized = false;\n\nconst replayIntegration = ((options) => {\n // eslint-disable-next-line deprecation/deprecation\n return new Replay(options);\n}) ;\n\n/**\n * The main replay integration class, to be passed to `init({ integrations: [] })`.\n * @deprecated Use `replayIntegration()` instead.\n */\nclass Replay {\n /**\n * @inheritDoc\n */\n static __initStatic() {this.id = 'Replay';}\n\n /**\n * @inheritDoc\n */\n\n /**\n * Options to pass to `rrweb.record()`\n */\n\n /**\n * Initial options passed to the replay integration, merged with default values.\n * Note: `sessionSampleRate` and `errorSampleRate` are not required here, as they\n * can only be finally set when setupOnce() is called.\n *\n * @private\n */\n\n constructor({\n flushMinDelay = DEFAULT_FLUSH_MIN_DELAY,\n flushMaxDelay = DEFAULT_FLUSH_MAX_DELAY,\n minReplayDuration = MIN_REPLAY_DURATION,\n maxReplayDuration = MAX_REPLAY_DURATION,\n stickySession = true,\n useCompression = true,\n workerUrl,\n _experiments = {},\n sessionSampleRate,\n errorSampleRate,\n maskAllText = true,\n maskAllInputs = true,\n blockAllMedia = true,\n\n mutationBreadcrumbLimit = 750,\n mutationLimit = 10000,\n\n slowClickTimeout = 7000,\n slowClickIgnoreSelectors = [],\n\n networkDetailAllowUrls = [],\n networkDetailDenyUrls = [],\n networkCaptureBodies = true,\n networkRequestHeaders = [],\n networkResponseHeaders = [],\n\n mask = [],\n maskAttributes = ['title', 'placeholder'],\n unmask = [],\n block = [],\n unblock = [],\n ignore = [],\n maskFn,\n\n beforeAddRecordingEvent,\n beforeErrorSampling,\n\n // eslint-disable-next-line deprecation/deprecation\n blockClass,\n // eslint-disable-next-line deprecation/deprecation\n blockSelector,\n // eslint-disable-next-line deprecation/deprecation\n maskInputOptions,\n // eslint-disable-next-line deprecation/deprecation\n maskTextClass,\n // eslint-disable-next-line deprecation/deprecation\n maskTextSelector,\n // eslint-disable-next-line deprecation/deprecation\n ignoreClass,\n } = {}) {\n // eslint-disable-next-line deprecation/deprecation\n this.name = Replay.id;\n\n const privacyOptions = getPrivacyOptions({\n mask,\n unmask,\n block,\n unblock,\n ignore,\n blockClass,\n blockSelector,\n maskTextClass,\n maskTextSelector,\n ignoreClass,\n });\n\n this._recordingOptions = {\n maskAllInputs,\n maskAllText,\n maskInputOptions: { ...(maskInputOptions || {}), password: true },\n maskTextFn: maskFn,\n maskInputFn: maskFn,\n maskAttributeFn: (key, value, el) =>\n maskAttribute({\n maskAttributes,\n maskAllText,\n privacyOptions,\n key,\n value,\n el,\n }),\n\n ...privacyOptions,\n\n // Our defaults\n slimDOMOptions: 'all',\n inlineStylesheet: true,\n // Disable inline images as it will increase segment/replay size\n inlineImages: false,\n // collect fonts, but be aware that `sentry.io` needs to be an allowed\n // origin for playback\n collectFonts: true,\n errorHandler: (err) => {\n try {\n err.__rrweb__ = true;\n } catch (error) {\n // ignore errors here\n // this can happen if the error is frozen or does not allow mutation for other reasons\n }\n },\n };\n\n this._initialOptions = {\n flushMinDelay,\n flushMaxDelay,\n minReplayDuration: Math.min(minReplayDuration, MIN_REPLAY_DURATION_LIMIT),\n maxReplayDuration: Math.min(maxReplayDuration, MAX_REPLAY_DURATION),\n stickySession,\n sessionSampleRate,\n errorSampleRate,\n useCompression,\n workerUrl,\n blockAllMedia,\n maskAllInputs,\n maskAllText,\n mutationBreadcrumbLimit,\n mutationLimit,\n slowClickTimeout,\n slowClickIgnoreSelectors,\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders: _getMergedNetworkHeaders(networkRequestHeaders),\n networkResponseHeaders: _getMergedNetworkHeaders(networkResponseHeaders),\n beforeAddRecordingEvent,\n beforeErrorSampling,\n\n _experiments,\n };\n\n if (typeof sessionSampleRate === 'number') {\n // eslint-disable-next-line\n console.warn(\n `[Replay] You are passing \\`sessionSampleRate\\` to the Replay integration.\nThis option is deprecated and will be removed soon.\nInstead, configure \\`replaysSessionSampleRate\\` directly in the SDK init options, e.g.:\nSentry.init({ replaysSessionSampleRate: ${sessionSampleRate} })`,\n );\n\n this._initialOptions.sessionSampleRate = sessionSampleRate;\n }\n\n if (typeof errorSampleRate === 'number') {\n // eslint-disable-next-line\n console.warn(\n `[Replay] You are passing \\`errorSampleRate\\` to the Replay integration.\nThis option is deprecated and will be removed soon.\nInstead, configure \\`replaysOnErrorSampleRate\\` directly in the SDK init options, e.g.:\nSentry.init({ replaysOnErrorSampleRate: ${errorSampleRate} })`,\n );\n\n this._initialOptions.errorSampleRate = errorSampleRate;\n }\n\n if (this._initialOptions.blockAllMedia) {\n // `blockAllMedia` is a more user friendly option to configure blocking\n // embedded media elements\n this._recordingOptions.blockSelector = !this._recordingOptions.blockSelector\n ? MEDIA_SELECTORS\n : `${this._recordingOptions.blockSelector},${MEDIA_SELECTORS}`;\n }\n\n if (this._isInitialized && isBrowser()) {\n throw new Error('Multiple Sentry Session Replay instances are not supported');\n }\n\n this._isInitialized = true;\n }\n\n /** If replay has already been initialized */\n get _isInitialized() {\n return _initialized;\n }\n\n /** Update _isInitialized */\n set _isInitialized(value) {\n _initialized = value;\n }\n\n /**\n * Setup and initialize replay container\n */\n setupOnce() {\n if (!isBrowser()) {\n return;\n }\n\n this._setup();\n\n // Once upon a time, we tried to create a transaction in `setupOnce` and it would\n // potentially create a transaction before some native SDK integrations have run\n // and applied their own global event processor. An example is:\n // https://github.com/getsentry/sentry-javascript/blob/b47ceafbdac7f8b99093ce6023726ad4687edc48/packages/browser/src/integrations/useragent.ts\n //\n // So we call `this._initialize()` in next event loop as a workaround to wait for other\n // global event processors to finish. This is no longer needed, but keeping it\n // here to avoid any future issues.\n setTimeout(() => this._initialize());\n }\n\n /**\n * Start a replay regardless of sampling rate. Calling this will always\n * create a new session. Will throw an error if replay is already in progress.\n *\n * Creates or loads a session, attaches listeners to varying events (DOM,\n * PerformanceObserver, Recording, Sentry SDK, etc)\n */\n start() {\n if (!this._replay) {\n return;\n }\n\n this._replay.start();\n }\n\n /**\n * Start replay buffering. Buffers until `flush()` is called or, if\n * `replaysOnErrorSampleRate` > 0, until an error occurs.\n */\n startBuffering() {\n if (!this._replay) {\n return;\n }\n\n this._replay.startBuffering();\n }\n\n /**\n * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n * does not support a teardown\n */\n stop() {\n if (!this._replay) {\n return Promise.resolve();\n }\n\n return this._replay.stop({ forceFlush: this._replay.recordingMode === 'session' });\n }\n\n /**\n * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n * Unless `continueRecording` is false, the replay will continue to record and\n * behave as a \"session\"-based replay.\n *\n * Otherwise, queue up a flush.\n */\n flush(options) {\n if (!this._replay || !this._replay.isEnabled()) {\n return Promise.resolve();\n }\n\n return this._replay.sendBufferedReplayOrFlush(options);\n }\n\n /**\n * Get the current session ID.\n */\n getReplayId() {\n if (!this._replay || !this._replay.isEnabled()) {\n return;\n }\n\n return this._replay.getSessionId();\n }\n\n /**\n * Initializes replay.\n */\n _initialize() {\n if (!this._replay) {\n return;\n }\n\n // We have to run this in _initialize, because this runs in setTimeout\n // So when this runs all integrations have been added\n // Before this, we cannot access integrations on the client,\n // so we need to mutate the options here\n this._maybeLoadFromReplayCanvasIntegration();\n\n this._replay.initializeSampling();\n }\n\n /** Setup the integration. */\n _setup() {\n // Client is not available in constructor, so we need to wait until setupOnce\n const finalOptions = loadReplayOptionsFromClient(this._initialOptions);\n\n this._replay = new ReplayContainer({\n options: finalOptions,\n recordingOptions: this._recordingOptions,\n });\n }\n\n /** Get canvas options from ReplayCanvas integration, if it is also added. */\n _maybeLoadFromReplayCanvasIntegration() {\n // To save bundle size, we skip checking for stuff here\n // and instead just try-catch everything - as generally this should all be defined\n /* eslint-disable @typescript-eslint/no-non-null-assertion */\n try {\n const client = getClient();\n const canvasIntegration = client.getIntegrationByName('ReplayCanvas')\n\n;\n if (!canvasIntegration) {\n return;\n }\n\n this._replay['_canvas'] = canvasIntegration.getOptions();\n } catch (e) {\n // ignore errors here\n }\n /* eslint-enable @typescript-eslint/no-non-null-assertion */\n }\n}Replay.__initStatic();\n\n/** Parse Replay-related options from SDK options */\nfunction loadReplayOptionsFromClient(initialOptions) {\n const client = getClient();\n const opt = client && (client.getOptions() );\n\n const finalOptions = { sessionSampleRate: 0, errorSampleRate: 0, ...dropUndefinedKeys(initialOptions) };\n\n if (!opt) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn('SDK client is not available.');\n });\n return finalOptions;\n }\n\n if (\n initialOptions.sessionSampleRate == null && // TODO remove once deprecated rates are removed\n initialOptions.errorSampleRate == null && // TODO remove once deprecated rates are removed\n opt.replaysSessionSampleRate == null &&\n opt.replaysOnErrorSampleRate == null\n ) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n 'Replay is disabled because neither `replaysSessionSampleRate` nor `replaysOnErrorSampleRate` are set.',\n );\n });\n }\n\n if (typeof opt.replaysSessionSampleRate === 'number') {\n finalOptions.sessionSampleRate = opt.replaysSessionSampleRate;\n }\n\n if (typeof opt.replaysOnErrorSampleRate === 'number') {\n finalOptions.errorSampleRate = opt.replaysOnErrorSampleRate;\n }\n\n return finalOptions;\n}\n\nfunction _getMergedNetworkHeaders(headers) {\n return [...DEFAULT_NETWORK_HEADERS, ...headers.map(header => header.toLowerCase())];\n}\n\n/**\n * This is a small utility to get a type-safe instance of the Replay integration.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction getReplay() {\n const client = getClient();\n return (\n client && client.getIntegrationByName && client.getIntegrationByName('Replay')\n );\n}\n\nexport { Replay, getReplay, replayIntegration };\n//# sourceMappingURL=index.js.map\n"],"names":["canvasService","canvasCtx","cachedRequestAnimationFrameImplementation","errorHandler","_takeFullSnapshot","handlers","NodeType","EventType2","IncrementalSource2","MouseInteractions2","PointerTypes2","NodeType$1","WINDOW","GLOBAL_OBJ","REPLAY_SESSION_KEY","UNABLE_TO_SEND_REPLAY","_optionalChain$5","ops","lastAccessLHS","value","i","length","op","fn","args","call","undefined","isShadowRoot","n","host","_","_2","shadowRoot","isNativeShadowDom","Object","prototype","toString","stringifyStylesheet","s","cssText","rules","cssRules","Array","from","stringifyRule","join","includes","replace","error","rule","importStringified","styleSheet","escapeImportStatement","split","statement","concat","JSON","stringify","href","layerName","push","supportsText","media","mediaText","isCSSStyleRule","selectorText","cssStringified","Mirror","getId","lhs","_3","getMeta","_4","_5","id","getNode","idNodeMap","get","getIds","keys","nodeMetaMap","removeNodeFromMap","delete","childNodes","forEach","childNode","has","hasNode","node","add","meta","set","oldNode","reset","Map","WeakMap","constructor","shouldMaskInput","param","maskInputOptions","tagName","type","Boolean","toLowerCase","maskInputValue","isMasked","element","maskInputFn","text","repeat","str","toUpperCase","ORIGINAL_ATTRIBUTE_NAME","getInputType","hasAttribute","getInputValue","el","getAttribute","_id","tagNameRegex","genId","URL_IN_CSS_REF","URL_PROTOCOL_MATCH","URL_WWW_MATCH","DATA_URI","absoluteToStylesheet","origin","quote1","path1","quote2","path2","path3","filePath","maybeQuote","test","extractOrigin","url","indexOf","slice","stack","parts","part","pop","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","absoluteToDoc","doc","attributeValue","trim","a","createElement","getHref","document","transformAttribute","name","maskAttributeFn","getAbsoluteSrcsetString","pos","collectCharacters","regEx","chars","match","exec","substring","output","descriptorsStr","inParens","c","charAt","ignoreAttribute","_value","distanceToMatch","matchPredicate","limit","Infinity","distance","nodeType","ELEMENT_NODE","parentNode","createMatchPredicate","className","selector","matches","elementClassMatchesRegex","regex","eIndex","classList","e2","needMaskingText","maskTextClass","maskTextSelector","unmaskTextClass","unmaskTextSelector","maskAllText","parentElement","autocomplete","disallowedAutocompleteValues","maskDistance","unmaskDistance","e","lowerIfExists","maybeAttr","serializeNodeWithId","options","mirror","blockClass","blockSelector","unblockSelector","skipChild","inlineStylesheet","maskTextFn","slimDOMOptions","dataURLOptions","inlineImages","recordCanvas","onSerialize","onIframeLoad","iframeLoadTimeout","onStylesheetLoad","stylesheetLoadTimeout","keepIframeSrcFn","newlyAddedElement","preserveWhiteSpace","_serializedNode","serializeNode","rootId","getRootId","docId","DOCUMENT_NODE","compatMode","Document","DOCUMENT_TYPE_NODE","DocumentType","publicId","systemId","serializeElementNode","isCustomElement","needBlock","_isBlockedElement","contains","getValidTagName","HTMLFormElement","processedTagName","attributes","len","attr","stylesheet","styleSheets","find","rel","_cssText","sheet","innerText","textContent","checked","forceMask","selected","__context","is2DCanvasBlank","canvas","ctx","getContext","x","width","y","height","getImageData","originalGetImageData","pixelBuffer","Uint32Array","Math","min","data","buffer","some","pixel","rr_dataURL","toDataURL","quality","canvasDataURL","blankCanvas","oldValue","image","crossOrigin","recordInlineImage","removeEventListener","naturalWidth","naturalHeight","drawImage","err","console","warn","currentSrc","removeAttribute","complete","addEventListener","rr_mediaState","paused","rr_mediaCurrentTime","currentTime","scrollLeft","rr_scrollLeft","scrollTop","rr_scrollTop","getBoundingClientRect","class","rr_width","rr_height","src","contentDocument","rr_src","customElements","Element","isSVG","isSVGElement","ownerSVGElement","isCustom","TEXT_NODE","serializeTextNode","parentTagName","isStyle","isScript","isTextarea","nextSibling","previousSibling","_6","_7","_8","textarea","Text","CDATA_SECTION_NODE","CDATA","COMMENT_NODE","Comment","slimDOMExcluded","sn","comment","script","as","endsWith","headFavicon","headMetaDescKeywords","headMetaSocial","property","headMetaRobots","headMetaHttpEquiv","headMetaAuthorship","headMetaVerification","serializedNode","assign","recordChild","isShadowHost","headWhitespace","bypassOptions","childN","serializedChildNode","isElement$1","isShadow","onceIframeLoaded","iframeEl","listener","readyState","win","contentWindow","fired","timer","setTimeout","clearTimeout","blankUrl","location","iframeDoc","serializedIframeNode","onceStylesheetLoaded","link","styleSheetLoadTimeout","styleSheetLoaded","serializedLinkNode","_optionalChain$4","on","target","capture","passive","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","map","throttle$1","func","wait","timeout","previous","_len","arguments","_key","now","Date","leading","remaining","context","apply","trailing","patch","source","replacement","original","wrapped","defineProperties","__rrweb_original__","enumerable","window","Proxy","Reflect","prop","receiver","nowTimestamp","getWindowScroll","left","scrollingElement","pageXOffset","documentElement","body","top","pageYOffset","_9","_10","_11","_12","_13","_14","getWindowHeight","innerHeight","clientHeight","getWindowWidth","innerWidth","clientWidth","isBlocked","checkAncestors","blockedPredicate","isUnblocked","blockDistance","unblockDistance","isIgnored","legacy_isTouchEvent","event","changedTouches","isSerializedIframe","nodeName","isSerializedStylesheet","hasShadowRoot","_18","getTime","StyleSheetMirror","_nullishCoalesce","styleIDMap","newId","idStyleMap","getStyle","generateId","getShadowHost","shadowHost","_19","getRootNode","_20","_21","Node","DOCUMENT_FRAGMENT_NODE","inDom","ownerDocument","shadowHostInDom","getRootShadowHost","rootShadowHost","EventType","IncrementalSource","MouseInteractions","PointerTypes","DoubleLinkedList","position","current","head","index","_optionalChain$3","next","addNode","__ln","tail","removeNode","moveKey","parentId","MutationBuffer","init","key","freeze","frozen","canvasManager","unfreeze","emit","isFrozen","lock","locked","unlock","shadowDomManager","texts","removes","mapRemoves","movedMap","addedSet","Set","movedSet","droppedSet","processMutations","mutations","processMutation","adds","addedIds","addList","getNextId","ns","nextId","pushAdd","currentN","iframeManager","addIframe","stylesheetManager","trackLinkElement","addShadowRoot","iframe","childSn","attachIframe","observeAttachShadow","attachLinkElement","shift","isParentRemoved","isAncestorInSet","candidate","tailNode","_node","unhandledNode","payload","filter","attribute","style","diffAsStr","styleDiff","unchangedAsStr","_unchangedStyles","mutationCb","unattachedDoc","m","implementation","createHTMLDocument","attributeName","isInputMasked","item","setAttribute","old","pname","newValue","getPropertyValue","newPriority","getPropertyPriority","addedNodes","genAdds","removedNodes","nodeId","deepDelete","isAncestorRemoved","processedNodeManager","inOtherBuffer","targetId","addsSet","_isParentRemoved","r","size","_isAncestorInSet","callbackWrapper","rest","cb","_optionalChain$2","mutationBuffers","getEventTarget","path","composedPath","initMutationObserver","rootEl","mutationBuffer","mutationObserverCtor","MutationObserver","__rrMutationObserver","angularZoneSymbol","Zone","__symbol__","observer","onMutation","bind","observe","attributeOldValue","characterData","characterDataOldValue","childList","subtree","initScrollObserver","scrollCb","sampling","evt","defaultView","scrollLeftTop","scroll","INPUT_TAGS","lastInputValueMap","getNestedCSSRulePositions","hasNestedCSSRule","childRule","parentRule","CSSGroupingRule","CSSMediaRule","CSSSupportsRule","CSSConditionRule","unshift","parentStyleSheet","getIdAndStyleId","styleMirror","styleId","ownerNode","initAdoptedStyleSheetObserver","hostId","patchTarget","ShadowRoot","originalPropertyDescriptor","getOwnPropertyDescriptor","defineProperty","configurable","sheets","result","_15","_16","adoptStyleSheets","initObservers","o","_hooks","currentWindow","mutationObserver","mousemoveHandler","initMoveObserver","timeBaseline","mousemoveCb","mousemove","threshold","callbackThreshold","mousemoveCallback","positions","wrappedCb","totalOffset","p","timeOffset","updatePosition","clientX","clientY","DragEvent","Drag","MouseEvent","MouseMove","TouchMove","h","mouseInteractionHandler","initMouseInteractionObserver","mouseInteractionCb","mouseInteraction","disableMap","currentPointerType","getHandler","pointerType","thisEventKey","eventKey","Mouse","Touch","Pen","MouseDown","MouseUp","startsWith","Click","Number","isNaN","eventName","handler","PointerEvent","TouchStart","TouchEnd","scrollHandler","viewportResizeHandler","initViewportResizeObserver","param1","viewportResizeCb","lastH","lastW","inputHandler","initInputObserver","inputCb","ignoreClass","ignoreSelector","userTriggeredOnInput","eventHandler","userTriggered","isTrusted","isChecked","cbWithDedup","querySelectorAll","v","lastInputValue","events","input","propertyDescriptor","HTMLInputElement","hookProperties","HTMLSelectElement","HTMLTextAreaElement","HTMLOptionElement","hookSetter","d","isRevoked","mediaInteractionHandler","initMediaInteractionObserver","mediaInteractionCb","volume","muted","playbackRate","styleSheetObserver","initStyleSheetObserver","replaceSync","styleSheetRuleCb","CSSStyleSheet","insertRule","thisArg","argumentsList","deleteRule","supportedNestedCSSRuleTypes","canMonkeyPatchNestedCSSRule","unmodifiedFunctions","entries","typeKey","adoptedStyleSheetObserver","styleDeclarationObserver","initStyleDeclarationObserver","styleDeclarationCb","ignoreCSSAttributes","setProperty","CSSStyleDeclaration","priority","_17","removeProperty","remove","fontObserver","collectFonts","initFontObserver","fontCb","fontMap","originalFontFace","FontFace","family","descriptors","fontFace","fontSource","Uint8Array","restoreHandler","fonts","selectionObserver","initSelectionObserver","selectionCb","collapsed","updateSelection","selection","getSelection","isCollapsed","ranges","count","rangeCount","startContainer","startOffset","endContainer","endOffset","getRangeAt","start","end","customElementObserver","initCustomElementObserver","customElementCb","define","pluginHandlers","plugin","plugins","callback","b","disconnect","CrossOriginIframeMirror","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","getIdToRemoteIdMap","remoteIdToIdMap","getRemoteIdToIdMap","generateIdFn","getRemoteId","getRemoteIds","ids","iframeIdToRemoteIdMap","iframeRemoteIdToIdMap","_optionalChain$1","IframeManagerNoop","addLoadListener","crossOriginIframeMirror","crossOriginIframeRootIdMap","IframeManager","iframes","crossOriginIframeMap","loadListener","isAttachIframe","adoptedStyleSheets","handleMessage","message","crossOriginMessageEvent","transformedEvent","transformCrossOriginEvent","wrappedEmit","isCheckout","FullSnapshot","crossOriginIframeStyleMirror","replaceIdOnNode","patchRootIdOnNode","timestamp","IncrementalSnapshot","Mutation","Meta","Load","DomContentLoaded","Plugin","Custom","replaceIds","ViewportResize","MediaInteraction","MouseInteraction","Scroll","CanvasMutation","Input","StyleSheetRule","StyleDeclaration","replaceStyleIds","Font","Selection","range","AdoptedStyleSheet","styles","iframeMirror","obj","isArray","child","recordCrossOriginIframes","ShadowDomManagerNoop","ShadowDomManager","patchAttachShadow","shadowDoms","restoreHandlers","iframeElement","manager","option","WeakSet","CanvasManagerNoop","snapshot","StylesheetManager","linkEl","trackedLinkElements","trackStylesheetInLinkElement","adoptedStyleSheetData","styleIds","CSSRule","adoptedStyleSheetCb","ProcessedNodeManager","periodicallyClear","onRequestAnimationFrame","getRequestAnimationFrameImplementation","requestAnimationFrameImplementation","requestAnimationFrame","sandbox","hidden","appendChild","removeChild","clear","loop","thisBuffer","buffers","nodeMap","destroy","wrapEvent","eWithTime","record","lastFullSnapshotEvent","checkoutEveryNms","checkoutEveryNth","maskAllInputs","_maskInputOptions","_slimDOMOptions","packFn","mousemoveWait","recordAfter","getCanvasManager","inEmittingFrame","parent","passEmitsToParent","color","date","email","month","number","search","tel","time","week","select","radio","checkbox","polyfill","NodeList","DOMTokenList","_this","incrementalSnapshotCount","eventProcessor","_optionalChain","buf","postMessage","exceedCount","exceedTime","takeFullSnapshot","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","__RRWEB_EXCLUDE_IFRAME__","getMirror","nodeMirror","_getCanvasManager","getCanvasManagerFn","__RRWEB_EXCLUDE_SHADOW_DOM__","slimDOM","initialOffset","canvasMutationCb","CustomElement","timestampToMs","isMs","timestampToS","addBreadcrumbEvent","replay","breadcrumb","category","triggerUserActivity","checkAndHandleExpiredSession","addUpdate","throttledAddEvent","tag","normalize","getClosestInteractive","closestInteractive","closest","getClickTargetNode","getTargetNode","ClickDetector","addListeners","cleanupWindowOpen","_lastMutation","nowInSeconds","fill","originalWindowOpen","splice","_teardown","_clicks","_lastScroll","removeListeners","_checkClickTimeout","handleClick","ignoreElement","_ignoreSelector","SLOW_CLICK_TAGS","newClick","clickBreadcrumb","clickCount","click","abs","_scheduleCheckClicks","registerMutation","registerScroll","registerClick","_handleMultiClick","_getClicks","_checkClicks","timedOutClicks","mutationAfter","scrollAfter","_timeout","_generateBreadcrumbs","_replay","hadScroll","_scollTimeout","hadMutation","_threshold","timeAfterClickMs","endReason","route","getCurrentRoute","_addBreadcrumbEvent","metric","slowClickConfig","scrollTimeout","createBreadcrumb","ATTRIBUTES_TO_RECORD","handleDomListener","isEnabled","handleDom","handlerData","getDomTarget","isClick","htmlTreeAsString","maxStringLength","getBaseDomBreadcrumb","clickDetector","altKey","metaKey","ctrlKey","shiftKey","getAttributesToRecord","normalizedKey","ENTRY_TYPES","resource","entry","entryType","initiatorType","responseEnd","startTime","decodedBodySize","encodedBodySize","responseStatus","transferSize","getAbsoluteTime","statusCode","paint","duration","navigation","domComplete","domContentLoadedEventStart","domContentLoadedEventEnd","domInteractive","loadEventStart","loadEventEnd","redirectCount","createPerformanceEntry","browserPerformanceTimeOrigin","performance","timeOrigin","DEBUG_BUILD","__SENTRY_DEBUG__","logInfo","shouldAddBreadcrumb","logger","info","addLogBreadcrumb","logInfoNextTick","addBreadcrumb","level","EventBufferSizeExceededError","Error","EventBufferArray","hasEvents","addEvent","eventSize","_totalSize","finish","Promise","resolve","eventsRet","hasCheckout","getEarliestTimestamp","sort","WorkerHandler","ensureReady","_ensureReadyPromise","reject","_worker","success","once","terminate","method","arg","_getAndIncrementId","response","worker","EventBufferCompressionWorker","_earliestTimestamp","_sendEventToWorker","_finishRequest","then","EventBufferProxy","_used","_fallback","_compression","ensureWorkerIsLoaded","_ensureWorkerIsLoadedPromise","_ensureWorkerIsLoaded","_switchToCompressionWorker","addEventPromises","all","hasSessionStorage","sessionStorage","isSampled","sampleRate","random","makeSession","session","uuid4","started","lastActivity","segmentId","sampled","previousSessionId","saveSession","setItem","createSession","sessionSampleRate","allowBuffering","stickySession","isExpired","initialTime","expiry","targetTime","isSessionExpired","maxReplayDuration","sessionIdleExpire","shouldRefreshSession","loadOrCreateSession","sessionOptions","traceInternals","existingSession","fetchSession","sessionStringFromStorage","getItem","sessionObj","parse","addEventSync","shouldAddEvent","_addEvent","eventBuffer","recordingMode","replayOptions","getOptions","eventAfterPossibleCallback","maybeApplyCallback","beforeAddRecordingEvent","reason","stop","client","getClient","recordDroppedEvent","isPaused","timestampInMs","timeouts","sessionIdlePause","initialTimestamp","_experiments","isTransactionEvent","isFeedbackEvent","handleAfterSendEvent","enforceStatusCode","isBaseTransportSend","transport","getTransport","send","__sentry__baseTransport__","sendResponse","handleTransactionEvent","replayContext","contexts","trace","trace_id","traceIds","handleErrorEvent","event_id","errorIds","tags","replayId","beforeErrorSampling","sendBufferedReplayOrFlush","createPerformanceSpans","description","startTimestamp","endTimestamp","addNetworkBreadcrumb","isSentryRequestUrl","getBodySize","textEncoder","encode","URLSearchParams","FormData","formDataStr","_serializeFormData","Blob","ArrayBuffer","byteLength","parseContentLengthHeader","header","parseInt","getBodyString","mergeWarning","warning","headers","_meta","warnings","newMeta","existingWarnings","makeNetworkReplayBreadcrumb","request","dropUndefinedKeys","buildSkippedNetworkRequestOrResponse","bodySize","buildNetworkRequestOrResponse","normalizedBody","normalizeNetworkBody","exceedsSizeLimit","isProbablyJson","_strIsProbablyJson","first","last","truncatedBody","e3","getAllowedHeaders","allowedHeaders","reduce","filteredHeaders","formData","urlMatches","urls","fullUrl","getFullUrl","baseURI","fixedUrl","URL","stringMatchesSomePattern","captureFetchBreadcrumbToReplay","hint","_prepareFetchData","status_code","request_body_size","requestBodySize","response_body_size","responseBodySize","captureDetails","networkDetailAllowUrls","networkDetailDenyUrls","_getRequestInfo","networkCaptureBodies","networkRequestHeaders","fetchArgs","getHeadersFromOptions","bodyStr","_getFetchRequestArgBody","_getResponseInfo","networkResponseHeaders","getAllHeaders","bodyText","_parseFetchResponseBody","getResponseData","res","_tryCloneResponse","clone","_getResponseText","txt","finally","allHeaders","Headers","captureXhrBreadcrumbToReplay","_prepareXhrData","xhr","xhrInfo","SENTRY_XHR_DATA_KEY","request_headers","getResponseHeaders","getAllResponseHeaders","acc","line","requestBody","requestWarning","responseBody","responseWarning","_getXhrResponseBody","errors","responseText","_parseXhrResponse","responseType","outerHTML","_LAST_BREADCRUMB","handleScopeListener","handleScope","scope","newBreadcrumb","getLastBreadcrumb","normalizeConsoleBreadcrumb","isTruncated","normalizedArgs","normalizedArg","stringified","addMemoryEntry","createMemoryEntry","memoryEntry","jsHeapSizeLimit","totalJSHeapSize","usedJSHeapSize","memory","prepareReplayEvent","eventHint","integrations","_integrations","preparedEvent","prepareEvent","getIsolationScope","platform","metadata","getSdkMetadata","version","sdk","sendReplayRequest","tunnel","recordingData","segment_id","eventContext","preparedRecordingData","prepareRecordingData","payloadWithSequence","replayHeaders","sequence","enc","TextEncoder","getCurrentScope","dsn","getDsn","baseEvent","replay_start_timestamp","error_ids","trace_ids","replay_id","replay_type","replayEvent","sdkProcessingMetadata","envelope","createEnvelope","createEventEnvelopeHeaders","getSdkMetadataForEnvelopeHeader","cause","TransportStatusCodeError","rateLimits","updateRateLimits","isRateLimited","RateLimitError","sendReplay","replayData","retryConfig","interval","setContext","_retryCount","captureExceptions","captureException","THROTTLED","ReplayContainer","_context","_isEnabled","_isPaused","isRecordingCanvas","_canvas","_options","initializeSampling","errorSampleRate","_initializeSessionForSampling","_handleException","_initializeRecording","startBuffering","startRecording","hadFirstEvent","canvasOptions","_stopRecording","_recordingOptions","_isCheckout","updateClickDetectorForRecordingEvent","HTMLElement","setInitialState","createOptionsEvent","shouldRecordCanvas","useCompressionOption","useCompression","blockAllMedia","networkDetailHasUrls","networkRequestHasHeaders","networkResponseHasHeaders","earliestEvent","flush","_onMutationHandler","stopRecording","forceFlush","_removeListeners","_debouncedFlush","cancel","_flush","force","deleteSession","removeItem","pause","resume","_checkSession","continueRecording","flushImmediate","activityTime","hasStoppedRecording","_updateUserActivity","_updateSessionActivity","_maybeSaveSession","cbResult","updateUserActivity","conditionalFlush","cancelFlush","getSessionId","_lastActivity","urlPath","pathname","hash","performanceEntries","replayPerformanceEntries","_clearContext","initialUrl","_throttledAddEvent","lastTransaction","getTransaction","spanToJSON","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","createEventBuffer","workerUrl","customWorkerUrl","Worker","_loadWorker","__SENTRY_EXCLUDE_REPLAY_WORKER__","createObjectURL","_addListeners","currentSession","_refreshSession","_handleVisibilityChange","_handleWindowBlur","_handleWindowFocus","_handleKeyboardEvent","_hasInitializedCoreListeners","addGlobalListeners","addScopeListener","addClickKeypressInstrumentationHandler","addHistoryInstrumentationHandler","handleHistory","to","handleNetworkBreadcrumbs","beforeAddNetworkBreadcrumb","_isXhrBreadcrumb","enrichXhrBreadcrumb","reqSize","resSize","getResponseHeader","_getBodySize","_isFetchBreadcrumb","enrichFetchBreadcrumb","addFetchInstrumentationHandler","handleFetch","fetchData","status","addXhrInstrumentationHandler","handleXhr","sentryXhrData","handleGlobalEventListener","includeAfterSendEventHandling","afterSendHandler","breadcrumbs","feedback","feedbackId","exception","values","originalException","__rrweb__","log","isErrorEventSampled","addEventProcessor","handleHydrationError","exceptionValue","dsc","transaction","feedbackEvent","includeReplay","_performanceCleanupCallback","setupPerformanceObserver","addPerformanceEntry","onEntries","clearCallbacks","addPerformanceInstrumentationHandler","addLcpInstrumentationHandler","getLargestContentfulPaint","lastEntry","clearCallback","__init","visibilityState","_doChangeToForegroundTasks","_doChangeToBackgroundTasks","__init2","__init3","__init4","handleKeyboardEvent","getKeyboardBreadcrumb","isContentEditable","hasModifierKey","isCharacterKey","baseBreadcrumb","_createCustomBreadcrumb","_addPerformanceEntries","createPerformanceEntries","_updateInitialTimestampFromEventBuffer","_popEventContext","_runFlush","__init5","tooShort","minReplayDuration","tooLong","floor","_flushLock","__init6","mutationLimit","mutationBreadcrumbLimit","overMutationLimit","recordingOptions","debounce","callbackReturnValue","timerId","maxTimerId","maxWait","max","invokeFunc","cancelTimers","debounced","flushMinDelay","flushMaxDelay","throttle","maxCount","durationSeconds","counter","_cleanup","_getTotalCount","isThrottled","wasThrottled","slowClickTimeout","slowClickIgnoreSelectors","getOption","selectors","defaultSelectors","deprecatedClassOption","deprecatedSelectorOption","allSelectors","consoleSandbox","MEDIA_SELECTORS","DEFAULT_NETWORK_HEADERS","_initialized","replayIntegration","Replay","__initStatic","_isInitialized","setupOnce","isBrowser","_setup","_initialize","getReplayId","_maybeLoadFromReplayCanvasIntegration","finalOptions","loadReplayOptionsFromClient","initialOptions","opt","replaysSessionSampleRate","replaysOnErrorSampleRate","_initialOptions","canvasIntegration","getIntegrationByName","mask","maskAttributes","unmask","block","unblock","ignore","maskFn","privacyOptions","getPrivacyOptions","RegExp","password","maskAttribute","_getMergedNetworkHeaders"],"sourceRoot":""}