{"version":3,"file":"static/chunks/0b411796-a1a33875e0c4a8d9.js","mappings":"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","sources":["webpack://_N_E/../../node_modules/@sentry-internal/replay/build/npm/esm/index.js?2c67","webpack://_N_E/"],"sourcesContent":["import { _nullishCoalesce, _optionalChain } from '@sentry/core';\nimport { GLOBAL_OBJ, normalize, fill, htmlTreeAsString, browserPerformanceTimeOrigin, logger as logger$1, severityLevelFromString, captureException, addBreadcrumb, uuid4, getClient, getLocationHref, getCurrentScope, getActiveSpan, getDynamicSamplingContextFromSpan, isSentryRequestUrl, dropUndefinedKeys, stringMatchesSomePattern, addEventProcessor, createEnvelope, createEventEnvelopeHeaders, getSdkMetadataForEnvelopeHeader, prepareEvent, getIsolationScope, resolvedSyncPromise, updateRateLimits, isRateLimited, setContext, getRootSpan, spanToJSON, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, isBrowser, parseSampleRate, consoleSandbox } from '@sentry/core';\nimport { setTimeout as setTimeout$3, addPerformanceInstrumentationHandler, addLcpInstrumentationHandler, addClsInstrumentationHandler, addFidInstrumentationHandler, addInpInstrumentationHandler, SENTRY_XHR_DATA_KEY, addClickKeypressInstrumentationHandler, addHistoryInstrumentationHandler } from '@sentry-internal/browser-utils';\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$3;\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$3 || (NodeType$3 = {}));\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(/\\sbackground-clip:\\s*text;/g, ' -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 fixAllCssProperty(rule) {\n let styles = '';\n for (let i = 0; i < rule.style.length; i++) {\n const styleDeclaration = rule.style;\n const attribute = styleDeclaration[i];\n const isImportant = styleDeclaration.getPropertyPriority(attribute);\n styles += `${attribute}:${styleDeclaration.getPropertyValue(attribute)}${isImportant ? ` !important` : ''};`;\n }\n return `${rule.selectorText} { ${styles} }`;\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)) {\n let cssText = rule.cssText;\n const needsSafariColonFix = rule.selectorText.includes(':');\n const needsAllFix = typeof rule.style['all'] === 'string' && rule.style['all'];\n if (needsAllFix) {\n cssText = fixAllCssProperty(rule);\n }\n if (needsSafariColonFix) {\n cssText = fixSafariColons(cssText);\n }\n if (needsSafariColonFix || needsAllFix) {\n return cssText;\n }\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}\nfunction extractFileExtension(path, baseURL) {\n let url;\n try {\n url = new URL(path, _nullishCoalesce$1(baseURL, () => ( window.location.href)));\n }\n catch (err) {\n return null;\n }\n const regex = /\\.([0-9a-z]+)(?:$)/i;\n const match = url.pathname.match(regex);\n return _nullishCoalesce$1(_optionalChain$5([match, 'optionalAccess', _6 => _6[1]]), () => ( null));\n}\nconst cachedImplementations$1 = {};\nfunction getImplementation$1(name) {\n const cached = cachedImplementations$1[name];\n if (cached) {\n return cached;\n }\n const document = window.document;\n let impl = window[name];\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[name]) {\n impl =\n contentWindow[name];\n }\n document.head.removeChild(sandbox);\n }\n catch (e) {\n }\n }\n return (cachedImplementations$1[name] = impl.bind(window));\n}\nfunction setTimeout$2(...rest) {\n return getImplementation$1('setTimeout')(...rest);\n}\nfunction clearTimeout$2(...rest) {\n return getImplementation$1('clearTimeout')(...rest);\n}\nfunction getIframeContentDocument(iframe) {\n try {\n return iframe.contentDocument;\n }\n catch (e) {\n }\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}\nconst cachedDocument = new WeakMap();\nfunction absoluteToDoc(doc, attributeValue) {\n if (!attributeValue || attributeValue.trim() === '') {\n return attributeValue;\n }\n return getHref(doc, attributeValue);\n}\nfunction isSVGElement(el) {\n return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\n}\nfunction getHref(doc, customHref) {\n let a = cachedDocument.get(doc);\n if (!a) {\n a = doc.createElement('a');\n cachedDocument.set(doc, a);\n }\n if (!customHref) {\n customHref = '';\n }\n else if (customHref.startsWith('blob:') || customHref.startsWith('data:')) {\n return customHref;\n }\n a.setAttribute('href', customHref);\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(doc));\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$2(() => {\n if (!fired) {\n listener();\n fired = true;\n }\n }, iframeLoadTimeout);\n iframeEl.addEventListener('load', () => {\n clearTimeout$2(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$2(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$2(() => {\n if (!fired) {\n listener();\n fired = true;\n }\n }, styleSheetLoadTimeout);\n link.addEventListener('load', () => {\n clearTimeout$2(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$3.Document,\n childNodes: [],\n compatMode: n.compatMode,\n };\n }\n else {\n return {\n type: NodeType$3.Document,\n childNodes: [],\n };\n }\n case n.DOCUMENT_TYPE_NODE:\n return {\n type: NodeType$3.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 doc,\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$3.CDATA,\n textContent: '',\n rootId,\n };\n case n.COMMENT_NODE:\n return {\n type: NodeType$3.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', _7 => _7.parentNode, 'access', _8 => _8.sheet, 'optionalAccess', _9 => _9.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(options.doc));\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.parentElement)\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$3.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 attributes.rel = null;\n attributes.href = null;\n attributes.crossorigin = null;\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(doc));\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 = doc.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 imageSrc = image.currentSrc || image.getAttribute('src') || '';\n const priorCrossOrigin = image.crossOrigin;\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 if (image.crossOrigin !== 'anonymous') {\n image.crossOrigin = 'anonymous';\n if (image.complete && image.naturalWidth !== 0)\n recordInlineImage();\n else\n image.addEventListener('load', recordInlineImage);\n return;\n }\n else {\n console.warn(`Cannot inline img src=${imageSrc}! Error: ${err}`);\n }\n }\n if (image.crossOrigin === 'anonymous') {\n priorCrossOrigin\n ? (attributes.crossOrigin = priorCrossOrigin)\n : image.removeAttribute('crossorigin');\n }\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 (!needBlock && !getIframeContentDocument(n)) {\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$3.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$3.Comment) {\n return true;\n }\n else if (sn.type === NodeType$3.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.tagName === 'link' &&\n sn.attributes.rel === 'prefetch' &&\n typeof sn.attributes.href === 'string' &&\n extractFileExtension(sn.attributes.href) === '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$3.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$3.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$3.Document ||\n serializedNode.type === NodeType$3.Element) &&\n recordChild) {\n if (slimDOMOptions.headWhitespace &&\n serializedNode.type === NodeType$3.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$3.Element &&\n serializedNode.tagName === 'iframe') {\n onceIframeLoaded(n, () => {\n const iframeDoc = getIframeContentDocument(n);\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$3.Element &&\n serializedNode.tagName === 'link' &&\n typeof serializedNode.attributes.rel === 'string' &&\n (serializedNode.attributes.rel === 'stylesheet' ||\n (serializedNode.attributes.rel === 'preload' &&\n typeof serializedNode.attributes.href === 'string' &&\n extractFileExtension(serializedNode.attributes.href) === 'css'))) {\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$1(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n }\n else if (!timeout && options.trailing !== false) {\n timeout = setTimeout$1(() => {\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$1(() => {\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 closestElementOfNode(node) {\n if (!node) {\n return null;\n }\n const el = node.nodeType === node.ELEMENT_NODE\n ? node\n : node.parentElement;\n return el;\n}\nfunction isBlocked(node, blockClass, blockSelector, unblockSelector, checkAncestors) {\n if (!node) {\n return false;\n }\n const el = closestElementOfNode(node);\n if (!el) {\n return false;\n }\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}\nconst cachedImplementations = {};\nfunction getImplementation(name) {\n const cached = cachedImplementations[name];\n if (cached) {\n return cached;\n }\n const document = window.document;\n let impl = window[name];\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[name]) {\n impl =\n contentWindow[name];\n }\n document.head.removeChild(sandbox);\n }\n catch (e) {\n }\n }\n return (cachedImplementations[name] = impl.bind(window));\n}\nfunction onRequestAnimationFrame(...rest) {\n return getImplementation('requestAnimationFrame')(...rest);\n}\nfunction setTimeout$1(...rest) {\n return getImplementation('setTimeout')(...rest);\n}\nfunction clearTimeout$1(...rest) {\n return getImplementation('clearTimeout')(...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\nvar 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 = {}));\nvar NodeType$2;\n(function (NodeType) {\n NodeType[NodeType[\"PLACEHOLDER\"] = 0] = \"PLACEHOLDER\";\n NodeType[NodeType[\"ELEMENT_NODE\"] = 1] = \"ELEMENT_NODE\";\n NodeType[NodeType[\"ATTRIBUTE_NODE\"] = 2] = \"ATTRIBUTE_NODE\";\n NodeType[NodeType[\"TEXT_NODE\"] = 3] = \"TEXT_NODE\";\n NodeType[NodeType[\"CDATA_SECTION_NODE\"] = 4] = \"CDATA_SECTION_NODE\";\n NodeType[NodeType[\"ENTITY_REFERENCE_NODE\"] = 5] = \"ENTITY_REFERENCE_NODE\";\n NodeType[NodeType[\"ENTITY_NODE\"] = 6] = \"ENTITY_NODE\";\n NodeType[NodeType[\"PROCESSING_INSTRUCTION_NODE\"] = 7] = \"PROCESSING_INSTRUCTION_NODE\";\n NodeType[NodeType[\"COMMENT_NODE\"] = 8] = \"COMMENT_NODE\";\n NodeType[NodeType[\"DOCUMENT_NODE\"] = 9] = \"DOCUMENT_NODE\";\n NodeType[NodeType[\"DOCUMENT_TYPE_NODE\"] = 10] = \"DOCUMENT_TYPE_NODE\";\n NodeType[NodeType[\"DOCUMENT_FRAGMENT_NODE\"] = 11] = \"DOCUMENT_FRAGMENT_NODE\";\n})(NodeType$2 || (NodeType$2 = {}));\n\nfunction getIFrameContentDocument(iframe) {\n try {\n return iframe.contentDocument;\n }\n catch (e) {\n }\n}\nfunction getIFrameContentWindow(iframe) {\n try {\n return iframe.contentWindow;\n }\n catch (e) {\n }\n}\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.attributeMap = new WeakMap();\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 !isBlocked(currentN, this.blockClass, this.blockSelector, this.unblockSelector, false)) {\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 if (isBlocked(iframe, this.blockClass, this.blockSelector, this.unblockSelector, false)) {\n return;\n }\n this.iframeManager.attachIframe(iframe, childSn);\n if (iframe.contentWindow) {\n this.canvasManager.addWindow(iframe.contentWindow);\n }\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.attributeMap = new WeakMap();\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 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, closestElementOfNode(m.target))\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.attributeMap.get(m.target);\n if (target.tagName === 'IFRAME' &&\n attributeName === 'src' &&\n !this.keepIframeSrcFn(value)) {\n const iframeDoc = getIFrameContentDocument(target);\n if (!iframeDoc) {\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 this.attributeMap.set(m.target, 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 if (!this.unattachedDoc) {\n try {\n this.unattachedDoc =\n document.implementation.createHTMLDocument();\n }\n catch (e) {\n this.unattachedDoc = this.doc;\n }\n }\n const old = this.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 let node = n.parentNode;\n while (node) {\n const parentId = mirror.getId(node);\n if (removes.some((r) => r.id === parentId)) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\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$1(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 let mutationObserver;\n if (o.recordDOM) {\n mutationObserver = initMutationObserver(o, o.doc);\n }\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 let styleSheetObserver = () => { };\n let adoptedStyleSheetObserver = () => { };\n let styleDeclarationObserver = () => { };\n let fontObserver = () => { };\n if (o.recordDOM) {\n styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });\n adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o, o.doc);\n styleDeclarationObserver = initStyleDeclarationObserver(o, {\n win: currentWindow,\n });\n if (o.collectFonts) {\n fontObserver = 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 _optionalChain$2([mutationObserver, 'optionalAccess', _22 => _22.disconnect, 'call', _23 => _23()]);\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 const iframeDoc = getIFrameContentDocument(iframeEl);\n if (iframeDoc &&\n iframeDoc.adoptedStyleSheets &&\n iframeDoc.adoptedStyleSheets.length > 0)\n this.stylesheetManager.adoptStyleSheets(iframeDoc.adoptedStyleSheets, this.mirror.getId(iframeDoc));\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$3.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 this.bypassOptions.canvasManager.addShadowRoot(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$1(() => {\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 const iframeDoc = getIFrameContentDocument(iframeElement);\n const iframeWindow = getIFrameContentWindow(iframeElement);\n if (!iframeDoc || !iframeWindow)\n return;\n this.patchAttachShadow(iframeWindow.Element, iframeDoc);\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 this.bypassOptions.canvasManager.resetShadowRoots();\n }\n}\n\nclass CanvasManagerNoop {\n reset() {\n }\n freeze() {\n }\n unfreeze() {\n }\n lock() {\n }\n unlock() {\n }\n snapshot() {\n }\n addWindow() {\n }\n addShadowRoot() {\n }\n resetShadowRoots() {\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.active = false;\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 if (!this.active) {\n this.active = true;\n onRequestAnimationFrame(() => {\n this.nodeMap = new WeakMap();\n this.active = false;\n });\n }\n this.nodeMap.set(node, (this.nodeMap.get(node) || new Set()).add(buffer));\n }\n destroy() {\n }\n}\n\nlet wrappedEmit;\nlet _takeFullSnapshot;\ntry {\n if (Array.from([1], (x) => x * 2)[0] !== 2) {\n const cleanFrame = document.createElement('iframe');\n document.body.appendChild(cleanFrame);\n Array.from = _optionalChain([cleanFrame, 'access', _ => _.contentWindow, 'optionalAccess', _2 => _2.Array, 'access', _3 => _3.from]) || Array.from;\n document.body.removeChild(cleanFrame);\n }\n}\ncatch (err) {\n console.debug('Unable to override Array.from', err);\n}\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, maxCanvasSize = null, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordDOM = true, 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 (!inEmittingFrame && !passEmitsToParent) {\n return () => {\n };\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 wrappedEmit = (r, isCheckout) => {\n const e = r;\n e.timestamp = nowTimestamp();\n if (_optionalChain([mutationBuffers, 'access', _4 => _4[0], 'optionalAccess', _5 => _5.isFrozen, 'call', _6 => _6()]) &&\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', _7 => _7(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 lastFullSnapshotEvent &&\n e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\n if (exceedCount || exceedTime) {\n takeFullSnapshot(true);\n }\n }\n };\n const wrappedMutationEmit = (m) => {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n ...m,\n },\n });\n };\n const wrappedScrollEmit = (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Scroll,\n ...p,\n },\n });\n const wrappedCanvasMutationEmit = (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CanvasMutation,\n ...p,\n },\n });\n const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit({\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({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CanvasMutation,\n ...p,\n },\n }),\n recordCanvas,\n blockClass,\n blockSelector,\n unblockSelector,\n maxCanvasSize,\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 if (!recordDOM) {\n return;\n }\n wrappedEmit({\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 if (iframe.contentWindow) {\n canvasManager.addWindow(iframe.contentWindow);\n }\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({\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({\n type: EventType.IncrementalSnapshot,\n data: {\n source,\n positions,\n },\n }),\n mouseInteractionCb: (d) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.MouseInteraction,\n ...d,\n },\n }),\n scrollCb: wrappedScrollEmit,\n viewportResizeCb: (d) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.ViewportResize,\n ...d,\n },\n }),\n inputCb: (v) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Input,\n ...v,\n },\n }),\n mediaInteractionCb: (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.MediaInteraction,\n ...p,\n },\n }),\n styleSheetRuleCb: (r) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.StyleSheetRule,\n ...r,\n },\n }),\n styleDeclarationCb: (r) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.StyleDeclaration,\n ...r,\n },\n }),\n canvasMutationCb: wrappedCanvasMutationEmit,\n fontCb: (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Font,\n ...p,\n },\n }),\n selectionCb: (p) => {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Selection,\n ...p,\n },\n });\n },\n customElementCb: (c) => {\n wrappedEmit({\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 recordDOM,\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', _8 => _8.filter, 'call', _9 => _9((p) => p.observer)\n, 'optionalAccess', _10 => _10.map, 'call', _11 => _11((p) => ({\n observer: p.observer,\n options: p.options,\n callback: (payload) => wrappedEmit({\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({\n type: EventType.DomContentLoaded,\n data: {},\n });\n if (recordAfter === 'DOMContentLoaded')\n init();\n }));\n handlers.push(on('load', () => {\n wrappedEmit({\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/** Any IncrementalSource for rrweb that we interpret as a kind of mutation. */\nconst IncrementalMutationSources = new Set([\n IncrementalSource.Mutation,\n IncrementalSource.StyleSheetRule,\n IncrementalSource.StyleDeclaration,\n IncrementalSource.AdoptedStyleSheet,\n IncrementalSource.CanvasMutation,\n IncrementalSource.Selection,\n IncrementalSource.MediaInteraction,\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._scrollTimeout = 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._scrollTimeout;\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$3(() => 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 (IncrementalMutationSources.has(source)) {\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 if (!attributes['data-sentry-component'] && attributes['data-sentry-element']) {\n attributes['data-sentry-component'] = attributes['data-sentry-element'];\n }\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 * Handler creater for web vitals\n */\nfunction webVitalHandler(\n getter,\n replay,\n) {\n return ({ metric }) => void replay.replayPerformanceEntries.push(getter(metric));\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 const entryType = ENTRY_TYPES[entry.entryType];\n if (!entryType) {\n return null;\n }\n\n return 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 a LCP metric.\n */\nfunction getLargestContentfulPaint(metric) {\n const lastEntry = metric.entries[metric.entries.length - 1] ;\n const node = lastEntry && lastEntry.element ? [lastEntry.element] : undefined;\n return getWebVital(metric, 'largest-contentful-paint', node);\n}\n\nfunction isLayoutShift(entry) {\n return (entry ).sources !== undefined;\n}\n\n/**\n * Add a CLS event to the replay based on a CLS metric.\n */\nfunction getCumulativeLayoutShift(metric) {\n const layoutShifts = [];\n const nodes = [];\n for (const entry of metric.entries) {\n if (isLayoutShift(entry)) {\n const nodeIds = [];\n for (const source of entry.sources) {\n if (source.node) {\n nodes.push(source.node);\n const nodeId = record.mirror.getId(source.node);\n if (nodeId) {\n nodeIds.push(nodeId);\n }\n }\n }\n layoutShifts.push({ value: entry.value, nodeIds: nodeIds.length ? nodeIds : undefined });\n }\n }\n\n return getWebVital(metric, 'cumulative-layout-shift', nodes, layoutShifts);\n}\n\n/**\n * Add a FID event to the replay based on a FID metric.\n */\nfunction getFirstInputDelay(metric) {\n const lastEntry = metric.entries[metric.entries.length - 1] ;\n const node = lastEntry && lastEntry.target ? [lastEntry.target] : undefined;\n return getWebVital(metric, 'first-input-delay', node);\n}\n\n/**\n * Add an INP event to the replay based on an INP metric.\n */\nfunction getInteractionToNextPaint(metric) {\n const lastEntry = metric.entries[metric.entries.length - 1] ;\n const node = lastEntry && lastEntry.target ? [lastEntry.target] : undefined;\n return getWebVital(metric, 'interaction-to-next-paint', node);\n}\n\n/**\n * Add an web vital event to the replay based on the web vital metric.\n */\nfunction getWebVital(\n metric,\n name,\n nodes,\n attributions,\n) {\n const value = metric.value;\n const rating = metric.rating;\n\n const end = getAbsoluteTime(value);\n\n return {\n type: 'web-vital',\n name,\n start: end,\n end,\n data: {\n value,\n size: value,\n rating,\n nodeIds: nodes ? nodes.map(node => record.mirror.getId(node)) : undefined,\n attributions,\n },\n };\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(webVitalHandler(getLargestContentfulPaint, replay)),\n addClsInstrumentationHandler(webVitalHandler(getCumulativeLayoutShift, replay)),\n addFidInstrumentationHandler(webVitalHandler(getFirstInputDelay, replay)),\n addInpInstrumentationHandler(webVitalHandler(getInteractionToNextPaint, replay)),\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==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},_=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},x=function(r,e){for(var i=[],a=0;ad&&(d=o[a].s);var g=new n(d+1),w=A(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}},A=function(t,n,r){return-1==t.s?Math.max(A(t.l,n,r+1),A(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,U)+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){_(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;_(r,m,Q[et]),m+=R[et],et>3&&(_(r,m,rt>>5&8191),m+=i[et])}else _(r,m,N[rt]),m+=P[rt]}return _(r,m,N[256]),m+P[256]},C=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;return{p:function(n){for(var r=t,e=0;e>>8;t=r},d:function(){return~t}}},L=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}}},O=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=C[s-1],M=y>>13,E=8191&y,z=(1<7e3||q>24576)&&(N>423||!w)){p=U(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=_[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)},j=function(t,n,r){for(;r;++n)t[n]=r,r>>>=8},q=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&&j(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)}},B=function(t){return 10+(t.filename?t.filename.length+1:0)},G=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(O(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}();var H=function(){function t(t,n){this.c=L(),this.v=1,G.call(this,t,n)}return t.prototype.push=function(t,n){this.c.p(t),G.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){var r=O(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=L();i.p(n.dictionary),j(t,2,i.d())}}(r,this.o),this.v=0),n&&j(r,r.length-4,this.c.d()),this.ondata(r,n)},t}(),J=\"undefined\"!=typeof TextEncoder&&new TextEncoder,K=\"undefined\"!=typeof TextDecoder&&new TextDecoder;try{K.decode(F,{stream:!0})}catch(t){}var N=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,n){this.ondata||E(5),this.d&&E(4),this.ondata(P(t),this.d=n||!1)},t}();function P(n,r){if(J)return J.encode(n);for(var e=n.length,i=new t(n.length+(n.length>>1)),a=0,s=function(t){i[a++]=t},o=0;oi.length){var f=new t(a+8+(e-o<<1));f.set(i),i=f}var h=n.charCodeAt(o);h<128||r?s(h):h<2048?(s(192|h>>6),s(128|63&h)):h>55295&&h<57344?(s(240|(h=65536+(1047552&h)|1023&n.charCodeAt(++o))>>18),s(128|h>>12&63),s(128|h>>6&63),s(128|63&h)):(s(224|h>>12),s(128|h>>6&63),s(128|63&h))}return b(i,0,a)}function Q(t){return function(t,n){n||(n={});var r=S(),e=t.length;r.p(t);var i=O(t,n,B(n),8),a=i.length;return q(i,n),j(i,a-8,r.d()),j(i,a-4,e),i}(P(t))}const R=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(const r of t)n+=r.length;const r=new Uint8Array(n);for(let n=0,e=0,i=t.length;n{this._deflatedData.push(t)},this.stream=new N(((t,n)=>{this.deflate.push(t,n)})),this.stream.push(\"[\")}},V={clear:()=>{R.clear()},addEvent:t=>R.addEvent(t),finish:()=>R.finish(),compress:t=>Q(t)};addEventListener(\"message\",(function(t){const n=t.data.method,r=t.data.id,e=t.data.arg;if(n in V&&\"function\"==typeof V[n])try{const t=V[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\nconst CONSOLE_LEVELS = ['info', 'warn', 'error', 'log'] ;\nconst PREFIX = '[Replay] ';\n\nfunction _addBreadcrumb(message, level = 'info') {\n addBreadcrumb(\n {\n category: 'console',\n data: {\n logger: 'replay',\n },\n level,\n message: `${PREFIX}${message}`,\n },\n { level },\n );\n}\n\nfunction makeReplayLogger() {\n let _capture = false;\n let _trace = false;\n\n const _logger = {\n exception: () => undefined,\n infoTick: () => undefined,\n setConfig: (opts) => {\n _capture = opts.captureExceptions;\n _trace = opts.traceInternals;\n },\n };\n\n if (DEBUG_BUILD) {\n CONSOLE_LEVELS.forEach(name => {\n _logger[name] = (...args) => {\n logger$1[name](PREFIX, ...args);\n if (_trace) {\n _addBreadcrumb(args.join(''), severityLevelFromString(name));\n }\n };\n });\n\n _logger.exception = (error, ...message) => {\n if (message.length && _logger.error) {\n _logger.error(...message);\n }\n\n logger$1.error(PREFIX, error);\n\n if (_capture) {\n captureException(error);\n } else if (_trace) {\n // No need for a breadcrumb if `_capture` is enabled since it should be\n // captured as an exception\n _addBreadcrumb(error, 'error');\n }\n };\n\n _logger.infoTick = (...args) => {\n logger$1.info(PREFIX, ...args);\n if (_trace) {\n // Wait a tick here to avoid race conditions for some initial logs\n // which may be added before replay is initialized\n setTimeout(() => _addBreadcrumb(args[0]), 0);\n }\n };\n } else {\n CONSOLE_LEVELS.forEach(name => {\n _logger[name] = () => undefined;\n });\n }\n\n return _logger ;\n}\n\nconst logger = makeReplayLogger();\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 /** @inheritdoc */\n\n constructor() {\n this.events = [];\n this._totalSize = 0;\n this.hasCheckout = false;\n this.waitForCheckout = 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 occurred.\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 DEBUG_BUILD && logger.info('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('Error in compression worker: ', 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 /** @inheritdoc */\n\n constructor(worker) {\n this._worker = new WorkerHandler(worker);\n this._earliestTimestamp = null;\n this._totalSize = 0;\n this.hasCheckout = false;\n this.waitForCheckout = 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 occurred.\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 successfully 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.exception(e, '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 waitForCheckout() {\n return this._used.waitForCheckout;\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 // eslint-disable-next-line @typescript-eslint/adjacent-overload-signatures\n set waitForCheckout(value) {\n this._used.waitForCheckout = 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 DEBUG_BUILD && logger.exception(error, '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, waitForCheckout } = 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 this._compression.waitForCheckout = waitForCheckout;\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\n // Can now clear fallback buffer as it's no longer necessary\n this._fallback.clear();\n } catch (error) {\n DEBUG_BUILD && logger.exception(error, 'Failed to add events when switching buffers.');\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 DEBUG_BUILD && logger.info('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 DEBUG_BUILD && logger.info(`Using compression worker${customWorkerUrl ? ` from ${customWorkerUrl}` : ''}`);\n const worker = new Worker(workerUrl);\n return new EventBufferProxy(worker);\n } catch (error) {\n DEBUG_BUILD && logger.exception(error, '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() {\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 DEBUG_BUILD && logger.infoTick('Loading existing session');\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 sessionIdleExpire,\n maxReplayDuration,\n previousSessionId,\n }\n\n,\n sessionOptions,\n) {\n const existingSession = sessionOptions.stickySession && fetchSession();\n\n // No session exists yet, just create a new one\n if (!existingSession) {\n DEBUG_BUILD && logger.infoTick('Creating new session');\n return createSession(sessionOptions, { previousSessionId });\n }\n\n if (!shouldRefreshSession(existingSession, { sessionIdleExpire, maxReplayDuration })) {\n return existingSession;\n }\n\n DEBUG_BUILD && logger.infoTick('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 const { eventBuffer } = replay;\n\n if (!eventBuffer || (eventBuffer.waitForCheckout && !isCheckout)) {\n return null;\n }\n\n const isBufferMode = replay.recordingMode === 'buffer';\n\n try {\n if (isCheckout && isBufferMode) {\n eventBuffer.clear();\n }\n\n if (isCheckout) {\n eventBuffer.hasCheckout = true;\n eventBuffer.waitForCheckout = false;\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 eventBuffer.addEvent(eventAfterPossibleCallback);\n } catch (error) {\n const isExceeded = error && error instanceof EventBufferSizeExceededError;\n const reason = isExceeded ? 'addEventSizeExceeded' : 'addEvent';\n\n if (isExceeded && isBufferMode) {\n // Clear buffer and wait for next checkout\n eventBuffer.clear();\n eventBuffer.waitForCheckout = true;\n\n return null;\n }\n\n replay.handleException(error);\n\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 DEBUG_BUILD &&\n logger.infoTick(`Skipping event with timestamp ${timestampInMs} because it is after maxReplayDuration`);\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.exception(error, 'An error occurred in the `beforeAddRecordingEvent` callback, skipping the event...');\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 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 (!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$3(async () => {\n try {\n // Capture current event buffer as new replay\n await replay.sendBufferedReplayOrFlush();\n } catch (err) {\n replay.handleException(err);\n }\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 =\n event.exception && event.exception.values && event.exception.values[0] && 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 // With newer React versions, the messages changed to a different website https://react.dev/errors/418\n exceptionValue.match(\n /(reactjs\\.org\\/docs\\/error-decoder\\.html\\?invariant=|react\\.dev\\/errors\\/)(418|419|422|423|425)/,\n ) ||\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 data: {\n url: getLocationHref(),\n },\n });\n addBreadcrumbEvent(replay, breadcrumb);\n }\n}\n\n/**\n * Handle breadcrumbs that Sentry captures, and make sure to capture relevant breadcrumbs to Replay as well.\n */\nfunction handleBreadcrumbs(replay) {\n const client = getClient();\n\n if (!client) {\n return;\n }\n\n client.on('beforeAddBreadcrumb', breadcrumb => beforeAddBreadcrumb(replay, breadcrumb));\n}\n\nfunction beforeAddBreadcrumb(replay, breadcrumb) {\n if (!replay.isEnabled() || !isBreadcrumbWithCategory(breadcrumb)) {\n return;\n }\n\n const result = normalizeBreadcrumb(breadcrumb);\n if (result) {\n addBreadcrumbEvent(replay, result);\n }\n}\n\n/** Exported only for tests. */\nfunction normalizeBreadcrumb(breadcrumb) {\n if (\n !isBreadcrumbWithCategory(breadcrumb) ||\n [\n // fetch & xhr are handled separately,in handleNetworkBreadcrumbs\n 'fetch',\n 'xhr',\n // These two are breadcrumbs for emitted sentry events, we don't care about them\n 'sentry.event',\n 'sentry.transaction',\n ].includes(breadcrumb.category) ||\n // We capture UI breadcrumbs separately\n breadcrumb.category.startsWith('ui.')\n ) {\n return null;\n }\n\n if (breadcrumb.category === 'console') {\n return normalizeConsoleBreadcrumb(breadcrumb);\n }\n\n return createBreadcrumb(breadcrumb);\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\nfunction isBreadcrumbWithCategory(breadcrumb) {\n return !!breadcrumb.category;\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 * Reset the `replay_id` field on the DSC.\n */\nfunction resetReplayIdOnDynamicSamplingContext() {\n // Reset DSC on the current scope, if there is one\n const dsc = getCurrentScope().getPropagationContext().dsc;\n if (dsc) {\n delete dsc.replay_id;\n }\n\n // Clear it from frozen DSC on the active span\n const activeSpan = getActiveSpan();\n if (activeSpan) {\n const dsc = getDynamicSamplingContextFromSpan(activeSpan);\n delete (dsc ).replay_id;\n }\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 `handleGlobalEvent`, 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(replay) {\n return Object.assign(\n (event, hint) => {\n // Do nothing if replay has been disabled or paused\n if (!replay.isEnabled() || replay.isPaused()) {\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 // prevent exceeding replay durations by removing the expired replayId from the DSC\n resetReplayIdOnDynamicSamplingContext();\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('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 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/** Get the size of a body. */\nfunction getBodySize(body) {\n if (!body) {\n return undefined;\n }\n\n const textEncoder = new TextEncoder();\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 (error) {\n DEBUG_BUILD && logger.exception(error, 'Failed to serialize body', body);\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n\n DEBUG_BUILD && logger.info('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.entries(headers).reduce((filteredHeaders, [key, value]) => {\n const normalizedKey = key.toLowerCase();\n // Avoid putting empty strings into the headers\n if (allowedHeaders.includes(normalizedKey) && headers[key]) {\n filteredHeaders[normalizedKey] = value;\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 (e2) {\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 appropriate).\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.exception(error, 'Failed to capture fetch breadcrumb');\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) {\n const { input, response } = hint;\n\n const body = input ? _getFetchRequestArgBody(input) : undefined;\n const reqSize = getBodySize(body);\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 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 networkResponseHeaders,\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\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 responseBodySize,\n captureDetails,\n headers,\n }\n\n,\n) {\n try {\n const size =\n bodyText && bodyText.length && responseBodySize === undefined ? getBodySize(bodyText) : 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.exception(error, 'Failed to serialize response body');\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 if (error instanceof Error && error.message.indexOf('Timeout') > -1) {\n DEBUG_BUILD && logger.warn('Parsing text body from response timed out');\n return [undefined, 'BODY_PARSE_TIMEOUT'];\n }\n\n DEBUG_BUILD && logger.exception(error, 'Failed to get text body from response');\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.exception(error, 'Failed to clone response body');\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$3(() => 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 appropriate).\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.exception(error, 'Failed to capture xhr breadcrumb');\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) {\n const { xhr, input } = hint;\n\n if (!xhr) {\n return;\n }\n\n const reqSize = getBodySize(input);\n const resSize = xhr.getResponseHeader('content-length')\n ? parseContentLengthHeader(xhr.getResponseHeader('content-length'))\n : _getBodySize(xhr.response, xhr.responseType);\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 if (value) {\n acc[key.toLowerCase()] = value;\n }\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('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 (error) {\n DEBUG_BUILD && logger.exception(error, 'Failed to serialize body', body);\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n\n DEBUG_BUILD && logger.info('Skipping network body because of body type', body);\n\n return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\nfunction _getBodySize(\n body,\n responseType,\n) {\n try {\n const bodyStr = responseType === 'json' && body && typeof body === 'object' ? JSON.stringify(body) : body;\n return getBodySize(bodyStr);\n } catch (e2) {\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 {\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders,\n networkResponseHeaders,\n } = replay.getOptions();\n\n const options = {\n replay,\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders,\n networkResponseHeaders,\n };\n\n if (client) {\n client.on('beforeAddBreadcrumb', (breadcrumb, hint) => beforeAddNetworkBreadcrumb(options, breadcrumb, hint));\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);\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);\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.exception(e, '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\n/**\n * Add global listeners that cannot be removed.\n */\nfunction addGlobalListeners(replay) {\n // Listeners from core SDK //\n const client = getClient();\n\n addClickKeypressInstrumentationHandler(handleDomListener(replay));\n addHistoryInstrumentationHandler(handleHistorySpanListener(replay));\n handleBreadcrumbs(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);\n addEventProcessor(eventProcessor);\n\n // If a custom client has no hooks yet, we continue to use the \"old\" implementation\n if (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('spanStart', span => {\n replay.lastActiveSpan = span;\n });\n\n // We may be missing the initial spanStart due to timing issues,\n // so we capture it on finish again.\n client.on('spanEnd', span => {\n replay.lastActiveSpan = span;\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/**\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$3(invokeFunc, wait);\n\n if (maxWait && maxTimerId === undefined) {\n maxTimerId = setTimeout$3(invokeFunc, maxWait);\n }\n\n return callbackReturnValue;\n }\n\n debounced.cancel = cancelTimers;\n debounced.flush = flush;\n return debounced;\n}\n\nconst NAVIGATOR = GLOBAL_OBJ.navigator;\n\n/**\n * Disable sampling mousemove events on iOS browsers as this can cause blocking the main thread\n * https://github.com/getsentry/sentry-javascript/issues/14534\n */\nfunction getRecordingSamplingOptions() {\n if (\n /iPhone|iPad|iPod/i.test((NAVIGATOR && NAVIGATOR.userAgent) || '') ||\n (/Macintosh/i.test((NAVIGATOR && NAVIGATOR.userAgent) || '') &&\n NAVIGATOR &&\n NAVIGATOR.maxTouchPoints &&\n NAVIGATOR.maxTouchPoints > 1)\n ) {\n return {\n sampling: {\n mousemove: false,\n },\n };\n }\n\n return {};\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('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 const session = replay.session;\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. We have an experimental mode\n // to perform multiple checkouts a session (the idea is to improve\n // seeking during playback), so also only include if segmentId is 0\n // (handled in `addSettingsEvent`).\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 // 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' && session && replay.eventBuffer) {\n const earliestEvent = replay.eventBuffer.getEarliestTimestamp();\n if (earliestEvent) {\n DEBUG_BUILD &&\n logger.info(`Updating session start time to earliest event in buffer to ${new Date(earliestEvent)}`);\n\n session.started = earliestEvent;\n\n if (replay.getOptions().stickySession) {\n saveSession(session);\n }\n }\n }\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 (session && session.previousSessionId) {\n return true;\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 client.emit('preprocessEvent', event, eventHint);\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();\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 resolvedSyncPromise({});\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 DEBUG_BUILD && logger.info('An event processor returned `null`, will not send event.');\n return resolvedSyncPromise({});\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 // 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, onError } = 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 (onError) {\n onError(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$3(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 two 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 span.\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 /** The replay has to be manually started, because no sample rate (neither session or error) was provided. */\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._requiresManualStart = 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 // Configure replay logger w/ experimental options\n if (DEBUG_BUILD) {\n const experiments = options._experiments;\n logger.setConfig({\n captureExceptions: !!experiments.captureExceptions,\n traceInternals: !!experiments.traceInternals,\n });\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 /** A wrapper to conditionally capture exceptions. */\n handleException(error) {\n DEBUG_BUILD && logger.exception(error);\n if (this._options.onError) {\n this._options.onError(error);\n }\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 const requiresManualStart = errorSampleRate <= 0 && sessionSampleRate <= 0;\n\n this._requiresManualStart = requiresManualStart;\n\n if (requiresManualStart) {\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 DEBUG_BUILD && logger.exception(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 DEBUG_BUILD && logger.infoTick(`Starting replay in ${this.recordingMode} mode`);\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 log a message 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 DEBUG_BUILD && logger.info('Recording is already in progress');\n return;\n }\n\n if (this._isEnabled && this.recordingMode === 'buffer') {\n DEBUG_BUILD && logger.info('Buffering is in progress, call `flush()` to save the replay');\n return;\n }\n\n DEBUG_BUILD && logger.infoTick('Starting replay in session mode');\n\n // Required as user activity is initially set in\n // constructor, so if `start()` is called after\n // session idle expiration, a replay will not be\n // created due to an idle timeout.\n this._updateUserActivity();\n\n const session = loadOrCreateSession(\n {\n maxReplayDuration: this._options.maxReplayDuration,\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\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 DEBUG_BUILD && logger.info('Buffering is in progress, call `flush()` to save the replay');\n return;\n }\n\n DEBUG_BUILD && logger.infoTick('Starting replay in buffer mode');\n\n const session = loadOrCreateSession(\n {\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n maxReplayDuration: this._options.maxReplayDuration,\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'\n ? { checkoutEveryNms: BUFFER_CHECKOUT_TIME }\n : // Otherwise, use experimental option w/ min checkout time of 6 minutes\n // This is to improve playback seeking as there could potentially be\n // less mutations to process in the worse cases.\n //\n // checkout by \"N\" events is probably ideal, but means we have less\n // control about the number of checkouts we make (which generally\n // increases replay size)\n this._options._experiments.continuousCheckout && {\n // Minimum checkout time is 6 minutes\n checkoutEveryNms: Math.max(360000, this._options._experiments.continuousCheckout),\n }),\n emit: getHandleRecordingEmit(this),\n ...getRecordingSamplingOptions(),\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 DEBUG_BUILD && logger.info(`Stopping Replay${reason ? ` triggered by ${reason}` : ''}`);\n\n resetReplayIdOnDynamicSamplingContext();\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 DEBUG_BUILD && logger.info('Pausing replay');\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 DEBUG_BUILD && logger.info('Resuming replay');\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 DEBUG_BUILD && logger.info('Converting buffer to session');\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 multiple 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 session (=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 const lastActiveSpan = this.lastActiveSpan || getActiveSpan();\n const lastRootSpan = lastActiveSpan && getRootSpan(lastActiveSpan);\n\n const attributes = (lastRootSpan && spanToJSON(lastRootSpan).data) || {};\n const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n if (!lastRootSpan || !source || !['route', 'custom'].includes(source)) {\n return undefined;\n }\n\n return spanToJSON(lastRootSpan).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 /**\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 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 DEBUG_BUILD && logger.info('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 let performanceEntries = createPerformanceEntries(this.performanceEntries).concat(this.replayPerformanceEntries);\n\n this.performanceEntries = [];\n this.replayPerformanceEntries = [];\n\n // If we are manually starting, we want to ensure we only include performance entries\n // that are after the initial timestamp\n // The reason for this is that we may have performance entries from the page load, but may decide to start\n // the replay later on, in which case we do not want to include these entries.\n // without this, manually started replays can have events long before the actual replay recording starts,\n // which messes with the timeline etc.\n if (this._requiresManualStart) {\n const initialTimestampInSeconds = this._context.initialTimestamp / 1000;\n performanceEntries = performanceEntries.filter(entry => entry.start >= initialTimestampInSeconds);\n }\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 replay was started manually (=no sample rate was given),\n // We do not want to back-port the initial timestamp\n if (!session || !eventBuffer || this._requiresManualStart) {\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('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 accommodate 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 timestamp,\n onError: err => this.handleException(err),\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 const dropReason = err instanceof RateLimitError ? 'ratelimit_backoff' : 'send_error';\n client.recordDroppedEvent(dropReason, '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('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 DEBUG_BUILD &&\n logger.info(\n `Session duration (${Math.floor(duration / 1000)}s) is too ${\n tooShort ? 'short' : 'long'\n }, not sending replay.`,\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 DEBUG_BUILD && logger.info('Flushing initial segment without checkout.');\n // TODO FN: Evaluate if we want to stop here, or remove this again?\n }\n\n const _flushInProgress = !!this._flushLock;\n\n // this._flushLock acts as a lock so that future calls to `_flush()` will\n // be blocked until current flush is finished (i.e. this promise resolves)\n if (!this._flushLock) {\n this._flushLock = this._runFlush();\n }\n\n try {\n await this._flushLock;\n } catch (err) {\n this.handleException(err);\n } finally {\n this._flushLock = undefined;\n\n if (_flushInProgress) {\n // Wait for previous flush to finish, then call the debounced\n // `_flush()`. It's possible there are other flush requests queued and\n // waiting for it to resolve. We want to reduce all outstanding\n // requests (as well as any new flush requests that occur within a\n // second of the locked flush completing) into a single flush.\n this._debouncedFlush();\n }\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(selectors, defaultSelectors) {\n return [\n ...selectors,\n // sentry defaults\n ...defaultSelectors,\n ].join(',');\n}\n\n/**\n * Returns privacy related configuration for use in rrweb\n */\nfunction getPrivacyOptions({ mask, unmask, block, unblock, ignore }) {\n const defaultBlockedElements = ['base', 'iframe[srcdoc]:not([src])'];\n\n const maskSelector = getOption(mask, ['.sentry-mask', '[data-sentry-mask]']);\n const unmaskSelector = getOption(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(block, ['.sentry-block', '[data-sentry-block]', ...defaultBlockedElements]),\n unblockSelector: getOption(unblock, []),\n ignoreSelector: getOption(ignore, ['.sentry-ignore', '[data-sentry-ignore]', 'input[type=\"file\"]']),\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 precedence\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\n/**\n * Sentry integration for [Session Replay](https://sentry.io/for/session-replay/).\n *\n * See the [Replay documentation](https://docs.sentry.io/platforms/javascript/guides/session-replay/) for more information.\n *\n * @example\n *\n * ```\n * Sentry.init({\n * dsn: '__DSN__',\n * integrations: [Sentry.replayIntegration()],\n * });\n * ```\n */\nconst replayIntegration = ((options) => {\n return new Replay(options);\n}) ;\n\n/**\n * Replay integration\n *\n * TODO: Rewrite this to be functional integration\n * Exported for tests.\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 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 onError,\n } = {}) {\n this.name = Replay.id;\n\n const privacyOptions = getPrivacyOptions({\n mask,\n unmask,\n block,\n unblock,\n ignore,\n });\n\n this._recordingOptions = {\n maskAllInputs,\n maskAllText,\n 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 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 onError,\n\n _experiments,\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 afterAllSetup(client) {\n if (!isBrowser() || this._replay) {\n return;\n }\n\n this._setup(client);\n this._initialize(client);\n }\n\n /**\n * Start a replay regardless of sampling rate. Calling this will always\n * create a new session. Will log a message 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 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 * If replay is not enabled, a new session replay is started.\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) {\n return Promise.resolve();\n }\n\n // assuming a session should be recorded in this case\n if (!this._replay.isEnabled()) {\n this._replay.start();\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 * Get the current recording mode. This can be either `session` or `buffer`.\n *\n * `session`: Recording the whole session, sending it continuously\n * `buffer`: Always keeping 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 getRecordingMode() {\n if (!this._replay || !this._replay.isEnabled()) {\n return;\n }\n\n return this._replay.recordingMode;\n }\n\n /**\n * Initializes replay.\n */\n _initialize(client) {\n if (!this._replay) {\n return;\n }\n\n this._maybeLoadFromReplayCanvasIntegration(client);\n this._replay.initializeSampling();\n }\n\n /** Setup the integration. */\n _setup(client) {\n // Client is not available in constructor, so we need to wait until setupOnce\n const finalOptions = loadReplayOptionsFromClient(this._initialOptions, client);\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(client) {\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 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, client) {\n const opt = client.getOptions() ;\n\n const finalOptions = {\n sessionSampleRate: 0,\n errorSampleRate: 0,\n ...dropUndefinedKeys(initialOptions),\n };\n\n const replaysSessionSampleRate = parseSampleRate(opt.replaysSessionSampleRate);\n const replaysOnErrorSampleRate = parseSampleRate(opt.replaysOnErrorSampleRate);\n\n if (replaysSessionSampleRate == null && replaysOnErrorSampleRate == null) {\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 (replaysSessionSampleRate != null) {\n finalOptions.sessionSampleRate = replaysSessionSampleRate;\n }\n\n if (replaysOnErrorSampleRate != null) {\n finalOptions.errorSampleRate = 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 */\nfunction getReplay() {\n const client = getClient();\n return client && client.getIntegrationByName('Replay');\n}\n\nexport { getReplay, replayIntegration };\n//# sourceMappingURL=index.js.map\n"],"names":["canvasService","canvasCtx","errorHandler","wrappedEmit","_takeFullSnapshot","handlers","NodeType","EventType2","IncrementalSource2","MouseInteractions2","PointerTypes2","NodeType$3","NodeType$1","NodeType$2","WINDOW","_sentry_core__WEBPACK_IMPORTED_MODULE_0__","n","REPLAY_SESSION_KEY","UNABLE_TO_SEND_REPLAY","_nullishCoalesce$1","lhs","rhsFn","_optionalChain$5","ops","lastAccessLHS","value","i","length","op","fn","args","call","undefined","isShadowRoot","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","JSON","stringify","href","layerName","push","supportsText","media","mediaText","needsSafariColonFix","selectorText","needsAllFix","style","fixAllCssProperty","styles","styleDeclaration","attribute","isImportant","getPropertyPriority","getPropertyValue","cssStringified","Mirror","constructor","idNodeMap","Map","nodeMetaMap","WeakMap","getId","id","_3","getMeta","_4","_5","getNode","get","getIds","keys","removeNodeFromMap","delete","childNodes","forEach","childNode","has","hasNode","node","add","meta","set","oldNode","reset","shouldMaskInput","maskInputOptions","tagName","type","Boolean","toLowerCase","maskInputValue","isMasked","element","maskInputFn","text","repeat","str","toUpperCase","ORIGINAL_ATTRIBUTE_NAME","getInputType","hasAttribute","getInputValue","el","getAttribute","extractFileExtension","path","baseURL","url","URL","window","location","err","match","pathname","_6","cachedImplementations$1","getImplementation$1","name","cached","document","impl","createElement","sandbox","hidden","head","appendChild","contentWindow","removeChild","e","bind","setTimeout$2","rest","clearTimeout$2","getIframeContentDocument","iframe","contentDocument","_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","indexOf","slice","stack","parts","part","pop","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","cachedDocument","absoluteToDoc","doc","attributeValue","trim","getHref","customHref","a","startsWith","setAttribute","transformAttribute","maskAttributeFn","getAbsoluteSrcsetString","pos","collectCharacters","regEx","chars","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","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","crossorigin","_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","blankCanvasDataURL","image","imageSrc","currentSrc","priorCrossOrigin","crossOrigin","recordInlineImage","removeEventListener","naturalWidth","naturalHeight","drawImage","complete","addEventListener","warn","removeAttribute","rr_mediaState","paused","rr_mediaCurrentTime","currentTime","scrollLeft","rr_scrollLeft","scrollTop","rr_scrollTop","getBoundingClientRect","class","rr_width","rr_height","src","rr_src","customElements","Element","isSVG","isSVGElement","ownerSVGElement","isCustom","TEXT_NODE","serializeTextNode","parentTagName","isStyle","isScript","isTextarea","nextSibling","previousSibling","_7","_8","_9","console","textarea","isInputMasked","Text","CDATA_SECTION_NODE","CDATA","COMMENT_NODE","Comment","slimDOMExcluded","sn","comment","script","headFavicon","headMetaDescKeywords","headMetaSocial","property","headMetaRobots","headMetaHttpEquiv","headMetaAuthorship","headMetaVerification","serializedNode","assign","recordChild","isShadowHost","headWhitespace","bypassOptions","childN","serializedChildNode","isElement$1","isShadow","onceIframeLoaded","iframeEl","listener","readyState","win","fired","timer","blankUrl","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","now","Date","leading","remaining","context","clearTimeout$1","getImplementation","apply","trailing","setTimeout$1","patch","source","replacement","original","wrapped","defineProperties","__rrweb_original__","enumerable","Proxy","Reflect","prop","receiver","nowTimestamp","getWindowScroll","left","scrollingElement","pageXOffset","documentElement","body","top","pageYOffset","_10","_11","_12","_13","_14","getWindowHeight","innerHeight","clientHeight","getWindowWidth","innerWidth","clientWidth","closestElementOfNode","isBlocked","checkAncestors","blockedPredicate","isUnblocked","blockDistance","unblockDistance","isIgnored","legacy_isTouchEvent","event","changedTouches","isSerializedIframe","nodeName","isSerializedStylesheet","hasShadowRoot","_18","getTime","StyleSheetMirror","styleIDMap","idStyleMap","_sentry_core__WEBPACK_IMPORTED_MODULE_1__","h","newId","getStyle","generateId","getShadowHost","shadowHost","_19","getRootNode","_20","_21","Node","DOCUMENT_FRAGMENT_NODE","inDom","ownerDocument","shadowHostInDom","getRootShadowHost","rootShadowHost","cachedImplementations","EventType","IncrementalSource","MouseInteractions","PointerTypes","getIFrameContentDocument","DoubleLinkedList","tail","position","current","index","_optionalChain$3","next","addNode","__ln","removeNode","moveKey","parentId","MutationBuffer","frozen","locked","texts","attributeMap","removes","mapRemoves","movedMap","addedSet","Set","movedSet","droppedSet","processMutations","mutations","processMutation","emit","adds","addedIds","addList","getNextId","ns","nextId","pushAdd","currentN","iframeManager","addIframe","stylesheetManager","trackLinkElement","shadowDomManager","addShadowRoot","childSn","attachIframe","canvasManager","addWindow","observeAttachShadow","attachLinkElement","shift","isParentRemoved","isAncestorInSet","candidate","tailNode","_node","unhandledNode","payload","filter","diffAsStr","styleDiff","unchangedAsStr","_unchangedStyles","mutationCb","m","oldValue","attributeName","item","unattachedDoc","implementation","createHTMLDocument","old","pname","newValue","newPriority","addedNodes","genAdds","removedNodes","nodeId","deepDelete","isAncestorRemoved","processedNodeManager","inOtherBuffer","targetId","init","key","freeze","unfreeze","isFrozen","lock","unlock","addsSet","_isParentRemoved","r","size","_isAncestorInSet","callbackWrapper","cb","rrwebWrapped","_optionalChain$2","mutationBuffers","getEventTarget","composedPath","initMutationObserver","rootEl","mutationBuffer","mutationObserverCtor","MutationObserver","__rrMutationObserver","angularZoneSymbol","Zone","__symbol__","observer","onMutation","observe","attributeOldValue","characterData","characterDataOldValue","childList","subtree","initScrollObserver","scrollCb","sampling","updatePosition","evt","defaultView","scrollLeftTop","scroll","INPUT_TAGS","lastInputValueMap","getNestedCSSRulePositions","recurse","childRule","parentRule","CSSGroupingRule","hasNestedCSSRule","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","mutationObserver","currentWindow","recordDOM","mousemoveHandler","initMoveObserver","mousemoveCb","timeBaseline","mousemove","threshold","callbackThreshold","mousemoveCallback","positions","wrappedCb","totalOffset","p","timeOffset","clientX","clientY","DragEvent","Drag","MouseEvent","MouseMove","TouchMove","mouseInteractionHandler","initMouseInteractionObserver","mouseInteractionCb","mouseInteraction","disableMap","currentPointerType","getHandler","pointerType","thisEventKey","eventKey","Mouse","Touch","Pen","MouseDown","MouseUp","Click","Number","isNaN","endsWith","eventName","handler","PointerEvent","TouchStart","TouchEnd","scrollHandler","viewportResizeHandler","initViewportResizeObserver","viewportResizeCb","lastH","lastW","updateDimension","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","adoptedStyleSheetObserver","styleDeclarationObserver","fontObserver","initStyleSheetObserver","styleSheetRuleCb","replaceSync","CSSStyleSheet","insertRule","thisArg","argumentsList","deleteRule","supportedNestedCSSRuleTypes","canMonkeyPatchNestedCSSRule","unmodifiedFunctions","entries","typeKey","initStyleDeclarationObserver","styleDeclarationCb","ignoreCSSAttributes","setProperty","CSSStyleDeclaration","priority","_17","removeProperty","remove","collectFonts","initFontObserver","fontCb","fontMap","originalFontFace","FontFace","family","descriptors","fontFace","fontSource","Uint8Array","restoreHandler","fonts","selectionObserver","initSelectionObserver","param","selectionCb","collapsed","updateSelection","selection","getSelection","isCollapsed","ranges","count","rangeCount","range","getRangeAt","startContainer","startOffset","endContainer","endOffset","blocked","start","end","customElementObserver","initCustomElementObserver","customElementCb","define","pluginHandlers","plugin","plugins","callback","b","_22","disconnect","_23","CrossOriginIframeMirror","generateIdFn","iframeIdToRemoteIdMap","iframeRemoteIdToIdMap","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","getIdToRemoteIdMap","remoteIdToIdMap","getRemoteIdToIdMap","getRemoteId","getRemoteIds","ids","_optionalChain$1","IframeManagerNoop","crossOriginIframeMirror","crossOriginIframeRootIdMap","addLoadListener","IframeManager","iframes","crossOriginIframeMap","recordCrossOriginIframes","crossOriginIframeStyleMirror","handleMessage","loadListener","isAttachIframe","adoptedStyleSheets","message","crossOriginMessageEvent","iframeSourceWindow","transformedEvent","transformCrossOriginEvent","isCheckout","FullSnapshot","replaceIdOnNode","patchRootIdOnNode","timestamp","IncrementalSnapshot","Mutation","Meta","Load","DomContentLoaded","Plugin","Custom","replaceIds","ViewportResize","MediaInteraction","MouseInteraction","Scroll","CanvasMutation","Input","StyleSheetRule","StyleDeclaration","replaceStyleIds","Font","Selection","AdoptedStyleSheet","iframeMirror","obj","isArray","child","ShadowDomManagerNoop","ShadowDomManager","shadowDoms","WeakSet","restoreHandlers","patchAttachShadow","iframeElement","iframeWindow","getIFrameContentWindow","manager","option","resetShadowRoots","CanvasManagerNoop","snapshot","StylesheetManager","trackedLinkElements","adoptedStyleSheetCb","linkEl","trackStylesheetInLinkElement","adoptedStyleSheetData","styleIds","CSSRule","ProcessedNodeManager","nodeMap","active","thisBuffer","buffers","onRequestAnimationFrame","destroy","cleanFrame","_sentry_core__WEBPACK_IMPORTED_MODULE_2__","debug","record","lastFullSnapshotEvent","checkoutEveryNms","checkoutEveryNth","maskAllInputs","_maskInputOptions","_slimDOMOptions","maxCanvasSize","packFn","mousemoveWait","recordAfter","getCanvasManager","inEmittingFrame","parent","passEmitsToParent","color","date","email","month","number","search","tel","time","week","select","radio","checkbox","polyfill","NodeList","DOMTokenList","incrementalSnapshotCount","eventProcessor","buf","postMessage","exceedCount","exceedTime","takeFullSnapshot","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","wrappedAdoptedStyleSheetEmit","__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","_sentry_core__WEBPACK_IMPORTED_MODULE_3__","Fv","getClosestInteractive","closestInteractive","closest","getClickTargetNode","getTargetNode","IncrementalMutationSources","ClickDetector","slowClickConfig","_addBreadcrumbEvent","_lastMutation","_lastScroll","_clicks","_timeout","_threshold","_scrollTimeout","scrollTimeout","_replay","_ignoreSelector","addListeners","cleanupWindowOpen","nowInSeconds","_sentry_core__WEBPACK_IMPORTED_MODULE_4__","hl","originalWindowOpen","splice","_teardown","removeListeners","_checkClickTimeout","clearTimeout","handleClick","ignoreElement","SLOW_CLICK_TAGS","newClick","clickBreadcrumb","clickCount","click","abs","_scheduleCheckClicks","registerMutation","registerScroll","registerClick","_handleMultiClick","_getClicks","_checkClicks","timedOutClicks","mutationAfter","scrollAfter","_generateBreadcrumbs","hadScroll","hadMutation","timeAfterClickMs","endReason","route","getCurrentRoute","metric","_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_5__","iK","createBreadcrumb","ATTRIBUTES_TO_RECORD","handleDomListener","isEnabled","handleDom","handlerData","getDomTarget","isClick","_sentry_core__WEBPACK_IMPORTED_MODULE_6__","Rt","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","webVitalHandler","getter","replayPerformanceEntries","createPerformanceEntry","_sentry_core__WEBPACK_IMPORTED_MODULE_7__","Z1","performance","timeOrigin","getLargestContentfulPaint","lastEntry","getWebVital","getCumulativeLayoutShift","layoutShifts","nodes","sources","nodeIds","getFirstInputDelay","getInteractionToNextPaint","attributions","rating","DEBUG_BUILD","__SENTRY_DEBUG__","CONSOLE_LEVELS","PREFIX","_addBreadcrumb","level","_sentry_core__WEBPACK_IMPORTED_MODULE_9__","logger","makeReplayLogger","_capture","_trace","_logger","exception","infoTick","setConfig","opts","captureExceptions","traceInternals","_sentry_core__WEBPACK_IMPORTED_MODULE_10__","kg","_sentry_core__WEBPACK_IMPORTED_MODULE_11__","V","_sentry_core__WEBPACK_IMPORTED_MODULE_12__","Tb","info","setTimeout","EventBufferSizeExceededError","Error","EventBufferArray","_totalSize","hasCheckout","waitForCheckout","hasEvents","addEvent","eventSize","finish","Promise","resolve","eventsRet","clear","getEarliestTimestamp","sort","WorkerHandler","worker","_worker","ensureReady","_ensureReadyPromise","reject","success","once","terminate","method","arg","_getAndIncrementId","response","EventBufferCompressionWorker","_earliestTimestamp","_sendEventToWorker","_finishRequest","then","EventBufferProxy","_fallback","_compression","_used","_ensureWorkerIsLoadedPromise","_ensureWorkerIsLoaded","ensureWorkerIsLoaded","_switchToCompressionWorker","addEventPromises","all","hasSessionStorage","sessionStorage","isSampled","sampleRate","random","makeSession","session","_sentry_core__WEBPACK_IMPORTED_MODULE_13__","DM","started","lastActivity","segmentId","sampled","previousSessionId","saveSession","setItem","createSession","sessionSampleRate","allowBuffering","stickySession","isExpired","initialTime","expiry","targetTime","isSessionExpired","maxReplayDuration","sessionIdleExpire","shouldRefreshSession","loadOrCreateSession","sessionOptions","existingSession","fetchSession","sessionStringFromStorage","getItem","sessionObj","parse","addEventSync","shouldAddEvent","_addEvent","eventBuffer","isBufferMode","recordingMode","replayOptions","getOptions","eventAfterPossibleCallback","maybeApplyCallback","beforeAddRecordingEvent","isExceeded","handleException","stop","reason","client","_sentry_core__WEBPACK_IMPORTED_MODULE_14__","s3","recordDroppedEvent","isPaused","timestampInMs","timeouts","sessionIdlePause","initialTimestamp","isTransactionEvent","isFeedbackEvent","isBreadcrumbWithCategory","resetReplayIdOnDynamicSamplingContext","dsc","nZ","getPropagationContext","replay_id","activeSpan","_sentry_core__WEBPACK_IMPORTED_MODULE_15__","HN","_sentry_core__WEBPACK_IMPORTED_MODULE_16__","jC","createPerformanceSpans","description","startTimestamp","endTimestamp","addNetworkBreadcrumb","_experiments","_sentry_core__WEBPACK_IMPORTED_MODULE_17__","W","getBodySize","textEncoder","TextEncoder","encode","URLSearchParams","FormData","formDataStr","_serializeFormData","Blob","ArrayBuffer","byteLength","parseContentLengthHeader","header","parseInt","getBodyString","mergeWarning","warning","headers","_meta","warnings","newMeta","existingWarnings","makeNetworkReplayBreadcrumb","request","Jr","buildSkippedNetworkRequestOrResponse","bodySize","buildNetworkRequestOrResponse","normalizedBody","normalizeNetworkBody","exceedsSizeLimit","isProbablyJson","_strIsProbablyJson","first","last","truncatedBody","jsonBody","getAllowedHeaders","allowedHeaders","reduce","filteredHeaders","formData","urlMatches","urls","fullUrl","getFullUrl","baseURI","fixedUrl","_sentry_core__WEBPACK_IMPORTED_MODULE_18__","U0","captureFetchBreadcrumbToReplay","hint","_prepareFetchData","status_code","request_body_size","requestBodySize","response_body_size","responseBodySize","captureDetails","networkDetailAllowUrls","networkDetailDenyUrls","_getRequestInfo","networkCaptureBodies","networkRequestHeaders","fetchArgs","getHeadersFromOptions","requestBody","_getFetchRequestArgBody","bodyStr","_getResponseInfo","networkResponseHeaders","getAllHeaders","bodyText","_parseFetchResponseBody","getResponseData","res","_tryCloneResponse","clone","_getResponseText","txt","finally","allHeaders","Headers","captureXhrBreadcrumbToReplay","_prepareXhrData","xhr","xhrInfo","_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_19__","xU","request_headers","getResponseHeaders","getAllResponseHeaders","acc","line","requestWarning","responseBody","responseWarning","_getXhrResponseBody","errors","responseText","_parseXhrResponse","responseType","outerHTML","addMemoryEntry","createMemoryEntry","memoryEntry","jsHeapSizeLimit","totalJSHeapSize","usedJSHeapSize","memory","NAVIGATOR","navigator","prepareReplayEvent","scope","replayId","event_id","integrations","_integrations","eventHint","preparedEvent","_sentry_core__WEBPACK_IMPORTED_MODULE_23__","R","aF","platform","metadata","getSdkMetadata","version","sdk","sendReplayRequest","recordingData","segment_id","eventContext","tunnel","preparedRecordingData","prepareRecordingData","payloadWithSequence","replayHeaders","enc","sequence","errorIds","traceIds","transport","getTransport","dsn","getDsn","_sentry_core__WEBPACK_IMPORTED_MODULE_24__","WD","baseEvent","replay_start_timestamp","error_ids","trace_ids","replay_type","replayEvent","sdkProcessingMetadata","envelope","_sentry_core__WEBPACK_IMPORTED_MODULE_22__","Jd","Cd","HY","send","cause","TransportStatusCodeError","rateLimits","_sentry_core__WEBPACK_IMPORTED_MODULE_25__","WG","Q","RateLimitError","sendReplay","replayData","retryConfig","interval","onError","_retryCount","THROTTLED","ReplayContainer","recordingOptions","__init","__init2","__init3","__init4","__init5","__init6","performanceEntries","_lastActivity","_isEnabled","_isPaused","_requiresManualStart","_hasInitializedCoreListeners","_context","initialUrl","_recordingOptions","_options","_debouncedFlush","debounce","callbackReturnValue","timerId","maxTimerId","maxWait","max","invokeFunc","cancelTimers","debounced","cancel","flush","_flush","flushMinDelay","flushMaxDelay","_throttledAddEvent","throttle","maxCount","durationSeconds","counter","_cleanup","_getTotalCount","values","isThrottled","floor","wasThrottled","slowClickTimeout","slowClickIgnoreSelectors","experiments","isRecordingCanvas","_canvas","initializeSampling","errorSampleRate","requiresManualStart","_initializeSessionForSampling","_initializeRecording","_updateUserActivity","startBuffering","startRecording","hadFirstEvent","canvasOptions","_stopRecording","continuousCheckout","_isCheckout","updateClickDetectorForRecordingEvent","HTMLElement","setInitialState","createOptionsEvent","shouldRecordCanvas","useCompressionOption","useCompression","blockAllMedia","networkDetailHasUrls","networkRequestHasHeaders","networkResponseHasHeaders","earliestEvent","userAgent","maxTouchPoints","_onMutationHandler","stopRecording","forceFlush","_removeListeners","force","deleteSession","removeItem","pause","resume","_checkSession","sendBufferedReplayOrFlush","continueRecording","flushImmediate","activityTime","hasStoppedRecording","_updateSessionActivity","_maybeSaveSession","cbResult","updateUserActivity","conditionalFlush","cancelFlush","getSessionId","urlPath","hash","_clearContext","lastActiveSpan","lastRootSpan","Gx","XU","_sentry_core__WEBPACK_IMPORTED_MODULE_26__","Zj","createEventBuffer","workerUrl","customWorkerUrl","Worker","_loadWorker","__SENTRY_EXCLUDE_REPLAY_WORKER__","createObjectURL","_addListeners","currentSession","_refreshSession","_handleVisibilityChange","_handleWindowBlur","_handleWindowFocus","_handleKeyboardEvent","addGlobalListeners","_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_20__","O","_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_21__","handleHistory","to","handleBreadcrumbs","beforeAddBreadcrumb","normalizeConsoleBreadcrumb","arguments","isTruncated","normalizedArgs","normalizedArg","stringified","handleNetworkBreadcrumbs","beforeAddNetworkBreadcrumb","_isXhrBreadcrumb","enrichXhrBreadcrumb","reqSize","resSize","getResponseHeader","_getBodySize","_isFetchBreadcrumb","enrichFetchBreadcrumb","breadcrumbs","isSessionActive","contexts","feedback","feedbackId","originalException","__rrweb__","log","isErrorEventSampled","shouldTagReplayId","tags","Qy","handleHydrationError","exceptionValue","l4","sendResponse","handleTransactionEvent","replayContext","trace","trace_id","beforeErrorSampling","span","feedbackEvent","includeReplay","_performanceCleanupCallback","setupPerformanceObserver","addPerformanceEntry","onEntries","clearCallbacks","_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_8__","_j","$A","PR","YF","clearCallback","visibilityState","_doChangeToForegroundTasks","_doChangeToBackgroundTasks","handleKeyboardEvent","getKeyboardBreadcrumb","isContentEditable","isCharacterKey","baseBreadcrumb","expired","_createCustomBreadcrumb","_addPerformanceEntries","createPerformanceEntries","concat","initialTimestampInSeconds","_updateInitialTimestampFromEventBuffer","_popEventContext","_runFlush","tooShort","minReplayDuration","tooLong","_flushInProgress","_flushLock","mutationLimit","mutationBreadcrumbLimit","overMutationLimit","getOption","selectors","defaultSelectors","MEDIA_SELECTORS","DEFAULT_NETWORK_HEADERS","_initialized","replayIntegration","Replay","__initStatic","mask","maskAttributes","unmask","block","unblock","ignore","maskFn","privacyOptions","getPrivacyOptions","maskSelector","unmaskSelector","password","maskAttribute","_initialOptions","_getMergedNetworkHeaders","_isInitialized","_sentry_core__WEBPACK_IMPORTED_MODULE_27__","j","afterAllSetup","_setup","_initialize","getReplayId","getRecordingMode","_maybeLoadFromReplayCanvasIntegration","finalOptions","loadReplayOptionsFromClient","initialOptions","opt","replaysSessionSampleRate","_sentry_core__WEBPACK_IMPORTED_MODULE_28__","replaysOnErrorSampleRate","Cf","canvasIntegration","getIntegrationByName"],"sourceRoot":""}