MOON
Server: Apache
System: Linux nserver.cafsindia.com 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: cafsindia (1002)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: /home/cafsindia/snap.cafsinfotech.in/node_modules/@sentry/replay/cjs/index.js.map
{"version":3,"file":"index.js","sources":["../../../src/constants.ts","../../../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js","../../../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/utils.js","../../../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/types/dist/rrweb-types.js","../../../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/mutation.js","../../../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/error-handler.js","../../../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observer.js","../../../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/cross-origin-iframe-mirror.js","../../../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/iframe-manager.js","../../../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js","../../../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js","../../../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/stylesheet-manager.js","../../../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/processed-node-manager.js","../../../../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/index.js","../../../src/types/rrweb.ts","../../../src/util/timestamp.ts","../../../src/coreHandlers/util/addBreadcrumbEvent.ts","../../../src/coreHandlers/util/domUtils.ts","../../../src/coreHandlers/util/onWindowOpen.ts","../../../src/coreHandlers/handleClick.ts","../../../src/util/createBreadcrumb.ts","../../../../../node_modules/@sentry-internal/rrweb-snapshot/es/rrweb-snapshot.js","../../../src/coreHandlers/util/getAttributesToRecord.ts","../../../src/coreHandlers/handleDom.ts","../../../src/coreHandlers/handleKeyboardEvent.ts","../../../src/util/createPerformanceEntries.ts","../../../src/coreHandlers/performanceObserver.ts","../../../../replay-worker/build/npm/esm/worker.ts","../../../../replay-worker/build/npm/esm/index.js","../../../src/util/log.ts","../../../src/eventBuffer/error.ts","../../../src/eventBuffer/EventBufferArray.ts","../../../src/eventBuffer/WorkerHandler.ts","../../../src/eventBuffer/EventBufferCompressionWorker.ts","../../../src/eventBuffer/EventBufferProxy.ts","../../../src/eventBuffer/index.ts","../../../src/util/hasSessionStorage.ts","../../../src/session/clearSession.ts","../../../src/util/isSampled.ts","../../../src/session/saveSession.ts","../../../src/session/Session.ts","../../../src/session/createSession.ts","../../../src/session/fetchSession.ts","../../../src/util/isExpired.ts","../../../src/util/isSessionExpired.ts","../../../src/session/shouldRefreshSession.ts","../../../src/session/loadOrCreateSession.ts","../../../src/util/addEvent.ts","../../../src/util/eventUtils.ts","../../../src/coreHandlers/handleAfterSendEvent.ts","../../../src/util/isRrwebError.ts","../../../src/coreHandlers/util/shouldSampleForBufferEvent.ts","../../../src/coreHandlers/handleGlobalEvent.ts","../../../src/util/createPerformanceSpans.ts","../../../src/coreHandlers/handleHistory.ts","../../../src/util/shouldFilterRequest.ts","../../../src/coreHandlers/util/addNetworkBreadcrumb.ts","../../../src/coreHandlers/handleFetch.ts","../../../src/coreHandlers/handleXhr.ts","../../../src/coreHandlers/util/networkUtils.ts","../../../src/coreHandlers/util/fetchUtils.ts","../../../src/coreHandlers/util/xhrUtils.ts","../../../src/coreHandlers/handleNetworkBreadcrumbs.ts","../../../src/coreHandlers/handleScope.ts","../../../src/util/addGlobalListeners.ts","../../../src/util/addMemoryEntry.ts","../../../src/util/debounce.ts","../../../src/util/handleRecordingEmit.ts","../../../src/util/createReplayEnvelope.ts","../../../src/util/prepareRecordingData.ts","../../../src/util/prepareReplayEvent.ts","../../../src/util/sendReplayRequest.ts","../../../src/util/sendReplay.ts","../../../src/util/throttle.ts","../../../src/replay.ts","../../../src/util/getPrivacyOptions.ts","../../../src/util/maskAttribute.ts","../../../src/integration.ts"],"sourcesContent":["import { GLOBAL_OBJ } from '@sentry/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\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\nexport const REPLAY_SESSION_KEY = 'sentryReplaySession';\nexport const REPLAY_EVENT_NAME = 'replay_event';\nexport const RECORDING_EVENT_NAME = 'replay_recording';\nexport const UNABLE_TO_SEND_REPLAY = 'Unable to send Replay';\n\n// The idle limit for a session after which recording is paused.\nexport const SESSION_IDLE_PAUSE_DURATION = 300_000; // 5 minutes in ms\n\n// The idle limit for a session after which the session expires.\nexport const SESSION_IDLE_EXPIRE_DURATION = 900_000; // 15 minutes in ms\n\n/** Default flush delays */\nexport const DEFAULT_FLUSH_MIN_DELAY = 5_000;\n// XXX: Temp fix for our debounce logic where `maxWait` would never occur if it\n// was the same as `wait`\nexport const DEFAULT_FLUSH_MAX_DELAY = 5_500;\n\n/* How long to wait for error checkouts */\nexport const BUFFER_CHECKOUT_TIME = 60_000;\n\nexport const RETRY_BASE_INTERVAL = 5000;\nexport const RETRY_MAX_COUNT = 3;\n\n/* The max (uncompressed) size in bytes of a network body. Any body larger than this will be truncated. */\nexport const NETWORK_BODY_MAX_SIZE = 150_000;\n\n/* The max size of a single console arg that is captured. Any arg larger than this will be truncated. */\nexport const CONSOLE_ARG_MAX_SIZE = 5_000;\n\n/* Min. time to wait before we consider something a slow click. */\nexport const SLOW_CLICK_THRESHOLD = 3_000;\n/* For scroll actions after a click, we only look for a very short time period to detect programmatic scrolling. */\nexport const 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). */\nexport const REPLAY_MAX_EVENT_BUFFER_SIZE = 20_000_000; // ~20MB\n\n/** Replays must be min. 5s long before we send them. */\nexport const MIN_REPLAY_DURATION = 4_999;\n/* The max. allowed value that the minReplayDuration can be set to. */\nexport const MIN_REPLAY_DURATION_LIMIT = 15_000;\n\n/** The max. length of a replay. */\nexport const MAX_REPLAY_DURATION = 3_600_000; // 60 minutes in ms;\n\n/** Default attributes to be ignored when `maskAllText` is enabled */\nexport const DEFAULT_IGNORED_ATTRIBUTES = ['title', 'placeholder'];\n","var NodeType;\r\n(function (NodeType) {\r\n    NodeType[NodeType[\"Document\"] = 0] = \"Document\";\r\n    NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\r\n    NodeType[NodeType[\"Element\"] = 2] = \"Element\";\r\n    NodeType[NodeType[\"Text\"] = 3] = \"Text\";\r\n    NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\r\n    NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\r\n})(NodeType || (NodeType = {}));\n\nfunction isElement(n) {\r\n    return n.nodeType === n.ELEMENT_NODE;\r\n}\r\nfunction isShadowRoot(n) {\r\n    const host = n === null || n === void 0 ? void 0 : n.host;\r\n    return Boolean((host === null || host === void 0 ? void 0 : host.shadowRoot) === n);\r\n}\r\nfunction isNativeShadowDom(shadowRoot) {\r\n    return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\r\n}\r\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\r\n    if (cssText.includes(' background-clip: text;') &&\r\n        !cssText.includes(' -webkit-background-clip: text;')) {\r\n        cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\r\n    }\r\n    return cssText;\r\n}\r\nfunction escapeImportStatement(rule) {\r\n    const { cssText } = rule;\r\n    if (cssText.split('\"').length < 3)\r\n        return cssText;\r\n    const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\r\n    if (rule.layerName === '') {\r\n        statement.push(`layer`);\r\n    }\r\n    else if (rule.layerName) {\r\n        statement.push(`layer(${rule.layerName})`);\r\n    }\r\n    if (rule.supportsText) {\r\n        statement.push(`supports(${rule.supportsText})`);\r\n    }\r\n    if (rule.media.length) {\r\n        statement.push(rule.media.mediaText);\r\n    }\r\n    return statement.join(' ') + ';';\r\n}\r\nfunction stringifyStylesheet(s) {\r\n    try {\r\n        const rules = s.rules || s.cssRules;\r\n        return rules\r\n            ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join(''))\r\n            : null;\r\n    }\r\n    catch (error) {\r\n        return null;\r\n    }\r\n}\r\nfunction stringifyRule(rule) {\r\n    let importStringified;\r\n    if (isCSSImportRule(rule)) {\r\n        try {\r\n            importStringified =\r\n                stringifyStylesheet(rule.styleSheet) ||\r\n                    escapeImportStatement(rule);\r\n        }\r\n        catch (error) {\r\n        }\r\n    }\r\n    else if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\r\n        return fixSafariColons(rule.cssText);\r\n    }\r\n    return importStringified || rule.cssText;\r\n}\r\nfunction fixSafariColons(cssStringified) {\r\n    const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\r\n    return cssStringified.replace(regex, '$1\\\\$2');\r\n}\r\nfunction isCSSImportRule(rule) {\r\n    return 'styleSheet' in rule;\r\n}\r\nfunction isCSSStyleRule(rule) {\r\n    return 'selectorText' in rule;\r\n}\r\nclass Mirror {\r\n    constructor() {\r\n        this.idNodeMap = new Map();\r\n        this.nodeMetaMap = new WeakMap();\r\n    }\r\n    getId(n) {\r\n        var _a;\r\n        if (!n)\r\n            return -1;\r\n        const id = (_a = this.getMeta(n)) === null || _a === void 0 ? void 0 : _a.id;\r\n        return id !== null && id !== void 0 ? id : -1;\r\n    }\r\n    getNode(id) {\r\n        return this.idNodeMap.get(id) || null;\r\n    }\r\n    getIds() {\r\n        return Array.from(this.idNodeMap.keys());\r\n    }\r\n    getMeta(n) {\r\n        return this.nodeMetaMap.get(n) || null;\r\n    }\r\n    removeNodeFromMap(n) {\r\n        const id = this.getId(n);\r\n        this.idNodeMap.delete(id);\r\n        if (n.childNodes) {\r\n            n.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\r\n        }\r\n    }\r\n    has(id) {\r\n        return this.idNodeMap.has(id);\r\n    }\r\n    hasNode(node) {\r\n        return this.nodeMetaMap.has(node);\r\n    }\r\n    add(n, meta) {\r\n        const id = meta.id;\r\n        this.idNodeMap.set(id, n);\r\n        this.nodeMetaMap.set(n, meta);\r\n    }\r\n    replace(id, n) {\r\n        const oldNode = this.getNode(id);\r\n        if (oldNode) {\r\n            const meta = this.nodeMetaMap.get(oldNode);\r\n            if (meta)\r\n                this.nodeMetaMap.set(n, meta);\r\n        }\r\n        this.idNodeMap.set(id, n);\r\n    }\r\n    reset() {\r\n        this.idNodeMap = new Map();\r\n        this.nodeMetaMap = new WeakMap();\r\n    }\r\n}\r\nfunction createMirror() {\r\n    return new Mirror();\r\n}\r\nfunction shouldMaskInput({ maskInputOptions, tagName, type, }) {\r\n    if (tagName === 'OPTION') {\r\n        tagName = 'SELECT';\r\n    }\r\n    return Boolean(maskInputOptions[tagName.toLowerCase()] ||\r\n        (type && maskInputOptions[type]) ||\r\n        type === 'password' ||\r\n        (tagName === 'INPUT' && !type && maskInputOptions['text']));\r\n}\r\nfunction maskInputValue({ isMasked, element, value, maskInputFn, }) {\r\n    let text = value || '';\r\n    if (!isMasked) {\r\n        return text;\r\n    }\r\n    if (maskInputFn) {\r\n        text = maskInputFn(text, element);\r\n    }\r\n    return '*'.repeat(text.length);\r\n}\r\nfunction toLowerCase(str) {\r\n    return str.toLowerCase();\r\n}\r\nfunction toUpperCase(str) {\r\n    return str.toUpperCase();\r\n}\r\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\r\nfunction is2DCanvasBlank(canvas) {\r\n    const ctx = canvas.getContext('2d');\r\n    if (!ctx)\r\n        return true;\r\n    const chunkSize = 50;\r\n    for (let x = 0; x < canvas.width; x += chunkSize) {\r\n        for (let y = 0; y < canvas.height; y += chunkSize) {\r\n            const getImageData = ctx.getImageData;\r\n            const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\r\n                ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\r\n                : getImageData;\r\n            const pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\r\n            if (pixelBuffer.some((pixel) => pixel !== 0))\r\n                return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nfunction isNodeMetaEqual(a, b) {\r\n    if (!a || !b || a.type !== b.type)\r\n        return false;\r\n    if (a.type === NodeType.Document)\r\n        return a.compatMode === b.compatMode;\r\n    else if (a.type === NodeType.DocumentType)\r\n        return (a.name === b.name &&\r\n            a.publicId === b.publicId &&\r\n            a.systemId === b.systemId);\r\n    else if (a.type === NodeType.Comment ||\r\n        a.type === NodeType.Text ||\r\n        a.type === NodeType.CDATA)\r\n        return a.textContent === b.textContent;\r\n    else if (a.type === NodeType.Element)\r\n        return (a.tagName === b.tagName &&\r\n            JSON.stringify(a.attributes) ===\r\n                JSON.stringify(b.attributes) &&\r\n            a.isSVG === b.isSVG &&\r\n            a.needBlock === b.needBlock);\r\n    return false;\r\n}\r\nfunction getInputType(element) {\r\n    const type = element.type;\r\n    return element.hasAttribute('data-rr-is-password')\r\n        ? 'password'\r\n        : type\r\n            ?\r\n                toLowerCase(type)\r\n            : null;\r\n}\r\nfunction getInputValue(el, tagName, type) {\r\n    if (tagName === 'INPUT' && (type === 'radio' || type === 'checkbox')) {\r\n        return el.getAttribute('value') || '';\r\n    }\r\n    return el.value;\r\n}\n\nlet _id = 1;\r\nconst tagNameRegex = new RegExp('[^a-z0-9-_:]');\r\nconst IGNORED_NODE = -2;\r\nfunction genId() {\r\n    return _id++;\r\n}\r\nfunction getValidTagName(element) {\r\n    if (element instanceof HTMLFormElement) {\r\n        return 'form';\r\n    }\r\n    const processedTagName = toLowerCase(element.tagName);\r\n    if (tagNameRegex.test(processedTagName)) {\r\n        return 'div';\r\n    }\r\n    return processedTagName;\r\n}\r\nfunction extractOrigin(url) {\r\n    let origin = '';\r\n    if (url.indexOf('//') > -1) {\r\n        origin = url.split('/').slice(0, 3).join('/');\r\n    }\r\n    else {\r\n        origin = url.split('/')[0];\r\n    }\r\n    origin = origin.split('?')[0];\r\n    return origin;\r\n}\r\nlet canvasService;\r\nlet canvasCtx;\r\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\r\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\r\nconst URL_WWW_MATCH = /^www\\..*/i;\r\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\r\nfunction absoluteToStylesheet(cssText, href) {\r\n    return (cssText || '').replace(URL_IN_CSS_REF, (origin, quote1, path1, quote2, path2, path3) => {\r\n        const filePath = path1 || path2 || path3;\r\n        const maybeQuote = quote1 || quote2 || '';\r\n        if (!filePath) {\r\n            return origin;\r\n        }\r\n        if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\r\n            return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n        }\r\n        if (DATA_URI.test(filePath)) {\r\n            return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n        }\r\n        if (filePath[0] === '/') {\r\n            return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\r\n        }\r\n        const stack = href.split('/');\r\n        const parts = filePath.split('/');\r\n        stack.pop();\r\n        for (const part of parts) {\r\n            if (part === '.') {\r\n                continue;\r\n            }\r\n            else if (part === '..') {\r\n                stack.pop();\r\n            }\r\n            else {\r\n                stack.push(part);\r\n            }\r\n        }\r\n        return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\r\n    });\r\n}\r\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\r\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\r\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\r\n    if (attributeValue.trim() === '') {\r\n        return attributeValue;\r\n    }\r\n    let pos = 0;\r\n    function collectCharacters(regEx) {\r\n        let chars;\r\n        const match = regEx.exec(attributeValue.substring(pos));\r\n        if (match) {\r\n            chars = match[0];\r\n            pos += chars.length;\r\n            return chars;\r\n        }\r\n        return '';\r\n    }\r\n    const output = [];\r\n    while (true) {\r\n        collectCharacters(SRCSET_COMMAS_OR_SPACES);\r\n        if (pos >= attributeValue.length) {\r\n            break;\r\n        }\r\n        let url = collectCharacters(SRCSET_NOT_SPACES);\r\n        if (url.slice(-1) === ',') {\r\n            url = absoluteToDoc(doc, url.substring(0, url.length - 1));\r\n            output.push(url);\r\n        }\r\n        else {\r\n            let descriptorsStr = '';\r\n            url = absoluteToDoc(doc, url);\r\n            let inParens = false;\r\n            while (true) {\r\n                const c = attributeValue.charAt(pos);\r\n                if (c === '') {\r\n                    output.push((url + descriptorsStr).trim());\r\n                    break;\r\n                }\r\n                else if (!inParens) {\r\n                    if (c === ',') {\r\n                        pos += 1;\r\n                        output.push((url + descriptorsStr).trim());\r\n                        break;\r\n                    }\r\n                    else if (c === '(') {\r\n                        inParens = true;\r\n                    }\r\n                }\r\n                else {\r\n                    if (c === ')') {\r\n                        inParens = false;\r\n                    }\r\n                }\r\n                descriptorsStr += c;\r\n                pos += 1;\r\n            }\r\n        }\r\n    }\r\n    return output.join(', ');\r\n}\r\nfunction absoluteToDoc(doc, attributeValue) {\r\n    if (!attributeValue || attributeValue.trim() === '') {\r\n        return attributeValue;\r\n    }\r\n    const a = doc.createElement('a');\r\n    a.href = attributeValue;\r\n    return a.href;\r\n}\r\nfunction isSVGElement(el) {\r\n    return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\r\n}\r\nfunction getHref() {\r\n    const a = document.createElement('a');\r\n    a.href = '';\r\n    return a.href;\r\n}\r\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn) {\r\n    if (!value) {\r\n        return value;\r\n    }\r\n    if (name === 'src' ||\r\n        (name === 'href' && !(tagName === 'use' && value[0] === '#'))) {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'xlink:href' && value[0] !== '#') {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'background' &&\r\n        (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'srcset') {\r\n        return getAbsoluteSrcsetString(doc, value);\r\n    }\r\n    else if (name === 'style') {\r\n        return absoluteToStylesheet(value, getHref());\r\n    }\r\n    else if (tagName === 'object' && name === 'data') {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    if (typeof maskAttributeFn === 'function') {\r\n        return maskAttributeFn(name, value, element);\r\n    }\r\n    return value;\r\n}\r\nfunction ignoreAttribute(tagName, name, _value) {\r\n    return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\r\n}\r\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\r\n    try {\r\n        if (unblockSelector && element.matches(unblockSelector)) {\r\n            return false;\r\n        }\r\n        if (typeof blockClass === 'string') {\r\n            if (element.classList.contains(blockClass)) {\r\n                return true;\r\n            }\r\n        }\r\n        else {\r\n            for (let eIndex = element.classList.length; eIndex--;) {\r\n                const className = element.classList[eIndex];\r\n                if (blockClass.test(className)) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        if (blockSelector) {\r\n            return element.matches(blockSelector);\r\n        }\r\n    }\r\n    catch (e) {\r\n    }\r\n    return false;\r\n}\r\nfunction elementClassMatchesRegex(el, regex) {\r\n    for (let eIndex = el.classList.length; eIndex--;) {\r\n        const className = el.classList[eIndex];\r\n        if (regex.test(className)) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\r\n    if (!node)\r\n        return -1;\r\n    if (node.nodeType !== node.ELEMENT_NODE)\r\n        return -1;\r\n    if (distance > limit)\r\n        return -1;\r\n    if (matchPredicate(node))\r\n        return distance;\r\n    return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\r\n}\r\nfunction createMatchPredicate(className, selector) {\r\n    return (node) => {\r\n        const el = node;\r\n        if (el === null)\r\n            return false;\r\n        if (className) {\r\n            if (typeof className === 'string') {\r\n                if (el.matches(`.${className}`))\r\n                    return true;\r\n            }\r\n            else if (elementClassMatchesRegex(el, className)) {\r\n                return true;\r\n            }\r\n        }\r\n        if (selector && el.matches(selector))\r\n            return true;\r\n        return false;\r\n    };\r\n}\r\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\r\n    try {\r\n        const el = node.nodeType === node.ELEMENT_NODE\r\n            ? node\r\n            : node.parentElement;\r\n        if (el === null)\r\n            return false;\r\n        let maskDistance = -1;\r\n        let unmaskDistance = -1;\r\n        if (maskAllText) {\r\n            unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector));\r\n            if (unmaskDistance < 0) {\r\n                return true;\r\n            }\r\n            maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector), unmaskDistance >= 0 ? unmaskDistance : Infinity);\r\n        }\r\n        else {\r\n            maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector));\r\n            if (maskDistance < 0) {\r\n                return false;\r\n            }\r\n            unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector), maskDistance >= 0 ? maskDistance : Infinity);\r\n        }\r\n        return maskDistance >= 0\r\n            ? unmaskDistance >= 0\r\n                ? maskDistance <= unmaskDistance\r\n                : true\r\n            : unmaskDistance >= 0\r\n                ? false\r\n                : !!maskAllText;\r\n    }\r\n    catch (e) {\r\n    }\r\n    return !!maskAllText;\r\n}\r\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\r\n    const win = iframeEl.contentWindow;\r\n    if (!win) {\r\n        return;\r\n    }\r\n    let fired = false;\r\n    let readyState;\r\n    try {\r\n        readyState = win.document.readyState;\r\n    }\r\n    catch (error) {\r\n        return;\r\n    }\r\n    if (readyState !== 'complete') {\r\n        const timer = setTimeout(() => {\r\n            if (!fired) {\r\n                listener();\r\n                fired = true;\r\n            }\r\n        }, iframeLoadTimeout);\r\n        iframeEl.addEventListener('load', () => {\r\n            clearTimeout(timer);\r\n            fired = true;\r\n            listener();\r\n        });\r\n        return;\r\n    }\r\n    const blankUrl = 'about:blank';\r\n    if (win.location.href !== blankUrl ||\r\n        iframeEl.src === blankUrl ||\r\n        iframeEl.src === '') {\r\n        setTimeout(listener, 0);\r\n        return iframeEl.addEventListener('load', listener);\r\n    }\r\n    iframeEl.addEventListener('load', listener);\r\n}\r\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\r\n    let fired = false;\r\n    let styleSheetLoaded;\r\n    try {\r\n        styleSheetLoaded = link.sheet;\r\n    }\r\n    catch (error) {\r\n        return;\r\n    }\r\n    if (styleSheetLoaded)\r\n        return;\r\n    const timer = setTimeout(() => {\r\n        if (!fired) {\r\n            listener();\r\n            fired = true;\r\n        }\r\n    }, styleSheetLoadTimeout);\r\n    link.addEventListener('load', () => {\r\n        clearTimeout(timer);\r\n        fired = true;\r\n        listener();\r\n    });\r\n}\r\nfunction serializeNode(n, options) {\r\n    const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskAttributeFn, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, } = options;\r\n    const rootId = getRootId(doc, mirror);\r\n    switch (n.nodeType) {\r\n        case n.DOCUMENT_NODE:\r\n            if (n.compatMode !== 'CSS1Compat') {\r\n                return {\r\n                    type: NodeType.Document,\r\n                    childNodes: [],\r\n                    compatMode: n.compatMode,\r\n                };\r\n            }\r\n            else {\r\n                return {\r\n                    type: NodeType.Document,\r\n                    childNodes: [],\r\n                };\r\n            }\r\n        case n.DOCUMENT_TYPE_NODE:\r\n            return {\r\n                type: NodeType.DocumentType,\r\n                name: n.name,\r\n                publicId: n.publicId,\r\n                systemId: n.systemId,\r\n                rootId,\r\n            };\r\n        case n.ELEMENT_NODE:\r\n            return serializeElementNode(n, {\r\n                doc,\r\n                blockClass,\r\n                blockSelector,\r\n                unblockSelector,\r\n                inlineStylesheet,\r\n                maskAttributeFn,\r\n                maskInputOptions,\r\n                maskInputFn,\r\n                dataURLOptions,\r\n                inlineImages,\r\n                recordCanvas,\r\n                keepIframeSrcFn,\r\n                newlyAddedElement,\r\n                rootId,\r\n                maskAllText,\r\n                maskTextClass,\r\n                unmaskTextClass,\r\n                maskTextSelector,\r\n                unmaskTextSelector,\r\n            });\r\n        case n.TEXT_NODE:\r\n            return serializeTextNode(n, {\r\n                maskAllText,\r\n                maskTextClass,\r\n                unmaskTextClass,\r\n                maskTextSelector,\r\n                unmaskTextSelector,\r\n                maskTextFn,\r\n                maskInputOptions,\r\n                maskInputFn,\r\n                rootId,\r\n            });\r\n        case n.CDATA_SECTION_NODE:\r\n            return {\r\n                type: NodeType.CDATA,\r\n                textContent: '',\r\n                rootId,\r\n            };\r\n        case n.COMMENT_NODE:\r\n            return {\r\n                type: NodeType.Comment,\r\n                textContent: n.textContent || '',\r\n                rootId,\r\n            };\r\n        default:\r\n            return false;\r\n    }\r\n}\r\nfunction getRootId(doc, mirror) {\r\n    if (!mirror.hasNode(doc))\r\n        return undefined;\r\n    const docId = mirror.getId(doc);\r\n    return docId === 1 ? undefined : docId;\r\n}\r\nfunction serializeTextNode(n, options) {\r\n    var _a;\r\n    const { maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, maskTextFn, maskInputOptions, maskInputFn, rootId, } = options;\r\n    const parentTagName = n.parentNode && n.parentNode.tagName;\r\n    let textContent = n.textContent;\r\n    const isStyle = parentTagName === 'STYLE' ? true : undefined;\r\n    const isScript = parentTagName === 'SCRIPT' ? true : undefined;\r\n    const isTextarea = parentTagName === 'TEXTAREA' ? true : undefined;\r\n    if (isStyle && textContent) {\r\n        try {\r\n            if (n.nextSibling || n.previousSibling) {\r\n            }\r\n            else if ((_a = n.parentNode.sheet) === null || _a === void 0 ? void 0 : _a.cssRules) {\r\n                textContent = stringifyStylesheet(n.parentNode.sheet);\r\n            }\r\n        }\r\n        catch (err) {\r\n            console.warn(`Cannot get CSS styles from text's parentNode. Error: ${err}`, n);\r\n        }\r\n        textContent = absoluteToStylesheet(textContent, getHref());\r\n    }\r\n    if (isScript) {\r\n        textContent = 'SCRIPT_PLACEHOLDER';\r\n    }\r\n    const forceMask = needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText);\r\n    if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\r\n        textContent = maskTextFn\r\n            ? maskTextFn(textContent)\r\n            : textContent.replace(/[\\S]/g, '*');\r\n    }\r\n    if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\r\n        textContent = maskInputFn\r\n            ? maskInputFn(textContent, n.parentNode)\r\n            : textContent.replace(/[\\S]/g, '*');\r\n    }\r\n    if (parentTagName === 'OPTION' && textContent) {\r\n        const isInputMasked = shouldMaskInput({\r\n            type: null,\r\n            tagName: parentTagName,\r\n            maskInputOptions,\r\n        });\r\n        textContent = maskInputValue({\r\n            isMasked: needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked),\r\n            element: n,\r\n            value: textContent,\r\n            maskInputFn,\r\n        });\r\n    }\r\n    return {\r\n        type: NodeType.Text,\r\n        textContent: textContent || '',\r\n        isStyle,\r\n        rootId,\r\n    };\r\n}\r\nfunction serializeElementNode(n, options) {\r\n    const { doc, blockClass, blockSelector, unblockSelector, inlineStylesheet, maskInputOptions = {}, maskAttributeFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, } = options;\r\n    const needBlock = _isBlockedElement(n, blockClass, blockSelector, unblockSelector);\r\n    const tagName = getValidTagName(n);\r\n    let attributes = {};\r\n    const len = n.attributes.length;\r\n    for (let i = 0; i < len; i++) {\r\n        const attr = n.attributes[i];\r\n        if (!ignoreAttribute(tagName, attr.name, attr.value)) {\r\n            attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value, n, maskAttributeFn);\r\n        }\r\n    }\r\n    if (tagName === 'link' && inlineStylesheet) {\r\n        const stylesheet = Array.from(doc.styleSheets).find((s) => {\r\n            return s.href === n.href;\r\n        });\r\n        let cssText = null;\r\n        if (stylesheet) {\r\n            cssText = stringifyStylesheet(stylesheet);\r\n        }\r\n        if (cssText) {\r\n            delete attributes.rel;\r\n            delete attributes.href;\r\n            attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\r\n        }\r\n    }\r\n    if (tagName === 'style' &&\r\n        n.sheet &&\r\n        !(n.innerText || n.textContent || '').trim().length) {\r\n        const cssText = stringifyStylesheet(n.sheet);\r\n        if (cssText) {\r\n            attributes._cssText = absoluteToStylesheet(cssText, getHref());\r\n        }\r\n    }\r\n    if (tagName === 'input' ||\r\n        tagName === 'textarea' ||\r\n        tagName === 'select' ||\r\n        tagName === 'option') {\r\n        const el = n;\r\n        const type = getInputType(el);\r\n        const value = getInputValue(el, toUpperCase(tagName), type);\r\n        const checked = el.checked;\r\n        if (type !== 'submit' && type !== 'button' && value) {\r\n            const forceMask = needMaskingText(el, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, shouldMaskInput({\r\n                type,\r\n                tagName: toUpperCase(tagName),\r\n                maskInputOptions,\r\n            }));\r\n            attributes.value = maskInputValue({\r\n                isMasked: forceMask,\r\n                element: el,\r\n                value,\r\n                maskInputFn,\r\n            });\r\n        }\r\n        if (checked) {\r\n            attributes.checked = checked;\r\n        }\r\n    }\r\n    if (tagName === 'option') {\r\n        if (n.selected && !maskInputOptions['select']) {\r\n            attributes.selected = true;\r\n        }\r\n        else {\r\n            delete attributes.selected;\r\n        }\r\n    }\r\n    if (tagName === 'canvas' && recordCanvas) {\r\n        if (n.__context === '2d') {\r\n            if (!is2DCanvasBlank(n)) {\r\n                attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            }\r\n        }\r\n        else if (!('__context' in n)) {\r\n            const canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            const blankCanvas = document.createElement('canvas');\r\n            blankCanvas.width = n.width;\r\n            blankCanvas.height = n.height;\r\n            const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            if (canvasDataURL !== blankCanvasDataURL) {\r\n                attributes.rr_dataURL = canvasDataURL;\r\n            }\r\n        }\r\n    }\r\n    if (tagName === 'img' && inlineImages) {\r\n        if (!canvasService) {\r\n            canvasService = doc.createElement('canvas');\r\n            canvasCtx = canvasService.getContext('2d');\r\n        }\r\n        const image = n;\r\n        const oldValue = image.crossOrigin;\r\n        image.crossOrigin = 'anonymous';\r\n        const recordInlineImage = () => {\r\n            image.removeEventListener('load', recordInlineImage);\r\n            try {\r\n                canvasService.width = image.naturalWidth;\r\n                canvasService.height = image.naturalHeight;\r\n                canvasCtx.drawImage(image, 0, 0);\r\n                attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            }\r\n            catch (err) {\r\n                console.warn(`Cannot inline img src=${image.currentSrc}! Error: ${err}`);\r\n            }\r\n            oldValue\r\n                ? (attributes.crossOrigin = oldValue)\r\n                : image.removeAttribute('crossorigin');\r\n        };\r\n        if (image.complete && image.naturalWidth !== 0)\r\n            recordInlineImage();\r\n        else\r\n            image.addEventListener('load', recordInlineImage);\r\n    }\r\n    if (tagName === 'audio' || tagName === 'video') {\r\n        attributes.rr_mediaState = n.paused\r\n            ? 'paused'\r\n            : 'played';\r\n        attributes.rr_mediaCurrentTime = n.currentTime;\r\n    }\r\n    if (!newlyAddedElement) {\r\n        if (n.scrollLeft) {\r\n            attributes.rr_scrollLeft = n.scrollLeft;\r\n        }\r\n        if (n.scrollTop) {\r\n            attributes.rr_scrollTop = n.scrollTop;\r\n        }\r\n    }\r\n    if (needBlock) {\r\n        const { width, height } = n.getBoundingClientRect();\r\n        attributes = {\r\n            class: attributes.class,\r\n            rr_width: `${width}px`,\r\n            rr_height: `${height}px`,\r\n        };\r\n    }\r\n    if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\r\n        if (!n.contentDocument) {\r\n            attributes.rr_src = attributes.src;\r\n        }\r\n        delete attributes.src;\r\n    }\r\n    let isCustomElement;\r\n    try {\r\n        if (customElements.get(tagName))\r\n            isCustomElement = true;\r\n    }\r\n    catch (e) {\r\n    }\r\n    return {\r\n        type: NodeType.Element,\r\n        tagName,\r\n        attributes,\r\n        childNodes: [],\r\n        isSVG: isSVGElement(n) || undefined,\r\n        needBlock,\r\n        rootId,\r\n        isCustom: isCustomElement,\r\n    };\r\n}\r\nfunction lowerIfExists(maybeAttr) {\r\n    if (maybeAttr === undefined || maybeAttr === null) {\r\n        return '';\r\n    }\r\n    else {\r\n        return maybeAttr.toLowerCase();\r\n    }\r\n}\r\nfunction slimDOMExcluded(sn, slimDOMOptions) {\r\n    if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\r\n        return true;\r\n    }\r\n    else if (sn.type === NodeType.Element) {\r\n        if (slimDOMOptions.script &&\r\n            (sn.tagName === 'script' ||\r\n                (sn.tagName === 'link' &&\r\n                    (sn.attributes.rel === 'preload' ||\r\n                        sn.attributes.rel === 'modulepreload') &&\r\n                    sn.attributes.as === 'script') ||\r\n                (sn.tagName === 'link' &&\r\n                    sn.attributes.rel === 'prefetch' &&\r\n                    typeof sn.attributes.href === 'string' &&\r\n                    sn.attributes.href.endsWith('.js')))) {\r\n            return true;\r\n        }\r\n        else if (slimDOMOptions.headFavicon &&\r\n            ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\r\n                (sn.tagName === 'meta' &&\r\n                    (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\r\n                        lowerIfExists(sn.attributes.name) === 'application-name' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'icon' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\r\n            return true;\r\n        }\r\n        else if (sn.tagName === 'meta') {\r\n            if (slimDOMOptions.headMetaDescKeywords &&\r\n                lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaSocial &&\r\n                (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\r\n                    lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\r\n                    lowerIfExists(sn.attributes.name) === 'pinterest')) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaRobots &&\r\n                (lowerIfExists(sn.attributes.name) === 'robots' ||\r\n                    lowerIfExists(sn.attributes.name) === 'googlebot' ||\r\n                    lowerIfExists(sn.attributes.name) === 'bingbot')) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaHttpEquiv &&\r\n                sn.attributes['http-equiv'] !== undefined) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaAuthorship &&\r\n                (lowerIfExists(sn.attributes.name) === 'author' ||\r\n                    lowerIfExists(sn.attributes.name) === 'generator' ||\r\n                    lowerIfExists(sn.attributes.name) === 'framework' ||\r\n                    lowerIfExists(sn.attributes.name) === 'publisher' ||\r\n                    lowerIfExists(sn.attributes.name) === 'progid' ||\r\n                    lowerIfExists(sn.attributes.property).match(/^article:/) ||\r\n                    lowerIfExists(sn.attributes.property).match(/^product:/))) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaVerification &&\r\n                (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'csrf-token' ||\r\n                    lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\r\n                    lowerIfExists(sn.attributes.name) === 'verify-v1' ||\r\n                    lowerIfExists(sn.attributes.name) === 'verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction serializeNodeWithId(n, options) {\r\n    const { doc, mirror, blockClass, blockSelector, 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;\r\n    let { preserveWhiteSpace = true } = options;\r\n    const _serializedNode = serializeNode(n, {\r\n        doc,\r\n        mirror,\r\n        blockClass,\r\n        blockSelector,\r\n        maskAllText,\r\n        unblockSelector,\r\n        maskTextClass,\r\n        unmaskTextClass,\r\n        maskTextSelector,\r\n        unmaskTextSelector,\r\n        inlineStylesheet,\r\n        maskInputOptions,\r\n        maskAttributeFn,\r\n        maskTextFn,\r\n        maskInputFn,\r\n        dataURLOptions,\r\n        inlineImages,\r\n        recordCanvas,\r\n        keepIframeSrcFn,\r\n        newlyAddedElement,\r\n    });\r\n    if (!_serializedNode) {\r\n        console.warn(n, 'not serialized');\r\n        return null;\r\n    }\r\n    let id;\r\n    if (mirror.hasNode(n)) {\r\n        id = mirror.getId(n);\r\n    }\r\n    else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\r\n        (!preserveWhiteSpace &&\r\n            _serializedNode.type === NodeType.Text &&\r\n            !_serializedNode.isStyle &&\r\n            !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\r\n        id = IGNORED_NODE;\r\n    }\r\n    else {\r\n        id = genId();\r\n    }\r\n    const serializedNode = Object.assign(_serializedNode, { id });\r\n    mirror.add(n, serializedNode);\r\n    if (id === IGNORED_NODE) {\r\n        return null;\r\n    }\r\n    if (onSerialize) {\r\n        onSerialize(n);\r\n    }\r\n    let recordChild = !skipChild;\r\n    if (serializedNode.type === NodeType.Element) {\r\n        recordChild = recordChild && !serializedNode.needBlock;\r\n        delete serializedNode.needBlock;\r\n        const shadowRoot = n.shadowRoot;\r\n        if (shadowRoot && isNativeShadowDom(shadowRoot))\r\n            serializedNode.isShadowHost = true;\r\n    }\r\n    if ((serializedNode.type === NodeType.Document ||\r\n        serializedNode.type === NodeType.Element) &&\r\n        recordChild) {\r\n        if (slimDOMOptions.headWhitespace &&\r\n            serializedNode.type === NodeType.Element &&\r\n            serializedNode.tagName === 'head') {\r\n            preserveWhiteSpace = false;\r\n        }\r\n        const bypassOptions = {\r\n            doc,\r\n            mirror,\r\n            blockClass,\r\n            blockSelector,\r\n            maskAllText,\r\n            unblockSelector,\r\n            maskTextClass,\r\n            unmaskTextClass,\r\n            maskTextSelector,\r\n            unmaskTextSelector,\r\n            skipChild,\r\n            inlineStylesheet,\r\n            maskInputOptions,\r\n            maskAttributeFn,\r\n            maskTextFn,\r\n            maskInputFn,\r\n            slimDOMOptions,\r\n            dataURLOptions,\r\n            inlineImages,\r\n            recordCanvas,\r\n            preserveWhiteSpace,\r\n            onSerialize,\r\n            onIframeLoad,\r\n            iframeLoadTimeout,\r\n            onStylesheetLoad,\r\n            stylesheetLoadTimeout,\r\n            keepIframeSrcFn,\r\n        };\r\n        for (const childN of Array.from(n.childNodes)) {\r\n            const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n            if (serializedChildNode) {\r\n                serializedNode.childNodes.push(serializedChildNode);\r\n            }\r\n        }\r\n        if (isElement(n) && n.shadowRoot) {\r\n            for (const childN of Array.from(n.shadowRoot.childNodes)) {\r\n                const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n                if (serializedChildNode) {\r\n                    isNativeShadowDom(n.shadowRoot) &&\r\n                        (serializedChildNode.isShadow = true);\r\n                    serializedNode.childNodes.push(serializedChildNode);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (n.parentNode &&\r\n        isShadowRoot(n.parentNode) &&\r\n        isNativeShadowDom(n.parentNode)) {\r\n        serializedNode.isShadow = true;\r\n    }\r\n    if (serializedNode.type === NodeType.Element &&\r\n        serializedNode.tagName === 'iframe') {\r\n        onceIframeLoaded(n, () => {\r\n            const iframeDoc = n.contentDocument;\r\n            if (iframeDoc && onIframeLoad) {\r\n                const serializedIframeNode = serializeNodeWithId(iframeDoc, {\r\n                    doc: iframeDoc,\r\n                    mirror,\r\n                    blockClass,\r\n                    blockSelector,\r\n                    unblockSelector,\r\n                    maskAllText,\r\n                    maskTextClass,\r\n                    unmaskTextClass,\r\n                    maskTextSelector,\r\n                    unmaskTextSelector,\r\n                    skipChild: false,\r\n                    inlineStylesheet,\r\n                    maskInputOptions,\r\n                    maskAttributeFn,\r\n                    maskTextFn,\r\n                    maskInputFn,\r\n                    slimDOMOptions,\r\n                    dataURLOptions,\r\n                    inlineImages,\r\n                    recordCanvas,\r\n                    preserveWhiteSpace,\r\n                    onSerialize,\r\n                    onIframeLoad,\r\n                    iframeLoadTimeout,\r\n                    onStylesheetLoad,\r\n                    stylesheetLoadTimeout,\r\n                    keepIframeSrcFn,\r\n                });\r\n                if (serializedIframeNode) {\r\n                    onIframeLoad(n, serializedIframeNode);\r\n                }\r\n            }\r\n        }, iframeLoadTimeout);\r\n    }\r\n    if (serializedNode.type === NodeType.Element &&\r\n        serializedNode.tagName === 'link' &&\r\n        serializedNode.attributes.rel === 'stylesheet') {\r\n        onceStylesheetLoaded(n, () => {\r\n            if (onStylesheetLoad) {\r\n                const serializedLinkNode = serializeNodeWithId(n, {\r\n                    doc,\r\n                    mirror,\r\n                    blockClass,\r\n                    blockSelector,\r\n                    unblockSelector,\r\n                    maskAllText,\r\n                    maskTextClass,\r\n                    unmaskTextClass,\r\n                    maskTextSelector,\r\n                    unmaskTextSelector,\r\n                    skipChild: false,\r\n                    inlineStylesheet,\r\n                    maskInputOptions,\r\n                    maskAttributeFn,\r\n                    maskTextFn,\r\n                    maskInputFn,\r\n                    slimDOMOptions,\r\n                    dataURLOptions,\r\n                    inlineImages,\r\n                    recordCanvas,\r\n                    preserveWhiteSpace,\r\n                    onSerialize,\r\n                    onIframeLoad,\r\n                    iframeLoadTimeout,\r\n                    onStylesheetLoad,\r\n                    stylesheetLoadTimeout,\r\n                    keepIframeSrcFn,\r\n                });\r\n                if (serializedLinkNode) {\r\n                    onStylesheetLoad(n, serializedLinkNode);\r\n                }\r\n            }\r\n        }, stylesheetLoadTimeout);\r\n    }\r\n    return serializedNode;\r\n}\r\nfunction snapshot(n, options) {\r\n    const { mirror = new Mirror(), blockClass = 'rr-block', blockSelector = null, 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 || {};\r\n    const maskInputOptions = maskAllInputs === true\r\n        ? {\r\n            color: true,\r\n            date: true,\r\n            'datetime-local': true,\r\n            email: true,\r\n            month: true,\r\n            number: true,\r\n            range: true,\r\n            search: true,\r\n            tel: true,\r\n            text: true,\r\n            time: true,\r\n            url: true,\r\n            week: true,\r\n            textarea: true,\r\n            select: true,\r\n        }\r\n        : maskAllInputs === false\r\n            ? {}\r\n            : maskAllInputs;\r\n    const slimDOMOptions = slimDOM === true || slimDOM === 'all'\r\n        ?\r\n            {\r\n                script: true,\r\n                comment: true,\r\n                headFavicon: true,\r\n                headWhitespace: true,\r\n                headMetaDescKeywords: slimDOM === 'all',\r\n                headMetaSocial: true,\r\n                headMetaRobots: true,\r\n                headMetaHttpEquiv: true,\r\n                headMetaAuthorship: true,\r\n                headMetaVerification: true,\r\n            }\r\n        : slimDOM === false\r\n            ? {}\r\n            : slimDOM;\r\n    return serializeNodeWithId(n, {\r\n        doc: n,\r\n        mirror,\r\n        blockClass,\r\n        blockSelector,\r\n        unblockSelector,\r\n        maskAllText,\r\n        maskTextClass,\r\n        unmaskTextClass,\r\n        maskTextSelector,\r\n        unmaskTextSelector,\r\n        skipChild: false,\r\n        inlineStylesheet,\r\n        maskInputOptions,\r\n        maskAttributeFn,\r\n        maskTextFn,\r\n        maskInputFn,\r\n        slimDOMOptions,\r\n        dataURLOptions,\r\n        inlineImages,\r\n        recordCanvas,\r\n        preserveWhiteSpace,\r\n        onSerialize,\r\n        onIframeLoad,\r\n        iframeLoadTimeout,\r\n        onStylesheetLoad,\r\n        stylesheetLoadTimeout,\r\n        keepIframeSrcFn,\r\n        newlyAddedElement: false,\r\n    });\r\n}\r\n\nconst commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\r\nfunction parse(css, options = {}) {\r\n    let lineno = 1;\r\n    let column = 1;\r\n    function updatePosition(str) {\r\n        const lines = str.match(/\\n/g);\r\n        if (lines) {\r\n            lineno += lines.length;\r\n        }\r\n        const i = str.lastIndexOf('\\n');\r\n        column = i === -1 ? column + str.length : str.length - i;\r\n    }\r\n    function position() {\r\n        const start = { line: lineno, column };\r\n        return (node) => {\r\n            node.position = new Position(start);\r\n            whitespace();\r\n            return node;\r\n        };\r\n    }\r\n    class Position {\r\n        constructor(start) {\r\n            this.start = start;\r\n            this.end = { line: lineno, column };\r\n            this.source = options.source;\r\n        }\r\n    }\r\n    Position.prototype.content = css;\r\n    const errorsList = [];\r\n    function error(msg) {\r\n        const err = new Error(`${options.source || ''}:${lineno}:${column}: ${msg}`);\r\n        err.reason = msg;\r\n        err.filename = options.source;\r\n        err.line = lineno;\r\n        err.column = column;\r\n        err.source = css;\r\n        if (options.silent) {\r\n            errorsList.push(err);\r\n        }\r\n        else {\r\n            throw err;\r\n        }\r\n    }\r\n    function stylesheet() {\r\n        const rulesList = rules();\r\n        return {\r\n            type: 'stylesheet',\r\n            stylesheet: {\r\n                source: options.source,\r\n                rules: rulesList,\r\n                parsingErrors: errorsList,\r\n            },\r\n        };\r\n    }\r\n    function open() {\r\n        return match(/^{\\s*/);\r\n    }\r\n    function close() {\r\n        return match(/^}/);\r\n    }\r\n    function rules() {\r\n        let node;\r\n        const rules = [];\r\n        whitespace();\r\n        comments(rules);\r\n        while (css.length && css.charAt(0) !== '}' && (node = atrule() || rule())) {\r\n            if (node) {\r\n                rules.push(node);\r\n                comments(rules);\r\n            }\r\n        }\r\n        return rules;\r\n    }\r\n    function match(re) {\r\n        const m = re.exec(css);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const str = m[0];\r\n        updatePosition(str);\r\n        css = css.slice(str.length);\r\n        return m;\r\n    }\r\n    function whitespace() {\r\n        match(/^\\s*/);\r\n    }\r\n    function comments(rules = []) {\r\n        let c;\r\n        while ((c = comment())) {\r\n            if (c) {\r\n                rules.push(c);\r\n            }\r\n            c = comment();\r\n        }\r\n        return rules;\r\n    }\r\n    function comment() {\r\n        const pos = position();\r\n        if ('/' !== css.charAt(0) || '*' !== css.charAt(1)) {\r\n            return;\r\n        }\r\n        let i = 2;\r\n        while ('' !== css.charAt(i) &&\r\n            ('*' !== css.charAt(i) || '/' !== css.charAt(i + 1))) {\r\n            ++i;\r\n        }\r\n        i += 2;\r\n        if ('' === css.charAt(i - 1)) {\r\n            return error('End of comment missing');\r\n        }\r\n        const str = css.slice(2, i - 2);\r\n        column += 2;\r\n        updatePosition(str);\r\n        css = css.slice(i);\r\n        column += 2;\r\n        return pos({\r\n            type: 'comment',\r\n            comment: str,\r\n        });\r\n    }\r\n    function selector() {\r\n        const m = match(/^([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        return trim(m[0])\r\n            .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\r\n            .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, (m) => {\r\n            return m.replace(/,/g, '\\u200C');\r\n        })\r\n            .split(/\\s*(?![^(]*\\)),\\s*/)\r\n            .map((s) => {\r\n            return s.replace(/\\u200C/g, ',');\r\n        });\r\n    }\r\n    function declaration() {\r\n        const pos = position();\r\n        const propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\r\n        if (!propMatch) {\r\n            return;\r\n        }\r\n        const prop = trim(propMatch[0]);\r\n        if (!match(/^:\\s*/)) {\r\n            return error(`property missing ':'`);\r\n        }\r\n        const val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\r\n        const ret = pos({\r\n            type: 'declaration',\r\n            property: prop.replace(commentre, ''),\r\n            value: val ? trim(val[0]).replace(commentre, '') : '',\r\n        });\r\n        match(/^[;\\s]*/);\r\n        return ret;\r\n    }\r\n    function declarations() {\r\n        const decls = [];\r\n        if (!open()) {\r\n            return error(`missing '{'`);\r\n        }\r\n        comments(decls);\r\n        let decl;\r\n        while ((decl = declaration())) {\r\n            if (decl !== false) {\r\n                decls.push(decl);\r\n                comments(decls);\r\n            }\r\n            decl = declaration();\r\n        }\r\n        if (!close()) {\r\n            return error(`missing '}'`);\r\n        }\r\n        return decls;\r\n    }\r\n    function keyframe() {\r\n        let m;\r\n        const vals = [];\r\n        const pos = position();\r\n        while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\r\n            vals.push(m[1]);\r\n            match(/^,\\s*/);\r\n        }\r\n        if (!vals.length) {\r\n            return;\r\n        }\r\n        return pos({\r\n            type: 'keyframe',\r\n            values: vals,\r\n            declarations: declarations(),\r\n        });\r\n    }\r\n    function atkeyframes() {\r\n        const pos = position();\r\n        let m = match(/^@([-\\w]+)?keyframes\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const vendor = m[1];\r\n        m = match(/^([-\\w]+)\\s*/);\r\n        if (!m) {\r\n            return error('@keyframes missing name');\r\n        }\r\n        const name = m[1];\r\n        if (!open()) {\r\n            return error(`@keyframes missing '{'`);\r\n        }\r\n        let frame;\r\n        let frames = comments();\r\n        while ((frame = keyframe())) {\r\n            frames.push(frame);\r\n            frames = frames.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(`@keyframes missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'keyframes',\r\n            name,\r\n            vendor,\r\n            keyframes: frames,\r\n        });\r\n    }\r\n    function atsupports() {\r\n        const pos = position();\r\n        const m = match(/^@supports *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const supports = trim(m[1]);\r\n        if (!open()) {\r\n            return error(`@supports missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@supports missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'supports',\r\n            supports,\r\n            rules: style,\r\n        });\r\n    }\r\n    function athost() {\r\n        const pos = position();\r\n        const m = match(/^@host\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        if (!open()) {\r\n            return error(`@host missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@host missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'host',\r\n            rules: style,\r\n        });\r\n    }\r\n    function atmedia() {\r\n        const pos = position();\r\n        const m = match(/^@media *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const media = trim(m[1]);\r\n        if (!open()) {\r\n            return error(`@media missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@media missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'media',\r\n            media,\r\n            rules: style,\r\n        });\r\n    }\r\n    function atcustommedia() {\r\n        const pos = position();\r\n        const m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        return pos({\r\n            type: 'custom-media',\r\n            name: trim(m[1]),\r\n            media: trim(m[2]),\r\n        });\r\n    }\r\n    function atpage() {\r\n        const pos = position();\r\n        const m = match(/^@page */);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const sel = selector() || [];\r\n        if (!open()) {\r\n            return error(`@page missing '{'`);\r\n        }\r\n        let decls = comments();\r\n        let decl;\r\n        while ((decl = declaration())) {\r\n            decls.push(decl);\r\n            decls = decls.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(`@page missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'page',\r\n            selectors: sel,\r\n            declarations: decls,\r\n        });\r\n    }\r\n    function atdocument() {\r\n        const pos = position();\r\n        const m = match(/^@([-\\w]+)?document *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const vendor = trim(m[1]);\r\n        const doc = trim(m[2]);\r\n        if (!open()) {\r\n            return error(`@document missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@document missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'document',\r\n            document: doc,\r\n            vendor,\r\n            rules: style,\r\n        });\r\n    }\r\n    function atfontface() {\r\n        const pos = position();\r\n        const m = match(/^@font-face\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        if (!open()) {\r\n            return error(`@font-face missing '{'`);\r\n        }\r\n        let decls = comments();\r\n        let decl;\r\n        while ((decl = declaration())) {\r\n            decls.push(decl);\r\n            decls = decls.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(`@font-face missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'font-face',\r\n            declarations: decls,\r\n        });\r\n    }\r\n    const atimport = _compileAtrule('import');\r\n    const atcharset = _compileAtrule('charset');\r\n    const atnamespace = _compileAtrule('namespace');\r\n    function _compileAtrule(name) {\r\n        const re = new RegExp('^@' + name + '\\\\s*([^;]+);');\r\n        return () => {\r\n            const pos = position();\r\n            const m = match(re);\r\n            if (!m) {\r\n                return;\r\n            }\r\n            const ret = { type: name };\r\n            ret[name] = m[1].trim();\r\n            return pos(ret);\r\n        };\r\n    }\r\n    function atrule() {\r\n        if (css[0] !== '@') {\r\n            return;\r\n        }\r\n        return (atkeyframes() ||\r\n            atmedia() ||\r\n            atcustommedia() ||\r\n            atsupports() ||\r\n            atimport() ||\r\n            atcharset() ||\r\n            atnamespace() ||\r\n            atdocument() ||\r\n            atpage() ||\r\n            athost() ||\r\n            atfontface());\r\n    }\r\n    function rule() {\r\n        const pos = position();\r\n        const sel = selector();\r\n        if (!sel) {\r\n            return error('selector missing');\r\n        }\r\n        comments();\r\n        return pos({\r\n            type: 'rule',\r\n            selectors: sel,\r\n            declarations: declarations(),\r\n        });\r\n    }\r\n    return addParent(stylesheet());\r\n}\r\nfunction trim(str) {\r\n    return str ? str.replace(/^\\s+|\\s+$/g, '') : '';\r\n}\r\nfunction addParent(obj, parent) {\r\n    const isNode = obj && typeof obj.type === 'string';\r\n    const childParent = isNode ? obj : parent;\r\n    for (const k of Object.keys(obj)) {\r\n        const value = obj[k];\r\n        if (Array.isArray(value)) {\r\n            value.forEach((v) => {\r\n                addParent(v, childParent);\r\n            });\r\n        }\r\n        else if (value && typeof value === 'object') {\r\n            addParent(value, childParent);\r\n        }\r\n    }\r\n    if (isNode) {\r\n        Object.defineProperty(obj, 'parent', {\r\n            configurable: true,\r\n            writable: true,\r\n            enumerable: false,\r\n            value: parent || null,\r\n        });\r\n    }\r\n    return obj;\r\n}\n\nconst tagMap = {\r\n    script: 'noscript',\r\n    altglyph: 'altGlyph',\r\n    altglyphdef: 'altGlyphDef',\r\n    altglyphitem: 'altGlyphItem',\r\n    animatecolor: 'animateColor',\r\n    animatemotion: 'animateMotion',\r\n    animatetransform: 'animateTransform',\r\n    clippath: 'clipPath',\r\n    feblend: 'feBlend',\r\n    fecolormatrix: 'feColorMatrix',\r\n    fecomponenttransfer: 'feComponentTransfer',\r\n    fecomposite: 'feComposite',\r\n    feconvolvematrix: 'feConvolveMatrix',\r\n    fediffuselighting: 'feDiffuseLighting',\r\n    fedisplacementmap: 'feDisplacementMap',\r\n    fedistantlight: 'feDistantLight',\r\n    fedropshadow: 'feDropShadow',\r\n    feflood: 'feFlood',\r\n    fefunca: 'feFuncA',\r\n    fefuncb: 'feFuncB',\r\n    fefuncg: 'feFuncG',\r\n    fefuncr: 'feFuncR',\r\n    fegaussianblur: 'feGaussianBlur',\r\n    feimage: 'feImage',\r\n    femerge: 'feMerge',\r\n    femergenode: 'feMergeNode',\r\n    femorphology: 'feMorphology',\r\n    feoffset: 'feOffset',\r\n    fepointlight: 'fePointLight',\r\n    fespecularlighting: 'feSpecularLighting',\r\n    fespotlight: 'feSpotLight',\r\n    fetile: 'feTile',\r\n    feturbulence: 'feTurbulence',\r\n    foreignobject: 'foreignObject',\r\n    glyphref: 'glyphRef',\r\n    lineargradient: 'linearGradient',\r\n    radialgradient: 'radialGradient',\r\n};\r\nfunction getTagName(n) {\r\n    let tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\r\n    if (tagName === 'link' && n.attributes._cssText) {\r\n        tagName = 'style';\r\n    }\r\n    return tagName;\r\n}\r\nfunction escapeRegExp(str) {\r\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\nconst HOVER_SELECTOR = /([^\\\\]):hover/;\r\nconst HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, 'g');\r\nfunction addHoverClass(cssText, cache) {\r\n    const cachedStyle = cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.get(cssText);\r\n    if (cachedStyle)\r\n        return cachedStyle;\r\n    const ast = parse(cssText, {\r\n        silent: true,\r\n    });\r\n    if (!ast.stylesheet) {\r\n        return cssText;\r\n    }\r\n    const selectors = [];\r\n    ast.stylesheet.rules.forEach((rule) => {\r\n        if ('selectors' in rule) {\r\n            (rule.selectors || []).forEach((selector) => {\r\n                if (HOVER_SELECTOR.test(selector)) {\r\n                    selectors.push(selector);\r\n                }\r\n            });\r\n        }\r\n    });\r\n    if (selectors.length === 0) {\r\n        return cssText;\r\n    }\r\n    const selectorMatcher = new RegExp(selectors\r\n        .filter((selector, index) => selectors.indexOf(selector) === index)\r\n        .sort((a, b) => b.length - a.length)\r\n        .map((selector) => {\r\n        return escapeRegExp(selector);\r\n    })\r\n        .join('|'), 'g');\r\n    const result = cssText.replace(selectorMatcher, (selector) => {\r\n        const newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, '$1.\\\\:hover');\r\n        return `${selector}, ${newSelector}`;\r\n    });\r\n    cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.set(cssText, result);\r\n    return result;\r\n}\r\nfunction createCache() {\r\n    const stylesWithHoverClass = new Map();\r\n    return {\r\n        stylesWithHoverClass,\r\n    };\r\n}\r\nfunction buildNode(n, options) {\r\n    var _a;\r\n    const { doc, hackCss, cache } = options;\r\n    switch (n.type) {\r\n        case NodeType.Document:\r\n            return doc.implementation.createDocument(null, '', null);\r\n        case NodeType.DocumentType:\r\n            return doc.implementation.createDocumentType(n.name || 'html', n.publicId, n.systemId);\r\n        case NodeType.Element: {\r\n            const tagName = getTagName(n);\r\n            let node;\r\n            if (n.isSVG) {\r\n                node = doc.createElementNS('http://www.w3.org/2000/svg', tagName);\r\n            }\r\n            else {\r\n                if (n.isCustom &&\r\n                    ((_a = doc.defaultView) === null || _a === void 0 ? void 0 : _a.customElements) &&\r\n                    !doc.defaultView.customElements.get(n.tagName))\r\n                    doc.defaultView.customElements.define(n.tagName, class extends doc.defaultView.HTMLElement {\r\n                    });\r\n                node = doc.createElement(tagName);\r\n            }\r\n            const specialAttributes = {};\r\n            for (const name in n.attributes) {\r\n                if (!Object.prototype.hasOwnProperty.call(n.attributes, name)) {\r\n                    continue;\r\n                }\r\n                let value = n.attributes[name];\r\n                if (tagName === 'option' &&\r\n                    name === 'selected' &&\r\n                    value === false) {\r\n                    continue;\r\n                }\r\n                if (value === null) {\r\n                    continue;\r\n                }\r\n                if (value === true)\r\n                    value = '';\r\n                if (name.startsWith('rr_')) {\r\n                    specialAttributes[name] = value;\r\n                    continue;\r\n                }\r\n                const isTextarea = tagName === 'textarea' && name === 'value';\r\n                const isRemoteOrDynamicCss = tagName === 'style' && name === '_cssText';\r\n                if (isRemoteOrDynamicCss && hackCss && typeof value === 'string') {\r\n                    value = addHoverClass(value, cache);\r\n                }\r\n                if ((isTextarea || isRemoteOrDynamicCss) && typeof value === 'string') {\r\n                    const child = doc.createTextNode(value);\r\n                    for (const c of Array.from(node.childNodes)) {\r\n                        if (c.nodeType === node.TEXT_NODE) {\r\n                            node.removeChild(c);\r\n                        }\r\n                    }\r\n                    node.appendChild(child);\r\n                    continue;\r\n                }\r\n                try {\r\n                    if (n.isSVG && name === 'xlink:href') {\r\n                        node.setAttributeNS('http://www.w3.org/1999/xlink', name, value.toString());\r\n                    }\r\n                    else if (name === 'onload' ||\r\n                        name === 'onclick' ||\r\n                        name.substring(0, 7) === 'onmouse') {\r\n                        node.setAttribute('_' + name, value.toString());\r\n                    }\r\n                    else if (tagName === 'meta' &&\r\n                        n.attributes['http-equiv'] === 'Content-Security-Policy' &&\r\n                        name === 'content') {\r\n                        node.setAttribute('csp-content', value.toString());\r\n                        continue;\r\n                    }\r\n                    else if (tagName === 'link' &&\r\n                        (n.attributes.rel === 'preload' ||\r\n                            n.attributes.rel === 'modulepreload') &&\r\n                        n.attributes.as === 'script') {\r\n                    }\r\n                    else if (tagName === 'link' &&\r\n                        n.attributes.rel === 'prefetch' &&\r\n                        typeof n.attributes.href === 'string' &&\r\n                        n.attributes.href.endsWith('.js')) {\r\n                    }\r\n                    else if (tagName === 'img' &&\r\n                        n.attributes.srcset &&\r\n                        n.attributes.rr_dataURL) {\r\n                        node.setAttribute('rrweb-original-srcset', n.attributes.srcset);\r\n                    }\r\n                    else {\r\n                        node.setAttribute(name, value.toString());\r\n                    }\r\n                }\r\n                catch (error) {\r\n                }\r\n            }\r\n            for (const name in specialAttributes) {\r\n                const value = specialAttributes[name];\r\n                if (tagName === 'canvas' && name === 'rr_dataURL') {\r\n                    const image = document.createElement('img');\r\n                    image.onload = () => {\r\n                        const ctx = node.getContext('2d');\r\n                        if (ctx) {\r\n                            ctx.drawImage(image, 0, 0, image.width, image.height);\r\n                        }\r\n                    };\r\n                    image.src = value.toString();\r\n                    if (node.RRNodeType)\r\n                        node.rr_dataURL = value.toString();\r\n                }\r\n                else if (tagName === 'img' && name === 'rr_dataURL') {\r\n                    const image = node;\r\n                    if (!image.currentSrc.startsWith('data:')) {\r\n                        image.setAttribute('rrweb-original-src', n.attributes.src);\r\n                        image.src = value.toString();\r\n                    }\r\n                }\r\n                if (name === 'rr_width') {\r\n                    node.style.setProperty('width', value.toString());\r\n                }\r\n                else if (name === 'rr_height') {\r\n                    node.style.setProperty('height', value.toString());\r\n                }\r\n                else if (name === 'rr_mediaCurrentTime' &&\r\n                    typeof value === 'number') {\r\n                    node.currentTime = value;\r\n                }\r\n                else if (name === 'rr_mediaState') {\r\n                    switch (value) {\r\n                        case 'played':\r\n                            node\r\n                                .play()\r\n                                .catch((e) => console.warn('media playback error', e));\r\n                            break;\r\n                        case 'paused':\r\n                            node.pause();\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n            if (n.isShadowHost) {\r\n                if (!node.shadowRoot) {\r\n                    node.attachShadow({ mode: 'open' });\r\n                }\r\n                else {\r\n                    while (node.shadowRoot.firstChild) {\r\n                        node.shadowRoot.removeChild(node.shadowRoot.firstChild);\r\n                    }\r\n                }\r\n            }\r\n            return node;\r\n        }\r\n        case NodeType.Text:\r\n            return doc.createTextNode(n.isStyle && hackCss\r\n                ? addHoverClass(n.textContent, cache)\r\n                : n.textContent);\r\n        case NodeType.CDATA:\r\n            return doc.createCDATASection(n.textContent);\r\n        case NodeType.Comment:\r\n            return doc.createComment(n.textContent);\r\n        default:\r\n            return null;\r\n    }\r\n}\r\nfunction buildNodeWithSN(n, options) {\r\n    const { doc, mirror, skipChild = false, hackCss = true, afterAppend, cache, } = options;\r\n    if (mirror.has(n.id)) {\r\n        const nodeInMirror = mirror.getNode(n.id);\r\n        const meta = mirror.getMeta(nodeInMirror);\r\n        if (isNodeMetaEqual(meta, n))\r\n            return mirror.getNode(n.id);\r\n    }\r\n    let node = buildNode(n, { doc, hackCss, cache });\r\n    if (!node) {\r\n        return null;\r\n    }\r\n    if (n.rootId && mirror.getNode(n.rootId) !== doc) {\r\n        mirror.replace(n.rootId, doc);\r\n    }\r\n    if (n.type === NodeType.Document) {\r\n        doc.close();\r\n        doc.open();\r\n        if (n.compatMode === 'BackCompat' &&\r\n            n.childNodes &&\r\n            n.childNodes[0].type !== NodeType.DocumentType) {\r\n            if (n.childNodes[0].type === NodeType.Element &&\r\n                'xmlns' in n.childNodes[0].attributes &&\r\n                n.childNodes[0].attributes.xmlns === 'http://www.w3.org/1999/xhtml') {\r\n                doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">');\r\n            }\r\n            else {\r\n                doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">');\r\n            }\r\n        }\r\n        node = doc;\r\n    }\r\n    mirror.add(node, n);\r\n    if ((n.type === NodeType.Document || n.type === NodeType.Element) &&\r\n        !skipChild) {\r\n        for (const childN of n.childNodes) {\r\n            const childNode = buildNodeWithSN(childN, {\r\n                doc,\r\n                mirror,\r\n                skipChild: false,\r\n                hackCss,\r\n                afterAppend,\r\n                cache,\r\n            });\r\n            if (!childNode) {\r\n                console.warn('Failed to rebuild', childN);\r\n                continue;\r\n            }\r\n            if (childN.isShadow && isElement(node) && node.shadowRoot) {\r\n                node.shadowRoot.appendChild(childNode);\r\n            }\r\n            else if (n.type === NodeType.Document &&\r\n                childN.type == NodeType.Element) {\r\n                const htmlElement = childNode;\r\n                let body = null;\r\n                htmlElement.childNodes.forEach((child) => {\r\n                    if (child.nodeName === 'BODY')\r\n                        body = child;\r\n                });\r\n                if (body) {\r\n                    htmlElement.removeChild(body);\r\n                    node.appendChild(childNode);\r\n                    htmlElement.appendChild(body);\r\n                }\r\n                else {\r\n                    node.appendChild(childNode);\r\n                }\r\n            }\r\n            else {\r\n                node.appendChild(childNode);\r\n            }\r\n            if (afterAppend) {\r\n                afterAppend(childNode, childN.id);\r\n            }\r\n        }\r\n    }\r\n    return node;\r\n}\r\nfunction visit(mirror, onVisit) {\r\n    function walk(node) {\r\n        onVisit(node);\r\n    }\r\n    for (const id of mirror.getIds()) {\r\n        if (mirror.has(id)) {\r\n            walk(mirror.getNode(id));\r\n        }\r\n    }\r\n}\r\nfunction handleScroll(node, mirror) {\r\n    const n = mirror.getMeta(node);\r\n    if ((n === null || n === void 0 ? void 0 : n.type) !== NodeType.Element) {\r\n        return;\r\n    }\r\n    const el = node;\r\n    for (const name in n.attributes) {\r\n        if (!(Object.prototype.hasOwnProperty.call(n.attributes, name) &&\r\n            name.startsWith('rr_'))) {\r\n            continue;\r\n        }\r\n        const value = n.attributes[name];\r\n        if (name === 'rr_scrollLeft') {\r\n            el.scrollLeft = value;\r\n        }\r\n        if (name === 'rr_scrollTop') {\r\n            el.scrollTop = value;\r\n        }\r\n    }\r\n}\r\nfunction rebuild(n, options) {\r\n    const { doc, onVisit, hackCss = true, afterAppend, cache, mirror = new Mirror(), } = options;\r\n    const node = buildNodeWithSN(n, {\r\n        doc,\r\n        mirror,\r\n        skipChild: false,\r\n        hackCss,\r\n        afterAppend,\r\n        cache,\r\n    });\r\n    visit(mirror, (visitedNode) => {\r\n        if (onVisit) {\r\n            onVisit(visitedNode);\r\n        }\r\n        handleScroll(visitedNode, mirror);\r\n    });\r\n    return node;\r\n}\n\nexport { IGNORED_NODE, Mirror, NodeType, addHoverClass, buildNodeWithSN, createCache, createMatchPredicate, createMirror, distanceToMatch, escapeImportStatement, fixSafariColons, genId, getInputType, getInputValue, ignoreAttribute, is2DCanvasBlank, isCSSImportRule, isCSSStyleRule, isElement, isNativeShadowDom, isNodeMetaEqual, isShadowRoot, maskInputValue, needMaskingText, rebuild, serializeNodeWithId, shouldMaskInput, snapshot, stringifyRule, stringifyStylesheet, toLowerCase, toUpperCase, transformAttribute };\n","import { distanceToMatch, IGNORED_NODE, isShadowRoot, createMatchPredicate } from '../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nfunction on(type, fn, target = document) {\r\n    const options = { capture: true, passive: true };\r\n    target.addEventListener(type, fn, options);\r\n    return () => target.removeEventListener(type, fn, options);\r\n}\r\nconst DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +\r\n    '\\r\\n' +\r\n    'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\r\n    '\\r\\n' +\r\n    'or you can use record.mirror to access the mirror instance during recording.';\r\nlet _mirror = {\r\n    map: {},\r\n    getId() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n        return -1;\r\n    },\r\n    getNode() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n        return null;\r\n    },\r\n    removeNodeFromMap() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n    },\r\n    has() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n        return false;\r\n    },\r\n    reset() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n    },\r\n};\r\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\r\n    _mirror = new Proxy(_mirror, {\r\n        get(target, prop, receiver) {\r\n            if (prop === 'map') {\r\n                console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n            }\r\n            return Reflect.get(target, prop, receiver);\r\n        },\r\n    });\r\n}\r\nfunction throttle(func, wait, options = {}) {\r\n    let timeout = null;\r\n    let previous = 0;\r\n    return function (...args) {\r\n        const now = Date.now();\r\n        if (!previous && options.leading === false) {\r\n            previous = now;\r\n        }\r\n        const remaining = wait - (now - previous);\r\n        const context = this;\r\n        if (remaining <= 0 || remaining > wait) {\r\n            if (timeout) {\r\n                clearTimeout(timeout);\r\n                timeout = null;\r\n            }\r\n            previous = now;\r\n            func.apply(context, args);\r\n        }\r\n        else if (!timeout && options.trailing !== false) {\r\n            timeout = setTimeout(() => {\r\n                previous = options.leading === false ? 0 : Date.now();\r\n                timeout = null;\r\n                func.apply(context, args);\r\n            }, remaining);\r\n        }\r\n    };\r\n}\r\nfunction hookSetter(target, key, d, isRevoked, win = window) {\r\n    const original = win.Object.getOwnPropertyDescriptor(target, key);\r\n    win.Object.defineProperty(target, key, isRevoked\r\n        ? d\r\n        : {\r\n            set(value) {\r\n                setTimeout(() => {\r\n                    d.set.call(this, value);\r\n                }, 0);\r\n                if (original && original.set) {\r\n                    original.set.call(this, value);\r\n                }\r\n            },\r\n        });\r\n    return () => hookSetter(target, key, original || {}, true);\r\n}\r\nfunction patch(source, name, replacement) {\r\n    try {\r\n        if (!(name in source)) {\r\n            return () => {\r\n            };\r\n        }\r\n        const original = source[name];\r\n        const wrapped = replacement(original);\r\n        if (typeof wrapped === 'function') {\r\n            wrapped.prototype = wrapped.prototype || {};\r\n            Object.defineProperties(wrapped, {\r\n                __rrweb_original__: {\r\n                    enumerable: false,\r\n                    value: original,\r\n                },\r\n            });\r\n        }\r\n        source[name] = wrapped;\r\n        return () => {\r\n            source[name] = original;\r\n        };\r\n    }\r\n    catch (_a) {\r\n        return () => {\r\n        };\r\n    }\r\n}\r\nlet nowTimestamp = Date.now;\r\nif (!(/[1-9][0-9]{12}/.test(Date.now().toString()))) {\r\n    nowTimestamp = () => new Date().getTime();\r\n}\r\nfunction getWindowScroll(win) {\r\n    var _a, _b, _c, _d, _e, _f;\r\n    const doc = win.document;\r\n    return {\r\n        left: doc.scrollingElement\r\n            ? doc.scrollingElement.scrollLeft\r\n            : win.pageXOffset !== undefined\r\n                ? win.pageXOffset\r\n                : (doc === null || doc === void 0 ? void 0 : doc.documentElement.scrollLeft) ||\r\n                    ((_b = (_a = doc === null || doc === void 0 ? void 0 : doc.body) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.scrollLeft) ||\r\n                    ((_c = doc === null || doc === void 0 ? void 0 : doc.body) === null || _c === void 0 ? void 0 : _c.scrollLeft) ||\r\n                    0,\r\n        top: doc.scrollingElement\r\n            ? doc.scrollingElement.scrollTop\r\n            : win.pageYOffset !== undefined\r\n                ? win.pageYOffset\r\n                : (doc === null || doc === void 0 ? void 0 : doc.documentElement.scrollTop) ||\r\n                    ((_e = (_d = doc === null || doc === void 0 ? void 0 : doc.body) === null || _d === void 0 ? void 0 : _d.parentElement) === null || _e === void 0 ? void 0 : _e.scrollTop) ||\r\n                    ((_f = doc === null || doc === void 0 ? void 0 : doc.body) === null || _f === void 0 ? void 0 : _f.scrollTop) ||\r\n                    0,\r\n    };\r\n}\r\nfunction getWindowHeight() {\r\n    return (window.innerHeight ||\r\n        (document.documentElement && document.documentElement.clientHeight) ||\r\n        (document.body && document.body.clientHeight));\r\n}\r\nfunction getWindowWidth() {\r\n    return (window.innerWidth ||\r\n        (document.documentElement && document.documentElement.clientWidth) ||\r\n        (document.body && document.body.clientWidth));\r\n}\r\nfunction isBlocked(node, blockClass, blockSelector, unblockSelector, checkAncestors) {\r\n    if (!node) {\r\n        return false;\r\n    }\r\n    const el = node.nodeType === node.ELEMENT_NODE\r\n        ? node\r\n        : node.parentElement;\r\n    if (!el)\r\n        return false;\r\n    const blockedPredicate = createMatchPredicate(blockClass, blockSelector);\r\n    if (!checkAncestors) {\r\n        const isUnblocked = unblockSelector && el.matches(unblockSelector);\r\n        return blockedPredicate(el) && !isUnblocked;\r\n    }\r\n    const blockDistance = distanceToMatch(el, blockedPredicate);\r\n    let unblockDistance = -1;\r\n    if (blockDistance < 0) {\r\n        return false;\r\n    }\r\n    if (unblockSelector) {\r\n        unblockDistance = distanceToMatch(el, createMatchPredicate(null, unblockSelector));\r\n    }\r\n    if (blockDistance > -1 && unblockDistance < 0) {\r\n        return true;\r\n    }\r\n    return blockDistance < unblockDistance;\r\n}\r\nfunction isSerialized(n, mirror) {\r\n    return mirror.getId(n) !== -1;\r\n}\r\nfunction isIgnored(n, mirror) {\r\n    return mirror.getId(n) === IGNORED_NODE;\r\n}\r\nfunction isAncestorRemoved(target, mirror) {\r\n    if (isShadowRoot(target)) {\r\n        return false;\r\n    }\r\n    const id = mirror.getId(target);\r\n    if (!mirror.has(id)) {\r\n        return true;\r\n    }\r\n    if (target.parentNode &&\r\n        target.parentNode.nodeType === target.DOCUMENT_NODE) {\r\n        return false;\r\n    }\r\n    if (!target.parentNode) {\r\n        return true;\r\n    }\r\n    return isAncestorRemoved(target.parentNode, mirror);\r\n}\r\nfunction legacy_isTouchEvent(event) {\r\n    return Boolean(event.changedTouches);\r\n}\r\nfunction polyfill(win = window) {\r\n    if ('NodeList' in win && !win.NodeList.prototype.forEach) {\r\n        win.NodeList.prototype.forEach = Array.prototype\r\n            .forEach;\r\n    }\r\n    if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\r\n        win.DOMTokenList.prototype.forEach = Array.prototype\r\n            .forEach;\r\n    }\r\n    if (!Node.prototype.contains) {\r\n        Node.prototype.contains = (...args) => {\r\n            let node = args[0];\r\n            if (!(0 in args)) {\r\n                throw new TypeError('1 argument is required');\r\n            }\r\n            do {\r\n                if (this === node) {\r\n                    return true;\r\n                }\r\n            } while ((node = node && node.parentNode));\r\n            return false;\r\n        };\r\n    }\r\n}\r\nfunction queueToResolveTrees(queue) {\r\n    const queueNodeMap = {};\r\n    const putIntoMap = (m, parent) => {\r\n        const nodeInTree = {\r\n            value: m,\r\n            parent,\r\n            children: [],\r\n        };\r\n        queueNodeMap[m.node.id] = nodeInTree;\r\n        return nodeInTree;\r\n    };\r\n    const queueNodeTrees = [];\r\n    for (const mutation of queue) {\r\n        const { nextId, parentId } = mutation;\r\n        if (nextId && nextId in queueNodeMap) {\r\n            const nextInTree = queueNodeMap[nextId];\r\n            if (nextInTree.parent) {\r\n                const idx = nextInTree.parent.children.indexOf(nextInTree);\r\n                nextInTree.parent.children.splice(idx, 0, putIntoMap(mutation, nextInTree.parent));\r\n            }\r\n            else {\r\n                const idx = queueNodeTrees.indexOf(nextInTree);\r\n                queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));\r\n            }\r\n            continue;\r\n        }\r\n        if (parentId in queueNodeMap) {\r\n            const parentInTree = queueNodeMap[parentId];\r\n            parentInTree.children.push(putIntoMap(mutation, parentInTree));\r\n            continue;\r\n        }\r\n        queueNodeTrees.push(putIntoMap(mutation, null));\r\n    }\r\n    return queueNodeTrees;\r\n}\r\nfunction iterateResolveTree(tree, cb) {\r\n    cb(tree.value);\r\n    for (let i = tree.children.length - 1; i >= 0; i--) {\r\n        iterateResolveTree(tree.children[i], cb);\r\n    }\r\n}\r\nfunction isSerializedIframe(n, mirror) {\r\n    return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));\r\n}\r\nfunction isSerializedStylesheet(n, mirror) {\r\n    return Boolean(n.nodeName === 'LINK' &&\r\n        n.nodeType === n.ELEMENT_NODE &&\r\n        n.getAttribute &&\r\n        n.getAttribute('rel') === 'stylesheet' &&\r\n        mirror.getMeta(n));\r\n}\r\nfunction getBaseDimension(node, rootIframe) {\r\n    var _a, _b;\r\n    const frameElement = (_b = (_a = node.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView) === null || _b === void 0 ? void 0 : _b.frameElement;\r\n    if (!frameElement || frameElement === rootIframe) {\r\n        return {\r\n            x: 0,\r\n            y: 0,\r\n            relativeScale: 1,\r\n            absoluteScale: 1,\r\n        };\r\n    }\r\n    const frameDimension = frameElement.getBoundingClientRect();\r\n    const frameBaseDimension = getBaseDimension(frameElement, rootIframe);\r\n    const relativeScale = frameDimension.height / frameElement.clientHeight;\r\n    return {\r\n        x: frameDimension.x * frameBaseDimension.relativeScale +\r\n            frameBaseDimension.x,\r\n        y: frameDimension.y * frameBaseDimension.relativeScale +\r\n            frameBaseDimension.y,\r\n        relativeScale,\r\n        absoluteScale: frameBaseDimension.absoluteScale * relativeScale,\r\n    };\r\n}\r\nfunction hasShadowRoot(n) {\r\n    return Boolean(n === null || n === void 0 ? void 0 : n.shadowRoot);\r\n}\r\nfunction getNestedRule(rules, position) {\r\n    const rule = rules[position[0]];\r\n    if (position.length === 1) {\r\n        return rule;\r\n    }\r\n    else {\r\n        return getNestedRule(rule.cssRules[position[1]].cssRules, position.slice(2));\r\n    }\r\n}\r\nfunction getPositionsAndIndex(nestedIndex) {\r\n    const positions = [...nestedIndex];\r\n    const index = positions.pop();\r\n    return { positions, index };\r\n}\r\nfunction uniqueTextMutations(mutations) {\r\n    const idSet = new Set();\r\n    const uniqueMutations = [];\r\n    for (let i = mutations.length; i--;) {\r\n        const mutation = mutations[i];\r\n        if (!idSet.has(mutation.id)) {\r\n            uniqueMutations.push(mutation);\r\n            idSet.add(mutation.id);\r\n        }\r\n    }\r\n    return uniqueMutations;\r\n}\r\nclass StyleSheetMirror {\r\n    constructor() {\r\n        this.id = 1;\r\n        this.styleIDMap = new WeakMap();\r\n        this.idStyleMap = new Map();\r\n    }\r\n    getId(stylesheet) {\r\n        var _a;\r\n        return (_a = this.styleIDMap.get(stylesheet)) !== null && _a !== void 0 ? _a : -1;\r\n    }\r\n    has(stylesheet) {\r\n        return this.styleIDMap.has(stylesheet);\r\n    }\r\n    add(stylesheet, id) {\r\n        if (this.has(stylesheet))\r\n            return this.getId(stylesheet);\r\n        let newId;\r\n        if (id === undefined) {\r\n            newId = this.id++;\r\n        }\r\n        else\r\n            newId = id;\r\n        this.styleIDMap.set(stylesheet, newId);\r\n        this.idStyleMap.set(newId, stylesheet);\r\n        return newId;\r\n    }\r\n    getStyle(id) {\r\n        return this.idStyleMap.get(id) || null;\r\n    }\r\n    reset() {\r\n        this.styleIDMap = new WeakMap();\r\n        this.idStyleMap = new Map();\r\n        this.id = 1;\r\n    }\r\n    generateId() {\r\n        return this.id++;\r\n    }\r\n}\r\nfunction getShadowHost(n) {\r\n    var _a, _b;\r\n    let shadowHost = null;\r\n    if (((_b = (_a = n.getRootNode) === null || _a === void 0 ? void 0 : _a.call(n)) === null || _b === void 0 ? void 0 : _b.nodeType) === Node.DOCUMENT_FRAGMENT_NODE &&\r\n        n.getRootNode().host)\r\n        shadowHost = n.getRootNode().host;\r\n    return shadowHost;\r\n}\r\nfunction getRootShadowHost(n) {\r\n    let rootShadowHost = n;\r\n    let shadowHost;\r\n    while ((shadowHost = getShadowHost(rootShadowHost)))\r\n        rootShadowHost = shadowHost;\r\n    return rootShadowHost;\r\n}\r\nfunction shadowHostInDom(n) {\r\n    const doc = n.ownerDocument;\r\n    if (!doc)\r\n        return false;\r\n    const shadowHost = getRootShadowHost(n);\r\n    return doc.contains(shadowHost);\r\n}\r\nfunction inDom(n) {\r\n    const doc = n.ownerDocument;\r\n    if (!doc)\r\n        return false;\r\n    return doc.contains(n) || shadowHostInDom(n);\r\n}\n\nexport { StyleSheetMirror, _mirror, getBaseDimension, getNestedRule, getPositionsAndIndex, getRootShadowHost, getShadowHost, getWindowHeight, getWindowScroll, getWindowWidth, hasShadowRoot, hookSetter, inDom, isAncestorRemoved, isBlocked, isIgnored, isSerialized, isSerializedIframe, isSerializedStylesheet, iterateResolveTree, legacy_isTouchEvent, nowTimestamp, on, patch, polyfill, queueToResolveTrees, shadowHostInDom, throttle, uniqueTextMutations };\n","var EventType = /* @__PURE__ */ ((EventType2) => {\n  EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n  EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n  EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n  EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n  EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n  EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n  EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n  return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n  IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n  IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n  IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n  IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n  IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n  IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n  IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n  IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n  IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n  IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n  IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n  IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n  IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n  IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n  IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n  IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n  IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n  return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n  MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n  MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n  MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n  MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n  MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n  MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n  MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n  MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n  MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n  MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n  MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n  return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n  PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n  PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n  PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n  return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n  CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n  CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n  CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n  return CanvasContext2;\n})(CanvasContext || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n  ReplayerEvents2[\"Start\"] = \"start\";\n  ReplayerEvents2[\"Pause\"] = \"pause\";\n  ReplayerEvents2[\"Resume\"] = \"resume\";\n  ReplayerEvents2[\"Resize\"] = \"resize\";\n  ReplayerEvents2[\"Finish\"] = \"finish\";\n  ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n  ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n  ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n  ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n  ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n  ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n  ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n  ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n  ReplayerEvents2[\"Flush\"] = \"flush\";\n  ReplayerEvents2[\"StateChange\"] = \"state-change\";\n  ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n  ReplayerEvents2[\"Destroy\"] = \"destroy\";\n  return ReplayerEvents2;\n})(ReplayerEvents || {});\n\nexport { CanvasContext, EventType, IncrementalSource, MouseInteractions, PointerTypes, ReplayerEvents };\n","import { isShadowRoot, isNativeShadowDom, getInputType, getInputValue, shouldMaskInput, needMaskingText, maskInputValue, ignoreAttribute, transformAttribute, toLowerCase, IGNORED_NODE, serializeNodeWithId } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { isIgnored, isBlocked, isSerialized, isAncestorRemoved, hasShadowRoot, inDom, getShadowHost, isSerializedIframe, isSerializedStylesheet } from '../utils.js';\n\nfunction isNodeInLinkedList(n) {\r\n    return '__ln' in n;\r\n}\r\nclass DoubleLinkedList {\r\n    constructor() {\r\n        this.length = 0;\r\n        this.head = null;\r\n        this.tail = null;\r\n    }\r\n    get(position) {\r\n        if (position >= this.length) {\r\n            throw new Error('Position outside of list range');\r\n        }\r\n        let current = this.head;\r\n        for (let index = 0; index < position; index++) {\r\n            current = (current === null || current === void 0 ? void 0 : current.next) || null;\r\n        }\r\n        return current;\r\n    }\r\n    addNode(n) {\r\n        const node = {\r\n            value: n,\r\n            previous: null,\r\n            next: null,\r\n        };\r\n        n.__ln = node;\r\n        if (n.previousSibling && isNodeInLinkedList(n.previousSibling)) {\r\n            const current = n.previousSibling.__ln.next;\r\n            node.next = current;\r\n            node.previous = n.previousSibling.__ln;\r\n            n.previousSibling.__ln.next = node;\r\n            if (current) {\r\n                current.previous = node;\r\n            }\r\n        }\r\n        else if (n.nextSibling &&\r\n            isNodeInLinkedList(n.nextSibling) &&\r\n            n.nextSibling.__ln.previous) {\r\n            const current = n.nextSibling.__ln.previous;\r\n            node.previous = current;\r\n            node.next = n.nextSibling.__ln;\r\n            n.nextSibling.__ln.previous = node;\r\n            if (current) {\r\n                current.next = node;\r\n            }\r\n        }\r\n        else {\r\n            if (this.head) {\r\n                this.head.previous = node;\r\n            }\r\n            node.next = this.head;\r\n            this.head = node;\r\n        }\r\n        if (node.next === null) {\r\n            this.tail = node;\r\n        }\r\n        this.length++;\r\n    }\r\n    removeNode(n) {\r\n        const current = n.__ln;\r\n        if (!this.head) {\r\n            return;\r\n        }\r\n        if (!current.previous) {\r\n            this.head = current.next;\r\n            if (this.head) {\r\n                this.head.previous = null;\r\n            }\r\n            else {\r\n                this.tail = null;\r\n            }\r\n        }\r\n        else {\r\n            current.previous.next = current.next;\r\n            if (current.next) {\r\n                current.next.previous = current.previous;\r\n            }\r\n            else {\r\n                this.tail = current.previous;\r\n            }\r\n        }\r\n        if (n.__ln) {\r\n            delete n.__ln;\r\n        }\r\n        this.length--;\r\n    }\r\n}\r\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\r\nclass MutationBuffer {\r\n    constructor() {\r\n        this.frozen = false;\r\n        this.locked = false;\r\n        this.texts = [];\r\n        this.attributes = [];\r\n        this.removes = [];\r\n        this.mapRemoves = [];\r\n        this.movedMap = {};\r\n        this.addedSet = new Set();\r\n        this.movedSet = new Set();\r\n        this.droppedSet = new Set();\r\n        this.processMutations = (mutations) => {\r\n            mutations.forEach(this.processMutation);\r\n            this.emit();\r\n        };\r\n        this.emit = () => {\r\n            if (this.frozen || this.locked) {\r\n                return;\r\n            }\r\n            const adds = [];\r\n            const addedIds = new Set();\r\n            const addList = new DoubleLinkedList();\r\n            const getNextId = (n) => {\r\n                let ns = n;\r\n                let nextId = IGNORED_NODE;\r\n                while (nextId === IGNORED_NODE) {\r\n                    ns = ns && ns.nextSibling;\r\n                    nextId = ns && this.mirror.getId(ns);\r\n                }\r\n                return nextId;\r\n            };\r\n            const pushAdd = (n) => {\r\n                if (!n.parentNode || !inDom(n)) {\r\n                    return;\r\n                }\r\n                const parentId = isShadowRoot(n.parentNode)\r\n                    ? this.mirror.getId(getShadowHost(n))\r\n                    : this.mirror.getId(n.parentNode);\r\n                const nextId = getNextId(n);\r\n                if (parentId === -1 || nextId === -1) {\r\n                    return addList.addNode(n);\r\n                }\r\n                const sn = serializeNodeWithId(n, {\r\n                    doc: this.doc,\r\n                    mirror: this.mirror,\r\n                    blockClass: this.blockClass,\r\n                    blockSelector: this.blockSelector,\r\n                    maskAllText: this.maskAllText,\r\n                    unblockSelector: this.unblockSelector,\r\n                    maskTextClass: this.maskTextClass,\r\n                    unmaskTextClass: this.unmaskTextClass,\r\n                    maskTextSelector: this.maskTextSelector,\r\n                    unmaskTextSelector: this.unmaskTextSelector,\r\n                    skipChild: true,\r\n                    newlyAddedElement: true,\r\n                    inlineStylesheet: this.inlineStylesheet,\r\n                    maskInputOptions: this.maskInputOptions,\r\n                    maskAttributeFn: this.maskAttributeFn,\r\n                    maskTextFn: this.maskTextFn,\r\n                    maskInputFn: this.maskInputFn,\r\n                    slimDOMOptions: this.slimDOMOptions,\r\n                    dataURLOptions: this.dataURLOptions,\r\n                    recordCanvas: this.recordCanvas,\r\n                    inlineImages: this.inlineImages,\r\n                    onSerialize: (currentN) => {\r\n                        if (isSerializedIframe(currentN, this.mirror)) {\r\n                            this.iframeManager.addIframe(currentN);\r\n                        }\r\n                        if (isSerializedStylesheet(currentN, this.mirror)) {\r\n                            this.stylesheetManager.trackLinkElement(currentN);\r\n                        }\r\n                        if (hasShadowRoot(n)) {\r\n                            this.shadowDomManager.addShadowRoot(n.shadowRoot, this.doc);\r\n                        }\r\n                    },\r\n                    onIframeLoad: (iframe, childSn) => {\r\n                        this.iframeManager.attachIframe(iframe, childSn);\r\n                        this.shadowDomManager.observeAttachShadow(iframe);\r\n                    },\r\n                    onStylesheetLoad: (link, childSn) => {\r\n                        this.stylesheetManager.attachLinkElement(link, childSn);\r\n                    },\r\n                });\r\n                if (sn) {\r\n                    adds.push({\r\n                        parentId,\r\n                        nextId,\r\n                        node: sn,\r\n                    });\r\n                    addedIds.add(sn.id);\r\n                }\r\n            };\r\n            while (this.mapRemoves.length) {\r\n                this.mirror.removeNodeFromMap(this.mapRemoves.shift());\r\n            }\r\n            for (const n of this.movedSet) {\r\n                if (isParentRemoved(this.removes, n, this.mirror) &&\r\n                    !this.movedSet.has(n.parentNode)) {\r\n                    continue;\r\n                }\r\n                pushAdd(n);\r\n            }\r\n            for (const n of this.addedSet) {\r\n                if (!isAncestorInSet(this.droppedSet, n) &&\r\n                    !isParentRemoved(this.removes, n, this.mirror)) {\r\n                    pushAdd(n);\r\n                }\r\n                else if (isAncestorInSet(this.movedSet, n)) {\r\n                    pushAdd(n);\r\n                }\r\n                else {\r\n                    this.droppedSet.add(n);\r\n                }\r\n            }\r\n            let candidate = null;\r\n            while (addList.length) {\r\n                let node = null;\r\n                if (candidate) {\r\n                    const parentId = this.mirror.getId(candidate.value.parentNode);\r\n                    const nextId = getNextId(candidate.value);\r\n                    if (parentId !== -1 && nextId !== -1) {\r\n                        node = candidate;\r\n                    }\r\n                }\r\n                if (!node) {\r\n                    let tailNode = addList.tail;\r\n                    while (tailNode) {\r\n                        const _node = tailNode;\r\n                        tailNode = tailNode.previous;\r\n                        if (_node) {\r\n                            const parentId = this.mirror.getId(_node.value.parentNode);\r\n                            const nextId = getNextId(_node.value);\r\n                            if (nextId === -1)\r\n                                continue;\r\n                            else if (parentId !== -1) {\r\n                                node = _node;\r\n                                break;\r\n                            }\r\n                            else {\r\n                                const unhandledNode = _node.value;\r\n                                if (unhandledNode.parentNode &&\r\n                                    unhandledNode.parentNode.nodeType ===\r\n                                        Node.DOCUMENT_FRAGMENT_NODE) {\r\n                                    const shadowHost = unhandledNode.parentNode\r\n                                        .host;\r\n                                    const parentId = this.mirror.getId(shadowHost);\r\n                                    if (parentId !== -1) {\r\n                                        node = _node;\r\n                                        break;\r\n                                    }\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                if (!node) {\r\n                    while (addList.head) {\r\n                        addList.removeNode(addList.head.value);\r\n                    }\r\n                    break;\r\n                }\r\n                candidate = node.previous;\r\n                addList.removeNode(node.value);\r\n                pushAdd(node.value);\r\n            }\r\n            const payload = {\r\n                texts: this.texts\r\n                    .map((text) => ({\r\n                    id: this.mirror.getId(text.node),\r\n                    value: text.value,\r\n                }))\r\n                    .filter((text) => !addedIds.has(text.id))\r\n                    .filter((text) => this.mirror.has(text.id)),\r\n                attributes: this.attributes\r\n                    .map((attribute) => {\r\n                    const { attributes } = attribute;\r\n                    if (typeof attributes.style === 'string') {\r\n                        const diffAsStr = JSON.stringify(attribute.styleDiff);\r\n                        const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\r\n                        if (diffAsStr.length < attributes.style.length) {\r\n                            if ((diffAsStr + unchangedAsStr).split('var(').length ===\r\n                                attributes.style.split('var(').length) {\r\n                                attributes.style = attribute.styleDiff;\r\n                            }\r\n                        }\r\n                    }\r\n                    return {\r\n                        id: this.mirror.getId(attribute.node),\r\n                        attributes: attributes,\r\n                    };\r\n                })\r\n                    .filter((attribute) => !addedIds.has(attribute.id))\r\n                    .filter((attribute) => this.mirror.has(attribute.id)),\r\n                removes: this.removes,\r\n                adds,\r\n            };\r\n            if (!payload.texts.length &&\r\n                !payload.attributes.length &&\r\n                !payload.removes.length &&\r\n                !payload.adds.length) {\r\n                return;\r\n            }\r\n            this.texts = [];\r\n            this.attributes = [];\r\n            this.removes = [];\r\n            this.addedSet = new Set();\r\n            this.movedSet = new Set();\r\n            this.droppedSet = new Set();\r\n            this.movedMap = {};\r\n            this.mutationCb(payload);\r\n        };\r\n        this.processMutation = (m) => {\r\n            if (isIgnored(m.target, this.mirror)) {\r\n                return;\r\n            }\r\n            let unattachedDoc;\r\n            try {\r\n                unattachedDoc = document.implementation.createHTMLDocument();\r\n            }\r\n            catch (e) {\r\n                unattachedDoc = this.doc;\r\n            }\r\n            switch (m.type) {\r\n                case 'characterData': {\r\n                    const value = m.target.textContent;\r\n                    if (!isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) &&\r\n                        value !== m.oldValue) {\r\n                        this.texts.push({\r\n                            value: needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, this.maskAllText) && value\r\n                                ? this.maskTextFn\r\n                                    ? this.maskTextFn(value)\r\n                                    : value.replace(/[\\S]/g, '*')\r\n                                : value,\r\n                            node: m.target,\r\n                        });\r\n                    }\r\n                    break;\r\n                }\r\n                case 'attributes': {\r\n                    const target = m.target;\r\n                    let attributeName = m.attributeName;\r\n                    let value = m.target.getAttribute(attributeName);\r\n                    if (attributeName === 'value') {\r\n                        const type = getInputType(target);\r\n                        const tagName = target.tagName;\r\n                        value = getInputValue(target, tagName, type);\r\n                        const isInputMasked = shouldMaskInput({\r\n                            maskInputOptions: this.maskInputOptions,\r\n                            tagName,\r\n                            type,\r\n                        });\r\n                        const forceMask = needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, isInputMasked);\r\n                        value = maskInputValue({\r\n                            isMasked: forceMask,\r\n                            element: target,\r\n                            value,\r\n                            maskInputFn: this.maskInputFn,\r\n                        });\r\n                    }\r\n                    if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\r\n                        value === m.oldValue) {\r\n                        return;\r\n                    }\r\n                    let item = this.attributes.find((a) => a.node === m.target);\r\n                    if (target.tagName === 'IFRAME' &&\r\n                        attributeName === 'src' &&\r\n                        !this.keepIframeSrcFn(value)) {\r\n                        if (!target.contentDocument) {\r\n                            attributeName = 'rr_src';\r\n                        }\r\n                        else {\r\n                            return;\r\n                        }\r\n                    }\r\n                    if (!item) {\r\n                        item = {\r\n                            node: m.target,\r\n                            attributes: {},\r\n                            styleDiff: {},\r\n                            _unchangedStyles: {},\r\n                        };\r\n                        this.attributes.push(item);\r\n                    }\r\n                    if (attributeName === 'type' &&\r\n                        target.tagName === 'INPUT' &&\r\n                        (m.oldValue || '').toLowerCase() === 'password') {\r\n                        target.setAttribute('data-rr-is-password', 'true');\r\n                    }\r\n                    if (!ignoreAttribute(target.tagName, attributeName)) {\r\n                        item.attributes[attributeName] = transformAttribute(this.doc, toLowerCase(target.tagName), toLowerCase(attributeName), value, target, this.maskAttributeFn);\r\n                        if (attributeName === 'style') {\r\n                            const old = unattachedDoc.createElement('span');\r\n                            if (m.oldValue) {\r\n                                old.setAttribute('style', m.oldValue);\r\n                            }\r\n                            for (const pname of Array.from(target.style)) {\r\n                                const newValue = target.style.getPropertyValue(pname);\r\n                                const newPriority = target.style.getPropertyPriority(pname);\r\n                                if (newValue !== old.style.getPropertyValue(pname) ||\r\n                                    newPriority !== old.style.getPropertyPriority(pname)) {\r\n                                    if (newPriority === '') {\r\n                                        item.styleDiff[pname] = newValue;\r\n                                    }\r\n                                    else {\r\n                                        item.styleDiff[pname] = [newValue, newPriority];\r\n                                    }\r\n                                }\r\n                                else {\r\n                                    item._unchangedStyles[pname] = [newValue, newPriority];\r\n                                }\r\n                            }\r\n                            for (const pname of Array.from(old.style)) {\r\n                                if (target.style.getPropertyValue(pname) === '') {\r\n                                    item.styleDiff[pname] = false;\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                    break;\r\n                }\r\n                case 'childList': {\r\n                    if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, true)) {\r\n                        return;\r\n                    }\r\n                    m.addedNodes.forEach((n) => this.genAdds(n, m.target));\r\n                    m.removedNodes.forEach((n) => {\r\n                        const nodeId = this.mirror.getId(n);\r\n                        const parentId = isShadowRoot(m.target)\r\n                            ? this.mirror.getId(m.target.host)\r\n                            : this.mirror.getId(m.target);\r\n                        if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\r\n                            isIgnored(n, this.mirror) ||\r\n                            !isSerialized(n, this.mirror)) {\r\n                            return;\r\n                        }\r\n                        if (this.addedSet.has(n)) {\r\n                            deepDelete(this.addedSet, n);\r\n                            this.droppedSet.add(n);\r\n                        }\r\n                        else if (this.addedSet.has(m.target) && nodeId === -1) ;\r\n                        else if (isAncestorRemoved(m.target, this.mirror)) ;\r\n                        else if (this.movedSet.has(n) &&\r\n                            this.movedMap[moveKey(nodeId, parentId)]) {\r\n                            deepDelete(this.movedSet, n);\r\n                        }\r\n                        else {\r\n                            this.removes.push({\r\n                                parentId,\r\n                                id: nodeId,\r\n                                isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target)\r\n                                    ? true\r\n                                    : undefined,\r\n                            });\r\n                        }\r\n                        this.mapRemoves.push(n);\r\n                    });\r\n                    break;\r\n                }\r\n            }\r\n        };\r\n        this.genAdds = (n, target) => {\r\n            if (this.processedNodeManager.inOtherBuffer(n, this))\r\n                return;\r\n            if (this.addedSet.has(n) || this.movedSet.has(n))\r\n                return;\r\n            if (this.mirror.hasNode(n)) {\r\n                if (isIgnored(n, this.mirror)) {\r\n                    return;\r\n                }\r\n                this.movedSet.add(n);\r\n                let targetId = null;\r\n                if (target && this.mirror.hasNode(target)) {\r\n                    targetId = this.mirror.getId(target);\r\n                }\r\n                if (targetId && targetId !== -1) {\r\n                    this.movedMap[moveKey(this.mirror.getId(n), targetId)] = true;\r\n                }\r\n            }\r\n            else {\r\n                this.addedSet.add(n);\r\n                this.droppedSet.delete(n);\r\n            }\r\n            if (!isBlocked(n, this.blockClass, this.blockSelector, this.unblockSelector, false)) {\r\n                n.childNodes.forEach((childN) => this.genAdds(childN));\r\n                if (hasShadowRoot(n)) {\r\n                    n.shadowRoot.childNodes.forEach((childN) => {\r\n                        this.processedNodeManager.add(childN, this);\r\n                        this.genAdds(childN, n);\r\n                    });\r\n                }\r\n            }\r\n        };\r\n    }\r\n    init(options) {\r\n        [\r\n            'mutationCb',\r\n            'blockClass',\r\n            'blockSelector',\r\n            'unblockSelector',\r\n            'maskAllText',\r\n            'maskTextClass',\r\n            'unmaskTextClass',\r\n            'maskTextSelector',\r\n            'unmaskTextSelector',\r\n            'inlineStylesheet',\r\n            'maskInputOptions',\r\n            'maskAttributeFn',\r\n            'maskTextFn',\r\n            'maskInputFn',\r\n            'keepIframeSrcFn',\r\n            'recordCanvas',\r\n            'inlineImages',\r\n            'slimDOMOptions',\r\n            'dataURLOptions',\r\n            'doc',\r\n            'mirror',\r\n            'iframeManager',\r\n            'stylesheetManager',\r\n            'shadowDomManager',\r\n            'canvasManager',\r\n            'processedNodeManager',\r\n        ].forEach((key) => {\r\n            this[key] = options[key];\r\n        });\r\n    }\r\n    freeze() {\r\n        this.frozen = true;\r\n        this.canvasManager.freeze();\r\n    }\r\n    unfreeze() {\r\n        this.frozen = false;\r\n        this.canvasManager.unfreeze();\r\n        this.emit();\r\n    }\r\n    isFrozen() {\r\n        return this.frozen;\r\n    }\r\n    lock() {\r\n        this.locked = true;\r\n        this.canvasManager.lock();\r\n    }\r\n    unlock() {\r\n        this.locked = false;\r\n        this.canvasManager.unlock();\r\n        this.emit();\r\n    }\r\n    reset() {\r\n        this.shadowDomManager.reset();\r\n        this.canvasManager.reset();\r\n    }\r\n}\r\nfunction deepDelete(addsSet, n) {\r\n    addsSet.delete(n);\r\n    n.childNodes.forEach((childN) => deepDelete(addsSet, childN));\r\n}\r\nfunction isParentRemoved(removes, n, mirror) {\r\n    if (removes.length === 0)\r\n        return false;\r\n    return _isParentRemoved(removes, n, mirror);\r\n}\r\nfunction _isParentRemoved(removes, n, mirror) {\r\n    const { parentNode } = n;\r\n    if (!parentNode) {\r\n        return false;\r\n    }\r\n    const parentId = mirror.getId(parentNode);\r\n    if (removes.some((r) => r.id === parentId)) {\r\n        return true;\r\n    }\r\n    return _isParentRemoved(removes, parentNode, mirror);\r\n}\r\nfunction isAncestorInSet(set, n) {\r\n    if (set.size === 0)\r\n        return false;\r\n    return _isAncestorInSet(set, n);\r\n}\r\nfunction _isAncestorInSet(set, n) {\r\n    const { parentNode } = n;\r\n    if (!parentNode) {\r\n        return false;\r\n    }\r\n    if (set.has(parentNode)) {\r\n        return true;\r\n    }\r\n    return _isAncestorInSet(set, parentNode);\r\n}\n\nexport { MutationBuffer as default };\n","let errorHandler;\r\nfunction registerErrorHandler(handler) {\r\n    errorHandler = handler;\r\n}\r\nfunction unregisterErrorHandler() {\r\n    errorHandler = undefined;\r\n}\r\nconst callbackWrapper = (cb) => {\r\n    if (!errorHandler) {\r\n        return cb;\r\n    }\r\n    const rrwebWrapped = ((...rest) => {\r\n        try {\r\n            return cb(...rest);\r\n        }\r\n        catch (error) {\r\n            if (errorHandler && errorHandler(error) === true) {\r\n                return () => {\r\n                };\r\n            }\r\n            throw error;\r\n        }\r\n    });\r\n    return rrwebWrapped;\r\n};\n\nexport { callbackWrapper, registerErrorHandler, unregisterErrorHandler };\n","import { toLowerCase, toUpperCase, getInputType, getInputValue, shouldMaskInput, needMaskingText, maskInputValue } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { on, throttle, isBlocked, getWindowScroll, hookSetter, patch, legacy_isTouchEvent, nowTimestamp, getWindowHeight, getWindowWidth } from '../utils.js';\nimport { MouseInteractions, IncrementalSource, PointerTypes } from '../../../types/dist/rrweb-types.js';\nimport MutationBuffer from './mutation.js';\nimport { callbackWrapper } from './error-handler.js';\n\nconst mutationBuffers = [];\r\nfunction getEventTarget(event) {\r\n    try {\r\n        if ('composedPath' in event) {\r\n            const path = event.composedPath();\r\n            if (path.length) {\r\n                return path[0];\r\n            }\r\n        }\r\n        else if ('path' in event && event.path.length) {\r\n            return event.path[0];\r\n        }\r\n    }\r\n    catch (_a) {\r\n    }\r\n    return event && event.target;\r\n}\r\nfunction initMutationObserver(options, rootEl) {\r\n    var _a, _b;\r\n    const mutationBuffer = new MutationBuffer();\r\n    mutationBuffers.push(mutationBuffer);\r\n    mutationBuffer.init(options);\r\n    let mutationObserverCtor = window.MutationObserver ||\r\n        window.__rrMutationObserver;\r\n    const angularZoneSymbol = (_b = (_a = window === null || window === void 0 ? void 0 : window.Zone) === null || _a === void 0 ? void 0 : _a.__symbol__) === null || _b === void 0 ? void 0 : _b.call(_a, 'MutationObserver');\r\n    if (angularZoneSymbol &&\r\n        window[angularZoneSymbol]) {\r\n        mutationObserverCtor = window[angularZoneSymbol];\r\n    }\r\n    const observer = new mutationObserverCtor(callbackWrapper((mutations) => {\r\n        if (options.onMutation && options.onMutation(mutations) === false) {\r\n            return;\r\n        }\r\n        mutationBuffer.processMutations.bind(mutationBuffer)(mutations);\r\n    }));\r\n    observer.observe(rootEl, {\r\n        attributes: true,\r\n        attributeOldValue: true,\r\n        characterData: true,\r\n        characterDataOldValue: true,\r\n        childList: true,\r\n        subtree: true,\r\n    });\r\n    return observer;\r\n}\r\nfunction initMoveObserver({ mousemoveCb, sampling, doc, mirror, }) {\r\n    if (sampling.mousemove === false) {\r\n        return () => {\r\n        };\r\n    }\r\n    const threshold = typeof sampling.mousemove === 'number' ? sampling.mousemove : 50;\r\n    const callbackThreshold = typeof sampling.mousemoveCallback === 'number'\r\n        ? sampling.mousemoveCallback\r\n        : 500;\r\n    let positions = [];\r\n    let timeBaseline;\r\n    const wrappedCb = throttle(callbackWrapper((source) => {\r\n        const totalOffset = Date.now() - timeBaseline;\r\n        mousemoveCb(positions.map((p) => {\r\n            p.timeOffset -= totalOffset;\r\n            return p;\r\n        }), source);\r\n        positions = [];\r\n        timeBaseline = null;\r\n    }), callbackThreshold);\r\n    const updatePosition = callbackWrapper(throttle(callbackWrapper((evt) => {\r\n        const target = getEventTarget(evt);\r\n        const { clientX, clientY } = legacy_isTouchEvent(evt)\r\n            ? evt.changedTouches[0]\r\n            : evt;\r\n        if (!timeBaseline) {\r\n            timeBaseline = nowTimestamp();\r\n        }\r\n        positions.push({\r\n            x: clientX,\r\n            y: clientY,\r\n            id: mirror.getId(target),\r\n            timeOffset: nowTimestamp() - timeBaseline,\r\n        });\r\n        wrappedCb(typeof DragEvent !== 'undefined' && evt instanceof DragEvent\r\n            ? IncrementalSource.Drag\r\n            : evt instanceof MouseEvent\r\n                ? IncrementalSource.MouseMove\r\n                : IncrementalSource.TouchMove);\r\n    }), threshold, {\r\n        trailing: false,\r\n    }));\r\n    const handlers = [\r\n        on('mousemove', updatePosition, doc),\r\n        on('touchmove', updatePosition, doc),\r\n        on('drag', updatePosition, doc),\r\n    ];\r\n    return callbackWrapper(() => {\r\n        handlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction initMouseInteractionObserver({ mouseInteractionCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\r\n    if (sampling.mouseInteraction === false) {\r\n        return () => {\r\n        };\r\n    }\r\n    const disableMap = sampling.mouseInteraction === true ||\r\n        sampling.mouseInteraction === undefined\r\n        ? {}\r\n        : sampling.mouseInteraction;\r\n    const handlers = [];\r\n    let currentPointerType = null;\r\n    const getHandler = (eventKey) => {\r\n        return (event) => {\r\n            const target = getEventTarget(event);\r\n            if (isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\r\n                return;\r\n            }\r\n            let pointerType = null;\r\n            let thisEventKey = eventKey;\r\n            if ('pointerType' in event) {\r\n                switch (event.pointerType) {\r\n                    case 'mouse':\r\n                        pointerType = PointerTypes.Mouse;\r\n                        break;\r\n                    case 'touch':\r\n                        pointerType = PointerTypes.Touch;\r\n                        break;\r\n                    case 'pen':\r\n                        pointerType = PointerTypes.Pen;\r\n                        break;\r\n                }\r\n                if (pointerType === PointerTypes.Touch) {\r\n                    if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\r\n                        thisEventKey = 'TouchStart';\r\n                    }\r\n                    else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\r\n                        thisEventKey = 'TouchEnd';\r\n                    }\r\n                }\r\n                else if (pointerType === PointerTypes.Pen) ;\r\n            }\r\n            else if (legacy_isTouchEvent(event)) {\r\n                pointerType = PointerTypes.Touch;\r\n            }\r\n            if (pointerType !== null) {\r\n                currentPointerType = pointerType;\r\n                if ((thisEventKey.startsWith('Touch') &&\r\n                    pointerType === PointerTypes.Touch) ||\r\n                    (thisEventKey.startsWith('Mouse') &&\r\n                        pointerType === PointerTypes.Mouse)) {\r\n                    pointerType = null;\r\n                }\r\n            }\r\n            else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\r\n                pointerType = currentPointerType;\r\n                currentPointerType = null;\r\n            }\r\n            const e = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\r\n            if (!e) {\r\n                return;\r\n            }\r\n            const id = mirror.getId(target);\r\n            const { clientX, clientY } = e;\r\n            callbackWrapper(mouseInteractionCb)(Object.assign({ type: MouseInteractions[thisEventKey], id, x: clientX, y: clientY }, (pointerType !== null && { pointerType })));\r\n        };\r\n    };\r\n    Object.keys(MouseInteractions)\r\n        .filter((key) => Number.isNaN(Number(key)) &&\r\n        !key.endsWith('_Departed') &&\r\n        disableMap[key] !== false)\r\n        .forEach((eventKey) => {\r\n        let eventName = toLowerCase(eventKey);\r\n        const handler = getHandler(eventKey);\r\n        if (window.PointerEvent) {\r\n            switch (MouseInteractions[eventKey]) {\r\n                case MouseInteractions.MouseDown:\r\n                case MouseInteractions.MouseUp:\r\n                    eventName = eventName.replace('mouse', 'pointer');\r\n                    break;\r\n                case MouseInteractions.TouchStart:\r\n                case MouseInteractions.TouchEnd:\r\n                    return;\r\n            }\r\n        }\r\n        handlers.push(on(eventName, handler, doc));\r\n    });\r\n    return callbackWrapper(() => {\r\n        handlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction initScrollObserver({ scrollCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\r\n    const updatePosition = callbackWrapper(throttle(callbackWrapper((evt) => {\r\n        const target = getEventTarget(evt);\r\n        if (!target ||\r\n            isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\r\n            return;\r\n        }\r\n        const id = mirror.getId(target);\r\n        if (target === doc && doc.defaultView) {\r\n            const scrollLeftTop = getWindowScroll(doc.defaultView);\r\n            scrollCb({\r\n                id,\r\n                x: scrollLeftTop.left,\r\n                y: scrollLeftTop.top,\r\n            });\r\n        }\r\n        else {\r\n            scrollCb({\r\n                id,\r\n                x: target.scrollLeft,\r\n                y: target.scrollTop,\r\n            });\r\n        }\r\n    }), sampling.scroll || 100));\r\n    return on('scroll', updatePosition, doc);\r\n}\r\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\r\n    let lastH = -1;\r\n    let lastW = -1;\r\n    const updateDimension = callbackWrapper(throttle(callbackWrapper(() => {\r\n        const height = getWindowHeight();\r\n        const width = getWindowWidth();\r\n        if (lastH !== height || lastW !== width) {\r\n            viewportResizeCb({\r\n                width: Number(width),\r\n                height: Number(height),\r\n            });\r\n            lastH = height;\r\n            lastW = width;\r\n        }\r\n    }), 200));\r\n    return on('resize', updateDimension, win);\r\n}\r\nconst INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];\r\nconst lastInputValueMap = new WeakMap();\r\nfunction initInputObserver({ inputCb, doc, mirror, blockClass, blockSelector, unblockSelector, ignoreClass, ignoreSelector, maskInputOptions, maskInputFn, sampling, userTriggeredOnInput, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, }) {\r\n    function eventHandler(event) {\r\n        let target = getEventTarget(event);\r\n        const userTriggered = event.isTrusted;\r\n        const tagName = target && toUpperCase(target.tagName);\r\n        if (tagName === 'OPTION')\r\n            target = target.parentElement;\r\n        if (!target ||\r\n            !tagName ||\r\n            INPUT_TAGS.indexOf(tagName) < 0 ||\r\n            isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\r\n            return;\r\n        }\r\n        const el = target;\r\n        if (el.classList.contains(ignoreClass) ||\r\n            (ignoreSelector && el.matches(ignoreSelector))) {\r\n            return;\r\n        }\r\n        const type = getInputType(target);\r\n        let text = getInputValue(el, tagName, type);\r\n        let isChecked = false;\r\n        const isInputMasked = shouldMaskInput({\r\n            maskInputOptions,\r\n            tagName,\r\n            type,\r\n        });\r\n        const forceMask = needMaskingText(target, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked);\r\n        if (type === 'radio' || type === 'checkbox') {\r\n            isChecked = target.checked;\r\n        }\r\n        text = maskInputValue({\r\n            isMasked: forceMask,\r\n            element: target,\r\n            value: text,\r\n            maskInputFn,\r\n        });\r\n        cbWithDedup(target, userTriggeredOnInput\r\n            ? { text, isChecked, userTriggered }\r\n            : { text, isChecked });\r\n        const name = target.name;\r\n        if (type === 'radio' && name && isChecked) {\r\n            doc\r\n                .querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`)\r\n                .forEach((el) => {\r\n                if (el !== target) {\r\n                    const text = maskInputValue({\r\n                        isMasked: forceMask,\r\n                        element: el,\r\n                        value: getInputValue(el, tagName, type),\r\n                        maskInputFn,\r\n                    });\r\n                    cbWithDedup(el, userTriggeredOnInput\r\n                        ? { text, isChecked: !isChecked, userTriggered: false }\r\n                        : { text, isChecked: !isChecked });\r\n                }\r\n            });\r\n        }\r\n    }\r\n    function cbWithDedup(target, v) {\r\n        const lastInputValue = lastInputValueMap.get(target);\r\n        if (!lastInputValue ||\r\n            lastInputValue.text !== v.text ||\r\n            lastInputValue.isChecked !== v.isChecked) {\r\n            lastInputValueMap.set(target, v);\r\n            const id = mirror.getId(target);\r\n            callbackWrapper(inputCb)(Object.assign(Object.assign({}, v), { id }));\r\n        }\r\n    }\r\n    const events = sampling.input === 'last' ? ['change'] : ['input', 'change'];\r\n    const handlers = events.map((eventName) => on(eventName, callbackWrapper(eventHandler), doc));\r\n    const currentWindow = doc.defaultView;\r\n    if (!currentWindow) {\r\n        return () => {\r\n            handlers.forEach((h) => h());\r\n        };\r\n    }\r\n    const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, 'value');\r\n    const hookProperties = [\r\n        [currentWindow.HTMLInputElement.prototype, 'value'],\r\n        [currentWindow.HTMLInputElement.prototype, 'checked'],\r\n        [currentWindow.HTMLSelectElement.prototype, 'value'],\r\n        [currentWindow.HTMLTextAreaElement.prototype, 'value'],\r\n        [currentWindow.HTMLSelectElement.prototype, 'selectedIndex'],\r\n        [currentWindow.HTMLOptionElement.prototype, 'selected'],\r\n    ];\r\n    if (propertyDescriptor && propertyDescriptor.set) {\r\n        handlers.push(...hookProperties.map((p) => hookSetter(p[0], p[1], {\r\n            set() {\r\n                callbackWrapper(eventHandler)({\r\n                    target: this,\r\n                    isTrusted: false,\r\n                });\r\n            },\r\n        }, false, currentWindow)));\r\n    }\r\n    return callbackWrapper(() => {\r\n        handlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction getNestedCSSRulePositions(rule) {\r\n    const positions = [];\r\n    function recurse(childRule, pos) {\r\n        if ((hasNestedCSSRule('CSSGroupingRule') &&\r\n            childRule.parentRule instanceof CSSGroupingRule) ||\r\n            (hasNestedCSSRule('CSSMediaRule') &&\r\n                childRule.parentRule instanceof CSSMediaRule) ||\r\n            (hasNestedCSSRule('CSSSupportsRule') &&\r\n                childRule.parentRule instanceof CSSSupportsRule) ||\r\n            (hasNestedCSSRule('CSSConditionRule') &&\r\n                childRule.parentRule instanceof CSSConditionRule)) {\r\n            const rules = Array.from(childRule.parentRule.cssRules);\r\n            const index = rules.indexOf(childRule);\r\n            pos.unshift(index);\r\n        }\r\n        else if (childRule.parentStyleSheet) {\r\n            const rules = Array.from(childRule.parentStyleSheet.cssRules);\r\n            const index = rules.indexOf(childRule);\r\n            pos.unshift(index);\r\n        }\r\n        return pos;\r\n    }\r\n    return recurse(rule, positions);\r\n}\r\nfunction getIdAndStyleId(sheet, mirror, styleMirror) {\r\n    let id, styleId;\r\n    if (!sheet)\r\n        return {};\r\n    if (sheet.ownerNode)\r\n        id = mirror.getId(sheet.ownerNode);\r\n    else\r\n        styleId = styleMirror.getId(sheet);\r\n    return {\r\n        styleId,\r\n        id,\r\n    };\r\n}\r\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror, stylesheetManager }, { win }) {\r\n    if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\r\n        return () => {\r\n        };\r\n    }\r\n    const insertRule = win.CSSStyleSheet.prototype.insertRule;\r\n    win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\r\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n            const [rule, index] = argumentsList;\r\n            const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                styleSheetRuleCb({\r\n                    id,\r\n                    styleId,\r\n                    adds: [{ rule, index }],\r\n                });\r\n            }\r\n            return target.apply(thisArg, argumentsList);\r\n        }),\r\n    });\r\n    const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\r\n    win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\r\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n            const [index] = argumentsList;\r\n            const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                styleSheetRuleCb({\r\n                    id,\r\n                    styleId,\r\n                    removes: [{ index }],\r\n                });\r\n            }\r\n            return target.apply(thisArg, argumentsList);\r\n        }),\r\n    });\r\n    let replace;\r\n    if (win.CSSStyleSheet.prototype.replace) {\r\n        replace = win.CSSStyleSheet.prototype.replace;\r\n        win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\r\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n                const [text] = argumentsList;\r\n                const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                    styleSheetRuleCb({\r\n                        id,\r\n                        styleId,\r\n                        replace: text,\r\n                    });\r\n                }\r\n                return target.apply(thisArg, argumentsList);\r\n            }),\r\n        });\r\n    }\r\n    let replaceSync;\r\n    if (win.CSSStyleSheet.prototype.replaceSync) {\r\n        replaceSync = win.CSSStyleSheet.prototype.replaceSync;\r\n        win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\r\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n                const [text] = argumentsList;\r\n                const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                    styleSheetRuleCb({\r\n                        id,\r\n                        styleId,\r\n                        replaceSync: text,\r\n                    });\r\n                }\r\n                return target.apply(thisArg, argumentsList);\r\n            }),\r\n        });\r\n    }\r\n    const supportedNestedCSSRuleTypes = {};\r\n    if (canMonkeyPatchNestedCSSRule('CSSGroupingRule')) {\r\n        supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\r\n    }\r\n    else {\r\n        if (canMonkeyPatchNestedCSSRule('CSSMediaRule')) {\r\n            supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\r\n        }\r\n        if (canMonkeyPatchNestedCSSRule('CSSConditionRule')) {\r\n            supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\r\n        }\r\n        if (canMonkeyPatchNestedCSSRule('CSSSupportsRule')) {\r\n            supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\r\n        }\r\n    }\r\n    const unmodifiedFunctions = {};\r\n    Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n        unmodifiedFunctions[typeKey] = {\r\n            insertRule: type.prototype.insertRule,\r\n            deleteRule: type.prototype.deleteRule,\r\n        };\r\n        type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, {\r\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n                const [rule, index] = argumentsList;\r\n                const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                    styleSheetRuleCb({\r\n                        id,\r\n                        styleId,\r\n                        adds: [\r\n                            {\r\n                                rule,\r\n                                index: [\r\n                                    ...getNestedCSSRulePositions(thisArg),\r\n                                    index || 0,\r\n                                ],\r\n                            },\r\n                        ],\r\n                    });\r\n                }\r\n                return target.apply(thisArg, argumentsList);\r\n            }),\r\n        });\r\n        type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, {\r\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n                const [index] = argumentsList;\r\n                const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                    styleSheetRuleCb({\r\n                        id,\r\n                        styleId,\r\n                        removes: [\r\n                            { index: [...getNestedCSSRulePositions(thisArg), index] },\r\n                        ],\r\n                    });\r\n                }\r\n                return target.apply(thisArg, argumentsList);\r\n            }),\r\n        });\r\n    });\r\n    return callbackWrapper(() => {\r\n        win.CSSStyleSheet.prototype.insertRule = insertRule;\r\n        win.CSSStyleSheet.prototype.deleteRule = deleteRule;\r\n        replace && (win.CSSStyleSheet.prototype.replace = replace);\r\n        replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\r\n        Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n            type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\r\n            type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\r\n        });\r\n    });\r\n}\r\nfunction initAdoptedStyleSheetObserver({ mirror, stylesheetManager, }, host) {\r\n    var _a, _b, _c;\r\n    let hostId = null;\r\n    if (host.nodeName === '#document')\r\n        hostId = mirror.getId(host);\r\n    else\r\n        hostId = mirror.getId(host.host);\r\n    const patchTarget = host.nodeName === '#document'\r\n        ? (_a = host.defaultView) === null || _a === void 0 ? void 0 : _a.Document\r\n        : (_c = (_b = host.ownerDocument) === null || _b === void 0 ? void 0 : _b.defaultView) === null || _c === void 0 ? void 0 : _c.ShadowRoot;\r\n    const originalPropertyDescriptor = (patchTarget === null || patchTarget === void 0 ? void 0 : patchTarget.prototype)\r\n        ? Object.getOwnPropertyDescriptor(patchTarget === null || patchTarget === void 0 ? void 0 : patchTarget.prototype, 'adoptedStyleSheets')\r\n        : undefined;\r\n    if (hostId === null ||\r\n        hostId === -1 ||\r\n        !patchTarget ||\r\n        !originalPropertyDescriptor)\r\n        return () => {\r\n        };\r\n    Object.defineProperty(host, 'adoptedStyleSheets', {\r\n        configurable: originalPropertyDescriptor.configurable,\r\n        enumerable: originalPropertyDescriptor.enumerable,\r\n        get() {\r\n            var _a;\r\n            return (_a = originalPropertyDescriptor.get) === null || _a === void 0 ? void 0 : _a.call(this);\r\n        },\r\n        set(sheets) {\r\n            var _a;\r\n            const result = (_a = originalPropertyDescriptor.set) === null || _a === void 0 ? void 0 : _a.call(this, sheets);\r\n            if (hostId !== null && hostId !== -1) {\r\n                try {\r\n                    stylesheetManager.adoptStyleSheets(sheets, hostId);\r\n                }\r\n                catch (e) {\r\n                }\r\n            }\r\n            return result;\r\n        },\r\n    });\r\n    return callbackWrapper(() => {\r\n        Object.defineProperty(host, 'adoptedStyleSheets', {\r\n            configurable: originalPropertyDescriptor.configurable,\r\n            enumerable: originalPropertyDescriptor.enumerable,\r\n            get: originalPropertyDescriptor.get,\r\n            set: originalPropertyDescriptor.set,\r\n        });\r\n    });\r\n}\r\nfunction initStyleDeclarationObserver({ styleDeclarationCb, mirror, ignoreCSSAttributes, stylesheetManager, }, { win }) {\r\n    const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\r\n    win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\r\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n            var _a;\r\n            const [property, value, priority] = argumentsList;\r\n            if (ignoreCSSAttributes.has(property)) {\r\n                return setProperty.apply(thisArg, [property, value, priority]);\r\n            }\r\n            const { id, styleId } = getIdAndStyleId((_a = thisArg.parentRule) === null || _a === void 0 ? void 0 : _a.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                styleDeclarationCb({\r\n                    id,\r\n                    styleId,\r\n                    set: {\r\n                        property,\r\n                        value,\r\n                        priority,\r\n                    },\r\n                    index: getNestedCSSRulePositions(thisArg.parentRule),\r\n                });\r\n            }\r\n            return target.apply(thisArg, argumentsList);\r\n        }),\r\n    });\r\n    const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\r\n    win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\r\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n            var _a;\r\n            const [property] = argumentsList;\r\n            if (ignoreCSSAttributes.has(property)) {\r\n                return removeProperty.apply(thisArg, [property]);\r\n            }\r\n            const { id, styleId } = getIdAndStyleId((_a = thisArg.parentRule) === null || _a === void 0 ? void 0 : _a.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                styleDeclarationCb({\r\n                    id,\r\n                    styleId,\r\n                    remove: {\r\n                        property,\r\n                    },\r\n                    index: getNestedCSSRulePositions(thisArg.parentRule),\r\n                });\r\n            }\r\n            return target.apply(thisArg, argumentsList);\r\n        }),\r\n    });\r\n    return callbackWrapper(() => {\r\n        win.CSSStyleDeclaration.prototype.setProperty = setProperty;\r\n        win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\r\n    });\r\n}\r\nfunction initMediaInteractionObserver({ mediaInteractionCb, blockClass, blockSelector, unblockSelector, mirror, sampling, doc, }) {\r\n    const handler = callbackWrapper((type) => throttle(callbackWrapper((event) => {\r\n        const target = getEventTarget(event);\r\n        if (!target ||\r\n            isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\r\n            return;\r\n        }\r\n        const { currentTime, volume, muted, playbackRate } = target;\r\n        mediaInteractionCb({\r\n            type,\r\n            id: mirror.getId(target),\r\n            currentTime,\r\n            volume,\r\n            muted,\r\n            playbackRate,\r\n        });\r\n    }), sampling.media || 500));\r\n    const handlers = [\r\n        on('play', handler(0), doc),\r\n        on('pause', handler(1), doc),\r\n        on('seeked', handler(2), doc),\r\n        on('volumechange', handler(3), doc),\r\n        on('ratechange', handler(4), doc),\r\n    ];\r\n    return callbackWrapper(() => {\r\n        handlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction initFontObserver({ fontCb, doc }) {\r\n    const win = doc.defaultView;\r\n    if (!win) {\r\n        return () => {\r\n        };\r\n    }\r\n    const handlers = [];\r\n    const fontMap = new WeakMap();\r\n    const originalFontFace = win.FontFace;\r\n    win.FontFace = function FontFace(family, source, descriptors) {\r\n        const fontFace = new originalFontFace(family, source, descriptors);\r\n        fontMap.set(fontFace, {\r\n            family,\r\n            buffer: typeof source !== 'string',\r\n            descriptors,\r\n            fontSource: typeof source === 'string'\r\n                ? source\r\n                : JSON.stringify(Array.from(new Uint8Array(source))),\r\n        });\r\n        return fontFace;\r\n    };\r\n    const restoreHandler = patch(doc.fonts, 'add', function (original) {\r\n        return function (fontFace) {\r\n            setTimeout(callbackWrapper(() => {\r\n                const p = fontMap.get(fontFace);\r\n                if (p) {\r\n                    fontCb(p);\r\n                    fontMap.delete(fontFace);\r\n                }\r\n            }), 0);\r\n            return original.apply(this, [fontFace]);\r\n        };\r\n    });\r\n    handlers.push(() => {\r\n        win.FontFace = originalFontFace;\r\n    });\r\n    handlers.push(restoreHandler);\r\n    return callbackWrapper(() => {\r\n        handlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction initSelectionObserver(param) {\r\n    const { doc, mirror, blockClass, blockSelector, unblockSelector, selectionCb, } = param;\r\n    let collapsed = true;\r\n    const updateSelection = callbackWrapper(() => {\r\n        const selection = doc.getSelection();\r\n        if (!selection || (collapsed && (selection === null || selection === void 0 ? void 0 : selection.isCollapsed)))\r\n            return;\r\n        collapsed = selection.isCollapsed || false;\r\n        const ranges = [];\r\n        const count = selection.rangeCount || 0;\r\n        for (let i = 0; i < count; i++) {\r\n            const range = selection.getRangeAt(i);\r\n            const { startContainer, startOffset, endContainer, endOffset } = range;\r\n            const blocked = isBlocked(startContainer, blockClass, blockSelector, unblockSelector, true) ||\r\n                isBlocked(endContainer, blockClass, blockSelector, unblockSelector, true);\r\n            if (blocked)\r\n                continue;\r\n            ranges.push({\r\n                start: mirror.getId(startContainer),\r\n                startOffset,\r\n                end: mirror.getId(endContainer),\r\n                endOffset,\r\n            });\r\n        }\r\n        selectionCb({ ranges });\r\n    });\r\n    updateSelection();\r\n    return on('selectionchange', updateSelection);\r\n}\r\nfunction initCustomElementObserver({ doc, customElementCb, }) {\r\n    const win = doc.defaultView;\r\n    if (!win || !win.customElements) {\r\n        return () => {\r\n        };\r\n    }\r\n    const restoreHandler = patch(win.customElements, 'define', function (original) {\r\n        return function (name, constructor, options) {\r\n            try {\r\n                customElementCb({\r\n                    define: {\r\n                        name,\r\n                    },\r\n                });\r\n            }\r\n            catch (e) {\r\n            }\r\n            return original.apply(this, [name, constructor, options]);\r\n        };\r\n    });\r\n    return restoreHandler;\r\n}\r\nfunction initObservers(o, _hooks = {}) {\r\n    const currentWindow = o.doc.defaultView;\r\n    if (!currentWindow) {\r\n        return () => {\r\n        };\r\n    }\r\n    const mutationObserver = initMutationObserver(o, o.doc);\r\n    const mousemoveHandler = initMoveObserver(o);\r\n    const mouseInteractionHandler = initMouseInteractionObserver(o);\r\n    const scrollHandler = initScrollObserver(o);\r\n    const viewportResizeHandler = initViewportResizeObserver(o, {\r\n        win: currentWindow,\r\n    });\r\n    const inputHandler = initInputObserver(o);\r\n    const mediaInteractionHandler = initMediaInteractionObserver(o);\r\n    const styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });\r\n    const adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o, o.doc);\r\n    const styleDeclarationObserver = initStyleDeclarationObserver(o, {\r\n        win: currentWindow,\r\n    });\r\n    const fontObserver = o.collectFonts\r\n        ? initFontObserver(o)\r\n        : () => {\r\n        };\r\n    const selectionObserver = initSelectionObserver(o);\r\n    const customElementObserver = initCustomElementObserver(o);\r\n    return callbackWrapper(() => {\r\n        mutationBuffers.forEach((b) => b.reset());\r\n        mutationObserver.disconnect();\r\n        mousemoveHandler();\r\n        mouseInteractionHandler();\r\n        scrollHandler();\r\n        viewportResizeHandler();\r\n        inputHandler();\r\n        mediaInteractionHandler();\r\n        styleSheetObserver();\r\n        adoptedStyleSheetObserver();\r\n        styleDeclarationObserver();\r\n        fontObserver();\r\n        selectionObserver();\r\n        customElementObserver();\r\n    });\r\n}\r\nfunction hasNestedCSSRule(prop) {\r\n    return typeof window[prop] !== 'undefined';\r\n}\r\nfunction canMonkeyPatchNestedCSSRule(prop) {\r\n    return Boolean(typeof window[prop] !== 'undefined' &&\r\n        window[prop].prototype &&\r\n        'insertRule' in window[prop].prototype &&\r\n        'deleteRule' in window[prop].prototype);\r\n}\n\nexport { INPUT_TAGS, initAdoptedStyleSheetObserver, initMutationObserver, initObservers, initScrollObserver, mutationBuffers };\n","class CrossOriginIframeMirror {\r\n    constructor(generateIdFn) {\r\n        this.generateIdFn = generateIdFn;\r\n        this.iframeIdToRemoteIdMap = new WeakMap();\r\n        this.iframeRemoteIdToIdMap = new WeakMap();\r\n    }\r\n    getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\r\n        const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\r\n        const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\r\n        let id = idToRemoteIdMap.get(remoteId);\r\n        if (!id) {\r\n            id = this.generateIdFn();\r\n            idToRemoteIdMap.set(remoteId, id);\r\n            remoteIdToIdMap.set(id, remoteId);\r\n        }\r\n        return id;\r\n    }\r\n    getIds(iframe, remoteId) {\r\n        const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\r\n        const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n        return remoteId.map((id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap));\r\n    }\r\n    getRemoteId(iframe, id, map) {\r\n        const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\r\n        if (typeof id !== 'number')\r\n            return id;\r\n        const remoteId = remoteIdToIdMap.get(id);\r\n        if (!remoteId)\r\n            return -1;\r\n        return remoteId;\r\n    }\r\n    getRemoteIds(iframe, ids) {\r\n        const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n        return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\r\n    }\r\n    reset(iframe) {\r\n        if (!iframe) {\r\n            this.iframeIdToRemoteIdMap = new WeakMap();\r\n            this.iframeRemoteIdToIdMap = new WeakMap();\r\n            return;\r\n        }\r\n        this.iframeIdToRemoteIdMap.delete(iframe);\r\n        this.iframeRemoteIdToIdMap.delete(iframe);\r\n    }\r\n    getIdToRemoteIdMap(iframe) {\r\n        let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\r\n        if (!idToRemoteIdMap) {\r\n            idToRemoteIdMap = new Map();\r\n            this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\r\n        }\r\n        return idToRemoteIdMap;\r\n    }\r\n    getRemoteIdToIdMap(iframe) {\r\n        let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\r\n        if (!remoteIdToIdMap) {\r\n            remoteIdToIdMap = new Map();\r\n            this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\r\n        }\r\n        return remoteIdToIdMap;\r\n    }\r\n}\n\nexport { CrossOriginIframeMirror as default };\n","import { genId, NodeType } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport CrossOriginIframeMirror from './cross-origin-iframe-mirror.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/rrweb-types.js';\n\nclass IframeManagerNoop {\r\n    constructor() {\r\n        this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\r\n        this.crossOriginIframeRootIdMap = new WeakMap();\r\n    }\r\n    addIframe() {\r\n    }\r\n    addLoadListener() {\r\n    }\r\n    attachIframe() {\r\n    }\r\n}\r\nclass IframeManager {\r\n    constructor(options) {\r\n        this.iframes = new WeakMap();\r\n        this.crossOriginIframeMap = new WeakMap();\r\n        this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\r\n        this.crossOriginIframeRootIdMap = new WeakMap();\r\n        this.mutationCb = options.mutationCb;\r\n        this.wrappedEmit = options.wrappedEmit;\r\n        this.stylesheetManager = options.stylesheetManager;\r\n        this.recordCrossOriginIframes = options.recordCrossOriginIframes;\r\n        this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\r\n        this.mirror = options.mirror;\r\n        if (this.recordCrossOriginIframes) {\r\n            window.addEventListener('message', this.handleMessage.bind(this));\r\n        }\r\n    }\r\n    addIframe(iframeEl) {\r\n        this.iframes.set(iframeEl, true);\r\n        if (iframeEl.contentWindow)\r\n            this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\r\n    }\r\n    addLoadListener(cb) {\r\n        this.loadListener = cb;\r\n    }\r\n    attachIframe(iframeEl, childSn) {\r\n        var _a;\r\n        this.mutationCb({\r\n            adds: [\r\n                {\r\n                    parentId: this.mirror.getId(iframeEl),\r\n                    nextId: null,\r\n                    node: childSn,\r\n                },\r\n            ],\r\n            removes: [],\r\n            texts: [],\r\n            attributes: [],\r\n            isAttachIframe: true,\r\n        });\r\n        (_a = this.loadListener) === null || _a === void 0 ? void 0 : _a.call(this, iframeEl);\r\n        if (iframeEl.contentDocument &&\r\n            iframeEl.contentDocument.adoptedStyleSheets &&\r\n            iframeEl.contentDocument.adoptedStyleSheets.length > 0)\r\n            this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\r\n    }\r\n    handleMessage(message) {\r\n        const crossOriginMessageEvent = message;\r\n        if (crossOriginMessageEvent.data.type !== 'rrweb' ||\r\n            crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\r\n            return;\r\n        const iframeSourceWindow = message.source;\r\n        if (!iframeSourceWindow)\r\n            return;\r\n        const iframeEl = this.crossOriginIframeMap.get(message.source);\r\n        if (!iframeEl)\r\n            return;\r\n        const transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event);\r\n        if (transformedEvent)\r\n            this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout);\r\n    }\r\n    transformCrossOriginEvent(iframeEl, e) {\r\n        var _a;\r\n        switch (e.type) {\r\n            case EventType.FullSnapshot: {\r\n                this.crossOriginIframeMirror.reset(iframeEl);\r\n                this.crossOriginIframeStyleMirror.reset(iframeEl);\r\n                this.replaceIdOnNode(e.data.node, iframeEl);\r\n                const rootId = e.data.node.id;\r\n                this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\r\n                this.patchRootIdOnNode(e.data.node, rootId);\r\n                return {\r\n                    timestamp: e.timestamp,\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: {\r\n                        source: IncrementalSource.Mutation,\r\n                        adds: [\r\n                            {\r\n                                parentId: this.mirror.getId(iframeEl),\r\n                                nextId: null,\r\n                                node: e.data.node,\r\n                            },\r\n                        ],\r\n                        removes: [],\r\n                        texts: [],\r\n                        attributes: [],\r\n                        isAttachIframe: true,\r\n                    },\r\n                };\r\n            }\r\n            case EventType.Meta:\r\n            case EventType.Load:\r\n            case EventType.DomContentLoaded: {\r\n                return false;\r\n            }\r\n            case EventType.Plugin: {\r\n                return e;\r\n            }\r\n            case EventType.Custom: {\r\n                this.replaceIds(e.data.payload, iframeEl, ['id', 'parentId', 'previousId', 'nextId']);\r\n                return e;\r\n            }\r\n            case EventType.IncrementalSnapshot: {\r\n                switch (e.data.source) {\r\n                    case IncrementalSource.Mutation: {\r\n                        e.data.adds.forEach((n) => {\r\n                            this.replaceIds(n, iframeEl, [\r\n                                'parentId',\r\n                                'nextId',\r\n                                'previousId',\r\n                            ]);\r\n                            this.replaceIdOnNode(n.node, iframeEl);\r\n                            const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\r\n                            rootId && this.patchRootIdOnNode(n.node, rootId);\r\n                        });\r\n                        e.data.removes.forEach((n) => {\r\n                            this.replaceIds(n, iframeEl, ['parentId', 'id']);\r\n                        });\r\n                        e.data.attributes.forEach((n) => {\r\n                            this.replaceIds(n, iframeEl, ['id']);\r\n                        });\r\n                        e.data.texts.forEach((n) => {\r\n                            this.replaceIds(n, iframeEl, ['id']);\r\n                        });\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.Drag:\r\n                    case IncrementalSource.TouchMove:\r\n                    case IncrementalSource.MouseMove: {\r\n                        e.data.positions.forEach((p) => {\r\n                            this.replaceIds(p, iframeEl, ['id']);\r\n                        });\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.ViewportResize: {\r\n                        return false;\r\n                    }\r\n                    case IncrementalSource.MediaInteraction:\r\n                    case IncrementalSource.MouseInteraction:\r\n                    case IncrementalSource.Scroll:\r\n                    case IncrementalSource.CanvasMutation:\r\n                    case IncrementalSource.Input: {\r\n                        this.replaceIds(e.data, iframeEl, ['id']);\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.StyleSheetRule:\r\n                    case IncrementalSource.StyleDeclaration: {\r\n                        this.replaceIds(e.data, iframeEl, ['id']);\r\n                        this.replaceStyleIds(e.data, iframeEl, ['styleId']);\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.Font: {\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.Selection: {\r\n                        e.data.ranges.forEach((range) => {\r\n                            this.replaceIds(range, iframeEl, ['start', 'end']);\r\n                        });\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.AdoptedStyleSheet: {\r\n                        this.replaceIds(e.data, iframeEl, ['id']);\r\n                        this.replaceStyleIds(e.data, iframeEl, ['styleIds']);\r\n                        (_a = e.data.styles) === null || _a === void 0 ? void 0 : _a.forEach((style) => {\r\n                            this.replaceStyleIds(style, iframeEl, ['styleId']);\r\n                        });\r\n                        return e;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    replace(iframeMirror, obj, iframeEl, keys) {\r\n        for (const key of keys) {\r\n            if (!Array.isArray(obj[key]) && typeof obj[key] !== 'number')\r\n                continue;\r\n            if (Array.isArray(obj[key])) {\r\n                obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\r\n            }\r\n            else {\r\n                obj[key] = iframeMirror.getId(iframeEl, obj[key]);\r\n            }\r\n        }\r\n        return obj;\r\n    }\r\n    replaceIds(obj, iframeEl, keys) {\r\n        return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\r\n    }\r\n    replaceStyleIds(obj, iframeEl, keys) {\r\n        return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\r\n    }\r\n    replaceIdOnNode(node, iframeEl) {\r\n        this.replaceIds(node, iframeEl, ['id', 'rootId']);\r\n        if ('childNodes' in node) {\r\n            node.childNodes.forEach((child) => {\r\n                this.replaceIdOnNode(child, iframeEl);\r\n            });\r\n        }\r\n    }\r\n    patchRootIdOnNode(node, rootId) {\r\n        if (node.type !== NodeType.Document && !node.rootId)\r\n            node.rootId = rootId;\r\n        if ('childNodes' in node) {\r\n            node.childNodes.forEach((child) => {\r\n                this.patchRootIdOnNode(child, rootId);\r\n            });\r\n        }\r\n    }\r\n}\n\nexport { IframeManager, IframeManagerNoop };\n","import { initMutationObserver, initScrollObserver, initAdoptedStyleSheetObserver } from './observer.js';\nimport { patch, inDom } from '../utils.js';\nimport { isNativeShadowDom } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nclass ShadowDomManagerNoop {\r\n    init() {\r\n    }\r\n    addShadowRoot() {\r\n    }\r\n    observeAttachShadow() {\r\n    }\r\n    reset() {\r\n    }\r\n}\r\nclass ShadowDomManager {\r\n    constructor(options) {\r\n        this.shadowDoms = new WeakSet();\r\n        this.restoreHandlers = [];\r\n        this.mutationCb = options.mutationCb;\r\n        this.scrollCb = options.scrollCb;\r\n        this.bypassOptions = options.bypassOptions;\r\n        this.mirror = options.mirror;\r\n        this.init();\r\n    }\r\n    init() {\r\n        this.reset();\r\n        this.patchAttachShadow(Element, document);\r\n    }\r\n    addShadowRoot(shadowRoot, doc) {\r\n        if (!isNativeShadowDom(shadowRoot))\r\n            return;\r\n        if (this.shadowDoms.has(shadowRoot))\r\n            return;\r\n        this.shadowDoms.add(shadowRoot);\r\n        const observer = initMutationObserver(Object.assign(Object.assign({}, this.bypassOptions), { doc, mutationCb: this.mutationCb, mirror: this.mirror, shadowDomManager: this }), shadowRoot);\r\n        this.restoreHandlers.push(() => observer.disconnect());\r\n        this.restoreHandlers.push(initScrollObserver(Object.assign(Object.assign({}, this.bypassOptions), { scrollCb: this.scrollCb, doc: shadowRoot, mirror: this.mirror })));\r\n        setTimeout(() => {\r\n            if (shadowRoot.adoptedStyleSheets &&\r\n                shadowRoot.adoptedStyleSheets.length > 0)\r\n                this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot.adoptedStyleSheets, this.mirror.getId(shadowRoot.host));\r\n            this.restoreHandlers.push(initAdoptedStyleSheetObserver({\r\n                mirror: this.mirror,\r\n                stylesheetManager: this.bypassOptions.stylesheetManager,\r\n            }, shadowRoot));\r\n        }, 0);\r\n    }\r\n    observeAttachShadow(iframeElement) {\r\n        if (!iframeElement.contentWindow || !iframeElement.contentDocument)\r\n            return;\r\n        this.patchAttachShadow(iframeElement.contentWindow.Element, iframeElement.contentDocument);\r\n    }\r\n    patchAttachShadow(element, doc) {\r\n        const manager = this;\r\n        this.restoreHandlers.push(patch(element.prototype, 'attachShadow', function (original) {\r\n            return function (option) {\r\n                const shadowRoot = original.call(this, option);\r\n                if (this.shadowRoot && inDom(this))\r\n                    manager.addShadowRoot(this.shadowRoot, doc);\r\n                return shadowRoot;\r\n            };\r\n        }));\r\n    }\r\n    reset() {\r\n        this.restoreHandlers.forEach((handler) => {\r\n            try {\r\n                handler();\r\n            }\r\n            catch (e) {\r\n            }\r\n        });\r\n        this.restoreHandlers = [];\r\n        this.shadowDoms = new WeakSet();\r\n    }\r\n}\n\nexport { ShadowDomManager, ShadowDomManagerNoop };\n","import { __rest, __awaiter } from './../../../../../../ext/tslib/tslib.es6.js';\nimport { isBlocked } from '../../../utils.js';\nimport { CanvasContext } from '../../../../../types/dist/rrweb-types.js';\nimport initCanvas2DMutationObserver from './2d.js';\nimport initCanvasContextObserver from './canvas.js';\nimport initCanvasWebGLMutationObserver from './webgl.js';\nimport WorkerFactory from '../../../../../../_virtual/image-bitmap-data-url-worker.js';\n\nclass CanvasManagerNoop {\r\n    reset() {\r\n    }\r\n    freeze() {\r\n    }\r\n    unfreeze() {\r\n    }\r\n    lock() {\r\n    }\r\n    unlock() {\r\n    }\r\n}\r\nclass CanvasManager {\r\n    reset() {\r\n        this.pendingCanvasMutations.clear();\r\n        this.resetObservers && this.resetObservers();\r\n    }\r\n    freeze() {\r\n        this.frozen = true;\r\n    }\r\n    unfreeze() {\r\n        this.frozen = false;\r\n    }\r\n    lock() {\r\n        this.locked = true;\r\n    }\r\n    unlock() {\r\n        this.locked = false;\r\n    }\r\n    constructor(options) {\r\n        this.pendingCanvasMutations = new Map();\r\n        this.rafStamps = { latestId: 0, invokeId: null };\r\n        this.frozen = false;\r\n        this.locked = false;\r\n        this.processMutation = (target, mutation) => {\r\n            const newFrame = this.rafStamps.invokeId &&\r\n                this.rafStamps.latestId !== this.rafStamps.invokeId;\r\n            if (newFrame || !this.rafStamps.invokeId)\r\n                this.rafStamps.invokeId = this.rafStamps.latestId;\r\n            if (!this.pendingCanvasMutations.has(target)) {\r\n                this.pendingCanvasMutations.set(target, []);\r\n            }\r\n            this.pendingCanvasMutations.get(target).push(mutation);\r\n        };\r\n        const { sampling = 'all', win, blockClass, blockSelector, unblockSelector, recordCanvas, dataURLOptions, } = options;\r\n        this.mutationCb = options.mutationCb;\r\n        this.mirror = options.mirror;\r\n        if (recordCanvas && sampling === 'all')\r\n            this.initCanvasMutationObserver(win, blockClass, blockSelector, unblockSelector);\r\n        if (recordCanvas && typeof sampling === 'number')\r\n            this.initCanvasFPSObserver(sampling, win, blockClass, blockSelector, unblockSelector, {\r\n                dataURLOptions,\r\n            });\r\n    }\r\n    initCanvasFPSObserver(fps, win, blockClass, blockSelector, unblockSelector, options) {\r\n        const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, unblockSelector, true);\r\n        const snapshotInProgressMap = new Map();\r\n        const worker = new WorkerFactory();\r\n        worker.onmessage = (e) => {\r\n            const { id } = e.data;\r\n            snapshotInProgressMap.set(id, false);\r\n            if (!('base64' in e.data))\r\n                return;\r\n            const { base64, type, width, height } = e.data;\r\n            this.mutationCb({\r\n                id,\r\n                type: CanvasContext['2D'],\r\n                commands: [\r\n                    {\r\n                        property: 'clearRect',\r\n                        args: [0, 0, width, height],\r\n                    },\r\n                    {\r\n                        property: 'drawImage',\r\n                        args: [\r\n                            {\r\n                                rr_type: 'ImageBitmap',\r\n                                args: [\r\n                                    {\r\n                                        rr_type: 'Blob',\r\n                                        data: [{ rr_type: 'ArrayBuffer', base64 }],\r\n                                        type,\r\n                                    },\r\n                                ],\r\n                            },\r\n                            0,\r\n                            0,\r\n                        ],\r\n                    },\r\n                ],\r\n            });\r\n        };\r\n        const timeBetweenSnapshots = 1000 / fps;\r\n        let lastSnapshotTime = 0;\r\n        let rafId;\r\n        const getCanvas = () => {\r\n            const matchedCanvas = [];\r\n            win.document.querySelectorAll('canvas').forEach((canvas) => {\r\n                if (!isBlocked(canvas, blockClass, blockSelector, unblockSelector, true)) {\r\n                    matchedCanvas.push(canvas);\r\n                }\r\n            });\r\n            return matchedCanvas;\r\n        };\r\n        const takeCanvasSnapshots = (timestamp) => {\r\n            if (lastSnapshotTime &&\r\n                timestamp - lastSnapshotTime < timeBetweenSnapshots) {\r\n                rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n                return;\r\n            }\r\n            lastSnapshotTime = timestamp;\r\n            getCanvas()\r\n                .forEach((canvas) => __awaiter(this, void 0, void 0, function* () {\r\n                var _a;\r\n                const id = this.mirror.getId(canvas);\r\n                if (snapshotInProgressMap.get(id))\r\n                    return;\r\n                snapshotInProgressMap.set(id, true);\r\n                if (['webgl', 'webgl2'].includes(canvas.__context)) {\r\n                    const context = canvas.getContext(canvas.__context);\r\n                    if (((_a = context === null || context === void 0 ? void 0 : context.getContextAttributes()) === null || _a === void 0 ? void 0 : _a.preserveDrawingBuffer) === false) {\r\n                        context.clear(context.COLOR_BUFFER_BIT);\r\n                    }\r\n                }\r\n                const bitmap = yield createImageBitmap(canvas);\r\n                worker.postMessage({\r\n                    id,\r\n                    bitmap,\r\n                    width: canvas.width,\r\n                    height: canvas.height,\r\n                    dataURLOptions: options.dataURLOptions,\r\n                }, [bitmap]);\r\n            }));\r\n            rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n        };\r\n        rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n        this.resetObservers = () => {\r\n            canvasContextReset();\r\n            cancelAnimationFrame(rafId);\r\n        };\r\n    }\r\n    initCanvasMutationObserver(win, blockClass, blockSelector, unblockSelector) {\r\n        this.startRAFTimestamping();\r\n        this.startPendingCanvasMutationFlusher();\r\n        const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, unblockSelector, false);\r\n        const canvas2DReset = initCanvas2DMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector, unblockSelector);\r\n        const canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector, unblockSelector, this.mirror);\r\n        this.resetObservers = () => {\r\n            canvasContextReset();\r\n            canvas2DReset();\r\n            canvasWebGL1and2Reset();\r\n        };\r\n    }\r\n    startPendingCanvasMutationFlusher() {\r\n        requestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n    }\r\n    startRAFTimestamping() {\r\n        const setLatestRAFTimestamp = (timestamp) => {\r\n            this.rafStamps.latestId = timestamp;\r\n            requestAnimationFrame(setLatestRAFTimestamp);\r\n        };\r\n        requestAnimationFrame(setLatestRAFTimestamp);\r\n    }\r\n    flushPendingCanvasMutations() {\r\n        this.pendingCanvasMutations.forEach((values, canvas) => {\r\n            const id = this.mirror.getId(canvas);\r\n            this.flushPendingCanvasMutationFor(canvas, id);\r\n        });\r\n        requestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n    }\r\n    flushPendingCanvasMutationFor(canvas, id) {\r\n        if (this.frozen || this.locked) {\r\n            return;\r\n        }\r\n        const valuesWithType = this.pendingCanvasMutations.get(canvas);\r\n        if (!valuesWithType || id === -1)\r\n            return;\r\n        const values = valuesWithType.map((value) => {\r\n            const rest = __rest(value, [\"type\"]);\r\n            return rest;\r\n        });\r\n        const { type } = valuesWithType[0];\r\n        this.mutationCb({ id, type, commands: values });\r\n        this.pendingCanvasMutations.delete(canvas);\r\n    }\r\n}\n\nexport { CanvasManager, CanvasManagerNoop };\n","import { stringifyRule } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { StyleSheetMirror } from '../utils.js';\n\nclass StylesheetManager {\r\n    constructor(options) {\r\n        this.trackedLinkElements = new WeakSet();\r\n        this.styleMirror = new StyleSheetMirror();\r\n        this.mutationCb = options.mutationCb;\r\n        this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\r\n    }\r\n    attachLinkElement(linkEl, childSn) {\r\n        if ('_cssText' in childSn.attributes)\r\n            this.mutationCb({\r\n                adds: [],\r\n                removes: [],\r\n                texts: [],\r\n                attributes: [\r\n                    {\r\n                        id: childSn.id,\r\n                        attributes: childSn\r\n                            .attributes,\r\n                    },\r\n                ],\r\n            });\r\n        this.trackLinkElement(linkEl);\r\n    }\r\n    trackLinkElement(linkEl) {\r\n        if (this.trackedLinkElements.has(linkEl))\r\n            return;\r\n        this.trackedLinkElements.add(linkEl);\r\n        this.trackStylesheetInLinkElement(linkEl);\r\n    }\r\n    adoptStyleSheets(sheets, hostId) {\r\n        if (sheets.length === 0)\r\n            return;\r\n        const adoptedStyleSheetData = {\r\n            id: hostId,\r\n            styleIds: [],\r\n        };\r\n        const styles = [];\r\n        for (const sheet of sheets) {\r\n            let styleId;\r\n            if (!this.styleMirror.has(sheet)) {\r\n                styleId = this.styleMirror.add(sheet);\r\n                styles.push({\r\n                    styleId,\r\n                    rules: Array.from(sheet.rules || CSSRule, (r, index) => ({\r\n                        rule: stringifyRule(r),\r\n                        index,\r\n                    })),\r\n                });\r\n            }\r\n            else\r\n                styleId = this.styleMirror.getId(sheet);\r\n            adoptedStyleSheetData.styleIds.push(styleId);\r\n        }\r\n        if (styles.length > 0)\r\n            adoptedStyleSheetData.styles = styles;\r\n        this.adoptedStyleSheetCb(adoptedStyleSheetData);\r\n    }\r\n    reset() {\r\n        this.styleMirror.reset();\r\n        this.trackedLinkElements = new WeakSet();\r\n    }\r\n    trackStylesheetInLinkElement(linkEl) {\r\n    }\r\n}\n\nexport { StylesheetManager };\n","class ProcessedNodeManager {\r\n    constructor() {\r\n        this.nodeMap = new WeakMap();\r\n        this.loop = true;\r\n        this.periodicallyClear();\r\n    }\r\n    periodicallyClear() {\r\n        requestAnimationFrame(() => {\r\n            this.clear();\r\n            if (this.loop)\r\n                this.periodicallyClear();\r\n        });\r\n    }\r\n    inOtherBuffer(node, thisBuffer) {\r\n        const buffers = this.nodeMap.get(node);\r\n        return (buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer));\r\n    }\r\n    add(node, buffer) {\r\n        this.nodeMap.set(node, (this.nodeMap.get(node) || new Set()).add(buffer));\r\n    }\r\n    clear() {\r\n        this.nodeMap = new WeakMap();\r\n    }\r\n    destroy() {\r\n        this.loop = false;\r\n    }\r\n}\n\nexport { ProcessedNodeManager as default };\n","import { createMirror, snapshot } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { initObservers, mutationBuffers } from './observer.js';\nimport { polyfill, on, nowTimestamp, getWindowWidth, getWindowHeight, getWindowScroll, isSerializedIframe, isSerializedStylesheet, hasShadowRoot } from '../utils.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/rrweb-types.js';\nimport { IframeManagerNoop, IframeManager } from './iframe-manager.js';\nimport { ShadowDomManagerNoop, ShadowDomManager } from './shadow-dom-manager.js';\nimport { CanvasManagerNoop, CanvasManager } from './observers/canvas/canvas-manager.js';\nimport { StylesheetManager } from './stylesheet-manager.js';\nimport ProcessedNodeManager from './processed-node-manager.js';\nimport { callbackWrapper, unregisterErrorHandler, registerErrorHandler } from './error-handler.js';\n\nfunction wrapEvent(e) {\r\n    const eWithTime = e;\r\n    eWithTime.timestamp = nowTimestamp();\r\n    return eWithTime;\r\n}\r\nlet _wrappedEmit;\r\nlet _takeFullSnapshot;\r\nconst mirror = createMirror();\r\nfunction record(options = {}) {\r\n    const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'rr-block', blockSelector = null, unblockSelector = null, ignoreClass = 'rr-ignore', ignoreSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskAttributeFn, maskInputFn, maskTextFn, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordCanvas = false, recordCrossOriginIframes = false, recordAfter = options.recordAfter === 'DOMContentLoaded'\r\n        ? options.recordAfter\r\n        : 'load', userTriggeredOnInput = false, collectFonts = false, inlineImages = false, keepIframeSrcFn = () => false, ignoreCSSAttributes = new Set([]), errorHandler, onMutation, getCanvasManager, } = options;\r\n    registerErrorHandler(errorHandler);\r\n    const inEmittingFrame = recordCrossOriginIframes\r\n        ? window.parent === window\r\n        : true;\r\n    let passEmitsToParent = false;\r\n    if (!inEmittingFrame) {\r\n        try {\r\n            if (window.parent.document) {\r\n                passEmitsToParent = false;\r\n            }\r\n        }\r\n        catch (e) {\r\n            passEmitsToParent = true;\r\n        }\r\n    }\r\n    if (inEmittingFrame && !emit) {\r\n        throw new Error('emit function is required');\r\n    }\r\n    if (mousemoveWait !== undefined && sampling.mousemove === undefined) {\r\n        sampling.mousemove = mousemoveWait;\r\n    }\r\n    mirror.reset();\r\n    const maskInputOptions = maskAllInputs === true\r\n        ? {\r\n            color: true,\r\n            date: true,\r\n            'datetime-local': true,\r\n            email: true,\r\n            month: true,\r\n            number: true,\r\n            range: true,\r\n            search: true,\r\n            tel: true,\r\n            text: true,\r\n            time: true,\r\n            url: true,\r\n            week: true,\r\n            textarea: true,\r\n            select: true,\r\n            radio: true,\r\n            checkbox: true,\r\n        }\r\n        : _maskInputOptions !== undefined\r\n            ? _maskInputOptions\r\n            : {};\r\n    const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'\r\n        ? {\r\n            script: true,\r\n            comment: true,\r\n            headFavicon: true,\r\n            headWhitespace: true,\r\n            headMetaSocial: true,\r\n            headMetaRobots: true,\r\n            headMetaHttpEquiv: true,\r\n            headMetaVerification: true,\r\n            headMetaAuthorship: _slimDOMOptions === 'all',\r\n            headMetaDescKeywords: _slimDOMOptions === 'all',\r\n        }\r\n        : _slimDOMOptions\r\n            ? _slimDOMOptions\r\n            : {};\r\n    polyfill();\r\n    let lastFullSnapshotEvent;\r\n    let incrementalSnapshotCount = 0;\r\n    const eventProcessor = (e) => {\r\n        if (packFn &&\r\n            !passEmitsToParent) {\r\n            e = packFn(e);\r\n        }\r\n        return e;\r\n    };\r\n    const wrappedEmit = (e, isCheckout) => {\r\n        var _a;\r\n        if (((_a = mutationBuffers[0]) === null || _a === void 0 ? void 0 : _a.isFrozen()) &&\r\n            e.type !== EventType.FullSnapshot &&\r\n            !(e.type === EventType.IncrementalSnapshot &&\r\n                e.data.source === IncrementalSource.Mutation)) {\r\n            mutationBuffers.forEach((buf) => buf.unfreeze());\r\n        }\r\n        if (inEmittingFrame) {\r\n            emit === null || emit === void 0 ? void 0 : emit(eventProcessor(e), isCheckout);\r\n        }\r\n        else if (passEmitsToParent) {\r\n            const message = {\r\n                type: 'rrweb',\r\n                event: eventProcessor(e),\r\n                origin: window.location.origin,\r\n                isCheckout,\r\n            };\r\n            window.parent.postMessage(message, '*');\r\n        }\r\n        if (e.type === EventType.FullSnapshot) {\r\n            lastFullSnapshotEvent = e;\r\n            incrementalSnapshotCount = 0;\r\n        }\r\n        else if (e.type === EventType.IncrementalSnapshot) {\r\n            if (e.data.source === IncrementalSource.Mutation &&\r\n                e.data.isAttachIframe) {\r\n                return;\r\n            }\r\n            incrementalSnapshotCount++;\r\n            const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\r\n            const exceedTime = checkoutEveryNms &&\r\n                e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\r\n            if (exceedCount || exceedTime) {\r\n                takeFullSnapshot(true);\r\n            }\r\n        }\r\n    };\r\n    _wrappedEmit = wrappedEmit;\r\n    const wrappedMutationEmit = (m) => {\r\n        wrappedEmit(wrapEvent({\r\n            type: EventType.IncrementalSnapshot,\r\n            data: Object.assign({ source: IncrementalSource.Mutation }, m),\r\n        }));\r\n    };\r\n    const wrappedScrollEmit = (p) => wrappedEmit(wrapEvent({\r\n        type: EventType.IncrementalSnapshot,\r\n        data: Object.assign({ source: IncrementalSource.Scroll }, p),\r\n    }));\r\n    const wrappedCanvasMutationEmit = (p) => wrappedEmit(wrapEvent({\r\n        type: EventType.IncrementalSnapshot,\r\n        data: Object.assign({ source: IncrementalSource.CanvasMutation }, p),\r\n    }));\r\n    const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit(wrapEvent({\r\n        type: EventType.IncrementalSnapshot,\r\n        data: Object.assign({ source: IncrementalSource.AdoptedStyleSheet }, a),\r\n    }));\r\n    const stylesheetManager = new StylesheetManager({\r\n        mutationCb: wrappedMutationEmit,\r\n        adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit,\r\n    });\r\n    const iframeManager = typeof __RRWEB_EXCLUDE_IFRAME__ === 'boolean' && __RRWEB_EXCLUDE_IFRAME__\r\n        ? new IframeManagerNoop()\r\n        : new IframeManager({\r\n            mirror,\r\n            mutationCb: wrappedMutationEmit,\r\n            stylesheetManager: stylesheetManager,\r\n            recordCrossOriginIframes,\r\n            wrappedEmit,\r\n        });\r\n    const processedNodeManager = new ProcessedNodeManager();\r\n    const canvasManager = getCanvasManager\r\n        ? getCanvasManager({\r\n            recordCanvas,\r\n            blockClass,\r\n            blockSelector,\r\n            unblockSelector,\r\n            sampling: sampling['canvas'],\r\n            dataURLOptions,\r\n        })\r\n        : new CanvasManagerNoop();\r\n    const shadowDomManager = typeof __RRWEB_EXCLUDE_SHADOW_DOM__ === 'boolean' &&\r\n        __RRWEB_EXCLUDE_SHADOW_DOM__\r\n        ? new ShadowDomManagerNoop()\r\n        : new ShadowDomManager({\r\n            mutationCb: wrappedMutationEmit,\r\n            scrollCb: wrappedScrollEmit,\r\n            bypassOptions: {\r\n                onMutation,\r\n                blockClass,\r\n                blockSelector,\r\n                unblockSelector,\r\n                maskAllText,\r\n                maskTextClass,\r\n                unmaskTextClass,\r\n                maskTextSelector,\r\n                unmaskTextSelector,\r\n                inlineStylesheet,\r\n                maskInputOptions,\r\n                dataURLOptions,\r\n                maskAttributeFn,\r\n                maskTextFn,\r\n                maskInputFn,\r\n                recordCanvas,\r\n                inlineImages,\r\n                sampling,\r\n                slimDOMOptions,\r\n                iframeManager,\r\n                stylesheetManager,\r\n                canvasManager,\r\n                keepIframeSrcFn,\r\n                processedNodeManager,\r\n            },\r\n            mirror,\r\n        });\r\n    const takeFullSnapshot = (isCheckout = false) => {\r\n        wrappedEmit(wrapEvent({\r\n            type: EventType.Meta,\r\n            data: {\r\n                href: window.location.href,\r\n                width: getWindowWidth(),\r\n                height: getWindowHeight(),\r\n            },\r\n        }), isCheckout);\r\n        stylesheetManager.reset();\r\n        shadowDomManager.init();\r\n        mutationBuffers.forEach((buf) => buf.lock());\r\n        const node = snapshot(document, {\r\n            mirror,\r\n            blockClass,\r\n            blockSelector,\r\n            unblockSelector,\r\n            maskAllText,\r\n            maskTextClass,\r\n            unmaskTextClass,\r\n            maskTextSelector,\r\n            unmaskTextSelector,\r\n            inlineStylesheet,\r\n            maskAllInputs: maskInputOptions,\r\n            maskAttributeFn,\r\n            maskInputFn,\r\n            maskTextFn,\r\n            slimDOM: slimDOMOptions,\r\n            dataURLOptions,\r\n            recordCanvas,\r\n            inlineImages,\r\n            onSerialize: (n) => {\r\n                if (isSerializedIframe(n, mirror)) {\r\n                    iframeManager.addIframe(n);\r\n                }\r\n                if (isSerializedStylesheet(n, mirror)) {\r\n                    stylesheetManager.trackLinkElement(n);\r\n                }\r\n                if (hasShadowRoot(n)) {\r\n                    shadowDomManager.addShadowRoot(n.shadowRoot, document);\r\n                }\r\n            },\r\n            onIframeLoad: (iframe, childSn) => {\r\n                iframeManager.attachIframe(iframe, childSn);\r\n                shadowDomManager.observeAttachShadow(iframe);\r\n            },\r\n            onStylesheetLoad: (linkEl, childSn) => {\r\n                stylesheetManager.attachLinkElement(linkEl, childSn);\r\n            },\r\n            keepIframeSrcFn,\r\n        });\r\n        if (!node) {\r\n            return console.warn('Failed to snapshot the document');\r\n        }\r\n        wrappedEmit(wrapEvent({\r\n            type: EventType.FullSnapshot,\r\n            data: {\r\n                node,\r\n                initialOffset: getWindowScroll(window),\r\n            },\r\n        }), isCheckout);\r\n        mutationBuffers.forEach((buf) => buf.unlock());\r\n        if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\r\n            stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\r\n    };\r\n    _takeFullSnapshot = takeFullSnapshot;\r\n    try {\r\n        const handlers = [];\r\n        const observe = (doc) => {\r\n            return callbackWrapper(initObservers)({\r\n                onMutation,\r\n                mutationCb: wrappedMutationEmit,\r\n                mousemoveCb: (positions, source) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: {\r\n                        source,\r\n                        positions,\r\n                    },\r\n                })),\r\n                mouseInteractionCb: (d) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.MouseInteraction }, d),\r\n                })),\r\n                scrollCb: wrappedScrollEmit,\r\n                viewportResizeCb: (d) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.ViewportResize }, d),\r\n                })),\r\n                inputCb: (v) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.Input }, v),\r\n                })),\r\n                mediaInteractionCb: (p) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.MediaInteraction }, p),\r\n                })),\r\n                styleSheetRuleCb: (r) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.StyleSheetRule }, r),\r\n                })),\r\n                styleDeclarationCb: (r) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.StyleDeclaration }, r),\r\n                })),\r\n                canvasMutationCb: wrappedCanvasMutationEmit,\r\n                fontCb: (p) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.Font }, p),\r\n                })),\r\n                selectionCb: (p) => {\r\n                    wrappedEmit(wrapEvent({\r\n                        type: EventType.IncrementalSnapshot,\r\n                        data: Object.assign({ source: IncrementalSource.Selection }, p),\r\n                    }));\r\n                },\r\n                customElementCb: (c) => {\r\n                    wrappedEmit(wrapEvent({\r\n                        type: EventType.IncrementalSnapshot,\r\n                        data: Object.assign({ source: IncrementalSource.CustomElement }, c),\r\n                    }));\r\n                },\r\n                blockClass,\r\n                ignoreClass,\r\n                ignoreSelector,\r\n                maskAllText,\r\n                maskTextClass,\r\n                unmaskTextClass,\r\n                maskTextSelector,\r\n                unmaskTextSelector,\r\n                maskInputOptions,\r\n                inlineStylesheet,\r\n                sampling,\r\n                recordCanvas,\r\n                inlineImages,\r\n                userTriggeredOnInput,\r\n                collectFonts,\r\n                doc,\r\n                maskAttributeFn,\r\n                maskInputFn,\r\n                maskTextFn,\r\n                keepIframeSrcFn,\r\n                blockSelector,\r\n                unblockSelector,\r\n                slimDOMOptions,\r\n                dataURLOptions,\r\n                mirror,\r\n                iframeManager,\r\n                stylesheetManager,\r\n                shadowDomManager,\r\n                processedNodeManager,\r\n                canvasManager,\r\n                ignoreCSSAttributes,\r\n                plugins: [],\r\n            }, {});\r\n        };\r\n        iframeManager.addLoadListener((iframeEl) => {\r\n            try {\r\n                handlers.push(observe(iframeEl.contentDocument));\r\n            }\r\n            catch (error) {\r\n                console.warn(error);\r\n            }\r\n        });\r\n        const init = () => {\r\n            takeFullSnapshot();\r\n            handlers.push(observe(document));\r\n        };\r\n        if (document.readyState === 'interactive' ||\r\n            document.readyState === 'complete') {\r\n            init();\r\n        }\r\n        else {\r\n            handlers.push(on('DOMContentLoaded', () => {\r\n                wrappedEmit(wrapEvent({\r\n                    type: EventType.DomContentLoaded,\r\n                    data: {},\r\n                }));\r\n                if (recordAfter === 'DOMContentLoaded')\r\n                    init();\r\n            }));\r\n            handlers.push(on('load', () => {\r\n                wrappedEmit(wrapEvent({\r\n                    type: EventType.Load,\r\n                    data: {},\r\n                }));\r\n                if (recordAfter === 'load')\r\n                    init();\r\n            }, window));\r\n        }\r\n        return () => {\r\n            handlers.forEach((h) => h());\r\n            processedNodeManager.destroy();\r\n            _takeFullSnapshot = undefined;\r\n            unregisterErrorHandler();\r\n        };\r\n    }\r\n    catch (error) {\r\n        console.warn(error);\r\n    }\r\n}\r\nfunction addCustomEvent(tag, payload) {\r\n    if (!_wrappedEmit) {\r\n        throw new Error('please add custom event after start recording');\r\n    }\r\n    _wrappedEmit(wrapEvent({\r\n        type: EventType.Custom,\r\n        data: {\r\n            tag,\r\n            payload,\r\n        },\r\n    }));\r\n}\r\nfunction freezePage() {\r\n    mutationBuffers.forEach((buf) => buf.freeze());\r\n}\r\nfunction takeFullSnapshot(isCheckout) {\r\n    if (!_takeFullSnapshot) {\r\n        throw new Error('please take full snapshot after start recording');\r\n    }\r\n    _takeFullSnapshot(isCheckout);\r\n}\r\nfunction wrappedEmit(e) {\r\n    if (!_wrappedEmit) {\r\n        return;\r\n    }\r\n    _wrappedEmit(e);\r\n}\r\nrecord.mirror = mirror;\r\nrecord.takeFullSnapshot = takeFullSnapshot;\r\nconst wrappedCanvasMutationEmit = (p) => wrappedEmit(wrapEvent({\r\n    type: EventType.IncrementalSnapshot,\r\n    data: Object.assign({ source: IncrementalSource.CanvasMutation }, p),\r\n}));\r\nfunction getCanvasManager(options) {\r\n    return new CanvasManager(Object.assign(Object.assign({}, options), { mutationCb: wrappedCanvasMutationEmit, win: window, mirror }));\r\n}\n\nexport { addCustomEvent, record as default, freezePage, getCanvasManager, mirror, takeFullSnapshot };\n","type ClassOption = string | RegExp;\n\n/** Duplicate this from @sentry-internal/rrweb so we can export this as well. */\nexport const ReplayEventTypeDomContentLoaded = 0;\nexport const ReplayEventTypeLoad = 1;\nexport const ReplayEventTypeFullSnapshot = 2;\nexport const ReplayEventTypeIncrementalSnapshot = 3;\nexport const ReplayEventTypeMeta = 4;\nexport const ReplayEventTypeCustom = 5;\nexport const ReplayEventTypePlugin = 6;\n\nexport type ReplayEventType =\n  | typeof ReplayEventTypeDomContentLoaded\n  | typeof ReplayEventTypeLoad\n  | typeof ReplayEventTypeFullSnapshot\n  | typeof ReplayEventTypeIncrementalSnapshot\n  | typeof ReplayEventTypeMeta\n  | typeof ReplayEventTypeCustom\n  | typeof ReplayEventTypePlugin;\n\n/**\n * This is a partial copy of rrweb's eventWithTime type which only contains the properties\n * we specifcally need in the SDK.\n */\nexport type ReplayEventWithTime = {\n  type: ReplayEventType;\n  data: unknown;\n  timestamp: number;\n  delay?: number;\n};\n\n/**\n * This is a partial copy of rrweb's recording options which only contains the properties\n * we specifically us in the SDK. Users can specify additional properties, hence we add the\n * Record<string, unknown> union type.\n */\nexport type RrwebRecordOptions = {\n  maskAllText?: boolean;\n  maskAllInputs?: boolean;\n  blockClass?: ClassOption;\n  ignoreClass?: string;\n  maskTextClass?: ClassOption;\n  maskTextSelector?: string;\n  blockSelector?: string;\n  maskInputOptions?: Record<string, boolean>;\n} & Record<string, unknown>;\n","/**\n * Converts a timestamp to ms, if it was in s, or keeps it as ms.\n */\nexport function timestampToMs(timestamp: number): number {\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 */\nexport function timestampToS(timestamp: number): number {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp / 1000 : timestamp;\n}\n","import { EventType } from '@sentry-internal/rrweb';\nimport type { Breadcrumb } from '@sentry/types';\nimport { normalize } from '@sentry/utils';\n\nimport type { ReplayContainer } from '../../types';\n\n/**\n * Add a breadcrumb event to replay.\n */\nexport function addBreadcrumbEvent(replay: ReplayContainer, breadcrumb: Breadcrumb): void {\n  if (breadcrumb.category === 'sentry.transaction') {\n    return;\n  }\n\n  if (['ui.click', 'ui.input'].includes(breadcrumb.category as string)) {\n    replay.triggerUserActivity();\n  } else {\n    replay.checkAndHandleExpiredSession();\n  }\n\n  replay.addUpdate(() => {\n    void 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, 1_000),\n      },\n    });\n\n    // Do not flush after console log messages\n    return breadcrumb.category === 'console';\n  });\n}\n","import type { INode } from '@sentry-internal/rrweb-snapshot';\n\nexport interface DomHandlerData {\n  name: string;\n  event: Node | { target: EventTarget };\n}\n\nconst INTERACTIVE_SELECTOR = 'button,a';\n\n/** Get the closest interactive parent element, or else return the given element. */\nexport function getClosestInteractive(element: Element): 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 <button><img></button>,\n * The target will be the image, not the button, which we don't want here\n */\nexport function getClickTargetNode(event: DomHandlerData['event'] | MouseEvent): Node | INode | null {\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. */\nexport function getTargetNode(event: Node | { target: EventTarget | null }): Node | INode | null {\n  if (isEventWithTarget(event)) {\n    return event.target as Node | null;\n  }\n\n  return event;\n}\n\nfunction isEventWithTarget(event: unknown): event is { target: EventTarget | null } {\n  return typeof event === 'object' && !!event && 'target' in event;\n}\n","import { fill } from '@sentry/utils';\n\nimport { WINDOW } from '../../constants';\n\ntype WindowOpenHandler = () => void;\n\nlet handlers: undefined | WindowOpenHandler[];\n\n/**\n * Register a handler to be called when `window.open()` is called.\n * Returns a cleanup function.\n */\nexport function onWindowOpen(cb: WindowOpenHandler): () => void {\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 as WindowOpenHandler[]).splice(pos, 1);\n    }\n  };\n}\n\nfunction monkeyPatchWindowOpen(): void {\n  fill(WINDOW, 'open', function (originalWindowOpen: () => void): () => void {\n    return function (...args: unknown[]): void {\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","import { IncrementalSource, MouseInteractions, record } from '@sentry-internal/rrweb';\nimport type { Breadcrumb } from '@sentry/types';\n\nimport { WINDOW } from '../constants';\nimport type {\n  RecordingEvent,\n  ReplayClickDetector,\n  ReplayContainer,\n  ReplayMultiClickFrame,\n  ReplaySlowClickFrame,\n  SlowClickConfig,\n} from '../types';\nimport { ReplayEventTypeIncrementalSnapshot } from '../types';\nimport { timestampToS } from '../util/timestamp';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\nimport { getClosestInteractive } from './util/domUtils';\nimport { onWindowOpen } from './util/onWindowOpen';\n\ntype ClickBreadcrumb = Breadcrumb & {\n  timestamp: number;\n};\n\ninterface Click {\n  timestamp: number;\n  mutationAfter?: number;\n  scrollAfter?: number;\n  clickBreadcrumb: ClickBreadcrumb;\n  clickCount: number;\n  node: HTMLElement;\n}\n\ntype IncrementalRecordingEvent = RecordingEvent & {\n  type: typeof ReplayEventTypeIncrementalSnapshot;\n  data: { source: IncrementalSource };\n};\n\ntype IncrementalMouseInteractionRecordingEvent = IncrementalRecordingEvent & {\n  type: typeof ReplayEventTypeIncrementalSnapshot;\n  data: { type: MouseInteractions; id: number };\n};\n\n/** Handle a click. */\nexport function handleClick(clickDetector: ReplayClickDetector, clickBreadcrumb: Breadcrumb, node: HTMLElement): void {\n  clickDetector.handleClick(clickBreadcrumb, node);\n}\n\n/** A click detector class that can be used to detect slow or rage clicks on elements. */\nexport class ClickDetector implements ReplayClickDetector {\n  // protected for testing\n  protected _lastMutation: number;\n  protected _lastScroll: number;\n\n  private _clicks: Click[];\n  private _teardown: undefined | (() => void);\n\n  private _threshold: number;\n  private _scollTimeout: number;\n  private _timeout: number;\n  private _ignoreSelector: string;\n\n  private _replay: ReplayContainer;\n  private _checkClickTimeout?: ReturnType<typeof setTimeout>;\n  private _addBreadcrumbEvent: typeof addBreadcrumbEvent;\n\n  public constructor(\n    replay: ReplayContainer,\n    slowClickConfig: SlowClickConfig,\n    // Just for easier testing\n    _addBreadcrumbEvent = addBreadcrumbEvent,\n  ) {\n    this._lastMutation = 0;\n    this._lastScroll = 0;\n    this._clicks = [];\n\n    // We want everything in s, but options are in ms\n    this._timeout = slowClickConfig.timeout / 1000;\n    this._threshold = slowClickConfig.threshold / 1000;\n    this._scollTimeout = slowClickConfig.scrollTimeout / 1000;\n    this._replay = replay;\n    this._ignoreSelector = slowClickConfig.ignoreSelector;\n    this._addBreadcrumbEvent = _addBreadcrumbEvent;\n  }\n\n  /** Register click detection handlers on mutation or scroll. */\n  public addListeners(): void {\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  public removeListeners(): void {\n    if (this._teardown) {\n      this._teardown();\n    }\n\n    if (this._checkClickTimeout) {\n      clearTimeout(this._checkClickTimeout);\n    }\n  }\n\n  /** @inheritDoc */\n  public handleClick(breadcrumb: Breadcrumb, node: HTMLElement): void {\n    if (ignoreElement(node, this._ignoreSelector) || !isClickBreadcrumb(breadcrumb)) {\n      return;\n    }\n\n    const newClick: Click = {\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  public registerMutation(timestamp = Date.now()): void {\n    this._lastMutation = timestampToS(timestamp);\n  }\n\n  /** @inheritDoc */\n  public registerScroll(timestamp = Date.now()): void {\n    this._lastScroll = timestampToS(timestamp);\n  }\n\n  /** @inheritDoc */\n  public registerClick(element: HTMLElement): void {\n    const node = getClosestInteractive(element);\n    this._handleMultiClick(node as HTMLElement);\n  }\n\n  /** Count multiple clicks on elements. */\n  private _handleMultiClick(node: HTMLElement): void {\n    this._getClicks(node).forEach(click => {\n      click.clickCount++;\n    });\n  }\n\n  /** Get all pending clicks for a given node. */\n  private _getClicks(node: HTMLElement): Click[] {\n    return this._clicks.filter(click => click.node === node);\n  }\n\n  /** Check the clicks that happened. */\n  private _checkClicks(): void {\n    const timedOutClicks: Click[] = [];\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  private _generateBreadcrumbs(click: Click): void {\n    const replay = this._replay;\n    const hadScroll = click.scrollAfter && click.scrollAfter <= this._scollTimeout;\n    const hadMutation = click.mutationAfter && click.mutationAfter <= this._threshold;\n\n    const isSlowClick = !hadScroll && !hadMutation;\n    const { clickCount, clickBreadcrumb } = click;\n\n    // Slow click\n    if (isSlowClick) {\n      // If `mutationAfter` is set, it means a mutation happened after the threshold, but before the timeout\n      // If not, it means we just timed out without scroll & mutation\n      const timeAfterClickMs = Math.min(click.mutationAfter || this._timeout, this._timeout) * 1000;\n      const endReason = timeAfterClickMs < this._timeout * 1000 ? 'mutation' : 'timeout';\n\n      const breadcrumb: ReplaySlowClickFrame = {\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: ReplayMultiClickFrame = {\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  private _scheduleCheckClicks(): void {\n    if (this._checkClickTimeout) {\n      clearTimeout(this._checkClickTimeout);\n    }\n\n    this._checkClickTimeout = setTimeout(() => this._checkClicks(), 1000);\n  }\n}\n\nconst SLOW_CLICK_TAGS = ['A', 'BUTTON', 'INPUT'];\n\n/** exported for tests only */\nexport function ignoreElement(node: HTMLElement, ignoreSelector: string): boolean {\n  if (!SLOW_CLICK_TAGS.includes(node.tagName)) {\n    return true;\n  }\n\n  // If <input> 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 <a> 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: Breadcrumb): breadcrumb is ClickBreadcrumb {\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(): number {\n  return Date.now() / 1000;\n}\n\n/** Update the click detector based on a recording event of rrweb. */\nexport function updateClickDetectorForRecordingEvent(clickDetector: ReplayClickDetector, event: RecordingEvent): void {\n  try {\n    // note: We only consider incremental snapshots here\n    // This means that any full snapshot is ignored for mutation detection - the reason is that we simply cannot know if a mutation happened here.\n    // E.g. think that we are buffering, an error happens and we take a full snapshot because we switched to session mode -\n    // in this scenario, we would not know if a dead click happened because of the error, which is a key dead click scenario.\n    // Instead, by ignoring full snapshots, we have the risk that we generate a false positive\n    // (if a mutation _did_ happen but was \"swallowed\" by the full snapshot)\n    // But this should be more unlikely as we'd generally capture the incremental snapshot right away\n\n    if (!isIncrementalEvent(event)) {\n      return;\n    }\n\n    const { source } = event.data;\n    if (source === IncrementalSource.Mutation) {\n      clickDetector.registerMutation(event.timestamp);\n    }\n\n    if (source === IncrementalSource.Scroll) {\n      clickDetector.registerScroll(event.timestamp);\n    }\n\n    if (isIncrementalMouseInteraction(event)) {\n      const { type, id } = event.data;\n      const node = record.mirror.getNode(id);\n\n      if (node instanceof HTMLElement && type === MouseInteractions.Click) {\n        clickDetector.registerClick(node);\n      }\n    }\n  } catch {\n    // ignore errors here, e.g. if accessing something that does not exist\n  }\n}\n\nfunction isIncrementalEvent(event: RecordingEvent): event is IncrementalRecordingEvent {\n  return event.type === ReplayEventTypeIncrementalSnapshot;\n}\n\nfunction isIncrementalMouseInteraction(\n  event: IncrementalRecordingEvent,\n): event is IncrementalMouseInteractionRecordingEvent {\n  return event.data.source === IncrementalSource.MouseInteraction;\n}\n","import type { ReplayBreadcrumbFrame } from '../types/replayFrame';\n\n/**\n * Create a breadcrumb for a replay.\n */\nexport function createBreadcrumb(\n  breadcrumb: Omit<ReplayBreadcrumbFrame, 'timestamp' | 'type'> & Partial<Pick<ReplayBreadcrumbFrame, 'timestamp'>>,\n): ReplayBreadcrumbFrame {\n  return {\n    timestamp: Date.now() / 1000,\n    type: 'default',\n    ...breadcrumb,\n  };\n}\n","var NodeType;\r\n(function (NodeType) {\r\n    NodeType[NodeType[\"Document\"] = 0] = \"Document\";\r\n    NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\r\n    NodeType[NodeType[\"Element\"] = 2] = \"Element\";\r\n    NodeType[NodeType[\"Text\"] = 3] = \"Text\";\r\n    NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\r\n    NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\r\n})(NodeType || (NodeType = {}));\n\nfunction isElement(n) {\r\n    return n.nodeType === n.ELEMENT_NODE;\r\n}\r\nfunction isShadowRoot(n) {\r\n    const host = n === null || n === void 0 ? void 0 : n.host;\r\n    return Boolean((host === null || host === void 0 ? void 0 : host.shadowRoot) === n);\r\n}\r\nfunction isNativeShadowDom(shadowRoot) {\r\n    return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\r\n}\r\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\r\n    if (cssText.includes(' background-clip: text;') &&\r\n        !cssText.includes(' -webkit-background-clip: text;')) {\r\n        cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\r\n    }\r\n    return cssText;\r\n}\r\nfunction escapeImportStatement(rule) {\r\n    const { cssText } = rule;\r\n    if (cssText.split('\"').length < 3)\r\n        return cssText;\r\n    const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\r\n    if (rule.layerName === '') {\r\n        statement.push(`layer`);\r\n    }\r\n    else if (rule.layerName) {\r\n        statement.push(`layer(${rule.layerName})`);\r\n    }\r\n    if (rule.supportsText) {\r\n        statement.push(`supports(${rule.supportsText})`);\r\n    }\r\n    if (rule.media.length) {\r\n        statement.push(rule.media.mediaText);\r\n    }\r\n    return statement.join(' ') + ';';\r\n}\r\nfunction stringifyStylesheet(s) {\r\n    try {\r\n        const rules = s.rules || s.cssRules;\r\n        return rules\r\n            ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join(''))\r\n            : null;\r\n    }\r\n    catch (error) {\r\n        return null;\r\n    }\r\n}\r\nfunction stringifyRule(rule) {\r\n    let importStringified;\r\n    if (isCSSImportRule(rule)) {\r\n        try {\r\n            importStringified =\r\n                stringifyStylesheet(rule.styleSheet) ||\r\n                    escapeImportStatement(rule);\r\n        }\r\n        catch (error) {\r\n        }\r\n    }\r\n    else if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\r\n        return fixSafariColons(rule.cssText);\r\n    }\r\n    return importStringified || rule.cssText;\r\n}\r\nfunction fixSafariColons(cssStringified) {\r\n    const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\r\n    return cssStringified.replace(regex, '$1\\\\$2');\r\n}\r\nfunction isCSSImportRule(rule) {\r\n    return 'styleSheet' in rule;\r\n}\r\nfunction isCSSStyleRule(rule) {\r\n    return 'selectorText' in rule;\r\n}\r\nclass Mirror {\r\n    constructor() {\r\n        this.idNodeMap = new Map();\r\n        this.nodeMetaMap = new WeakMap();\r\n    }\r\n    getId(n) {\r\n        var _a;\r\n        if (!n)\r\n            return -1;\r\n        const id = (_a = this.getMeta(n)) === null || _a === void 0 ? void 0 : _a.id;\r\n        return id !== null && id !== void 0 ? id : -1;\r\n    }\r\n    getNode(id) {\r\n        return this.idNodeMap.get(id) || null;\r\n    }\r\n    getIds() {\r\n        return Array.from(this.idNodeMap.keys());\r\n    }\r\n    getMeta(n) {\r\n        return this.nodeMetaMap.get(n) || null;\r\n    }\r\n    removeNodeFromMap(n) {\r\n        const id = this.getId(n);\r\n        this.idNodeMap.delete(id);\r\n        if (n.childNodes) {\r\n            n.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\r\n        }\r\n    }\r\n    has(id) {\r\n        return this.idNodeMap.has(id);\r\n    }\r\n    hasNode(node) {\r\n        return this.nodeMetaMap.has(node);\r\n    }\r\n    add(n, meta) {\r\n        const id = meta.id;\r\n        this.idNodeMap.set(id, n);\r\n        this.nodeMetaMap.set(n, meta);\r\n    }\r\n    replace(id, n) {\r\n        const oldNode = this.getNode(id);\r\n        if (oldNode) {\r\n            const meta = this.nodeMetaMap.get(oldNode);\r\n            if (meta)\r\n                this.nodeMetaMap.set(n, meta);\r\n        }\r\n        this.idNodeMap.set(id, n);\r\n    }\r\n    reset() {\r\n        this.idNodeMap = new Map();\r\n        this.nodeMetaMap = new WeakMap();\r\n    }\r\n}\r\nfunction createMirror() {\r\n    return new Mirror();\r\n}\r\nfunction shouldMaskInput({ maskInputOptions, tagName, type, }) {\r\n    if (tagName === 'OPTION') {\r\n        tagName = 'SELECT';\r\n    }\r\n    return Boolean(maskInputOptions[tagName.toLowerCase()] ||\r\n        (type && maskInputOptions[type]) ||\r\n        type === 'password' ||\r\n        (tagName === 'INPUT' && !type && maskInputOptions['text']));\r\n}\r\nfunction maskInputValue({ isMasked, element, value, maskInputFn, }) {\r\n    let text = value || '';\r\n    if (!isMasked) {\r\n        return text;\r\n    }\r\n    if (maskInputFn) {\r\n        text = maskInputFn(text, element);\r\n    }\r\n    return '*'.repeat(text.length);\r\n}\r\nfunction toLowerCase(str) {\r\n    return str.toLowerCase();\r\n}\r\nfunction toUpperCase(str) {\r\n    return str.toUpperCase();\r\n}\r\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\r\nfunction is2DCanvasBlank(canvas) {\r\n    const ctx = canvas.getContext('2d');\r\n    if (!ctx)\r\n        return true;\r\n    const chunkSize = 50;\r\n    for (let x = 0; x < canvas.width; x += chunkSize) {\r\n        for (let y = 0; y < canvas.height; y += chunkSize) {\r\n            const getImageData = ctx.getImageData;\r\n            const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\r\n                ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\r\n                : getImageData;\r\n            const pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\r\n            if (pixelBuffer.some((pixel) => pixel !== 0))\r\n                return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nfunction isNodeMetaEqual(a, b) {\r\n    if (!a || !b || a.type !== b.type)\r\n        return false;\r\n    if (a.type === NodeType.Document)\r\n        return a.compatMode === b.compatMode;\r\n    else if (a.type === NodeType.DocumentType)\r\n        return (a.name === b.name &&\r\n            a.publicId === b.publicId &&\r\n            a.systemId === b.systemId);\r\n    else if (a.type === NodeType.Comment ||\r\n        a.type === NodeType.Text ||\r\n        a.type === NodeType.CDATA)\r\n        return a.textContent === b.textContent;\r\n    else if (a.type === NodeType.Element)\r\n        return (a.tagName === b.tagName &&\r\n            JSON.stringify(a.attributes) ===\r\n                JSON.stringify(b.attributes) &&\r\n            a.isSVG === b.isSVG &&\r\n            a.needBlock === b.needBlock);\r\n    return false;\r\n}\r\nfunction getInputType(element) {\r\n    const type = element.type;\r\n    return element.hasAttribute('data-rr-is-password')\r\n        ? 'password'\r\n        : type\r\n            ?\r\n                toLowerCase(type)\r\n            : null;\r\n}\r\nfunction getInputValue(el, tagName, type) {\r\n    if (tagName === 'INPUT' && (type === 'radio' || type === 'checkbox')) {\r\n        return el.getAttribute('value') || '';\r\n    }\r\n    return el.value;\r\n}\n\nlet _id = 1;\r\nconst tagNameRegex = new RegExp('[^a-z0-9-_:]');\r\nconst IGNORED_NODE = -2;\r\nfunction genId() {\r\n    return _id++;\r\n}\r\nfunction getValidTagName(element) {\r\n    if (element instanceof HTMLFormElement) {\r\n        return 'form';\r\n    }\r\n    const processedTagName = toLowerCase(element.tagName);\r\n    if (tagNameRegex.test(processedTagName)) {\r\n        return 'div';\r\n    }\r\n    return processedTagName;\r\n}\r\nfunction extractOrigin(url) {\r\n    let origin = '';\r\n    if (url.indexOf('//') > -1) {\r\n        origin = url.split('/').slice(0, 3).join('/');\r\n    }\r\n    else {\r\n        origin = url.split('/')[0];\r\n    }\r\n    origin = origin.split('?')[0];\r\n    return origin;\r\n}\r\nlet canvasService;\r\nlet canvasCtx;\r\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\r\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\r\nconst URL_WWW_MATCH = /^www\\..*/i;\r\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\r\nfunction absoluteToStylesheet(cssText, href) {\r\n    return (cssText || '').replace(URL_IN_CSS_REF, (origin, quote1, path1, quote2, path2, path3) => {\r\n        const filePath = path1 || path2 || path3;\r\n        const maybeQuote = quote1 || quote2 || '';\r\n        if (!filePath) {\r\n            return origin;\r\n        }\r\n        if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\r\n            return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n        }\r\n        if (DATA_URI.test(filePath)) {\r\n            return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n        }\r\n        if (filePath[0] === '/') {\r\n            return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\r\n        }\r\n        const stack = href.split('/');\r\n        const parts = filePath.split('/');\r\n        stack.pop();\r\n        for (const part of parts) {\r\n            if (part === '.') {\r\n                continue;\r\n            }\r\n            else if (part === '..') {\r\n                stack.pop();\r\n            }\r\n            else {\r\n                stack.push(part);\r\n            }\r\n        }\r\n        return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\r\n    });\r\n}\r\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\r\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\r\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\r\n    if (attributeValue.trim() === '') {\r\n        return attributeValue;\r\n    }\r\n    let pos = 0;\r\n    function collectCharacters(regEx) {\r\n        let chars;\r\n        const match = regEx.exec(attributeValue.substring(pos));\r\n        if (match) {\r\n            chars = match[0];\r\n            pos += chars.length;\r\n            return chars;\r\n        }\r\n        return '';\r\n    }\r\n    const output = [];\r\n    while (true) {\r\n        collectCharacters(SRCSET_COMMAS_OR_SPACES);\r\n        if (pos >= attributeValue.length) {\r\n            break;\r\n        }\r\n        let url = collectCharacters(SRCSET_NOT_SPACES);\r\n        if (url.slice(-1) === ',') {\r\n            url = absoluteToDoc(doc, url.substring(0, url.length - 1));\r\n            output.push(url);\r\n        }\r\n        else {\r\n            let descriptorsStr = '';\r\n            url = absoluteToDoc(doc, url);\r\n            let inParens = false;\r\n            while (true) {\r\n                const c = attributeValue.charAt(pos);\r\n                if (c === '') {\r\n                    output.push((url + descriptorsStr).trim());\r\n                    break;\r\n                }\r\n                else if (!inParens) {\r\n                    if (c === ',') {\r\n                        pos += 1;\r\n                        output.push((url + descriptorsStr).trim());\r\n                        break;\r\n                    }\r\n                    else if (c === '(') {\r\n                        inParens = true;\r\n                    }\r\n                }\r\n                else {\r\n                    if (c === ')') {\r\n                        inParens = false;\r\n                    }\r\n                }\r\n                descriptorsStr += c;\r\n                pos += 1;\r\n            }\r\n        }\r\n    }\r\n    return output.join(', ');\r\n}\r\nfunction absoluteToDoc(doc, attributeValue) {\r\n    if (!attributeValue || attributeValue.trim() === '') {\r\n        return attributeValue;\r\n    }\r\n    const a = doc.createElement('a');\r\n    a.href = attributeValue;\r\n    return a.href;\r\n}\r\nfunction isSVGElement(el) {\r\n    return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\r\n}\r\nfunction getHref() {\r\n    const a = document.createElement('a');\r\n    a.href = '';\r\n    return a.href;\r\n}\r\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn) {\r\n    if (!value) {\r\n        return value;\r\n    }\r\n    if (name === 'src' ||\r\n        (name === 'href' && !(tagName === 'use' && value[0] === '#'))) {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'xlink:href' && value[0] !== '#') {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'background' &&\r\n        (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'srcset') {\r\n        return getAbsoluteSrcsetString(doc, value);\r\n    }\r\n    else if (name === 'style') {\r\n        return absoluteToStylesheet(value, getHref());\r\n    }\r\n    else if (tagName === 'object' && name === 'data') {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    if (typeof maskAttributeFn === 'function') {\r\n        return maskAttributeFn(name, value, element);\r\n    }\r\n    return value;\r\n}\r\nfunction ignoreAttribute(tagName, name, _value) {\r\n    return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\r\n}\r\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\r\n    try {\r\n        if (unblockSelector && element.matches(unblockSelector)) {\r\n            return false;\r\n        }\r\n        if (typeof blockClass === 'string') {\r\n            if (element.classList.contains(blockClass)) {\r\n                return true;\r\n            }\r\n        }\r\n        else {\r\n            for (let eIndex = element.classList.length; eIndex--;) {\r\n                const className = element.classList[eIndex];\r\n                if (blockClass.test(className)) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        if (blockSelector) {\r\n            return element.matches(blockSelector);\r\n        }\r\n    }\r\n    catch (e) {\r\n    }\r\n    return false;\r\n}\r\nfunction elementClassMatchesRegex(el, regex) {\r\n    for (let eIndex = el.classList.length; eIndex--;) {\r\n        const className = el.classList[eIndex];\r\n        if (regex.test(className)) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction classMatchesRegex(node, regex, checkAncestors) {\r\n    if (!node)\r\n        return false;\r\n    if (checkAncestors) {\r\n        return (distanceToMatch(node, (node) => elementClassMatchesRegex(node, regex)) >= 0);\r\n    }\r\n    else if (node.nodeType === node.ELEMENT_NODE) {\r\n        return elementClassMatchesRegex(node, regex);\r\n    }\r\n    return false;\r\n}\r\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\r\n    if (!node)\r\n        return -1;\r\n    if (node.nodeType !== node.ELEMENT_NODE)\r\n        return -1;\r\n    if (distance > limit)\r\n        return -1;\r\n    if (matchPredicate(node))\r\n        return distance;\r\n    return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\r\n}\r\nfunction createMatchPredicate(className, selector) {\r\n    return (node) => {\r\n        const el = node;\r\n        if (el === null)\r\n            return false;\r\n        if (className) {\r\n            if (typeof className === 'string') {\r\n                if (el.matches(`.${className}`))\r\n                    return true;\r\n            }\r\n            else if (elementClassMatchesRegex(el, className)) {\r\n                return true;\r\n            }\r\n        }\r\n        if (selector && el.matches(selector))\r\n            return true;\r\n        return false;\r\n    };\r\n}\r\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\r\n    try {\r\n        const el = node.nodeType === node.ELEMENT_NODE\r\n            ? node\r\n            : node.parentElement;\r\n        if (el === null)\r\n            return false;\r\n        let maskDistance = -1;\r\n        let unmaskDistance = -1;\r\n        if (maskAllText) {\r\n            unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector));\r\n            if (unmaskDistance < 0) {\r\n                return true;\r\n            }\r\n            maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector), unmaskDistance >= 0 ? unmaskDistance : Infinity);\r\n        }\r\n        else {\r\n            maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector));\r\n            if (maskDistance < 0) {\r\n                return false;\r\n            }\r\n            unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector), maskDistance >= 0 ? maskDistance : Infinity);\r\n        }\r\n        return maskDistance >= 0\r\n            ? unmaskDistance >= 0\r\n                ? maskDistance <= unmaskDistance\r\n                : true\r\n            : unmaskDistance >= 0\r\n                ? false\r\n                : !!maskAllText;\r\n    }\r\n    catch (e) {\r\n    }\r\n    return !!maskAllText;\r\n}\r\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\r\n    const win = iframeEl.contentWindow;\r\n    if (!win) {\r\n        return;\r\n    }\r\n    let fired = false;\r\n    let readyState;\r\n    try {\r\n        readyState = win.document.readyState;\r\n    }\r\n    catch (error) {\r\n        return;\r\n    }\r\n    if (readyState !== 'complete') {\r\n        const timer = setTimeout(() => {\r\n            if (!fired) {\r\n                listener();\r\n                fired = true;\r\n            }\r\n        }, iframeLoadTimeout);\r\n        iframeEl.addEventListener('load', () => {\r\n            clearTimeout(timer);\r\n            fired = true;\r\n            listener();\r\n        });\r\n        return;\r\n    }\r\n    const blankUrl = 'about:blank';\r\n    if (win.location.href !== blankUrl ||\r\n        iframeEl.src === blankUrl ||\r\n        iframeEl.src === '') {\r\n        setTimeout(listener, 0);\r\n        return iframeEl.addEventListener('load', listener);\r\n    }\r\n    iframeEl.addEventListener('load', listener);\r\n}\r\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\r\n    let fired = false;\r\n    let styleSheetLoaded;\r\n    try {\r\n        styleSheetLoaded = link.sheet;\r\n    }\r\n    catch (error) {\r\n        return;\r\n    }\r\n    if (styleSheetLoaded)\r\n        return;\r\n    const timer = setTimeout(() => {\r\n        if (!fired) {\r\n            listener();\r\n            fired = true;\r\n        }\r\n    }, styleSheetLoadTimeout);\r\n    link.addEventListener('load', () => {\r\n        clearTimeout(timer);\r\n        fired = true;\r\n        listener();\r\n    });\r\n}\r\nfunction serializeNode(n, options) {\r\n    const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskAttributeFn, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, } = options;\r\n    const rootId = getRootId(doc, mirror);\r\n    switch (n.nodeType) {\r\n        case n.DOCUMENT_NODE:\r\n            if (n.compatMode !== 'CSS1Compat') {\r\n                return {\r\n                    type: NodeType.Document,\r\n                    childNodes: [],\r\n                    compatMode: n.compatMode,\r\n                };\r\n            }\r\n            else {\r\n                return {\r\n                    type: NodeType.Document,\r\n                    childNodes: [],\r\n                };\r\n            }\r\n        case n.DOCUMENT_TYPE_NODE:\r\n            return {\r\n                type: NodeType.DocumentType,\r\n                name: n.name,\r\n                publicId: n.publicId,\r\n                systemId: n.systemId,\r\n                rootId,\r\n            };\r\n        case n.ELEMENT_NODE:\r\n            return serializeElementNode(n, {\r\n                doc,\r\n                blockClass,\r\n                blockSelector,\r\n                unblockSelector,\r\n                inlineStylesheet,\r\n                maskAttributeFn,\r\n                maskInputOptions,\r\n                maskInputFn,\r\n                dataURLOptions,\r\n                inlineImages,\r\n                recordCanvas,\r\n                keepIframeSrcFn,\r\n                newlyAddedElement,\r\n                rootId,\r\n                maskAllText,\r\n                maskTextClass,\r\n                unmaskTextClass,\r\n                maskTextSelector,\r\n                unmaskTextSelector,\r\n            });\r\n        case n.TEXT_NODE:\r\n            return serializeTextNode(n, {\r\n                maskAllText,\r\n                maskTextClass,\r\n                unmaskTextClass,\r\n                maskTextSelector,\r\n                unmaskTextSelector,\r\n                maskTextFn,\r\n                maskInputOptions,\r\n                maskInputFn,\r\n                rootId,\r\n            });\r\n        case n.CDATA_SECTION_NODE:\r\n            return {\r\n                type: NodeType.CDATA,\r\n                textContent: '',\r\n                rootId,\r\n            };\r\n        case n.COMMENT_NODE:\r\n            return {\r\n                type: NodeType.Comment,\r\n                textContent: n.textContent || '',\r\n                rootId,\r\n            };\r\n        default:\r\n            return false;\r\n    }\r\n}\r\nfunction getRootId(doc, mirror) {\r\n    if (!mirror.hasNode(doc))\r\n        return undefined;\r\n    const docId = mirror.getId(doc);\r\n    return docId === 1 ? undefined : docId;\r\n}\r\nfunction serializeTextNode(n, options) {\r\n    var _a;\r\n    const { maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, maskTextFn, maskInputOptions, maskInputFn, rootId, } = options;\r\n    const parentTagName = n.parentNode && n.parentNode.tagName;\r\n    let textContent = n.textContent;\r\n    const isStyle = parentTagName === 'STYLE' ? true : undefined;\r\n    const isScript = parentTagName === 'SCRIPT' ? true : undefined;\r\n    const isTextarea = parentTagName === 'TEXTAREA' ? true : undefined;\r\n    if (isStyle && textContent) {\r\n        try {\r\n            if (n.nextSibling || n.previousSibling) {\r\n            }\r\n            else if ((_a = n.parentNode.sheet) === null || _a === void 0 ? void 0 : _a.cssRules) {\r\n                textContent = stringifyStylesheet(n.parentNode.sheet);\r\n            }\r\n        }\r\n        catch (err) {\r\n            console.warn(`Cannot get CSS styles from text's parentNode. Error: ${err}`, n);\r\n        }\r\n        textContent = absoluteToStylesheet(textContent, getHref());\r\n    }\r\n    if (isScript) {\r\n        textContent = 'SCRIPT_PLACEHOLDER';\r\n    }\r\n    const forceMask = needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText);\r\n    if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\r\n        textContent = maskTextFn\r\n            ? maskTextFn(textContent)\r\n            : textContent.replace(/[\\S]/g, '*');\r\n    }\r\n    if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\r\n        textContent = maskInputFn\r\n            ? maskInputFn(textContent, n.parentNode)\r\n            : textContent.replace(/[\\S]/g, '*');\r\n    }\r\n    if (parentTagName === 'OPTION' && textContent) {\r\n        const isInputMasked = shouldMaskInput({\r\n            type: null,\r\n            tagName: parentTagName,\r\n            maskInputOptions,\r\n        });\r\n        textContent = maskInputValue({\r\n            isMasked: needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked),\r\n            element: n,\r\n            value: textContent,\r\n            maskInputFn,\r\n        });\r\n    }\r\n    return {\r\n        type: NodeType.Text,\r\n        textContent: textContent || '',\r\n        isStyle,\r\n        rootId,\r\n    };\r\n}\r\nfunction serializeElementNode(n, options) {\r\n    const { doc, blockClass, blockSelector, unblockSelector, inlineStylesheet, maskInputOptions = {}, maskAttributeFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, } = options;\r\n    const needBlock = _isBlockedElement(n, blockClass, blockSelector, unblockSelector);\r\n    const tagName = getValidTagName(n);\r\n    let attributes = {};\r\n    const len = n.attributes.length;\r\n    for (let i = 0; i < len; i++) {\r\n        const attr = n.attributes[i];\r\n        if (!ignoreAttribute(tagName, attr.name, attr.value)) {\r\n            attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value, n, maskAttributeFn);\r\n        }\r\n    }\r\n    if (tagName === 'link' && inlineStylesheet) {\r\n        const stylesheet = Array.from(doc.styleSheets).find((s) => {\r\n            return s.href === n.href;\r\n        });\r\n        let cssText = null;\r\n        if (stylesheet) {\r\n            cssText = stringifyStylesheet(stylesheet);\r\n        }\r\n        if (cssText) {\r\n            delete attributes.rel;\r\n            delete attributes.href;\r\n            attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\r\n        }\r\n    }\r\n    if (tagName === 'style' &&\r\n        n.sheet &&\r\n        !(n.innerText || n.textContent || '').trim().length) {\r\n        const cssText = stringifyStylesheet(n.sheet);\r\n        if (cssText) {\r\n            attributes._cssText = absoluteToStylesheet(cssText, getHref());\r\n        }\r\n    }\r\n    if (tagName === 'input' ||\r\n        tagName === 'textarea' ||\r\n        tagName === 'select' ||\r\n        tagName === 'option') {\r\n        const el = n;\r\n        const type = getInputType(el);\r\n        const value = getInputValue(el, toUpperCase(tagName), type);\r\n        const checked = el.checked;\r\n        if (type !== 'submit' && type !== 'button' && value) {\r\n            const forceMask = needMaskingText(el, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, shouldMaskInput({\r\n                type,\r\n                tagName: toUpperCase(tagName),\r\n                maskInputOptions,\r\n            }));\r\n            attributes.value = maskInputValue({\r\n                isMasked: forceMask,\r\n                element: el,\r\n                value,\r\n                maskInputFn,\r\n            });\r\n        }\r\n        if (checked) {\r\n            attributes.checked = checked;\r\n        }\r\n    }\r\n    if (tagName === 'option') {\r\n        if (n.selected && !maskInputOptions['select']) {\r\n            attributes.selected = true;\r\n        }\r\n        else {\r\n            delete attributes.selected;\r\n        }\r\n    }\r\n    if (tagName === 'canvas' && recordCanvas) {\r\n        if (n.__context === '2d') {\r\n            if (!is2DCanvasBlank(n)) {\r\n                attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            }\r\n        }\r\n        else if (!('__context' in n)) {\r\n            const canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            const blankCanvas = document.createElement('canvas');\r\n            blankCanvas.width = n.width;\r\n            blankCanvas.height = n.height;\r\n            const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            if (canvasDataURL !== blankCanvasDataURL) {\r\n                attributes.rr_dataURL = canvasDataURL;\r\n            }\r\n        }\r\n    }\r\n    if (tagName === 'img' && inlineImages) {\r\n        if (!canvasService) {\r\n            canvasService = doc.createElement('canvas');\r\n            canvasCtx = canvasService.getContext('2d');\r\n        }\r\n        const image = n;\r\n        const oldValue = image.crossOrigin;\r\n        image.crossOrigin = 'anonymous';\r\n        const recordInlineImage = () => {\r\n            image.removeEventListener('load', recordInlineImage);\r\n            try {\r\n                canvasService.width = image.naturalWidth;\r\n                canvasService.height = image.naturalHeight;\r\n                canvasCtx.drawImage(image, 0, 0);\r\n                attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            }\r\n            catch (err) {\r\n                console.warn(`Cannot inline img src=${image.currentSrc}! Error: ${err}`);\r\n            }\r\n            oldValue\r\n                ? (attributes.crossOrigin = oldValue)\r\n                : image.removeAttribute('crossorigin');\r\n        };\r\n        if (image.complete && image.naturalWidth !== 0)\r\n            recordInlineImage();\r\n        else\r\n            image.addEventListener('load', recordInlineImage);\r\n    }\r\n    if (tagName === 'audio' || tagName === 'video') {\r\n        attributes.rr_mediaState = n.paused\r\n            ? 'paused'\r\n            : 'played';\r\n        attributes.rr_mediaCurrentTime = n.currentTime;\r\n    }\r\n    if (!newlyAddedElement) {\r\n        if (n.scrollLeft) {\r\n            attributes.rr_scrollLeft = n.scrollLeft;\r\n        }\r\n        if (n.scrollTop) {\r\n            attributes.rr_scrollTop = n.scrollTop;\r\n        }\r\n    }\r\n    if (needBlock) {\r\n        const { width, height } = n.getBoundingClientRect();\r\n        attributes = {\r\n            class: attributes.class,\r\n            rr_width: `${width}px`,\r\n            rr_height: `${height}px`,\r\n        };\r\n    }\r\n    if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\r\n        if (!n.contentDocument) {\r\n            attributes.rr_src = attributes.src;\r\n        }\r\n        delete attributes.src;\r\n    }\r\n    let isCustomElement;\r\n    try {\r\n        if (customElements.get(tagName))\r\n            isCustomElement = true;\r\n    }\r\n    catch (e) {\r\n    }\r\n    return {\r\n        type: NodeType.Element,\r\n        tagName,\r\n        attributes,\r\n        childNodes: [],\r\n        isSVG: isSVGElement(n) || undefined,\r\n        needBlock,\r\n        rootId,\r\n        isCustom: isCustomElement,\r\n    };\r\n}\r\nfunction lowerIfExists(maybeAttr) {\r\n    if (maybeAttr === undefined || maybeAttr === null) {\r\n        return '';\r\n    }\r\n    else {\r\n        return maybeAttr.toLowerCase();\r\n    }\r\n}\r\nfunction slimDOMExcluded(sn, slimDOMOptions) {\r\n    if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\r\n        return true;\r\n    }\r\n    else if (sn.type === NodeType.Element) {\r\n        if (slimDOMOptions.script &&\r\n            (sn.tagName === 'script' ||\r\n                (sn.tagName === 'link' &&\r\n                    (sn.attributes.rel === 'preload' ||\r\n                        sn.attributes.rel === 'modulepreload') &&\r\n                    sn.attributes.as === 'script') ||\r\n                (sn.tagName === 'link' &&\r\n                    sn.attributes.rel === 'prefetch' &&\r\n                    typeof sn.attributes.href === 'string' &&\r\n                    sn.attributes.href.endsWith('.js')))) {\r\n            return true;\r\n        }\r\n        else if (slimDOMOptions.headFavicon &&\r\n            ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\r\n                (sn.tagName === 'meta' &&\r\n                    (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\r\n                        lowerIfExists(sn.attributes.name) === 'application-name' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'icon' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\r\n            return true;\r\n        }\r\n        else if (sn.tagName === 'meta') {\r\n            if (slimDOMOptions.headMetaDescKeywords &&\r\n                lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaSocial &&\r\n                (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\r\n                    lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\r\n                    lowerIfExists(sn.attributes.name) === 'pinterest')) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaRobots &&\r\n                (lowerIfExists(sn.attributes.name) === 'robots' ||\r\n                    lowerIfExists(sn.attributes.name) === 'googlebot' ||\r\n                    lowerIfExists(sn.attributes.name) === 'bingbot')) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaHttpEquiv &&\r\n                sn.attributes['http-equiv'] !== undefined) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaAuthorship &&\r\n                (lowerIfExists(sn.attributes.name) === 'author' ||\r\n                    lowerIfExists(sn.attributes.name) === 'generator' ||\r\n                    lowerIfExists(sn.attributes.name) === 'framework' ||\r\n                    lowerIfExists(sn.attributes.name) === 'publisher' ||\r\n                    lowerIfExists(sn.attributes.name) === 'progid' ||\r\n                    lowerIfExists(sn.attributes.property).match(/^article:/) ||\r\n                    lowerIfExists(sn.attributes.property).match(/^product:/))) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaVerification &&\r\n                (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'csrf-token' ||\r\n                    lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\r\n                    lowerIfExists(sn.attributes.name) === 'verify-v1' ||\r\n                    lowerIfExists(sn.attributes.name) === 'verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction serializeNodeWithId(n, options) {\r\n    const { doc, mirror, blockClass, blockSelector, 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;\r\n    let { preserveWhiteSpace = true } = options;\r\n    const _serializedNode = serializeNode(n, {\r\n        doc,\r\n        mirror,\r\n        blockClass,\r\n        blockSelector,\r\n        maskAllText,\r\n        unblockSelector,\r\n        maskTextClass,\r\n        unmaskTextClass,\r\n        maskTextSelector,\r\n        unmaskTextSelector,\r\n        inlineStylesheet,\r\n        maskInputOptions,\r\n        maskAttributeFn,\r\n        maskTextFn,\r\n        maskInputFn,\r\n        dataURLOptions,\r\n        inlineImages,\r\n        recordCanvas,\r\n        keepIframeSrcFn,\r\n        newlyAddedElement,\r\n    });\r\n    if (!_serializedNode) {\r\n        console.warn(n, 'not serialized');\r\n        return null;\r\n    }\r\n    let id;\r\n    if (mirror.hasNode(n)) {\r\n        id = mirror.getId(n);\r\n    }\r\n    else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\r\n        (!preserveWhiteSpace &&\r\n            _serializedNode.type === NodeType.Text &&\r\n            !_serializedNode.isStyle &&\r\n            !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\r\n        id = IGNORED_NODE;\r\n    }\r\n    else {\r\n        id = genId();\r\n    }\r\n    const serializedNode = Object.assign(_serializedNode, { id });\r\n    mirror.add(n, serializedNode);\r\n    if (id === IGNORED_NODE) {\r\n        return null;\r\n    }\r\n    if (onSerialize) {\r\n        onSerialize(n);\r\n    }\r\n    let recordChild = !skipChild;\r\n    if (serializedNode.type === NodeType.Element) {\r\n        recordChild = recordChild && !serializedNode.needBlock;\r\n        delete serializedNode.needBlock;\r\n        const shadowRoot = n.shadowRoot;\r\n        if (shadowRoot && isNativeShadowDom(shadowRoot))\r\n            serializedNode.isShadowHost = true;\r\n    }\r\n    if ((serializedNode.type === NodeType.Document ||\r\n        serializedNode.type === NodeType.Element) &&\r\n        recordChild) {\r\n        if (slimDOMOptions.headWhitespace &&\r\n            serializedNode.type === NodeType.Element &&\r\n            serializedNode.tagName === 'head') {\r\n            preserveWhiteSpace = false;\r\n        }\r\n        const bypassOptions = {\r\n            doc,\r\n            mirror,\r\n            blockClass,\r\n            blockSelector,\r\n            maskAllText,\r\n            unblockSelector,\r\n            maskTextClass,\r\n            unmaskTextClass,\r\n            maskTextSelector,\r\n            unmaskTextSelector,\r\n            skipChild,\r\n            inlineStylesheet,\r\n            maskInputOptions,\r\n            maskAttributeFn,\r\n            maskTextFn,\r\n            maskInputFn,\r\n            slimDOMOptions,\r\n            dataURLOptions,\r\n            inlineImages,\r\n            recordCanvas,\r\n            preserveWhiteSpace,\r\n            onSerialize,\r\n            onIframeLoad,\r\n            iframeLoadTimeout,\r\n            onStylesheetLoad,\r\n            stylesheetLoadTimeout,\r\n            keepIframeSrcFn,\r\n        };\r\n        for (const childN of Array.from(n.childNodes)) {\r\n            const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n            if (serializedChildNode) {\r\n                serializedNode.childNodes.push(serializedChildNode);\r\n            }\r\n        }\r\n        if (isElement(n) && n.shadowRoot) {\r\n            for (const childN of Array.from(n.shadowRoot.childNodes)) {\r\n                const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n                if (serializedChildNode) {\r\n                    isNativeShadowDom(n.shadowRoot) &&\r\n                        (serializedChildNode.isShadow = true);\r\n                    serializedNode.childNodes.push(serializedChildNode);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (n.parentNode &&\r\n        isShadowRoot(n.parentNode) &&\r\n        isNativeShadowDom(n.parentNode)) {\r\n        serializedNode.isShadow = true;\r\n    }\r\n    if (serializedNode.type === NodeType.Element &&\r\n        serializedNode.tagName === 'iframe') {\r\n        onceIframeLoaded(n, () => {\r\n            const iframeDoc = n.contentDocument;\r\n            if (iframeDoc && onIframeLoad) {\r\n                const serializedIframeNode = serializeNodeWithId(iframeDoc, {\r\n                    doc: iframeDoc,\r\n                    mirror,\r\n                    blockClass,\r\n                    blockSelector,\r\n                    unblockSelector,\r\n                    maskAllText,\r\n                    maskTextClass,\r\n                    unmaskTextClass,\r\n                    maskTextSelector,\r\n                    unmaskTextSelector,\r\n                    skipChild: false,\r\n                    inlineStylesheet,\r\n                    maskInputOptions,\r\n                    maskAttributeFn,\r\n                    maskTextFn,\r\n                    maskInputFn,\r\n                    slimDOMOptions,\r\n                    dataURLOptions,\r\n                    inlineImages,\r\n                    recordCanvas,\r\n                    preserveWhiteSpace,\r\n                    onSerialize,\r\n                    onIframeLoad,\r\n                    iframeLoadTimeout,\r\n                    onStylesheetLoad,\r\n                    stylesheetLoadTimeout,\r\n                    keepIframeSrcFn,\r\n                });\r\n                if (serializedIframeNode) {\r\n                    onIframeLoad(n, serializedIframeNode);\r\n                }\r\n            }\r\n        }, iframeLoadTimeout);\r\n    }\r\n    if (serializedNode.type === NodeType.Element &&\r\n        serializedNode.tagName === 'link' &&\r\n        serializedNode.attributes.rel === 'stylesheet') {\r\n        onceStylesheetLoaded(n, () => {\r\n            if (onStylesheetLoad) {\r\n                const serializedLinkNode = serializeNodeWithId(n, {\r\n                    doc,\r\n                    mirror,\r\n                    blockClass,\r\n                    blockSelector,\r\n                    unblockSelector,\r\n                    maskAllText,\r\n                    maskTextClass,\r\n                    unmaskTextClass,\r\n                    maskTextSelector,\r\n                    unmaskTextSelector,\r\n                    skipChild: false,\r\n                    inlineStylesheet,\r\n                    maskInputOptions,\r\n                    maskAttributeFn,\r\n                    maskTextFn,\r\n                    maskInputFn,\r\n                    slimDOMOptions,\r\n                    dataURLOptions,\r\n                    inlineImages,\r\n                    recordCanvas,\r\n                    preserveWhiteSpace,\r\n                    onSerialize,\r\n                    onIframeLoad,\r\n                    iframeLoadTimeout,\r\n                    onStylesheetLoad,\r\n                    stylesheetLoadTimeout,\r\n                    keepIframeSrcFn,\r\n                });\r\n                if (serializedLinkNode) {\r\n                    onStylesheetLoad(n, serializedLinkNode);\r\n                }\r\n            }\r\n        }, stylesheetLoadTimeout);\r\n    }\r\n    return serializedNode;\r\n}\r\nfunction snapshot(n, options) {\r\n    const { mirror = new Mirror(), blockClass = 'rr-block', blockSelector = null, 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 || {};\r\n    const maskInputOptions = maskAllInputs === true\r\n        ? {\r\n            color: true,\r\n            date: true,\r\n            'datetime-local': true,\r\n            email: true,\r\n            month: true,\r\n            number: true,\r\n            range: true,\r\n            search: true,\r\n            tel: true,\r\n            text: true,\r\n            time: true,\r\n            url: true,\r\n            week: true,\r\n            textarea: true,\r\n            select: true,\r\n        }\r\n        : maskAllInputs === false\r\n            ? {}\r\n            : maskAllInputs;\r\n    const slimDOMOptions = slimDOM === true || slimDOM === 'all'\r\n        ?\r\n            {\r\n                script: true,\r\n                comment: true,\r\n                headFavicon: true,\r\n                headWhitespace: true,\r\n                headMetaDescKeywords: slimDOM === 'all',\r\n                headMetaSocial: true,\r\n                headMetaRobots: true,\r\n                headMetaHttpEquiv: true,\r\n                headMetaAuthorship: true,\r\n                headMetaVerification: true,\r\n            }\r\n        : slimDOM === false\r\n            ? {}\r\n            : slimDOM;\r\n    return serializeNodeWithId(n, {\r\n        doc: n,\r\n        mirror,\r\n        blockClass,\r\n        blockSelector,\r\n        unblockSelector,\r\n        maskAllText,\r\n        maskTextClass,\r\n        unmaskTextClass,\r\n        maskTextSelector,\r\n        unmaskTextSelector,\r\n        skipChild: false,\r\n        inlineStylesheet,\r\n        maskInputOptions,\r\n        maskAttributeFn,\r\n        maskTextFn,\r\n        maskInputFn,\r\n        slimDOMOptions,\r\n        dataURLOptions,\r\n        inlineImages,\r\n        recordCanvas,\r\n        preserveWhiteSpace,\r\n        onSerialize,\r\n        onIframeLoad,\r\n        iframeLoadTimeout,\r\n        onStylesheetLoad,\r\n        stylesheetLoadTimeout,\r\n        keepIframeSrcFn,\r\n        newlyAddedElement: false,\r\n    });\r\n}\r\nfunction visitSnapshot(node, onVisit) {\r\n    function walk(current) {\r\n        onVisit(current);\r\n        if (current.type === NodeType.Document ||\r\n            current.type === NodeType.Element) {\r\n            current.childNodes.forEach(walk);\r\n        }\r\n    }\r\n    walk(node);\r\n}\r\nfunction cleanupSnapshot() {\r\n    _id = 1;\r\n}\n\nconst commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\r\nfunction parse(css, options = {}) {\r\n    let lineno = 1;\r\n    let column = 1;\r\n    function updatePosition(str) {\r\n        const lines = str.match(/\\n/g);\r\n        if (lines) {\r\n            lineno += lines.length;\r\n        }\r\n        const i = str.lastIndexOf('\\n');\r\n        column = i === -1 ? column + str.length : str.length - i;\r\n    }\r\n    function position() {\r\n        const start = { line: lineno, column };\r\n        return (node) => {\r\n            node.position = new Position(start);\r\n            whitespace();\r\n            return node;\r\n        };\r\n    }\r\n    class Position {\r\n        constructor(start) {\r\n            this.start = start;\r\n            this.end = { line: lineno, column };\r\n            this.source = options.source;\r\n        }\r\n    }\r\n    Position.prototype.content = css;\r\n    const errorsList = [];\r\n    function error(msg) {\r\n        const err = new Error(`${options.source || ''}:${lineno}:${column}: ${msg}`);\r\n        err.reason = msg;\r\n        err.filename = options.source;\r\n        err.line = lineno;\r\n        err.column = column;\r\n        err.source = css;\r\n        if (options.silent) {\r\n            errorsList.push(err);\r\n        }\r\n        else {\r\n            throw err;\r\n        }\r\n    }\r\n    function stylesheet() {\r\n        const rulesList = rules();\r\n        return {\r\n            type: 'stylesheet',\r\n            stylesheet: {\r\n                source: options.source,\r\n                rules: rulesList,\r\n                parsingErrors: errorsList,\r\n            },\r\n        };\r\n    }\r\n    function open() {\r\n        return match(/^{\\s*/);\r\n    }\r\n    function close() {\r\n        return match(/^}/);\r\n    }\r\n    function rules() {\r\n        let node;\r\n        const rules = [];\r\n        whitespace();\r\n        comments(rules);\r\n        while (css.length && css.charAt(0) !== '}' && (node = atrule() || rule())) {\r\n            if (node) {\r\n                rules.push(node);\r\n                comments(rules);\r\n            }\r\n        }\r\n        return rules;\r\n    }\r\n    function match(re) {\r\n        const m = re.exec(css);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const str = m[0];\r\n        updatePosition(str);\r\n        css = css.slice(str.length);\r\n        return m;\r\n    }\r\n    function whitespace() {\r\n        match(/^\\s*/);\r\n    }\r\n    function comments(rules = []) {\r\n        let c;\r\n        while ((c = comment())) {\r\n            if (c) {\r\n                rules.push(c);\r\n            }\r\n            c = comment();\r\n        }\r\n        return rules;\r\n    }\r\n    function comment() {\r\n        const pos = position();\r\n        if ('/' !== css.charAt(0) || '*' !== css.charAt(1)) {\r\n            return;\r\n        }\r\n        let i = 2;\r\n        while ('' !== css.charAt(i) &&\r\n            ('*' !== css.charAt(i) || '/' !== css.charAt(i + 1))) {\r\n            ++i;\r\n        }\r\n        i += 2;\r\n        if ('' === css.charAt(i - 1)) {\r\n            return error('End of comment missing');\r\n        }\r\n        const str = css.slice(2, i - 2);\r\n        column += 2;\r\n        updatePosition(str);\r\n        css = css.slice(i);\r\n        column += 2;\r\n        return pos({\r\n            type: 'comment',\r\n            comment: str,\r\n        });\r\n    }\r\n    function selector() {\r\n        const m = match(/^([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        return trim(m[0])\r\n            .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\r\n            .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, (m) => {\r\n            return m.replace(/,/g, '\\u200C');\r\n        })\r\n            .split(/\\s*(?![^(]*\\)),\\s*/)\r\n            .map((s) => {\r\n            return s.replace(/\\u200C/g, ',');\r\n        });\r\n    }\r\n    function declaration() {\r\n        const pos = position();\r\n        const propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\r\n        if (!propMatch) {\r\n            return;\r\n        }\r\n        const prop = trim(propMatch[0]);\r\n        if (!match(/^:\\s*/)) {\r\n            return error(`property missing ':'`);\r\n        }\r\n        const val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\r\n        const ret = pos({\r\n            type: 'declaration',\r\n            property: prop.replace(commentre, ''),\r\n            value: val ? trim(val[0]).replace(commentre, '') : '',\r\n        });\r\n        match(/^[;\\s]*/);\r\n        return ret;\r\n    }\r\n    function declarations() {\r\n        const decls = [];\r\n        if (!open()) {\r\n            return error(`missing '{'`);\r\n        }\r\n        comments(decls);\r\n        let decl;\r\n        while ((decl = declaration())) {\r\n            if (decl !== false) {\r\n                decls.push(decl);\r\n                comments(decls);\r\n            }\r\n            decl = declaration();\r\n        }\r\n        if (!close()) {\r\n            return error(`missing '}'`);\r\n        }\r\n        return decls;\r\n    }\r\n    function keyframe() {\r\n        let m;\r\n        const vals = [];\r\n        const pos = position();\r\n        while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\r\n            vals.push(m[1]);\r\n            match(/^,\\s*/);\r\n        }\r\n        if (!vals.length) {\r\n            return;\r\n        }\r\n        return pos({\r\n            type: 'keyframe',\r\n            values: vals,\r\n            declarations: declarations(),\r\n        });\r\n    }\r\n    function atkeyframes() {\r\n        const pos = position();\r\n        let m = match(/^@([-\\w]+)?keyframes\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const vendor = m[1];\r\n        m = match(/^([-\\w]+)\\s*/);\r\n        if (!m) {\r\n            return error('@keyframes missing name');\r\n        }\r\n        const name = m[1];\r\n        if (!open()) {\r\n            return error(`@keyframes missing '{'`);\r\n        }\r\n        let frame;\r\n        let frames = comments();\r\n        while ((frame = keyframe())) {\r\n            frames.push(frame);\r\n            frames = frames.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(`@keyframes missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'keyframes',\r\n            name,\r\n            vendor,\r\n            keyframes: frames,\r\n        });\r\n    }\r\n    function atsupports() {\r\n        const pos = position();\r\n        const m = match(/^@supports *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const supports = trim(m[1]);\r\n        if (!open()) {\r\n            return error(`@supports missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@supports missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'supports',\r\n            supports,\r\n            rules: style,\r\n        });\r\n    }\r\n    function athost() {\r\n        const pos = position();\r\n        const m = match(/^@host\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        if (!open()) {\r\n            return error(`@host missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@host missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'host',\r\n            rules: style,\r\n        });\r\n    }\r\n    function atmedia() {\r\n        const pos = position();\r\n        const m = match(/^@media *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const media = trim(m[1]);\r\n        if (!open()) {\r\n            return error(`@media missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@media missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'media',\r\n            media,\r\n            rules: style,\r\n        });\r\n    }\r\n    function atcustommedia() {\r\n        const pos = position();\r\n        const m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        return pos({\r\n            type: 'custom-media',\r\n            name: trim(m[1]),\r\n            media: trim(m[2]),\r\n        });\r\n    }\r\n    function atpage() {\r\n        const pos = position();\r\n        const m = match(/^@page */);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const sel = selector() || [];\r\n        if (!open()) {\r\n            return error(`@page missing '{'`);\r\n        }\r\n        let decls = comments();\r\n        let decl;\r\n        while ((decl = declaration())) {\r\n            decls.push(decl);\r\n            decls = decls.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(`@page missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'page',\r\n            selectors: sel,\r\n            declarations: decls,\r\n        });\r\n    }\r\n    function atdocument() {\r\n        const pos = position();\r\n        const m = match(/^@([-\\w]+)?document *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        const vendor = trim(m[1]);\r\n        const doc = trim(m[2]);\r\n        if (!open()) {\r\n            return error(`@document missing '{'`);\r\n        }\r\n        const style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(`@document missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'document',\r\n            document: doc,\r\n            vendor,\r\n            rules: style,\r\n        });\r\n    }\r\n    function atfontface() {\r\n        const pos = position();\r\n        const m = match(/^@font-face\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        if (!open()) {\r\n            return error(`@font-face missing '{'`);\r\n        }\r\n        let decls = comments();\r\n        let decl;\r\n        while ((decl = declaration())) {\r\n            decls.push(decl);\r\n            decls = decls.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(`@font-face missing '}'`);\r\n        }\r\n        return pos({\r\n            type: 'font-face',\r\n            declarations: decls,\r\n        });\r\n    }\r\n    const atimport = _compileAtrule('import');\r\n    const atcharset = _compileAtrule('charset');\r\n    const atnamespace = _compileAtrule('namespace');\r\n    function _compileAtrule(name) {\r\n        const re = new RegExp('^@' + name + '\\\\s*([^;]+);');\r\n        return () => {\r\n            const pos = position();\r\n            const m = match(re);\r\n            if (!m) {\r\n                return;\r\n            }\r\n            const ret = { type: name };\r\n            ret[name] = m[1].trim();\r\n            return pos(ret);\r\n        };\r\n    }\r\n    function atrule() {\r\n        if (css[0] !== '@') {\r\n            return;\r\n        }\r\n        return (atkeyframes() ||\r\n            atmedia() ||\r\n            atcustommedia() ||\r\n            atsupports() ||\r\n            atimport() ||\r\n            atcharset() ||\r\n            atnamespace() ||\r\n            atdocument() ||\r\n            atpage() ||\r\n            athost() ||\r\n            atfontface());\r\n    }\r\n    function rule() {\r\n        const pos = position();\r\n        const sel = selector();\r\n        if (!sel) {\r\n            return error('selector missing');\r\n        }\r\n        comments();\r\n        return pos({\r\n            type: 'rule',\r\n            selectors: sel,\r\n            declarations: declarations(),\r\n        });\r\n    }\r\n    return addParent(stylesheet());\r\n}\r\nfunction trim(str) {\r\n    return str ? str.replace(/^\\s+|\\s+$/g, '') : '';\r\n}\r\nfunction addParent(obj, parent) {\r\n    const isNode = obj && typeof obj.type === 'string';\r\n    const childParent = isNode ? obj : parent;\r\n    for (const k of Object.keys(obj)) {\r\n        const value = obj[k];\r\n        if (Array.isArray(value)) {\r\n            value.forEach((v) => {\r\n                addParent(v, childParent);\r\n            });\r\n        }\r\n        else if (value && typeof value === 'object') {\r\n            addParent(value, childParent);\r\n        }\r\n    }\r\n    if (isNode) {\r\n        Object.defineProperty(obj, 'parent', {\r\n            configurable: true,\r\n            writable: true,\r\n            enumerable: false,\r\n            value: parent || null,\r\n        });\r\n    }\r\n    return obj;\r\n}\n\nconst tagMap = {\r\n    script: 'noscript',\r\n    altglyph: 'altGlyph',\r\n    altglyphdef: 'altGlyphDef',\r\n    altglyphitem: 'altGlyphItem',\r\n    animatecolor: 'animateColor',\r\n    animatemotion: 'animateMotion',\r\n    animatetransform: 'animateTransform',\r\n    clippath: 'clipPath',\r\n    feblend: 'feBlend',\r\n    fecolormatrix: 'feColorMatrix',\r\n    fecomponenttransfer: 'feComponentTransfer',\r\n    fecomposite: 'feComposite',\r\n    feconvolvematrix: 'feConvolveMatrix',\r\n    fediffuselighting: 'feDiffuseLighting',\r\n    fedisplacementmap: 'feDisplacementMap',\r\n    fedistantlight: 'feDistantLight',\r\n    fedropshadow: 'feDropShadow',\r\n    feflood: 'feFlood',\r\n    fefunca: 'feFuncA',\r\n    fefuncb: 'feFuncB',\r\n    fefuncg: 'feFuncG',\r\n    fefuncr: 'feFuncR',\r\n    fegaussianblur: 'feGaussianBlur',\r\n    feimage: 'feImage',\r\n    femerge: 'feMerge',\r\n    femergenode: 'feMergeNode',\r\n    femorphology: 'feMorphology',\r\n    feoffset: 'feOffset',\r\n    fepointlight: 'fePointLight',\r\n    fespecularlighting: 'feSpecularLighting',\r\n    fespotlight: 'feSpotLight',\r\n    fetile: 'feTile',\r\n    feturbulence: 'feTurbulence',\r\n    foreignobject: 'foreignObject',\r\n    glyphref: 'glyphRef',\r\n    lineargradient: 'linearGradient',\r\n    radialgradient: 'radialGradient',\r\n};\r\nfunction getTagName(n) {\r\n    let tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\r\n    if (tagName === 'link' && n.attributes._cssText) {\r\n        tagName = 'style';\r\n    }\r\n    return tagName;\r\n}\r\nfunction escapeRegExp(str) {\r\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\nconst HOVER_SELECTOR = /([^\\\\]):hover/;\r\nconst HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, 'g');\r\nfunction addHoverClass(cssText, cache) {\r\n    const cachedStyle = cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.get(cssText);\r\n    if (cachedStyle)\r\n        return cachedStyle;\r\n    const ast = parse(cssText, {\r\n        silent: true,\r\n    });\r\n    if (!ast.stylesheet) {\r\n        return cssText;\r\n    }\r\n    const selectors = [];\r\n    ast.stylesheet.rules.forEach((rule) => {\r\n        if ('selectors' in rule) {\r\n            (rule.selectors || []).forEach((selector) => {\r\n                if (HOVER_SELECTOR.test(selector)) {\r\n                    selectors.push(selector);\r\n                }\r\n            });\r\n        }\r\n    });\r\n    if (selectors.length === 0) {\r\n        return cssText;\r\n    }\r\n    const selectorMatcher = new RegExp(selectors\r\n        .filter((selector, index) => selectors.indexOf(selector) === index)\r\n        .sort((a, b) => b.length - a.length)\r\n        .map((selector) => {\r\n        return escapeRegExp(selector);\r\n    })\r\n        .join('|'), 'g');\r\n    const result = cssText.replace(selectorMatcher, (selector) => {\r\n        const newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, '$1.\\\\:hover');\r\n        return `${selector}, ${newSelector}`;\r\n    });\r\n    cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.set(cssText, result);\r\n    return result;\r\n}\r\nfunction createCache() {\r\n    const stylesWithHoverClass = new Map();\r\n    return {\r\n        stylesWithHoverClass,\r\n    };\r\n}\r\nfunction buildNode(n, options) {\r\n    var _a;\r\n    const { doc, hackCss, cache } = options;\r\n    switch (n.type) {\r\n        case NodeType.Document:\r\n            return doc.implementation.createDocument(null, '', null);\r\n        case NodeType.DocumentType:\r\n            return doc.implementation.createDocumentType(n.name || 'html', n.publicId, n.systemId);\r\n        case NodeType.Element: {\r\n            const tagName = getTagName(n);\r\n            let node;\r\n            if (n.isSVG) {\r\n                node = doc.createElementNS('http://www.w3.org/2000/svg', tagName);\r\n            }\r\n            else {\r\n                if (n.isCustom &&\r\n                    ((_a = doc.defaultView) === null || _a === void 0 ? void 0 : _a.customElements) &&\r\n                    !doc.defaultView.customElements.get(n.tagName))\r\n                    doc.defaultView.customElements.define(n.tagName, class extends doc.defaultView.HTMLElement {\r\n                    });\r\n                node = doc.createElement(tagName);\r\n            }\r\n            const specialAttributes = {};\r\n            for (const name in n.attributes) {\r\n                if (!Object.prototype.hasOwnProperty.call(n.attributes, name)) {\r\n                    continue;\r\n                }\r\n                let value = n.attributes[name];\r\n                if (tagName === 'option' &&\r\n                    name === 'selected' &&\r\n                    value === false) {\r\n                    continue;\r\n                }\r\n                if (value === null) {\r\n                    continue;\r\n                }\r\n                if (value === true)\r\n                    value = '';\r\n                if (name.startsWith('rr_')) {\r\n                    specialAttributes[name] = value;\r\n                    continue;\r\n                }\r\n                const isTextarea = tagName === 'textarea' && name === 'value';\r\n                const isRemoteOrDynamicCss = tagName === 'style' && name === '_cssText';\r\n                if (isRemoteOrDynamicCss && hackCss && typeof value === 'string') {\r\n                    value = addHoverClass(value, cache);\r\n                }\r\n                if ((isTextarea || isRemoteOrDynamicCss) && typeof value === 'string') {\r\n                    const child = doc.createTextNode(value);\r\n                    for (const c of Array.from(node.childNodes)) {\r\n                        if (c.nodeType === node.TEXT_NODE) {\r\n                            node.removeChild(c);\r\n                        }\r\n                    }\r\n                    node.appendChild(child);\r\n                    continue;\r\n                }\r\n                try {\r\n                    if (n.isSVG && name === 'xlink:href') {\r\n                        node.setAttributeNS('http://www.w3.org/1999/xlink', name, value.toString());\r\n                    }\r\n                    else if (name === 'onload' ||\r\n                        name === 'onclick' ||\r\n                        name.substring(0, 7) === 'onmouse') {\r\n                        node.setAttribute('_' + name, value.toString());\r\n                    }\r\n                    else if (tagName === 'meta' &&\r\n                        n.attributes['http-equiv'] === 'Content-Security-Policy' &&\r\n                        name === 'content') {\r\n                        node.setAttribute('csp-content', value.toString());\r\n                        continue;\r\n                    }\r\n                    else if (tagName === 'link' &&\r\n                        (n.attributes.rel === 'preload' ||\r\n                            n.attributes.rel === 'modulepreload') &&\r\n                        n.attributes.as === 'script') {\r\n                    }\r\n                    else if (tagName === 'link' &&\r\n                        n.attributes.rel === 'prefetch' &&\r\n                        typeof n.attributes.href === 'string' &&\r\n                        n.attributes.href.endsWith('.js')) {\r\n                    }\r\n                    else if (tagName === 'img' &&\r\n                        n.attributes.srcset &&\r\n                        n.attributes.rr_dataURL) {\r\n                        node.setAttribute('rrweb-original-srcset', n.attributes.srcset);\r\n                    }\r\n                    else {\r\n                        node.setAttribute(name, value.toString());\r\n                    }\r\n                }\r\n                catch (error) {\r\n                }\r\n            }\r\n            for (const name in specialAttributes) {\r\n                const value = specialAttributes[name];\r\n                if (tagName === 'canvas' && name === 'rr_dataURL') {\r\n                    const image = document.createElement('img');\r\n                    image.onload = () => {\r\n                        const ctx = node.getContext('2d');\r\n                        if (ctx) {\r\n                            ctx.drawImage(image, 0, 0, image.width, image.height);\r\n                        }\r\n                    };\r\n                    image.src = value.toString();\r\n                    if (node.RRNodeType)\r\n                        node.rr_dataURL = value.toString();\r\n                }\r\n                else if (tagName === 'img' && name === 'rr_dataURL') {\r\n                    const image = node;\r\n                    if (!image.currentSrc.startsWith('data:')) {\r\n                        image.setAttribute('rrweb-original-src', n.attributes.src);\r\n                        image.src = value.toString();\r\n                    }\r\n                }\r\n                if (name === 'rr_width') {\r\n                    node.style.setProperty('width', value.toString());\r\n                }\r\n                else if (name === 'rr_height') {\r\n                    node.style.setProperty('height', value.toString());\r\n                }\r\n                else if (name === 'rr_mediaCurrentTime' &&\r\n                    typeof value === 'number') {\r\n                    node.currentTime = value;\r\n                }\r\n                else if (name === 'rr_mediaState') {\r\n                    switch (value) {\r\n                        case 'played':\r\n                            node\r\n                                .play()\r\n                                .catch((e) => console.warn('media playback error', e));\r\n                            break;\r\n                        case 'paused':\r\n                            node.pause();\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n            if (n.isShadowHost) {\r\n                if (!node.shadowRoot) {\r\n                    node.attachShadow({ mode: 'open' });\r\n                }\r\n                else {\r\n                    while (node.shadowRoot.firstChild) {\r\n                        node.shadowRoot.removeChild(node.shadowRoot.firstChild);\r\n                    }\r\n                }\r\n            }\r\n            return node;\r\n        }\r\n        case NodeType.Text:\r\n            return doc.createTextNode(n.isStyle && hackCss\r\n                ? addHoverClass(n.textContent, cache)\r\n                : n.textContent);\r\n        case NodeType.CDATA:\r\n            return doc.createCDATASection(n.textContent);\r\n        case NodeType.Comment:\r\n            return doc.createComment(n.textContent);\r\n        default:\r\n            return null;\r\n    }\r\n}\r\nfunction buildNodeWithSN(n, options) {\r\n    const { doc, mirror, skipChild = false, hackCss = true, afterAppend, cache, } = options;\r\n    if (mirror.has(n.id)) {\r\n        const nodeInMirror = mirror.getNode(n.id);\r\n        const meta = mirror.getMeta(nodeInMirror);\r\n        if (isNodeMetaEqual(meta, n))\r\n            return mirror.getNode(n.id);\r\n    }\r\n    let node = buildNode(n, { doc, hackCss, cache });\r\n    if (!node) {\r\n        return null;\r\n    }\r\n    if (n.rootId && mirror.getNode(n.rootId) !== doc) {\r\n        mirror.replace(n.rootId, doc);\r\n    }\r\n    if (n.type === NodeType.Document) {\r\n        doc.close();\r\n        doc.open();\r\n        if (n.compatMode === 'BackCompat' &&\r\n            n.childNodes &&\r\n            n.childNodes[0].type !== NodeType.DocumentType) {\r\n            if (n.childNodes[0].type === NodeType.Element &&\r\n                'xmlns' in n.childNodes[0].attributes &&\r\n                n.childNodes[0].attributes.xmlns === 'http://www.w3.org/1999/xhtml') {\r\n                doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">');\r\n            }\r\n            else {\r\n                doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">');\r\n            }\r\n        }\r\n        node = doc;\r\n    }\r\n    mirror.add(node, n);\r\n    if ((n.type === NodeType.Document || n.type === NodeType.Element) &&\r\n        !skipChild) {\r\n        for (const childN of n.childNodes) {\r\n            const childNode = buildNodeWithSN(childN, {\r\n                doc,\r\n                mirror,\r\n                skipChild: false,\r\n                hackCss,\r\n                afterAppend,\r\n                cache,\r\n            });\r\n            if (!childNode) {\r\n                console.warn('Failed to rebuild', childN);\r\n                continue;\r\n            }\r\n            if (childN.isShadow && isElement(node) && node.shadowRoot) {\r\n                node.shadowRoot.appendChild(childNode);\r\n            }\r\n            else if (n.type === NodeType.Document &&\r\n                childN.type == NodeType.Element) {\r\n                const htmlElement = childNode;\r\n                let body = null;\r\n                htmlElement.childNodes.forEach((child) => {\r\n                    if (child.nodeName === 'BODY')\r\n                        body = child;\r\n                });\r\n                if (body) {\r\n                    htmlElement.removeChild(body);\r\n                    node.appendChild(childNode);\r\n                    htmlElement.appendChild(body);\r\n                }\r\n                else {\r\n                    node.appendChild(childNode);\r\n                }\r\n            }\r\n            else {\r\n                node.appendChild(childNode);\r\n            }\r\n            if (afterAppend) {\r\n                afterAppend(childNode, childN.id);\r\n            }\r\n        }\r\n    }\r\n    return node;\r\n}\r\nfunction visit(mirror, onVisit) {\r\n    function walk(node) {\r\n        onVisit(node);\r\n    }\r\n    for (const id of mirror.getIds()) {\r\n        if (mirror.has(id)) {\r\n            walk(mirror.getNode(id));\r\n        }\r\n    }\r\n}\r\nfunction handleScroll(node, mirror) {\r\n    const n = mirror.getMeta(node);\r\n    if ((n === null || n === void 0 ? void 0 : n.type) !== NodeType.Element) {\r\n        return;\r\n    }\r\n    const el = node;\r\n    for (const name in n.attributes) {\r\n        if (!(Object.prototype.hasOwnProperty.call(n.attributes, name) &&\r\n            name.startsWith('rr_'))) {\r\n            continue;\r\n        }\r\n        const value = n.attributes[name];\r\n        if (name === 'rr_scrollLeft') {\r\n            el.scrollLeft = value;\r\n        }\r\n        if (name === 'rr_scrollTop') {\r\n            el.scrollTop = value;\r\n        }\r\n    }\r\n}\r\nfunction rebuild(n, options) {\r\n    const { doc, onVisit, hackCss = true, afterAppend, cache, mirror = new Mirror(), } = options;\r\n    const node = buildNodeWithSN(n, {\r\n        doc,\r\n        mirror,\r\n        skipChild: false,\r\n        hackCss,\r\n        afterAppend,\r\n        cache,\r\n    });\r\n    visit(mirror, (visitedNode) => {\r\n        if (onVisit) {\r\n            onVisit(visitedNode);\r\n        }\r\n        handleScroll(visitedNode, mirror);\r\n    });\r\n    return node;\r\n}\n\nexport { IGNORED_NODE, Mirror, NodeType, addHoverClass, buildNodeWithSN, classMatchesRegex, cleanupSnapshot, createCache, createMatchPredicate, createMirror, distanceToMatch, escapeImportStatement, fixSafariColons, genId, getInputType, getInputValue, ignoreAttribute, is2DCanvasBlank, isCSSImportRule, isCSSStyleRule, isElement, isNativeShadowDom, isNodeMetaEqual, isShadowRoot, maskInputValue, needMaskingText, rebuild, serializeNodeWithId, shouldMaskInput, snapshot, stringifyRule, stringifyStylesheet, toLowerCase, toUpperCase, transformAttribute, visitSnapshot };\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]);\n\n/**\n * Inclusion list of attributes that we want to record from the DOM element\n */\nexport function getAttributesToRecord(attributes: Record<string, unknown>): Record<string, unknown> {\n  const obj: Record<string, unknown> = {};\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","import { record } from '@sentry-internal/rrweb';\nimport type { serializedElementNodeWithId, serializedNodeWithId } from '@sentry-internal/rrweb-snapshot';\nimport { NodeType } from '@sentry-internal/rrweb-snapshot';\nimport type { Breadcrumb } from '@sentry/types';\nimport { htmlTreeAsString } from '@sentry/utils';\n\nimport type { ReplayContainer } from '../types';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { handleClick } from './handleClick';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\nimport type { DomHandlerData } from './util/domUtils';\nimport { getClickTargetNode, getTargetNode } from './util/domUtils';\nimport { getAttributesToRecord } from './util/getAttributesToRecord';\n\nexport const handleDomListener: (replay: ReplayContainer) => (handlerData: DomHandlerData) => void = (\n  replay: ReplayContainer,\n) => {\n  return (handlerData: DomHandlerData): void => {\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 as PointerEvent);\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.altKey &&\n      !event.metaKey &&\n      !event.ctrlKey &&\n      !event.shiftKey\n    ) {\n      handleClick(\n        replay.clickDetector,\n        result as Breadcrumb & { timestamp: number; data: { nodeId: number } },\n        getClickTargetNode(handlerData.event) as HTMLElement,\n      );\n    }\n\n    addBreadcrumbEvent(replay, result);\n  };\n};\n\n/** Get the base DOM breadcrumb. */\nexport function getBaseDomBreadcrumb(target: Node | null, message: string): Breadcrumb {\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: serializedNodeWithId) => node.type === NodeType.Text && node.textContent)\n              .filter(Boolean) // filter out empty values\n              .map(text => (text as string).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 */\nexport function handleDom(handlerData: DomHandlerData): Breadcrumb | null {\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: DomHandlerData): { target: Node | null; message: string } {\n  const isClick = handlerData.name === 'click';\n\n  let message: string | undefined;\n  let target: Node | null = 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 }) || '<unknown>';\n  } catch (e) {\n    message = '<unknown>';\n  }\n\n  return { target, message };\n}\n\nfunction isElement(node: serializedNodeWithId): node is serializedElementNodeWithId {\n  return node.type === NodeType.Element;\n}\n","import type { Breadcrumb } from '@sentry/types';\nimport { htmlTreeAsString } from '@sentry/utils';\n\nimport type { ReplayContainer } from '../types';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { getBaseDomBreadcrumb } from './handleDom';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\n\n/** Handle keyboard events & create breadcrumbs. */\nexport function handleKeyboardEvent(replay: ReplayContainer, event: KeyboardEvent): void {\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 */\nexport function getKeyboardBreadcrumb(event: KeyboardEvent): Breadcrumb | null {\n  const { metaKey, shiftKey, ctrlKey, altKey, key, target } = event;\n\n  // never capture for input fields\n  if (!target || isInputElement(target as HTMLElement) || !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 }) || '<unknown>';\n  const baseBreadcrumb = getBaseDomBreadcrumb(target as Node, 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: HTMLElement): boolean {\n  return target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n}\n","import { record } from '@sentry-internal/rrweb';\nimport { browserPerformanceTimeOrigin } from '@sentry/utils';\n\nimport { WINDOW } from '../constants';\nimport type {\n  AllPerformanceEntry,\n  AllPerformanceEntryData,\n  ExperimentalPerformanceResourceTiming,\n  LargestContentfulPaintData,\n  NavigationData,\n  PaintData,\n  ReplayPerformanceEntry,\n  ResourceData,\n} from '../types';\n\n// Map entryType -> function to normalize data for event\nconst ENTRY_TYPES: Record<\n  string,\n  (entry: AllPerformanceEntry) => null | ReplayPerformanceEntry<AllPerformanceEntryData>\n> = {\n  // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n  resource: createResourceEntry,\n  paint: createPaintEntry,\n  // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n  navigation: createNavigationEntry,\n};\n\n/**\n * Create replay performance entries from the browser performance entries.\n */\nexport function createPerformanceEntries(\n  entries: AllPerformanceEntry[],\n): ReplayPerformanceEntry<AllPerformanceEntryData>[] {\n  return entries.map(createPerformanceEntry).filter(Boolean) as ReplayPerformanceEntry<AllPerformanceEntryData>[];\n}\n\nfunction createPerformanceEntry(entry: AllPerformanceEntry): ReplayPerformanceEntry<AllPerformanceEntryData> | null {\n  if (!ENTRY_TYPES[entry.entryType]) {\n    return null;\n  }\n\n  return ENTRY_TYPES[entry.entryType](entry);\n}\n\nfunction getAbsoluteTime(time: number): number {\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: PerformancePaintTiming): ReplayPerformanceEntry<PaintData> {\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: PerformanceNavigationTiming): ReplayPerformanceEntry<NavigationData> | null {\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: ExperimentalPerformanceResourceTiming,\n): ReplayPerformanceEntry<ResourceData> | null {\n  const {\n    entryType,\n    initiatorType,\n    name,\n    responseEnd,\n    startTime,\n    decodedBodySize,\n    encodedBodySize,\n    responseStatus,\n    transferSize,\n  } = entry;\n\n  // Core SDK handles these\n  if (['fetch', 'xmlhttprequest'].includes(initiatorType)) {\n    return null;\n  }\n\n  return {\n    type: `${entryType}.${initiatorType}`,\n    start: getAbsoluteTime(startTime),\n    end: getAbsoluteTime(responseEnd),\n    name,\n    data: {\n      size: transferSize,\n      statusCode: responseStatus,\n      decodedBodySize,\n      encodedBodySize,\n    },\n  };\n}\n\n/**\n * Add a LCP event to the replay based on an LCP metric.\n */\nexport function getLargestContentfulPaint(metric: {\n  value: number;\n  entries: PerformanceEntry[];\n}): ReplayPerformanceEntry<LargestContentfulPaintData> {\n  const entries = metric.entries;\n  const lastEntry = entries[entries.length - 1] as (PerformanceEntry & { element?: Element }) | undefined;\n  const element = lastEntry ? lastEntry.element : undefined;\n\n  const value = metric.value;\n\n  const end = getAbsoluteTime(value);\n\n  const data: ReplayPerformanceEntry<LargestContentfulPaintData> = {\n    type: 'largest-contentful-paint',\n    name: 'largest-contentful-paint',\n    start: end,\n    end,\n    data: {\n      value,\n      size: value,\n      nodeId: element ? record.mirror.getId(element) : undefined,\n    },\n  };\n\n  return data;\n}\n","import { addLcpInstrumentationHandler, addPerformanceInstrumentationHandler } from '@sentry-internal/tracing';\n\nimport type { ReplayContainer } from '../types';\nimport { getLargestContentfulPaint } from '../util/createPerformanceEntries';\n\n/**\n * Sets up a PerformanceObserver to listen to all performance entry types.\n * Returns a callback to stop observing.\n */\nexport function setupPerformanceObserver(replay: ReplayContainer): () => void {\n  function addPerformanceEntry(entry: PerformanceEntry): void {\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 }: { entries: PerformanceEntry[] }): void {\n    entries.forEach(addPerformanceEntry);\n  }\n\n  const clearCallbacks: (() => void)[] = [];\n\n  (['navigation', 'paint', 'resource'] as const).forEach(type => {\n    clearCallbacks.push(addPerformanceInstrumentationHandler(type, onEntries));\n  });\n\n  clearCallbacks.push(\n    addLcpInstrumentationHandler(({ metric }) => {\n      replay.replayPerformanceEntries.push(getLargestContentfulPaint(metric));\n    }),\n  );\n\n  // A callback to cleanup all handlers\n  return () => {\n    clearCallbacks.forEach(clearCallback => clearCallback());\n  };\n}\n","export default `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<<t[a-1];var s=new r(i[30]);for(a=1;a<30;++a)for(var o=i[a];o<i[a+1];++o)s[o]=o-i[a]<<5|a;return{b:i,r:s}},o=s(e,2),f=o.b,h=o.r;f[28]=258,h[258]=28;for(var l=s(i,0).r,u=new n(32768),c=0;c<32768;++c){var v=(43690&c)>>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<i;++a)t[a]&&++s[t[a]-1];var o,f=new n(r);for(a=1;a<r;++a)f[a]=f[a-1]+s[a-1]<<1;if(e){o=new n(1<<r);var h=15-r;for(a=0;a<i;++a)if(t[a])for(var l=a<<4|t[a],c=r-t[a],v=f[t[a]-1]++<<c,d=v|(1<<c)-1;v<=d;++v)o[u[v]>>h]=l}else for(o=new n(i),a=0;a<i;++a)t[a]&&(o[a]=u[f[t[a]-1]++]>>15-t[a]);return o},g=new t(288);for(c=0;c<144;++c)g[c]=8;for(c=144;c<256;++c)g[c]=9;for(c=256;c<280;++c)g[c]=7;for(c=280;c<288;++c)g[c]=8;var w=new t(32);for(c=0;c<32;++c)w[c]=5;var p=d(g,9,0),y=d(w,5,0),m=function(t){return(t+7)/8|0},b=function(n,r,e){return(null==r||r<0)&&(r=0),(null==e||e>n.length)&&(e=n.length),new t(n.subarray(r,e))},M=[\"unexpected EOF\",\"invalid block type\",\"invalid length/literal\",\"invalid distance\",\"stream finished\",\"no stream handler\",,\"no callback\",\"invalid UTF-8 data\",\"extra field too long\",\"date not in range 1980-2099\",\"filename too long\",\"stream finishing\",\"invalid zip data\"],E=function(t,n,r){var e=new Error(n||M[t]);if(e.code=t,Error.captureStackTrace&&Error.captureStackTrace(e,E),!r)throw e;return e},z=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8},A=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8,t[e+2]|=r>>16},_=function(r,e){for(var i=[],a=0;a<r.length;++a)r[a]&&i.push({s:a,f:r[a]});var s=i.length,o=i.slice();if(!s)return{t:F,l:0};if(1==s){var f=new t(i[0].s+1);return f[i[0].s]=1,{t:f,l:1}}i.sort((function(t,n){return t.f-n.f})),i.push({s:-1,f:25001});var h=i[0],l=i[1],u=0,c=1,v=2;for(i[0]={s:-1,f:h.f+l.f,l:h,r:l};c!=s-1;)h=i[i[u].f<i[v].f?u++:v++],l=i[u!=c&&i[u].f<i[v].f?u++:v++],i[c++]={s:-1,f:h.f+l.f,l:h,r:l};var d=o[0].s;for(a=1;a<s;++a)o[a].s>d&&(d=o[a].s);var g=new n(d+1),w=x(i[c-1],g,0);if(w>e){a=0;var p=0,y=w-e,m=1<<y;for(o.sort((function(t,n){return g[n.s]-g[t.s]||t.f-n.f}));a<s;++a){var b=o[a].s;if(!(g[b]>e))break;p+=m-(1<<w-g[b]),g[b]=e}for(p>>=y;p>0;){var M=o[a].s;g[M]<e?p-=1<<e-g[M]++-1:++a}for(;a>=0&&p;--a){var E=o[a].s;g[E]==e&&(--g[E],++p)}w=e}return{t:new t(g),l:w}},x=function(t,n,r){return-1==t.s?Math.max(x(t.l,n,r+1),x(t.r,n,r+1)):n[t.s]=r},D=function(t){for(var r=t.length;r&&!t[--r];);for(var e=new n(++r),i=0,a=t[0],s=1,o=function(t){e[i++]=t},f=1;f<=r;++f)if(t[f]==a&&f!=r)++s;else{if(!a&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(a),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(a);s=1,a=t[f]}return{c:e.subarray(0,i),n:r}},T=function(t,n){for(var r=0,e=0;e<n.length;++e)r+=t[e]*n[e];return r},k=function(t,n,r){var e=r.length,i=m(n+2);t[i]=255&e,t[i+1]=e>>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var a=0;a<e;++a)t[i+a+4]=r[a];return 8*(i+4+e)},C=function(t,r,s,o,f,h,l,u,c,v,m){z(r,m++,s),++f[256];for(var b=_(f,15),M=b.t,E=b.l,x=_(h,15),C=x.t,U=x.l,F=D(M),I=F.c,S=F.n,L=D(C),O=L.c,j=L.n,q=new n(19),B=0;B<I.length;++B)++q[31&I[B]];for(B=0;B<O.length;++B)++q[31&O[B]];for(var G=_(q,7),H=G.t,J=G.l,K=19;K>4&&!H[a[K-1]];--K);var N,P,Q,R,V=v+5<<3,W=T(f,g)+T(h,w)+l,X=T(f,M)+T(h,C)+l+14+3*K+T(q,H)+2*q[16]+3*q[17]+7*q[18];if(c>=0&&V<=W&&V<=X)return k(r,m,t.subarray(c,c+v));if(z(r,m,1+(X<W)),m+=2,X<W){N=d(M,E,0),P=M,Q=d(C,U,0),R=C;var Y=d(H,J,0);z(r,m,S-257),z(r,m+5,j-1),z(r,m+10,K-4),m+=14;for(B=0;B<K;++B)z(r,m+3*B,H[a[B]]);m+=3*K;for(var Z=[I,O],$=0;$<2;++$){var tt=Z[$];for(B=0;B<tt.length;++B){var nt=31&tt[B];z(r,m,Y[nt]),m+=H[nt],nt>15&&(z(r,m,tt[B]>>5&127),m+=tt[B]>>12)}}}else N=p,P=g,Q=y,R=w;for(B=0;B<u;++B){var rt=o[B];if(rt>255){A(r,m,N[(nt=rt>>18&31)+257]),m+=P[nt+257],nt>7&&(z(r,m,rt>>23&31),m+=e[nt]);var et=31&rt;A(r,m,Q[et]),m+=R[et],et>3&&(A(r,m,rt>>5&8191),m+=i[et])}else A(r,m,N[rt]),m+=P[rt]}return A(r,m,N[256]),m+P[256]},U=new r([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),F=new t(0),I=function(){for(var t=new Int32Array(256),n=0;n<256;++n){for(var r=n,e=9;--e;)r=(1&r&&-306674912)^r>>>1;t[n]=r}return t}(),S=function(){var t=1,n=0;return{p:function(r){for(var e=t,i=n,a=0|r.length,s=0;s!=a;){for(var o=Math.min(s+2655,a);s<o;++s)i+=e+=r[s];e=(65535&e)+15*(e>>16),i=(65535&i)+15*(i>>16)}t=e,n=i},d:function(){return(255&(t%=65521))<<24|(65280&t)<<8|(255&(n%=65521))<<8|n>>8}}},L=function(a,s,o,f,u){if(!u&&(u={l:1},s.dictionary)){var c=s.dictionary.subarray(-32768),v=new t(c.length+a.length);v.set(c),v.set(a,c.length),a=v,u.w=c.length}return function(a,s,o,f,u,c){var v=c.z||a.length,d=new t(f+v+5*(1+Math.ceil(v/7e3))+u),g=d.subarray(f,d.length-u),w=c.l,p=7&(c.r||0);if(s){p&&(g[0]=c.r>>3);for(var y=U[s-1],M=y>>13,E=8191&y,z=(1<<o)-1,A=c.p||new n(32768),_=c.h||new n(z+1),x=Math.ceil(o/3),D=2*x,T=function(t){return(a[t]^a[t+1]<<x^a[t+2]<<D)&z},F=new r(25e3),I=new n(288),S=new n(32),L=0,O=0,j=c.i||0,q=0,B=c.w||0,G=0;j+2<v;++j){var H=T(j),J=32767&j,K=_[H];if(A[J]=K,_[H]=J,B<=j){var N=v-j;if((L>7e3||q>24576)&&(N>423||!w)){p=C(a,g,0,F,I,S,O,q,G,j-G,p),q=L=O=0,G=j;for(var P=0;P<286;++P)I[P]=0;for(P=0;P<30;++P)S[P]=0}var Q=2,R=0,V=E,W=J-K&32767;if(N>2&&H==T(j-W))for(var X=Math.min(M,N)-1,Y=Math.min(32767,j),Z=Math.min(258,N);W<=Y&&--V&&J!=K;){if(a[j+Q]==a[j+Q-W]){for(var $=0;$<Z&&a[j+$]==a[j+$-W];++$);if($>Q){if(Q=$,R=W,$>X)break;var tt=Math.min(W,$-2),nt=0;for(P=0;P<tt;++P){var rt=j-W+P&32767,et=rt-A[rt]&32767;et>nt&&(nt=et,K=rt)}}}W+=(J=K)-(K=A[J])&32767}if(R){F[q++]=268435456|h[Q]<<18|l[R];var it=31&h[Q],at=31&l[R];O+=e[it]+i[at],++I[257+it],++S[at],B=j+Q,++L}else F[q++]=a[j],++I[a[j]]}}for(j=Math.max(j,B);j<v;++j)F[q++]=a[j],++I[a[j]];p=C(a,g,w,F,I,S,O,q,G,j-G,p),w||(c.r=7&p|g[p/8|0]<<3,p-=7,c.h=_,c.p=A,c.i=j,c.w=B)}else{for(j=c.w||0;j<v+w;j+=65535){var st=j+65535;st>=v&&(g[p/8|0]=w,st=v),p=k(g,p+1,a.subarray(j,st))}c.i=v}return b(d,0,f+m(p)+u)}(a,null==s.level?6:s.level,null==s.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(a.length)))):12+s.mem,o,f,u)},O=function(t,n,r){for(;r;++n)t[n]=r,r>>>=8},j=function(){function n(n,r){if(\"function\"==typeof n&&(r=n,n={}),this.ondata=r,this.o=n||{},this.s={l:0,i:32768,w:32768,z:32768},this.b=new t(98304),this.o.dictionary){var e=this.o.dictionary.subarray(-32768);this.b.set(e,32768-e.length),this.s.i=32768-e.length}}return n.prototype.p=function(t,n){this.ondata(L(t,this.o,0,0,this.s),n)},n.prototype.push=function(n,r){this.ondata||E(5),this.s.l&&E(4);var e=n.length+this.s.z;if(e>this.b.length){if(e>2*this.b.length-32768){var i=new t(-32768&e);i.set(this.b.subarray(0,this.s.z)),this.b=i}var a=this.b.length-this.s.z;a&&(this.b.set(n.subarray(0,a),this.s.z),this.s.z=this.b.length,this.p(this.b,!1)),this.b.set(this.b.subarray(-32768)),this.b.set(n.subarray(a),32768),this.s.z=n.length-a+32768,this.s.i=32766,this.s.w=32768}else this.b.set(n,this.s.z),this.s.z+=n.length;this.s.l=1&r,(this.s.z>this.s.w+8191||r)&&(this.p(this.b,r||!1),this.s.w=this.s.i,this.s.i-=2)},n}();function q(t,n){n||(n={});var r=function(){var t=-1;return{p:function(n){for(var r=t,e=0;e<n.length;++e)r=I[255&r^n[e]]^r>>>8;t=r},d:function(){return~t}}}(),e=t.length;r.p(t);var i,a=L(t,n,10+((i=n).filename?i.filename.length+1:0),8),s=a.length;return function(t,n){var r=n.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=n.level<2?4:9==n.level?2:0,t[9]=3,0!=n.mtime&&O(t,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),r){t[3]=8;for(var e=0;e<=r.length;++e)t[e+10]=r.charCodeAt(e)}}(a,n),O(a,s-8,r.d()),O(a,s-4,e),a}var B=function(){function t(t,n){this.c=S(),this.v=1,j.call(this,t,n)}return t.prototype.push=function(t,n){this.c.p(t),j.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){var r=L(t,this.o,this.v&&(this.o.dictionary?6:2),n&&4,this.s);this.v&&(function(t,n){var r=n.level,e=0==r?0:r<6?1:9==r?3:2;if(t[0]=120,t[1]=e<<6|(n.dictionary&&32),t[1]|=31-(t[0]<<8|t[1])%31,n.dictionary){var i=S();i.p(n.dictionary),O(t,2,i.d())}}(r,this.o),this.v=0),n&&O(r,r.length-4,this.c.d()),this.ondata(r,n)},t}(),G=\"undefined\"!=typeof TextEncoder&&new TextEncoder,H=\"undefined\"!=typeof TextDecoder&&new TextDecoder;try{H.decode(F,{stream:!0})}catch(t){}var J=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,n){this.ondata||E(5),this.d&&E(4),this.ondata(K(t),this.d=n||!1)},t}();function K(n,r){if(r){for(var e=new t(n.length),i=0;i<n.length;++i)e[i]=n.charCodeAt(i);return e}if(G)return G.encode(n);var a=n.length,s=new t(n.length+(n.length>>1)),o=0,f=function(t){s[o++]=t};for(i=0;i<a;++i){if(o+5>s.length){var h=new t(o+8+(a-i<<1));h.set(s),s=h}var l=n.charCodeAt(i);l<128||r?f(l):l<2048?(f(192|l>>6),f(128|63&l)):l>55295&&l<57344?(f(240|(l=65536+(1047552&l)|1023&n.charCodeAt(++i))>>18),f(128|l>>12&63),f(128|l>>6&63),f(128|63&l)):(f(224|l>>12),f(128|l>>6&63),f(128|63&l))}return b(s,0,o)}const N=new class{constructor(){this._init()}clear(){this._init()}addEvent(t){if(!t)throw new Error(\"Adding invalid event\");const n=this._hasEvents?\",\":\"\";this.stream.push(n+t),this._hasEvents=!0}finish(){this.stream.push(\"]\",!0);const t=function(t){let n=0;for(let r=0,e=t.length;r<e;r++)n+=t[r].length;const r=new Uint8Array(n);for(let n=0,e=0,i=t.length;n<i;n++){const i=t[n];r.set(i,e),e+=i.length}return r}(this._deflatedData);return this._init(),t}_init(){this._hasEvents=!1,this._deflatedData=[],this.deflate=new B,this.deflate.ondata=(t,n)=>{this._deflatedData.push(t)},this.stream=new J(((t,n)=>{this.deflate.push(t,n)})),this.stream.push(\"[\")}},P={clear:()=>{N.clear()},addEvent:t=>N.addEvent(t),finish:()=>N.finish(),compress:t=>function(t){return q(K(t))}(t)};addEventListener(\"message\",(function(t){const n=t.data.method,r=t.data.id,e=t.data.arg;if(n in P&&\"function\"==typeof P[n])try{const t=P[n](e);postMessage({id:r,method:n,success:!0,response:t})}catch(t){postMessage({id:r,method:n,success:!1,response:t.message}),console.error(t)}})),postMessage({id:void 0,method:\"init\",success:!0,response:void 0});`;\n","import r from\"./worker\";function e(){const e=new Blob([r]);return URL.createObjectURL(e)}export{e as getWorkerURL};\n","import { getCurrentHub } from '@sentry/core';\nimport { logger } from '@sentry/utils';\n\n/**\n * Log a message in debug mode, and add a breadcrumb when _experiment.traceInternals is enabled.\n */\nexport function logInfo(message: string, shouldAddBreadcrumb?: boolean): void {\n  if (!__DEBUG_BUILD__) {\n    return;\n  }\n\n  logger.info(message);\n\n  if (shouldAddBreadcrumb) {\n    addBreadcrumb(message);\n  }\n}\n\n/**\n * Log a message, and add a breadcrumb in the next tick.\n * This is necessary when the breadcrumb may be added before the replay is initialized.\n */\nexport function logInfoNextTick(message: string, shouldAddBreadcrumb?: boolean): void {\n  if (!__DEBUG_BUILD__) {\n    return;\n  }\n\n  logger.info(message);\n\n  if (shouldAddBreadcrumb) {\n    // Wait a tick here to avoid race conditions for some initial logs\n    // which may be added before replay is initialized\n    setTimeout(() => {\n      addBreadcrumb(message);\n    }, 0);\n  }\n}\n\nfunction addBreadcrumb(message: string): void {\n  const hub = getCurrentHub();\n  hub.addBreadcrumb(\n    {\n      category: 'console',\n      data: {\n        logger: 'replay',\n      },\n      level: 'info',\n      message,\n    },\n    { level: 'info' },\n  );\n}\n","import { REPLAY_MAX_EVENT_BUFFER_SIZE } from '../constants';\n\n/** This error indicates that the event buffer size exceeded the limit.. */\nexport class EventBufferSizeExceededError extends Error {\n  public constructor() {\n    super(`Event buffer exceeded maximum size of ${REPLAY_MAX_EVENT_BUFFER_SIZE}.`);\n  }\n}\n","import { REPLAY_MAX_EVENT_BUFFER_SIZE } from '../constants';\nimport type { AddEventResult, EventBuffer, EventBufferType, RecordingEvent } from '../types';\nimport { timestampToMs } from '../util/timestamp';\nimport { EventBufferSizeExceededError } from './error';\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 */\nexport class EventBufferArray implements EventBuffer {\n  /** All the events that are buffered to be sent. */\n  public events: RecordingEvent[];\n\n  /** @inheritdoc */\n  public hasCheckout: boolean;\n\n  private _totalSize: number;\n\n  public constructor() {\n    this.events = [];\n    this._totalSize = 0;\n    this.hasCheckout = false;\n  }\n\n  /** @inheritdoc */\n  public get hasEvents(): boolean {\n    return this.events.length > 0;\n  }\n\n  /** @inheritdoc */\n  public get type(): EventBufferType {\n    return 'sync';\n  }\n\n  /** @inheritdoc */\n  public destroy(): void {\n    this.events = [];\n  }\n\n  /** @inheritdoc */\n  public async addEvent(event: RecordingEvent): Promise<AddEventResult> {\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  public finish(): Promise<string> {\n    return new Promise<string>(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  public clear(): void {\n    this.events = [];\n    this._totalSize = 0;\n    this.hasCheckout = false;\n  }\n\n  /** @inheritdoc */\n  public getEarliestTimestamp(): number | null {\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","import { logger } from '@sentry/utils';\n\nimport type { WorkerRequest, WorkerResponse } from '../types';\nimport { logInfo } from '../util/log';\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nexport class WorkerHandler {\n  private _worker: Worker;\n  private _id: number;\n  private _ensureReadyPromise?: Promise<void>;\n\n  public constructor(worker: Worker) {\n    this._worker = worker;\n    this._id = 0;\n  }\n\n  /**\n   * Ensure the worker is ready (or not).\n   * This will either resolve when the worker is ready, or reject if an error occured.\n   */\n  public ensureReady(): Promise<void> {\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 }: MessageEvent) => {\n          if ((data as WorkerResponse).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  public destroy(): void {\n    logInfo('[Replay] Destroying compression worker');\n    this._worker.terminate();\n  }\n\n  /**\n   * Post message to worker and wait for response before resolving promise.\n   */\n  public postMessage<T>(method: WorkerRequest['method'], arg?: WorkerRequest['arg']): Promise<T> {\n    const id = this._getAndIncrementId();\n\n    return new Promise((resolve, reject) => {\n      const listener = ({ data }: MessageEvent): void => {\n        const response = data as WorkerResponse;\n        if (response.method !== method) {\n          return;\n        }\n\n        // There can be multiple listeners for a single method, the id ensures\n        // that the response matches the caller.\n        if (response.id !== id) {\n          return;\n        }\n\n        // At this point, we'll always want to remove listener regardless of result status\n        this._worker.removeEventListener('message', listener);\n\n        if (!response.success) {\n          // TODO: Do some error handling, not sure what\n          __DEBUG_BUILD__ && logger.error('[Replay]', response.response);\n\n          reject(new Error('Error in compression worker'));\n          return;\n        }\n\n        resolve(response.response as T);\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  private _getAndIncrementId(): number {\n    return this._id++;\n  }\n}\n","import type { ReplayRecordingData } from '@sentry/types';\n\nimport { REPLAY_MAX_EVENT_BUFFER_SIZE } from '../constants';\nimport type { AddEventResult, EventBuffer, EventBufferType, RecordingEvent } from '../types';\nimport { timestampToMs } from '../util/timestamp';\nimport { EventBufferSizeExceededError } from './error';\nimport { WorkerHandler } from './WorkerHandler';\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nexport class EventBufferCompressionWorker implements EventBuffer {\n  /** @inheritdoc */\n  public hasCheckout: boolean;\n\n  private _worker: WorkerHandler;\n  private _earliestTimestamp: number | null;\n  private _totalSize;\n\n  public constructor(worker: Worker) {\n    this._worker = new WorkerHandler(worker);\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n    this.hasCheckout = false;\n  }\n\n  /** @inheritdoc */\n  public get hasEvents(): boolean {\n    return !!this._earliestTimestamp;\n  }\n\n  /** @inheritdoc */\n  public get type(): EventBufferType {\n    return 'worker';\n  }\n\n  /**\n   * Ensure the worker is ready (or not).\n   * This will either resolve when the worker is ready, or reject if an error occured.\n   */\n  public ensureReady(): Promise<void> {\n    return this._worker.ensureReady();\n  }\n\n  /**\n   * Destroy the event buffer.\n   */\n  public destroy(): void {\n    this._worker.destroy();\n  }\n\n  /**\n   * Add an event to the event buffer.\n   *\n   * Returns true if event was successfuly received and processed by worker.\n   */\n  public addEvent(event: RecordingEvent): Promise<AddEventResult> {\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  public finish(): Promise<ReplayRecordingData> {\n    return this._finishRequest();\n  }\n\n  /** @inheritdoc */\n  public clear(): void {\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    void this._worker.postMessage('clear');\n  }\n\n  /** @inheritdoc */\n  public getEarliestTimestamp(): number | null {\n    return this._earliestTimestamp;\n  }\n\n  /**\n   * Send the event to the worker.\n   */\n  private _sendEventToWorker(data: string): Promise<AddEventResult> {\n    return this._worker.postMessage<void>('addEvent', data);\n  }\n\n  /**\n   * Finish the request and return the compressed data from the worker.\n   */\n  private async _finishRequest(): Promise<Uint8Array> {\n    const response = await this._worker.postMessage<Uint8Array>('finish');\n\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n\n    return response;\n  }\n}\n","import type { ReplayRecordingData } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport type { AddEventResult, EventBuffer, EventBufferType, RecordingEvent } from '../types';\nimport { logInfo } from '../util/log';\nimport { EventBufferArray } from './EventBufferArray';\nimport { EventBufferCompressionWorker } from './EventBufferCompressionWorker';\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 */\nexport class EventBufferProxy implements EventBuffer {\n  private _fallback: EventBufferArray;\n  private _compression: EventBufferCompressionWorker;\n  private _used: EventBuffer;\n  private _ensureWorkerIsLoadedPromise: Promise<void>;\n\n  public constructor(worker: 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  public get type(): EventBufferType {\n    return this._used.type;\n  }\n\n  /** @inheritDoc */\n  public get hasEvents(): boolean {\n    return this._used.hasEvents;\n  }\n\n  /** @inheritdoc */\n  public get hasCheckout(): boolean {\n    return this._used.hasCheckout;\n  }\n  /** @inheritdoc */\n  public set hasCheckout(value: boolean) {\n    this._used.hasCheckout = value;\n  }\n\n  /** @inheritDoc */\n  public destroy(): void {\n    this._fallback.destroy();\n    this._compression.destroy();\n  }\n\n  /** @inheritdoc */\n  public clear(): void {\n    return this._used.clear();\n  }\n\n  /** @inheritdoc */\n  public getEarliestTimestamp(): number | null {\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  public addEvent(event: RecordingEvent): Promise<AddEventResult> {\n    return this._used.addEvent(event);\n  }\n\n  /** @inheritDoc */\n  public async finish(): Promise<ReplayRecordingData> {\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  public ensureWorkerIsLoaded(): Promise<void> {\n    return this._ensureWorkerIsLoadedPromise;\n  }\n\n  /** Actually check if the worker has been loaded. */\n  private async _ensureWorkerIsLoaded(): Promise<void> {\n    try {\n      await this._compression.ensureReady();\n    } catch (error) {\n      // If the worker fails to load, we fall back to the simple buffer.\n      // Nothing more to do from our side here\n      logInfo('[Replay] Failed to load the compression worker, falling back to simple buffer');\n      return;\n    }\n\n    // Now we need to switch over the array buffer to the compression worker\n    await this._switchToCompressionWorker();\n  }\n\n  /** Switch the used buffer to the compression worker. */\n  private async _switchToCompressionWorker(): Promise<void> {\n    const { events, hasCheckout } = this._fallback;\n\n    const addEventPromises: Promise<void>[] = [];\n    for (const event of events) {\n      addEventPromises.push(this._compression.addEvent(event));\n    }\n\n    this._compression.hasCheckout = hasCheckout;\n\n    // We switch over to the new buffer immediately - any further events will be added\n    // after the previously buffered ones\n    this._used = this._compression;\n\n    // Wait for original events to be re-added before resolving\n    try {\n      await Promise.all(addEventPromises);\n    } catch (error) {\n      __DEBUG_BUILD__ && logger.warn('[Replay] Failed to add events when switching buffers.', error);\n    }\n  }\n}\n","import { getWorkerURL } from '@sentry-internal/replay-worker';\n\nimport type { EventBuffer } from '../types';\nimport { logInfo } from '../util/log';\nimport { EventBufferArray } from './EventBufferArray';\nimport { EventBufferProxy } from './EventBufferProxy';\n\ninterface CreateEventBufferParams {\n  useCompression: boolean;\n  workerUrl?: string;\n}\n\n// Treeshakable guard to remove the code of the included compression worker\ndeclare const __SENTRY_EXCLUDE_REPLAY_WORKER__: boolean;\n\n/**\n * Create an event buffer for replays.\n */\nexport function createEventBuffer({\n  useCompression,\n  workerUrl: customWorkerUrl,\n}: CreateEventBufferParams): EventBuffer {\n  if (\n    useCompression &&\n    // eslint-disable-next-line no-restricted-globals\n    window.Worker\n  ) {\n    const worker = _loadWorker(customWorkerUrl);\n\n    if (worker) {\n      return worker;\n    }\n  }\n\n  logInfo('[Replay] Using simple buffer');\n  return new EventBufferArray();\n}\n\nfunction _loadWorker(customWorkerUrl?: string): EventBufferProxy | void {\n  try {\n    const workerUrl = customWorkerUrl || _getWorkerUrl();\n\n    if (!workerUrl) {\n      return;\n    }\n\n    logInfo(`[Replay] Using compression worker${customWorkerUrl ? ` from ${customWorkerUrl}` : ''}`);\n    const worker = new Worker(workerUrl);\n    return new EventBufferProxy(worker);\n  } catch (error) {\n    logInfo('[Replay] Failed to create compression worker');\n    // Fall back to use simple event buffer array\n  }\n}\n\nfunction _getWorkerUrl(): string {\n  if (typeof __SENTRY_EXCLUDE_REPLAY_WORKER__ === 'undefined' || !__SENTRY_EXCLUDE_REPLAY_WORKER__) {\n    return getWorkerURL();\n  }\n\n  return '';\n}\n","import { WINDOW } from '../constants';\n\n/** If sessionStorage is available. */\nexport function hasSessionStorage(): boolean {\n  try {\n    // This can throw, e.g. when being accessed in a sandboxed iframe\n    return 'sessionStorage' in WINDOW && !!WINDOW.sessionStorage;\n  } catch {\n    return false;\n  }\n}\n","import { REPLAY_SESSION_KEY, WINDOW } from '../../src/constants';\nimport type { ReplayContainer } from '../../src/types';\nimport { hasSessionStorage } from '../util/hasSessionStorage';\n\n/**\n * Removes the session from Session Storage and unsets session in replay instance\n */\nexport function clearSession(replay: ReplayContainer): void {\n  deleteSession();\n  replay.session = undefined;\n}\n\n/**\n * Deletes a session from storage\n */\nfunction deleteSession(): void {\n  if (!hasSessionStorage()) {\n    return;\n  }\n\n  try {\n    WINDOW.sessionStorage.removeItem(REPLAY_SESSION_KEY);\n  } catch {\n    // Ignore potential SecurityError exceptions\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 */\nexport function isSampled(sampleRate?: number): boolean {\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","import { REPLAY_SESSION_KEY, WINDOW } from '../constants';\nimport type { Session } from '../types';\nimport { hasSessionStorage } from '../util/hasSessionStorage';\n\n/**\n * Save a session to session storage.\n */\nexport function saveSession(session: Session): void {\n  if (!hasSessionStorage()) {\n    return;\n  }\n\n  try {\n    WINDOW.sessionStorage.setItem(REPLAY_SESSION_KEY, JSON.stringify(session));\n  } catch {\n    // Ignore potential SecurityError exceptions\n  }\n}\n","import { uuid4 } from '@sentry/utils';\n\nimport type { Sampled, Session } from '../types';\n\n/**\n * Get a session with defaults & applied sampling.\n */\nexport function makeSession(session: Partial<Session> & { sampled: Sampled }): 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","import type { Sampled, Session, SessionOptions } from '../types';\nimport { isSampled } from '../util/isSampled';\nimport { saveSession } from './saveSession';\nimport { makeSession } from './Session';\n\n/**\n * Get the sampled status for a session based on sample rates & current sampled status.\n */\nexport function getSessionSampleType(sessionSampleRate: number, allowBuffering: boolean): Sampled {\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 */\nexport function createSession(\n  { sessionSampleRate, allowBuffering, stickySession = false }: SessionOptions,\n  { previousSessionId }: { previousSessionId?: string } = {},\n): Session {\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","import { REPLAY_SESSION_KEY, WINDOW } from '../constants';\nimport type { Session } from '../types';\nimport { hasSessionStorage } from '../util/hasSessionStorage';\nimport { logInfoNextTick } from '../util/log';\nimport { makeSession } from './Session';\n\n/**\n * Fetches a session from storage\n */\nexport function fetchSession(traceInternals?: boolean): Session | null {\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) as Session;\n\n    logInfoNextTick('[Replay] Loading existing session', traceInternals);\n\n    return makeSession(sessionObj);\n  } catch {\n    return null;\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 */\nexport function isExpired(\n  initialTime: null | number,\n  expiry: undefined | number,\n  targetTime: number = +new Date(),\n): boolean {\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","import type { Session } from '../types';\nimport { isExpired } from './isExpired';\n\n/**\n * Checks to see if session is expired\n */\nexport function isSessionExpired(\n  session: Session,\n  {\n    maxReplayDuration,\n    sessionIdleExpire,\n    targetTime = Date.now(),\n  }: { maxReplayDuration: number; sessionIdleExpire: number; targetTime?: number },\n): boolean {\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","import type { Session } from '../types';\nimport { isSessionExpired } from '../util/isSessionExpired';\n\n/** If the session should be refreshed or not. */\nexport function shouldRefreshSession(\n  session: Session,\n  { sessionIdleExpire, maxReplayDuration }: { sessionIdleExpire: number; maxReplayDuration: number },\n): boolean {\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","import type { Session, SessionOptions } from '../types';\nimport { logInfoNextTick } from '../util/log';\nimport { createSession } from './createSession';\nimport { fetchSession } from './fetchSession';\nimport { shouldRefreshSession } from './shouldRefreshSession';\n\n/**\n * Get or create a session, when initializing the replay.\n * Returns a session that may be unsampled.\n */\nexport function loadOrCreateSession(\n  {\n    traceInternals,\n    sessionIdleExpire,\n    maxReplayDuration,\n    previousSessionId,\n  }: {\n    sessionIdleExpire: number;\n    maxReplayDuration: number;\n    traceInternals?: boolean;\n    previousSessionId?: string;\n  },\n  sessionOptions: SessionOptions,\n): Session {\n  const existingSession = sessionOptions.stickySession && fetchSession(traceInternals);\n\n  // No session exists yet, just create a new one\n  if (!existingSession) {\n    logInfoNextTick('[Replay] Creating new session', traceInternals);\n    return createSession(sessionOptions, { previousSessionId });\n  }\n\n  if (!shouldRefreshSession(existingSession, { sessionIdleExpire, maxReplayDuration })) {\n    return existingSession;\n  }\n\n  logInfoNextTick('[Replay] Session in sessionStorage is expired, creating new one...');\n  return createSession(sessionOptions, { previousSessionId: existingSession.id });\n}\n","import { EventType } from '@sentry-internal/rrweb';\nimport { getCurrentHub } from '@sentry/core';\nimport { logger } from '@sentry/utils';\n\nimport { EventBufferSizeExceededError } from '../eventBuffer/error';\nimport type { AddEventResult, RecordingEvent, ReplayContainer, ReplayFrameEvent, ReplayPluginOptions } from '../types';\nimport { logInfo } from './log';\nimport { timestampToMs } from './timestamp';\n\nfunction isCustomEvent(event: RecordingEvent): event is ReplayFrameEvent {\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 */\nexport function addEventSync(replay: ReplayContainer, event: RecordingEvent, isCheckout?: boolean): boolean {\n  if (!shouldAddEvent(replay, event)) {\n    return false;\n  }\n\n  void _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 */\nexport function addEvent(\n  replay: ReplayContainer,\n  event: RecordingEvent,\n  isCheckout?: boolean,\n): Promise<AddEventResult | null> {\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: ReplayContainer,\n  event: RecordingEvent,\n  isCheckout?: boolean,\n): Promise<AddEventResult | null> {\n  if (!replay.eventBuffer) {\n    return null;\n  }\n\n  try {\n    if (isCheckout && replay.recordingMode === 'buffer') {\n      replay.eventBuffer.clear();\n    }\n\n    if (isCheckout) {\n      replay.eventBuffer.hasCheckout = true;\n    }\n\n    const replayOptions = replay.getOptions();\n\n    const eventAfterPossibleCallback = maybeApplyCallback(event, replayOptions.beforeAddRecordingEvent);\n\n    if (!eventAfterPossibleCallback) {\n      return;\n    }\n\n    return await replay.eventBuffer.addEvent(eventAfterPossibleCallback);\n  } catch (error) {\n    const reason = error && error instanceof EventBufferSizeExceededError ? 'addEventSizeExceeded' : 'addEvent';\n\n    __DEBUG_BUILD__ && logger.error(error);\n    await replay.stop({ reason });\n\n    const client = getCurrentHub().getClient();\n\n    if (client) {\n      client.recordDroppedEvent('internal_sdk_error', 'replay');\n    }\n  }\n}\n\n/** Exported only for tests. */\nexport function shouldAddEvent(replay: ReplayContainer, event: RecordingEvent): boolean {\n  if (!replay.eventBuffer || replay.isPaused() || !replay.isEnabled()) {\n    return false;\n  }\n\n  const timestampInMs = timestampToMs(event.timestamp);\n\n  // Throw out events that happen more than 5 minutes ago. This can happen if\n  // page has been left open and idle for a long period of time and user\n  // comes back to trigger a new session. The performance entries rely on\n  // `performance.timeOrigin`, which is when the page first opened.\n  if (timestampInMs + replay.timeouts.sessionIdlePause < Date.now()) {\n    return false;\n  }\n\n  // Throw out events that are +60min from the initial timestamp\n  if (timestampInMs > replay.getContext().initialTimestamp + replay.getOptions().maxReplayDuration) {\n    logInfo(\n      `[Replay] Skipping event with timestamp ${timestampInMs} because it is after maxReplayDuration`,\n      replay.getOptions()._experiments.traceInternals,\n    );\n    return false;\n  }\n\n  return true;\n}\n\nfunction maybeApplyCallback(\n  event: RecordingEvent,\n  callback: ReplayPluginOptions['beforeAddRecordingEvent'],\n): RecordingEvent | null | undefined {\n  try {\n    if (typeof callback === 'function' && isCustomEvent(event)) {\n      return callback(event);\n    }\n  } catch (error) {\n    __DEBUG_BUILD__ &&\n      logger.error('[Replay] An error occured in the `beforeAddRecordingEvent` callback, skipping the event...', error);\n    return null;\n  }\n\n  return event;\n}\n","import type { ErrorEvent, Event, ReplayEvent, TransactionEvent } from '@sentry/types';\n\n/** If the event is an error event */\nexport function isErrorEvent(event: Event): event is ErrorEvent {\n  return !event.type;\n}\n\n/** If the event is a transaction event */\nexport function isTransactionEvent(event: Event): event is TransactionEvent {\n  return event.type === 'transaction';\n}\n\n/** If the event is an replay event */\nexport function isReplayEvent(event: Event): event is ReplayEvent {\n  return event.type === 'replay_event';\n}\n","import { getCurrentHub } from '@sentry/core';\nimport type { ErrorEvent, Event, TransactionEvent, Transport, TransportMakeRequestResponse } from '@sentry/types';\n\nimport type { ReplayContainer } from '../types';\nimport { isErrorEvent, isTransactionEvent } from '../util/eventUtils';\n\ntype AfterSendEventCallback = (event: Event, sendResponse: TransportMakeRequestResponse | void) => void;\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nexport function handleAfterSendEvent(replay: ReplayContainer): AfterSendEventCallback {\n  // Custom transports may still be returning `Promise<void>`, which means we cannot expect the status code to be available there\n  // TODO (v8): remove this check as it will no longer be necessary\n  const enforceStatusCode = isBaseTransportSend();\n\n  return (event: Event, sendResponse: TransportMakeRequestResponse | void) => {\n    if (!replay.isEnabled() || (!isErrorEvent(event) && !isTransactionEvent(event))) {\n      return;\n    }\n\n    const statusCode = sendResponse && sendResponse.statusCode;\n\n    // We only want to do stuff on successful error sending, otherwise you get error replays without errors attached\n    // If not using the base transport, we allow `undefined` response (as a custom transport may not implement this correctly yet)\n    // If we do use the base transport, we skip if we encountered an non-OK status code\n    if (enforceStatusCode && (!statusCode || statusCode < 200 || statusCode >= 300)) {\n      return;\n    }\n\n    if (isTransactionEvent(event)) {\n      handleTransactionEvent(replay, event);\n      return;\n    }\n\n    handleErrorEvent(replay, event);\n  };\n}\n\nfunction handleTransactionEvent(replay: ReplayContainer, event: TransactionEvent): void {\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 as string);\n  }\n}\n\nfunction handleErrorEvent(replay: ReplayContainer, event: ErrorEvent): void {\n  const replayContext = replay.getContext();\n\n  // Add error to list of errorIds of replay. This is ok to do even if not\n  // sampled because context will get reset at next checkout.\n  // XXX: There is also a race condition where it's possible to capture an\n  // error to Sentry before Replay SDK has loaded, but response returns after\n  // it was loaded, and this gets called.\n  // We limit to max. 100 errors linked\n  if (event.event_id && replayContext.errorIds.size < 100) {\n    replayContext.errorIds.add(event.event_id);\n  }\n\n  // If error event is tagged with replay id it means it was sampled (when in buffer mode)\n  // Need to be very careful that this does not cause an infinite loop\n  if (replay.recordingMode !== 'buffer' || !event.tags || !event.tags.replayId) {\n    return;\n  }\n\n  const { beforeErrorSampling } = replay.getOptions();\n  if (typeof beforeErrorSampling === 'function' && !beforeErrorSampling(event)) {\n    return;\n  }\n\n  setTimeout(() => {\n    // Capture current event buffer as new replay\n    void replay.sendBufferedReplayOrFlush();\n  });\n}\n\nfunction isBaseTransportSend(): boolean {\n  const client = getCurrentHub().getClient();\n  if (!client) {\n    return false;\n  }\n\n  const transport = client.getTransport();\n  if (!transport) {\n    return false;\n  }\n\n  return (\n    (transport.send as Transport['send'] & { __sentry__baseTransport__?: true }).__sentry__baseTransport__ || false\n  );\n}\n","import type { Event, EventHint } from '@sentry/types';\n\n/**\n * Returns true if we think the given event is an error originating inside of rrweb.\n */\nexport function isRrwebError(event: Event, hint: EventHint): boolean {\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","import type { Event } from '@sentry/types';\n\nimport { UNABLE_TO_SEND_REPLAY } from '../../constants';\nimport type { ReplayContainer } from '../../types';\nimport { isSampled } from '../../util/isSampled';\n\n/**\n * Determine if event should be sampled (only applies in buffer mode).\n * When an event is captured by `hanldleGlobalEvent`, when in buffer mode\n * we determine if we want to sample the error or not.\n */\nexport function shouldSampleForBufferEvent(replay: ReplayContainer, event: Event): boolean {\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","import type { Event, EventHint } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport type { ReplayContainer } from '../types';\nimport { isErrorEvent, isReplayEvent, isTransactionEvent } from '../util/eventUtils';\nimport { isRrwebError } from '../util/isRrwebError';\nimport { handleAfterSendEvent } from './handleAfterSendEvent';\nimport { shouldSampleForBufferEvent } from './util/shouldSampleForBufferEvent';\n\n/**\n * Returns a listener to be added to `addGlobalEventProcessor(listener)`.\n */\nexport function handleGlobalEventListener(\n  replay: ReplayContainer,\n  includeAfterSendEventHandling = false,\n): (event: Event, hint: EventHint) => Event | null {\n  const afterSendHandler = includeAfterSendEventHandling ? handleAfterSendEvent(replay) : undefined;\n\n  return Object.assign(\n    (event: Event, hint: EventHint) => {\n      // Do nothing if replay has been disabled\n      if (!replay.isEnabled()) {\n        return event;\n      }\n\n      if (isReplayEvent(event)) {\n        // Replays have separate set of breadcrumbs, do not include breadcrumbs\n        // from core SDK\n        delete event.breadcrumbs;\n        return event;\n      }\n\n      // We only want to handle errors & transactions, nothing else\n      if (!isErrorEvent(event) && !isTransactionEvent(event)) {\n        return event;\n      }\n\n      // Ensure we do not add replay_id if the session is expired\n      const isSessionActive = replay.checkAndHandleExpiredSession();\n      if (!isSessionActive) {\n        return event;\n      }\n\n      // Unless `captureExceptions` is enabled, we want to ignore errors coming from rrweb\n      // As there can be a bunch of stuff going wrong in internals there, that we don't want to bubble up to users\n      if (isRrwebError(event, hint) && !replay.getOptions()._experiments.captureExceptions) {\n        __DEBUG_BUILD__ && logger.log('[Replay] Ignoring error from rrweb internals', event);\n        return null;\n      }\n\n      // When in buffer mode, we decide to sample here.\n      // Later, in `handleAfterSendEvent`, if the replayId is set, we know that we sampled\n      // And convert the buffer session to a full session\n      const isErrorEventSampled = shouldSampleForBufferEvent(replay, event);\n\n      // Tag errors if it has been sampled in buffer mode, or if it is session mode\n      // Only tag transactions if in session mode\n      const shouldTagReplayId = isErrorEventSampled || replay.recordingMode === 'session';\n\n      if (shouldTagReplayId) {\n        event.tags = { ...event.tags, replayId: replay.getSessionId() };\n      }\n\n      // In cases where a custom client is used that does not support the new hooks (yet),\n      // we manually call this hook method here\n      if (afterSendHandler) {\n        // Pretend the error had a 200 response so we always capture it\n        afterSendHandler(event, { statusCode: 200 });\n      }\n\n      return event;\n    },\n    { id: 'Replay' },\n  );\n}\n","import { EventType } from '@sentry-internal/rrweb';\n\nimport type { AddEventResult, AllEntryData, ReplayContainer, ReplayPerformanceEntry } from '../types';\n\n/**\n * Create a \"span\" for each performance entry.\n */\nexport function createPerformanceSpans(\n  replay: ReplayContainer,\n  entries: ReplayPerformanceEntry<AllEntryData>[],\n): Promise<AddEventResult | null>[] {\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","import type { HistoryData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { createPerformanceSpans } from '../util/createPerformanceSpans';\n\ninterface HistoryHandlerData {\n  from: string;\n  to: string;\n}\n\nfunction handleHistory(handlerData: HistoryHandlerData): ReplayPerformanceEntry<HistoryData> {\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 `addInstrumentationHandler('history', listener)`.\n */\nexport function handleHistorySpanListener(replay: ReplayContainer): (handlerData: HistoryHandlerData) => void {\n  return (handlerData: HistoryHandlerData) => {\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","import { getCurrentHub, isSentryRequestUrl } from '@sentry/core';\n\nimport type { ReplayContainer } from '../types';\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 */\nexport function shouldFilterRequest(replay: ReplayContainer, url: string): boolean {\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, getCurrentHub());\n}\n","import type { NetworkRequestData, ReplayContainer, ReplayPerformanceEntry } from '../../types';\nimport { createPerformanceSpans } from '../../util/createPerformanceSpans';\nimport { shouldFilterRequest } from '../../util/shouldFilterRequest';\n\n/** Add a performance entry breadcrumb */\nexport function addNetworkBreadcrumb(\n  replay: ReplayContainer,\n  result: ReplayPerformanceEntry<NetworkRequestData> | null,\n): void {\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","import type { HandlerDataFetch } from '@sentry/types';\n\nimport type { NetworkRequestData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { addNetworkBreadcrumb } from './util/addNetworkBreadcrumb';\n\n/** only exported for tests */\nexport function handleFetch(handlerData: HandlerDataFetch): null | ReplayPerformanceEntry<NetworkRequestData> {\n  const { startTimestamp, endTimestamp, fetchData, response } = handlerData;\n\n  if (!endTimestamp) {\n    return null;\n  }\n\n  // This is only used as a fallback, so we know the body sizes are never set here\n  const { method, url } = fetchData;\n\n  return {\n    type: 'resource.fetch',\n    start: startTimestamp / 1000,\n    end: endTimestamp / 1000,\n    name: url,\n    data: {\n      method,\n      statusCode: response ? (response as Response).status : undefined,\n    },\n  };\n}\n\n/**\n * Returns a listener to be added to `addInstrumentationHandler('fetch', listener)`.\n */\nexport function handleFetchSpanListener(replay: ReplayContainer): (handlerData: HandlerDataFetch) => void {\n  return (handlerData: HandlerDataFetch) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleFetch(handlerData);\n\n    addNetworkBreadcrumb(replay, result);\n  };\n}\n","import type { HandlerDataXhr } from '@sentry/types';\nimport { SENTRY_XHR_DATA_KEY } from '@sentry/utils';\n\nimport type { NetworkRequestData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { addNetworkBreadcrumb } from './util/addNetworkBreadcrumb';\n\n/** only exported for tests */\nexport function handleXhr(handlerData: HandlerDataXhr): ReplayPerformanceEntry<NetworkRequestData> | null {\n  const { startTimestamp, endTimestamp, xhr } = handlerData;\n\n  const sentryXhrData = xhr[SENTRY_XHR_DATA_KEY];\n\n  if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n    return null;\n  }\n\n  // This is only used as a fallback, so we know the body sizes are never set here\n  const { method, url, status_code: statusCode } = sentryXhrData;\n\n  if (url === undefined) {\n    return null;\n  }\n\n  return {\n    type: 'resource.xhr',\n    name: url,\n    start: startTimestamp / 1000,\n    end: endTimestamp / 1000,\n    data: {\n      method,\n      statusCode,\n    },\n  };\n}\n\n/**\n * Returns a listener to be added to `addInstrumentationHandler('xhr', listener)`.\n */\nexport function handleXhrSpanListener(replay: ReplayContainer): (handlerData: HandlerDataXhr) => void {\n  return (handlerData: HandlerDataXhr) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleXhr(handlerData);\n\n    addNetworkBreadcrumb(replay, result);\n  };\n}\n","import type { TextEncoderInternal } from '@sentry/types';\nimport { dropUndefinedKeys, stringMatchesSomePattern } from '@sentry/utils';\n\nimport { NETWORK_BODY_MAX_SIZE, WINDOW } from '../../constants';\nimport type {\n  NetworkBody,\n  NetworkMetaWarning,\n  NetworkRequestData,\n  ReplayNetworkRequestData,\n  ReplayNetworkRequestOrResponse,\n  ReplayPerformanceEntry,\n} from '../../types';\n\n/** Get the size of a body. */\nexport function getBodySize(\n  body: RequestInit['body'],\n  textEncoder: TextEncoder | TextEncoderInternal,\n): number | undefined {\n  if (!body) {\n    return undefined;\n  }\n\n  try {\n    if (typeof body === 'string') {\n      return textEncoder.encode(body).length;\n    }\n\n    if (body instanceof URLSearchParams) {\n      return textEncoder.encode(body.toString()).length;\n    }\n\n    if (body instanceof FormData) {\n      const formDataStr = _serializeFormData(body);\n      return textEncoder.encode(formDataStr).length;\n    }\n\n    if (body instanceof Blob) {\n      return body.size;\n    }\n\n    if (body instanceof ArrayBuffer) {\n      return body.byteLength;\n    }\n\n    // Currently unhandled types: ArrayBufferView, ReadableStream\n  } catch {\n    // just return undefined\n  }\n\n  return undefined;\n}\n\n/** Convert a Content-Length header to number/undefined.  */\nexport function parseContentLengthHeader(header: string | null | undefined): number | undefined {\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. */\nexport function getBodyString(body: unknown): string | undefined {\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  return undefined;\n}\n\n/** Convert ReplayNetworkRequestData to a PerformanceEntry. */\nexport function makeNetworkReplayBreadcrumb(\n  type: string,\n  data: ReplayNetworkRequestData | null,\n): ReplayPerformanceEntry<NetworkRequestData> | null {\n  if (!data) {\n    return null;\n  }\n\n  const { startTimestamp, endTimestamp, url, method, statusCode, request, response } = data;\n\n  const result: ReplayPerformanceEntry<NetworkRequestData> = {\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/** Get either a JSON network body, or a text representation. */\nexport function getNetworkBody(bodyText: string | undefined): NetworkBody | undefined {\n  if (!bodyText) {\n    return;\n  }\n\n  try {\n    return JSON.parse(bodyText);\n  } catch {\n    // return text\n  }\n\n  return bodyText;\n}\n\n/** Build the request or response part of a replay network breadcrumb that was skipped. */\nexport function buildSkippedNetworkRequestOrResponse(bodySize: number | undefined): ReplayNetworkRequestOrResponse {\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. */\nexport function buildNetworkRequestOrResponse(\n  headers: Record<string, string>,\n  bodySize: number | undefined,\n  body: string | undefined,\n): ReplayNetworkRequestOrResponse | undefined {\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: ReplayNetworkRequestOrResponse = {\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 */\nexport function getAllowedHeaders(headers: Record<string, string>, allowedHeaders: string[]): Record<string, string> {\n  return Object.keys(headers).reduce((filteredHeaders: Record<string, string>, key: string) => {\n    const normalizedKey = key.toLowerCase();\n    // Avoid putting empty strings into the headers\n    if (allowedHeaders.includes(normalizedKey) && headers[key]) {\n      filteredHeaders[normalizedKey] = headers[key];\n    }\n    return filteredHeaders;\n  }, {});\n}\n\nfunction _serializeFormData(formData: FormData): string {\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: string | undefined): {\n  body: NetworkBody | undefined;\n  warnings?: NetworkMetaWarning[];\n} {\n  if (!body || typeof body !== 'string') {\n    return {\n      body,\n    };\n  }\n\n  const exceedsSizeLimit = body.length > NETWORK_BODY_MAX_SIZE;\n\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 {\n      // fall back to just send the body as string\n    }\n  }\n\n  return {\n    body,\n  };\n}\n\nfunction _strIsProbablyJson(str: string): boolean {\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. */\nexport function urlMatches(url: string, urls: (string | RegExp)[]): boolean {\n  const fullUrl = getFullUrl(url);\n\n  return stringMatchesSomePattern(fullUrl, urls);\n}\n\n/** exported for tests */\nexport function getFullUrl(url: string, baseURI = WINDOW.document.baseURI): string {\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","import type { Breadcrumb, FetchBreadcrumbData, TextEncoderInternal } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport type {\n  FetchHint,\n  ReplayContainer,\n  ReplayNetworkOptions,\n  ReplayNetworkRequestData,\n  ReplayNetworkRequestOrResponse,\n} from '../../types';\nimport { addNetworkBreadcrumb } from './addNetworkBreadcrumb';\nimport {\n  buildNetworkRequestOrResponse,\n  buildSkippedNetworkRequestOrResponse,\n  getAllowedHeaders,\n  getBodySize,\n  getBodyString,\n  makeNetworkReplayBreadcrumb,\n  parseContentLengthHeader,\n  urlMatches,\n} from './networkUtils';\n\n/**\n * Capture a fetch breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nexport async function captureFetchBreadcrumbToReplay(\n  breadcrumb: Breadcrumb & { data: FetchBreadcrumbData },\n  hint: FetchHint,\n  options: ReplayNetworkOptions & {\n    textEncoder: TextEncoderInternal;\n    replay: ReplayContainer;\n  },\n): Promise<void> {\n  try {\n    const data = await _prepareFetchData(breadcrumb, hint, options);\n\n    // Create a replay performance entry from this breadcrumb\n    const result = makeNetworkReplayBreadcrumb('resource.fetch', data);\n    addNetworkBreadcrumb(options.replay, result);\n  } catch (error) {\n    __DEBUG_BUILD__ && logger.error('[Replay] Failed to capture fetch breadcrumb', error);\n  }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nexport function enrichFetchBreadcrumb(\n  breadcrumb: Breadcrumb & { data: FetchBreadcrumbData },\n  hint: FetchHint,\n  options: { textEncoder: TextEncoderInternal },\n): void {\n  const { input, response } = hint;\n\n  const body = _getFetchRequestArgBody(input);\n  const reqSize = getBodySize(body, options.textEncoder);\n\n  const resSize = response ? parseContentLengthHeader(response.headers.get('content-length')) : undefined;\n\n  if (reqSize !== undefined) {\n    breadcrumb.data.request_body_size = reqSize;\n  }\n  if (resSize !== undefined) {\n    breadcrumb.data.response_body_size = resSize;\n  }\n}\n\nasync function _prepareFetchData(\n  breadcrumb: Breadcrumb & { data: FetchBreadcrumbData },\n  hint: FetchHint,\n  options: ReplayNetworkOptions & {\n    textEncoder: TextEncoderInternal;\n  },\n): Promise<ReplayNetworkRequestData> {\n  const { startTimestamp, endTimestamp } = 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 }: ReplayNetworkOptions,\n  input: FetchHint['input'],\n  requestBodySize?: number,\n): ReplayNetworkRequestOrResponse | undefined {\n  const headers = 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 = getBodyString(requestBody);\n  return buildNetworkRequestOrResponse(headers, requestBodySize, bodyStr);\n}\n\nasync function _getResponseInfo(\n  captureDetails: boolean,\n  {\n    networkCaptureBodies,\n    textEncoder,\n    networkResponseHeaders,\n  }: ReplayNetworkOptions & {\n    textEncoder: TextEncoderInternal;\n  },\n  response: Response,\n  responseBodySize?: number,\n): Promise<ReplayNetworkRequestOrResponse | undefined> {\n  if (!captureDetails && responseBodySize !== undefined) {\n    return buildSkippedNetworkRequestOrResponse(responseBodySize);\n  }\n\n  const headers = getAllHeaders(response.headers, networkResponseHeaders);\n\n  if (!networkCaptureBodies && responseBodySize !== undefined) {\n    return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n  }\n\n  // Only clone the response if we need to\n  try {\n    // We have to clone this, as the body can only be read once\n    const res = response.clone();\n    const bodyText = await _parseFetchBody(res);\n\n    const size =\n      bodyText && bodyText.length && responseBodySize === undefined\n        ? getBodySize(bodyText, textEncoder)\n        : responseBodySize;\n\n    if (!captureDetails) {\n      return buildSkippedNetworkRequestOrResponse(size);\n    }\n\n    if (networkCaptureBodies) {\n      return buildNetworkRequestOrResponse(headers, size, bodyText);\n    }\n\n    return buildNetworkRequestOrResponse(headers, size, undefined);\n  } catch {\n    // fallback\n    return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n  }\n}\n\nasync function _parseFetchBody(response: Response): Promise<string | undefined> {\n  try {\n    return await response.text();\n  } catch {\n    return undefined;\n  }\n}\n\nfunction _getFetchRequestArgBody(fetchArgs: unknown[] = []): RequestInit['body'] | undefined {\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] as RequestInit).body;\n}\n\nfunction getAllHeaders(headers: Headers, allowedHeaders: string[]): Record<string, string> {\n  const allHeaders: Record<string, string> = {};\n\n  allowedHeaders.forEach(header => {\n    if (headers.get(header)) {\n      allHeaders[header] = headers.get(header) as string;\n    }\n  });\n\n  return allHeaders;\n}\n\nfunction getRequestHeaders(fetchArgs: unknown[], allowedHeaders: string[]): Record<string, string> {\n  if (fetchArgs.length === 1 && typeof fetchArgs[0] !== 'string') {\n    return getHeadersFromOptions(fetchArgs[0] as Request | RequestInit, allowedHeaders);\n  }\n\n  if (fetchArgs.length === 2) {\n    return getHeadersFromOptions(fetchArgs[1] as Request | RequestInit, allowedHeaders);\n  }\n\n  return {};\n}\n\nfunction getHeadersFromOptions(\n  input: Request | RequestInit | undefined,\n  allowedHeaders: string[],\n): Record<string, string> {\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","import type { Breadcrumb, TextEncoderInternal, XhrBreadcrumbData } from '@sentry/types';\nimport { logger, SENTRY_XHR_DATA_KEY } from '@sentry/utils';\n\nimport type { ReplayContainer, ReplayNetworkOptions, ReplayNetworkRequestData, XhrHint } from '../../types';\nimport { addNetworkBreadcrumb } from './addNetworkBreadcrumb';\nimport {\n  buildNetworkRequestOrResponse,\n  buildSkippedNetworkRequestOrResponse,\n  getAllowedHeaders,\n  getBodySize,\n  getBodyString,\n  makeNetworkReplayBreadcrumb,\n  parseContentLengthHeader,\n  urlMatches,\n} from './networkUtils';\n\n/**\n * Capture an XHR breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nexport async function captureXhrBreadcrumbToReplay(\n  breadcrumb: Breadcrumb & { data: XhrBreadcrumbData },\n  hint: XhrHint,\n  options: ReplayNetworkOptions & { replay: ReplayContainer },\n): Promise<void> {\n  try {\n    const data = _prepareXhrData(breadcrumb, hint, options);\n\n    // Create a replay performance entry from this breadcrumb\n    const result = makeNetworkReplayBreadcrumb('resource.xhr', data);\n    addNetworkBreadcrumb(options.replay, result);\n  } catch (error) {\n    __DEBUG_BUILD__ && logger.error('[Replay] Failed to capture xhr breadcrumb', error);\n  }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nexport function enrichXhrBreadcrumb(\n  breadcrumb: Breadcrumb & { data: XhrBreadcrumbData },\n  hint: XhrHint,\n  options: { textEncoder: TextEncoderInternal },\n): void {\n  const { xhr, input } = hint;\n\n  const reqSize = getBodySize(input, options.textEncoder);\n  const resSize = xhr.getResponseHeader('content-length')\n    ? parseContentLengthHeader(xhr.getResponseHeader('content-length'))\n    : getBodySize(xhr.response, options.textEncoder);\n\n  if (reqSize !== undefined) {\n    breadcrumb.data.request_body_size = reqSize;\n  }\n  if (resSize !== undefined) {\n    breadcrumb.data.response_body_size = resSize;\n  }\n}\n\nfunction _prepareXhrData(\n  breadcrumb: Breadcrumb & { data: XhrBreadcrumbData },\n  hint: XhrHint,\n  options: ReplayNetworkOptions,\n): ReplayNetworkRequestData | null {\n  const { startTimestamp, endTimestamp, 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 (!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 request = buildNetworkRequestOrResponse(\n    networkRequestHeaders,\n    requestBodySize,\n    options.networkCaptureBodies ? getBodyString(input) : undefined,\n  );\n  const response = buildNetworkRequestOrResponse(\n    networkResponseHeaders,\n    responseBodySize,\n    options.networkCaptureBodies ? hint.xhr.responseText : undefined,\n  );\n\n  return {\n    startTimestamp,\n    endTimestamp,\n    url,\n    method,\n    statusCode,\n    request,\n    response,\n  };\n}\n\nfunction getResponseHeaders(xhr: XMLHttpRequest): Record<string, string> {\n  const headers = xhr.getAllResponseHeaders();\n\n  if (!headers) {\n    return {};\n  }\n\n  return headers.split('\\r\\n').reduce((acc: Record<string, string>, line: string) => {\n    const [key, value] = line.split(': ');\n    acc[key.toLowerCase()] = value;\n    return acc;\n  }, {});\n}\n","import { getCurrentHub } from '@sentry/core';\nimport type {\n  Breadcrumb,\n  BreadcrumbHint,\n  FetchBreadcrumbData,\n  TextEncoderInternal,\n  XhrBreadcrumbData,\n} from '@sentry/types';\nimport { addInstrumentationHandler, logger } from '@sentry/utils';\n\nimport type { FetchHint, ReplayContainer, ReplayNetworkOptions, XhrHint } from '../types';\nimport { handleFetchSpanListener } from './handleFetch';\nimport { handleXhrSpanListener } from './handleXhr';\nimport { captureFetchBreadcrumbToReplay, enrichFetchBreadcrumb } from './util/fetchUtils';\nimport { captureXhrBreadcrumbToReplay, enrichXhrBreadcrumb } from './util/xhrUtils';\n\ninterface ExtendedNetworkBreadcrumbsOptions extends ReplayNetworkOptions {\n  replay: ReplayContainer;\n  textEncoder: TextEncoderInternal;\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 */\nexport function handleNetworkBreadcrumbs(replay: ReplayContainer): void {\n  const client = getCurrentHub().getClient();\n\n  try {\n    const textEncoder = new TextEncoder();\n\n    const {\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders,\n      networkResponseHeaders,\n    } = replay.getOptions();\n\n    const options: ExtendedNetworkBreadcrumbsOptions = {\n      replay,\n      textEncoder,\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders,\n      networkResponseHeaders,\n    };\n\n    if (client && client.on) {\n      client.on('beforeAddBreadcrumb', (breadcrumb, hint) => beforeAddNetworkBreadcrumb(options, breadcrumb, hint));\n    } else {\n      // Fallback behavior\n      addInstrumentationHandler('fetch', handleFetchSpanListener(replay));\n      addInstrumentationHandler('xhr', handleXhrSpanListener(replay));\n    }\n  } catch {\n    // Do nothing\n  }\n}\n\n/** just exported for tests */\nexport function beforeAddNetworkBreadcrumb(\n  options: ExtendedNetworkBreadcrumbsOptions,\n  breadcrumb: Breadcrumb,\n  hint?: BreadcrumbHint,\n): void {\n  if (!breadcrumb.data) {\n    return;\n  }\n\n  try {\n    if (_isXhrBreadcrumb(breadcrumb) && _isXhrHint(hint)) {\n      // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n      // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n      // So any async mutations to it will not be reflected in the final breadcrumb\n      enrichXhrBreadcrumb(breadcrumb, hint, options);\n\n      void captureXhrBreadcrumbToReplay(breadcrumb, hint, options);\n    }\n\n    if (_isFetchBreadcrumb(breadcrumb) && _isFetchHint(hint)) {\n      // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n      // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n      // So any async mutations to it will not be reflected in the final breadcrumb\n      enrichFetchBreadcrumb(breadcrumb, hint, options);\n\n      void captureFetchBreadcrumbToReplay(breadcrumb, hint, options);\n    }\n  } catch (e) {\n    __DEBUG_BUILD__ && logger.warn('Error when enriching network breadcrumb');\n  }\n}\n\nfunction _isXhrBreadcrumb(breadcrumb: Breadcrumb): breadcrumb is Breadcrumb & { data: XhrBreadcrumbData } {\n  return breadcrumb.category === 'xhr';\n}\n\nfunction _isFetchBreadcrumb(breadcrumb: Breadcrumb): breadcrumb is Breadcrumb & { data: FetchBreadcrumbData } {\n  return breadcrumb.category === 'fetch';\n}\n\nfunction _isXhrHint(hint?: BreadcrumbHint): hint is XhrHint {\n  return hint && hint.xhr;\n}\n\nfunction _isFetchHint(hint?: BreadcrumbHint): hint is FetchHint {\n  return hint && hint.response;\n}\n","import type { Breadcrumb, Scope } from '@sentry/types';\nimport { normalize } from '@sentry/utils';\n\nimport { CONSOLE_ARG_MAX_SIZE } from '../constants';\nimport type { ReplayContainer } from '../types';\nimport type { ReplayFrame } from '../types/replayFrame';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\n\nlet _LAST_BREADCRUMB: null | Breadcrumb = null;\n\ntype BreadcrumbWithCategory = Required<Pick<Breadcrumb, 'category'>>;\n\nfunction isBreadcrumbWithCategory(breadcrumb: Breadcrumb): breadcrumb is BreadcrumbWithCategory {\n  return !!breadcrumb.category;\n}\n\nexport const handleScopeListener: (replay: ReplayContainer) => (scope: Scope) => void =\n  (replay: ReplayContainer) =>\n  (scope: Scope): void => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleScope(scope);\n\n    if (!result) {\n      return;\n    }\n\n    addBreadcrumbEvent(replay, result);\n  };\n\n/**\n * An event handler to handle scope changes.\n */\nexport function handleScope(scope: Scope): Breadcrumb | null {\n  // TODO (v8): Remove this guard. This was put in place because we introduced\n  // Scope.getLastBreadcrumb mid-v7 which caused incompatibilities with older SDKs.\n  // For now, we'll just return null if the method doesn't exist but we should eventually\n  // get rid of this guard.\n  const newBreadcrumb = scope.getLastBreadcrumb && scope.getLastBreadcrumb();\n\n  // Listener can be called when breadcrumbs have not changed, so we store the\n  // reference to the last crumb and only return a crumb if it has changed\n  if (_LAST_BREADCRUMB === newBreadcrumb || !newBreadcrumb) {\n    return null;\n  }\n\n  _LAST_BREADCRUMB = newBreadcrumb;\n\n  if (\n    !isBreadcrumbWithCategory(newBreadcrumb) ||\n    ['fetch', 'xhr', 'sentry.event', 'sentry.transaction'].includes(newBreadcrumb.category) ||\n    newBreadcrumb.category.startsWith('ui.')\n  ) {\n    return null;\n  }\n\n  if (newBreadcrumb.category === 'console') {\n    return normalizeConsoleBreadcrumb(newBreadcrumb);\n  }\n\n  return createBreadcrumb(newBreadcrumb);\n}\n\n/** exported for tests only */\nexport function normalizeConsoleBreadcrumb(\n  breadcrumb: Omit<Breadcrumb, 'category'> & BreadcrumbWithCategory,\n): ReplayFrame {\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 {\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","import type { BaseClient } from '@sentry/core';\nimport { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';\nimport type { Client, DynamicSamplingContext } from '@sentry/types';\nimport { addInstrumentationHandler } from '@sentry/utils';\n\nimport { handleAfterSendEvent } from '../coreHandlers/handleAfterSendEvent';\nimport { handleDomListener } from '../coreHandlers/handleDom';\nimport { handleGlobalEventListener } from '../coreHandlers/handleGlobalEvent';\nimport { handleHistorySpanListener } from '../coreHandlers/handleHistory';\nimport { handleNetworkBreadcrumbs } from '../coreHandlers/handleNetworkBreadcrumbs';\nimport { handleScopeListener } from '../coreHandlers/handleScope';\nimport type { ReplayContainer } from '../types';\n\n/**\n * Add global listeners that cannot be removed.\n */\nexport function addGlobalListeners(replay: ReplayContainer): void {\n  // Listeners from core SDK //\n  const scope = getCurrentHub().getScope();\n  const client = getCurrentHub().getClient();\n\n  scope.addScopeListener(handleScopeListener(replay));\n  addInstrumentationHandler('dom', handleDomListener(replay));\n  addInstrumentationHandler('history', handleHistorySpanListener(replay));\n  handleNetworkBreadcrumbs(replay);\n\n  // Tag all (non replay) events that get sent to Sentry with the current\n  // replay ID so that we can reference them later in the UI\n  const eventProcessor = handleGlobalEventListener(replay, !hasHooks(client));\n  if (client && client.addEventProcessor) {\n    client.addEventProcessor(eventProcessor);\n  } else {\n    addGlobalEventProcessor(eventProcessor);\n  }\n\n  // If a custom client has no hooks yet, we continue to use the \"old\" implementation\n  if (hasHooks(client)) {\n    client.on('afterSendEvent', handleAfterSendEvent(replay));\n    client.on('createDsc', (dsc: DynamicSamplingContext) => {\n      const replayId = replay.getSessionId();\n      // We do not want to set the DSC when in buffer mode, as that means the replay has not been sent (yet)\n      if (replayId && replay.isEnabled() && replay.recordingMode === 'session') {\n        // Ensure to check that the session is still active - it could have expired in the meanwhile\n        const isSessionActive = replay.checkAndHandleExpiredSession();\n        if (isSessionActive) {\n          dsc.replay_id = replayId;\n        }\n      }\n    });\n\n    client.on('startTransaction', transaction => {\n      replay.lastTransaction = transaction;\n    });\n\n    // We may be missing the initial startTransaction due to timing issues,\n    // so we capture it on finish again.\n    client.on('finishTransaction', transaction => {\n      replay.lastTransaction = transaction;\n    });\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction hasHooks(client: Client | undefined): client is BaseClient<any> {\n  return !!(client && client.on);\n}\n","import { WINDOW } from '../constants';\nimport type { AddEventResult, MemoryData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { createPerformanceSpans } from './createPerformanceSpans';\n\ntype ReplayMemoryEntry = ReplayPerformanceEntry<MemoryData> & { data: { memory: MemoryInfo } };\n\ninterface MemoryInfo {\n  jsHeapSizeLimit: number;\n  totalJSHeapSize: number;\n  usedJSHeapSize: number;\n}\n\n/**\n * Create a \"span\" for the total amount of memory being used by JS objects\n * (including v8 internal objects).\n */\nexport async function addMemoryEntry(replay: ReplayContainer): Promise<Array<AddEventResult | null>> {\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: MemoryInfo): ReplayMemoryEntry {\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","type DebouncedCallback = {\n  (): void | unknown;\n  flush: () => void | unknown;\n  cancel: () => void;\n};\ntype CallbackFunction = () => unknown;\ntype DebounceOptions = { maxWait?: number };\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 */\nexport function debounce(func: CallbackFunction, wait: number, options?: DebounceOptions): DebouncedCallback {\n  let callbackReturnValue: unknown;\n\n  let timerId: ReturnType<typeof setTimeout> | undefined;\n  let maxTimerId: ReturnType<typeof setTimeout> | undefined;\n\n  const maxWait = options && options.maxWait ? Math.max(options.maxWait, wait) : 0;\n\n  function invokeFunc(): unknown {\n    cancelTimers();\n    callbackReturnValue = func();\n    return callbackReturnValue;\n  }\n\n  function cancelTimers(): void {\n    timerId !== undefined && clearTimeout(timerId);\n    maxTimerId !== undefined && clearTimeout(maxTimerId);\n    timerId = maxTimerId = undefined;\n  }\n\n  function flush(): unknown {\n    if (timerId !== undefined || maxTimerId !== undefined) {\n      return invokeFunc();\n    }\n    return callbackReturnValue;\n  }\n\n  function debounced(): unknown {\n    if (timerId) {\n      clearTimeout(timerId);\n    }\n    timerId = setTimeout(invokeFunc, wait);\n\n    if (maxWait && maxTimerId === undefined) {\n      maxTimerId = setTimeout(invokeFunc, maxWait);\n    }\n\n    return callbackReturnValue;\n  }\n\n  debounced.cancel = cancelTimers;\n  debounced.flush = flush;\n  return debounced;\n}\n","import { EventType } from '@sentry-internal/rrweb';\nimport { logger } from '@sentry/utils';\n\nimport { updateClickDetectorForRecordingEvent } from '../coreHandlers/handleClick';\nimport { saveSession } from '../session/saveSession';\nimport type { RecordingEvent, ReplayContainer, ReplayOptionFrameEvent } from '../types';\nimport { addEventSync } from './addEvent';\nimport { logInfo } from './log';\n\ntype RecordingEmitCallback = (event: RecordingEvent, isCheckout?: boolean) => void;\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 */\nexport function getHandleRecordingEmit(replay: ReplayContainer): RecordingEmitCallback {\n  let hadFirstEvent = false;\n\n  return (event: RecordingEvent, _isCheckout?: boolean) => {\n    // If this is false, it means session is expired, create and a new session and wait for checkout\n    if (!replay.checkAndHandleExpiredSession()) {\n      __DEBUG_BUILD__ && logger.warn('[Replay] Received replay event after session expired.');\n\n      return;\n    }\n\n    // `_isCheckout` is only set when the checkout is due to `checkoutEveryNms`\n    // We also want to treat the first event as a checkout, so we handle this specifically here\n    const isCheckout = _isCheckout || !hadFirstEvent;\n    hadFirstEvent = true;\n\n    if (replay.clickDetector) {\n      updateClickDetectorForRecordingEvent(replay.clickDetector, event);\n    }\n\n    // The handler returns `true` if we do not want to trigger debounced flush, `false` if we want to debounce flush.\n    replay.addUpdate(() => {\n      // The session is always started immediately on pageload/init, but for\n      // error-only replays, it should reflect the most recent checkout\n      // when an error occurs. Clear any state that happens before this current\n      // checkout. This needs to happen before `addEvent()` which updates state\n      // dependent on this reset.\n      if (replay.recordingMode === 'buffer' && isCheckout) {\n        replay.setInitialState();\n      }\n\n      // If the event is not added (e.g. due to being paused, disabled, or out of the max replay duration),\n      // Skip all further steps\n      if (!addEventSync(replay, event, isCheckout)) {\n        // Return true to skip scheduling a debounced flush\n        return true;\n      }\n\n      // Different behavior for full snapshots (type=2), ignore other event types\n      // See https://github.com/rrweb-io/rrweb/blob/d8f9290ca496712aa1e7d472549480c4e7876594/packages/rrweb/src/types.ts#L16\n      if (!isCheckout) {\n        return false;\n      }\n\n      // Additionally, create a meta event that will capture certain SDK settings.\n      // In order to handle buffer mode, this needs to either be done when we\n      // receive checkout events or at flush time.\n      //\n      // `isCheckout` is always true, but want to be explicit that it should\n      // only be added for checkouts\n      addSettingsEvent(replay, isCheckout);\n\n      // If there is a previousSessionId after a full snapshot occurs, then\n      // the replay session was started due to session expiration. The new session\n      // is started before triggering a new checkout and contains the id\n      // of the previous session. Do not immediately flush in this case\n      // to avoid capturing only the checkout and instead the replay will\n      // be captured if they perform any follow-up actions.\n      if (replay.session && replay.session.previousSessionId) {\n        return true;\n      }\n\n      // When in buffer mode, make sure we adjust the session started date to the current earliest event of the buffer\n      // this should usually be the timestamp of the checkout event, but to be safe...\n      if (replay.recordingMode === 'buffer' && replay.session && replay.eventBuffer) {\n        const earliestEvent = replay.eventBuffer.getEarliestTimestamp();\n        if (earliestEvent) {\n          logInfo(\n            `[Replay] Updating session start time to earliest event in buffer to ${new Date(earliestEvent)}`,\n            replay.getOptions()._experiments.traceInternals,\n          );\n\n          replay.session.started = earliestEvent;\n\n          if (replay.getOptions().stickySession) {\n            saveSession(replay.session);\n          }\n        }\n      }\n\n      if (replay.recordingMode === 'session') {\n        // If the full snapshot is due to an initial load, we will not have\n        // a previous session ID. In this case, we want to buffer events\n        // for a set amount of time before flushing. This can help avoid\n        // capturing replays of users that immediately close the window.\n        void replay.flush();\n      }\n\n      return true;\n    });\n  };\n}\n\n/**\n * Exported for tests\n */\nexport function createOptionsEvent(replay: ReplayContainer): ReplayOptionFrameEvent {\n  const options = replay.getOptions();\n  return {\n    type: EventType.Custom,\n    timestamp: Date.now(),\n    data: {\n      tag: 'options',\n      payload: {\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: ReplayContainer, isCheckout?: boolean): void {\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","import type { DsnComponents, ReplayEnvelope, ReplayEvent, ReplayRecordingData } from '@sentry/types';\nimport { createEnvelope, createEventEnvelopeHeaders, getSdkMetadataForEnvelopeHeader } from '@sentry/utils';\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 */\nexport function createReplayEnvelope(\n  replayEvent: ReplayEvent,\n  recordingData: ReplayRecordingData,\n  dsn: DsnComponents,\n  tunnel?: string,\n): ReplayEnvelope {\n  return createEnvelope<ReplayEnvelope>(\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","import type { ReplayRecordingData } from '@sentry/types';\n\n/**\n * Prepare the recording data ready to be sent.\n */\nexport function prepareRecordingData({\n  recordingData,\n  headers,\n}: {\n  recordingData: ReplayRecordingData;\n  headers: Record<string, unknown>;\n}): ReplayRecordingData {\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","import type { Scope } from '@sentry/core';\nimport { prepareEvent } from '@sentry/core';\nimport type { IntegrationIndex } from '@sentry/core/build/types/integration';\nimport type { Client, EventHint, ReplayEvent } from '@sentry/types';\n\n/**\n * Prepare a replay event & enrich it with the SDK metadata.\n */\nexport async function prepareReplayEvent({\n  client,\n  scope,\n  replayId: event_id,\n  event,\n}: {\n  client: Client & { _integrations?: IntegrationIndex };\n  scope: Scope;\n  replayId: string;\n  event: ReplayEvent;\n}): Promise<ReplayEvent | null> {\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: EventHint = { event_id, integrations };\n\n  if (client.emit) {\n    client.emit('preprocessEvent', event, eventHint);\n  }\n\n  const preparedEvent = (await prepareEvent(\n    client.getOptions(),\n    event,\n    eventHint,\n    scope,\n    client,\n  )) as ReplayEvent | null;\n\n  // If e.g. a global event processor returned null\n  if (!preparedEvent) {\n    return null;\n  }\n\n  // This normally happens in browser client \"_prepareEvent\"\n  // but since we do not use this private method from the client, but rather the plain import\n  // we need to do this manually.\n  preparedEvent.platform = preparedEvent.platform || 'javascript';\n\n  // extract the SDK name because `client._prepareEvent` doesn't add it to the event\n  const metadata = client.getSdkMetadata && client.getSdkMetadata();\n  const { name, version } = (metadata && metadata.sdk) || {};\n\n  preparedEvent.sdk = {\n    ...preparedEvent.sdk,\n    name: name || 'sentry.javascript.unknown',\n    version: version || '0.0.0',\n  };\n\n  return preparedEvent;\n}\n","import { getCurrentHub } from '@sentry/core';\nimport type { ReplayEvent, TransportMakeRequestResponse } from '@sentry/types';\nimport type { RateLimits } from '@sentry/utils';\nimport { isRateLimited, updateRateLimits } from '@sentry/utils';\n\nimport { REPLAY_EVENT_NAME, UNABLE_TO_SEND_REPLAY } from '../constants';\nimport type { SendReplayData } from '../types';\nimport { createReplayEnvelope } from './createReplayEnvelope';\nimport { logInfo } from './log';\nimport { prepareRecordingData } from './prepareRecordingData';\nimport { prepareReplayEvent } from './prepareReplayEvent';\n\n/**\n * Send replay attachment using `fetch()`\n */\nexport async function sendReplayRequest({\n  recordingData,\n  replayId,\n  segmentId: segment_id,\n  eventContext,\n  timestamp,\n  session,\n}: SendReplayData): Promise<void | TransportMakeRequestResponse> {\n  const preparedRecordingData = prepareRecordingData({\n    recordingData,\n    headers: {\n      segment_id,\n    },\n  });\n\n  const { urls, errorIds, traceIds, initialTimestamp } = eventContext;\n\n  const hub = getCurrentHub();\n  const client = hub.getClient();\n  const scope = hub.getScope();\n  const transport = client && client.getTransport();\n  const dsn = client && client.getDsn();\n\n  if (!client || !transport || !dsn || !session.sampled) {\n    return;\n  }\n\n  const baseEvent: ReplayEvent = {\n    type: REPLAY_EVENT_NAME,\n    replay_start_timestamp: initialTimestamp / 1000,\n    timestamp: timestamp / 1000,\n    error_ids: errorIds,\n    trace_ids: traceIds,\n    urls,\n    replay_id: replayId,\n    segment_id,\n    replay_type: session.sampled,\n  };\n\n  const replayEvent = await prepareReplayEvent({ scope, client, replayId, event: baseEvent });\n\n  if (!replayEvent) {\n    // Taken from baseclient's `_processEvent` method, where this is handled for errors/transactions\n    client.recordDroppedEvent('event_processor', 'replay', baseEvent);\n    logInfo('An event processor returned `null`, will not send event.');\n    return;\n  }\n\n  /*\n  For reference, the fully built event looks something like this:\n  {\n      \"type\": \"replay_event\",\n      \"timestamp\": 1670837008.634,\n      \"error_ids\": [\n          \"errorId\"\n      ],\n      \"trace_ids\": [\n          \"traceId\"\n      ],\n      \"urls\": [\n          \"https://example.com\"\n      ],\n      \"replay_id\": \"eventId\",\n      \"segment_id\": 3,\n      \"replay_type\": \"error\",\n      \"platform\": \"javascript\",\n      \"event_id\": \"eventId\",\n      \"environment\": \"production\",\n      \"sdk\": {\n          \"integrations\": [\n              \"BrowserTracing\",\n              \"Replay\"\n          ],\n          \"name\": \"sentry.javascript.browser\",\n          \"version\": \"7.25.0\"\n      },\n      \"sdkProcessingMetadata\": {},\n      \"contexts\": {\n      },\n  }\n  */\n\n  // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n  // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n  // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n  // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n  delete replayEvent.sdkProcessingMetadata;\n\n  const envelope = createReplayEnvelope(replayEvent, preparedRecordingData, dsn, client.getOptions().tunnel);\n\n  let response: void | TransportMakeRequestResponse;\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 {\n      // nothing to do\n    }\n    throw error;\n  }\n\n  // TODO (v8): we can remove this guard once transport.send's type signature doesn't include void anymore\n  if (!response) {\n    return response;\n  }\n\n  // If the status code is invalid, we want to immediately stop & not retry\n  if (typeof response.statusCode === 'number' && (response.statusCode < 200 || response.statusCode >= 300)) {\n    throw new TransportStatusCodeError(response.statusCode);\n  }\n\n  const rateLimits = updateRateLimits({}, response);\n  if (isRateLimited(rateLimits, 'replay')) {\n    throw new RateLimitError(rateLimits);\n  }\n\n  return response;\n}\n\n/**\n * This error indicates that the transport returned an invalid status code.\n */\nexport class TransportStatusCodeError extends Error {\n  public constructor(statusCode: number) {\n    super(`Transport returned status code ${statusCode}`);\n  }\n}\n\n/**\n * This error indicates that we hit a rate limit API error.\n */\nexport class RateLimitError extends Error {\n  public rateLimits: RateLimits;\n\n  public constructor(rateLimits: RateLimits) {\n    super('Rate limit hit');\n    this.rateLimits = rateLimits;\n  }\n}\n","import { captureException, setContext } from '@sentry/core';\n\nimport { RETRY_BASE_INTERVAL, RETRY_MAX_COUNT, UNABLE_TO_SEND_REPLAY } from '../constants';\nimport type { SendReplayData } from '../types';\nimport { RateLimitError, sendReplayRequest, TransportStatusCodeError } from './sendReplayRequest';\n\n/**\n * Finalize and send the current replay event to Sentry\n */\nexport async function sendReplay(\n  replayData: SendReplayData,\n  retryConfig = {\n    count: 0,\n    interval: RETRY_BASE_INTERVAL,\n  },\n): Promise<unknown> {\n  const { recordingData, options } = replayData;\n\n  // short circuit if there's no events to upload (this shouldn't happen as _runFlush makes this check)\n  if (!recordingData.length) {\n    return;\n  }\n\n  try {\n    await sendReplayRequest(replayData);\n    return true;\n  } catch (err) {\n    if (err instanceof TransportStatusCodeError || err instanceof RateLimitError) {\n      throw err;\n    }\n\n    // Capture error for every failed replay\n    setContext('Replays', {\n      _retryCount: retryConfig.count,\n    });\n\n    if (__DEBUG_BUILD__ && options._experiments && options._experiments.captureExceptions) {\n      captureException(err);\n    }\n\n    // If an error happened here, it's likely that uploading the attachment\n    // failed, we'll can retry with the same events payload\n    if (retryConfig.count >= RETRY_MAX_COUNT) {\n      const error = new Error(`${UNABLE_TO_SEND_REPLAY} - max retries exceeded`);\n\n      try {\n        // In case browsers don't allow this property to be writable\n        // @ts-expect-error This needs lib es2022 and newer\n        error.cause = err;\n      } catch {\n        // nothing to do\n      }\n\n      throw error;\n    }\n\n    // will retry in intervals of 5, 10, 30\n    retryConfig.interval *= ++retryConfig.count;\n\n    return new Promise((resolve, reject) => {\n      setTimeout(async () => {\n        try {\n          await sendReplay(replayData, retryConfig);\n          resolve(true);\n        } catch (err) {\n          reject(err);\n        }\n      }, retryConfig.interval);\n    });\n  }\n}\n","export const THROTTLED = '__THROTTLED';\nexport const 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\nexport function throttle<T extends (...rest: any[]) => any>(\n  fn: T,\n  maxCount: number,\n  durationSeconds: number,\n): (...rest: Parameters<T>) => ReturnType<T> | typeof THROTTLED | typeof SKIPPED {\n  const counter = new Map<number, number>();\n\n  const _cleanup = (now: number): void => {\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 = (): number => {\n    return [...counter.values()].reduce((a, b) => a + b, 0);\n  };\n\n  let isThrottled = false;\n\n  return (...rest: Parameters<T>): ReturnType<T> | typeof THROTTLED | typeof SKIPPED => {\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","/* eslint-disable max-lines */ // TODO: We might want to split this file up\nimport { EventType, record } from '@sentry-internal/rrweb';\nimport { captureException, getCurrentHub } from '@sentry/core';\nimport type { ReplayRecordingMode, Transaction } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport {\n  BUFFER_CHECKOUT_TIME,\n  SESSION_IDLE_EXPIRE_DURATION,\n  SESSION_IDLE_PAUSE_DURATION,\n  SLOW_CLICK_SCROLL_TIMEOUT,\n  SLOW_CLICK_THRESHOLD,\n  WINDOW,\n} from './constants';\nimport { ClickDetector } from './coreHandlers/handleClick';\nimport { handleKeyboardEvent } from './coreHandlers/handleKeyboardEvent';\nimport { setupPerformanceObserver } from './coreHandlers/performanceObserver';\nimport { createEventBuffer } from './eventBuffer';\nimport { clearSession } from './session/clearSession';\nimport { loadOrCreateSession } from './session/loadOrCreateSession';\nimport { saveSession } from './session/saveSession';\nimport { shouldRefreshSession } from './session/shouldRefreshSession';\nimport type {\n  AddEventResult,\n  AddUpdateCallback,\n  AllPerformanceEntry,\n  AllPerformanceEntryData,\n  EventBuffer,\n  InternalEventContext,\n  PopEventContext,\n  RecordingEvent,\n  RecordingOptions,\n  ReplayBreadcrumbFrame,\n  ReplayContainer as ReplayContainerInterface,\n  ReplayPerformanceEntry,\n  ReplayPluginOptions,\n  SendBufferedReplayOptions,\n  Session,\n  SlowClickConfig,\n  Timeouts,\n} from './types';\nimport { ReplayEventTypeCustom } from './types';\nimport { addEvent, addEventSync } from './util/addEvent';\nimport { addGlobalListeners } from './util/addGlobalListeners';\nimport { addMemoryEntry } from './util/addMemoryEntry';\nimport { createBreadcrumb } from './util/createBreadcrumb';\nimport { createPerformanceEntries } from './util/createPerformanceEntries';\nimport { createPerformanceSpans } from './util/createPerformanceSpans';\nimport { debounce } from './util/debounce';\nimport { getHandleRecordingEmit } from './util/handleRecordingEmit';\nimport { isExpired } from './util/isExpired';\nimport { isSessionExpired } from './util/isSessionExpired';\nimport { logInfo, logInfoNextTick } from './util/log';\nimport { sendReplay } from './util/sendReplay';\nimport type { SKIPPED } from './util/throttle';\nimport { throttle, THROTTLED } from './util/throttle';\n\n/**\n * The main replay container class, which holds all the state and methods for recording and sending replays.\n */\nexport class ReplayContainer implements ReplayContainerInterface {\n  public eventBuffer: EventBuffer | null;\n\n  public performanceEntries: AllPerformanceEntry[];\n\n  public replayPerformanceEntries: ReplayPerformanceEntry<AllPerformanceEntryData>[];\n\n  public session: Session | undefined;\n\n  public clickDetector: ClickDetector | undefined;\n\n  /**\n   * Recording can happen in one of three modes:\n   *   - session: Record the whole session, sending it continuously\n   *   - buffer: Always keep the last 60s of recording, requires:\n   *     - having replaysOnErrorSampleRate > 0 to capture replay when an error occurs\n   *     - or calling `flush()` to send the replay\n   */\n  public recordingMode: ReplayRecordingMode;\n\n  /**\n   * The current or last active transcation.\n   * This is only available when performance is enabled.\n   */\n  public lastTransaction?: Transaction;\n\n  /**\n   * These are here so we can overwrite them in tests etc.\n   * @hidden\n   */\n  public readonly timeouts: Timeouts;\n\n  private _throttledAddEvent: (\n    event: RecordingEvent,\n    isCheckout?: boolean,\n  ) => typeof THROTTLED | typeof SKIPPED | Promise<AddEventResult | null>;\n\n  /**\n   * Options to pass to `rrweb.record()`\n   */\n  private readonly _recordingOptions: RecordingOptions;\n\n  private readonly _options: ReplayPluginOptions;\n\n  private _performanceCleanupCallback?: () => void;\n\n  private _debouncedFlush: ReturnType<typeof debounce>;\n  private _flushLock: Promise<unknown> | undefined;\n\n  /**\n   * Timestamp of the last user activity. This lives across sessions.\n   */\n  private _lastActivity: number;\n\n  /**\n   * Is the integration currently active?\n   */\n  private _isEnabled: boolean;\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  private _isPaused: boolean;\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  private _hasInitializedCoreListeners: boolean;\n\n  /**\n   * Function to stop recording\n   */\n  private _stopRecording: ReturnType<typeof record> | undefined;\n\n  private _context: InternalEventContext;\n\n  public constructor({\n    options,\n    recordingOptions,\n  }: {\n    options: ReplayPluginOptions;\n    recordingOptions: RecordingOptions;\n  }) {\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    } as const;\n    this._lastActivity = Date.now();\n    this._isEnabled = false;\n    this._isPaused = false;\n    this._hasInitializedCoreListeners = false;\n    this._context = {\n      errorIds: new Set(),\n      traceIds: new Set(),\n      urls: [],\n      initialTimestamp: Date.now(),\n      initialUrl: '',\n    };\n\n    this._recordingOptions = recordingOptions;\n    this._options = options;\n\n    this._debouncedFlush = debounce(() => this._flush(), this._options.flushMinDelay, {\n      maxWait: this._options.flushMaxDelay,\n    });\n\n    this._throttledAddEvent = throttle(\n      (event: RecordingEvent, isCheckout?: boolean) => 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: SlowClickConfig | undefined = slowClickTimeout\n      ? {\n          threshold: Math.min(SLOW_CLICK_THRESHOLD, slowClickTimeout),\n          timeout: slowClickTimeout,\n          scrollTimeout: SLOW_CLICK_SCROLL_TIMEOUT,\n          ignoreSelector: slowClickIgnoreSelectors ? slowClickIgnoreSelectors.join(',') : '',\n        }\n      : undefined;\n\n    if (slowClickConfig) {\n      this.clickDetector = new ClickDetector(this, slowClickConfig);\n    }\n  }\n\n  /** Get the event context. */\n  public getContext(): InternalEventContext {\n    return this._context;\n  }\n\n  /** If recording is currently enabled. */\n  public isEnabled(): boolean {\n    return this._isEnabled;\n  }\n\n  /** If recording is currently paused. */\n  public isPaused(): boolean {\n    return this._isPaused;\n  }\n\n  /** Get the replay integration options. */\n  public getOptions(): ReplayPluginOptions {\n    return this._options;\n  }\n\n  /**\n   * Initializes the plugin based on sampling configuration. Should not be\n   * called outside of constructor.\n   */\n  public initializeSampling(previousSessionId?: string): void {\n    const { errorSampleRate, sessionSampleRate } = this._options;\n\n    // If neither sample rate is > 0, then do nothing - user will need to call one of\n    // `start()` or `startBuffering` themselves.\n    if (errorSampleRate <= 0 && sessionSampleRate <= 0) {\n      return;\n    }\n\n    // Otherwise if there is _any_ sample rate set, try to load an existing\n    // session, or create a new one.\n    this._initializeSessionForSampling(previousSessionId);\n\n    if (!this.session) {\n      // This should not happen, something wrong has occurred\n      this._handleException(new Error('Unable to initialize and create session'));\n      return;\n    }\n\n    if (this.session.sampled === false) {\n      // This should only occur if `errorSampleRate` is 0 and was unsampled for\n      // session-based replay. In this case there is nothing to do.\n      return;\n    }\n\n    // If segmentId > 0, it means we've previously already captured this session\n    // In this case, we still want to continue in `session` recording mode\n    this.recordingMode = this.session.sampled === 'buffer' && this.session.segmentId === 0 ? 'buffer' : 'session';\n\n    logInfoNextTick(\n      `[Replay] Starting replay in ${this.recordingMode} mode`,\n      this._options._experiments.traceInternals,\n    );\n\n    this._initializeRecording();\n  }\n\n  /**\n   * Start a replay regardless of sampling rate. Calling this will always\n   * create a new session. Will throw an error if replay is already in progress.\n   *\n   * Creates or loads a session, attaches listeners to varying events (DOM,\n   * _performanceObserver, Recording, Sentry SDK, etc)\n   */\n  public start(): void {\n    if (this._isEnabled && this.recordingMode === 'session') {\n      throw new Error('Replay recording is already in progress');\n    }\n\n    if (this._isEnabled && this.recordingMode === 'buffer') {\n      throw new Error('Replay buffering is in progress, call `flush()` to save the replay');\n    }\n\n    logInfoNextTick('[Replay] Starting replay in session mode', this._options._experiments.traceInternals);\n\n    const session = loadOrCreateSession(\n      {\n        maxReplayDuration: this._options.maxReplayDuration,\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        traceInternals: this._options._experiments.traceInternals,\n      },\n      {\n        stickySession: this._options.stickySession,\n        // This is intentional: create a new session-based replay when calling `start()`\n        sessionSampleRate: 1,\n        allowBuffering: false,\n      },\n    );\n\n    this.session = session;\n\n    this._initializeRecording();\n  }\n\n  /**\n   * Start replay buffering. Buffers until `flush()` is called or, if\n   * `replaysOnErrorSampleRate` > 0, an error occurs.\n   */\n  public startBuffering(): void {\n    if (this._isEnabled) {\n      throw new Error('Replay recording is already in progress');\n    }\n\n    logInfoNextTick('[Replay] Starting replay in buffer mode', this._options._experiments.traceInternals);\n\n    const session = loadOrCreateSession(\n      {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n        traceInternals: this._options._experiments.traceInternals,\n      },\n      {\n        stickySession: this._options.stickySession,\n        sessionSampleRate: 0,\n        allowBuffering: true,\n      },\n    );\n\n    this.session = session;\n\n    this.recordingMode = 'buffer';\n    this._initializeRecording();\n  }\n\n  /**\n   * Start recording.\n   *\n   * Note that this will cause a new DOM checkout\n   */\n  public startRecording(): void {\n    try {\n      this._stopRecording = record({\n        ...this._recordingOptions,\n        // When running in error sampling mode, we need to overwrite `checkoutEveryNms`\n        // Without this, it would record forever, until an error happens, which we don't want\n        // instead, we'll always keep the last 60 seconds of replay before an error happened\n        ...(this.recordingMode === 'buffer' && { checkoutEveryNms: BUFFER_CHECKOUT_TIME }),\n        emit: getHandleRecordingEmit(this),\n        onMutation: this._onMutationHandler,\n      });\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  public stopRecording(): boolean {\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  public async stop({ forceFlush = false, reason }: { forceFlush?: boolean; reason?: string } = {}): Promise<void> {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    // We can't move `_isEnabled` after awaiting a flush, otherwise we can\n    // enter into an infinite loop when `stop()` is called while flushing.\n    this._isEnabled = false;\n\n    try {\n      logInfo(\n        `[Replay] Stopping Replay${reason ? ` triggered by ${reason}` : ''}`,\n        this._options._experiments.traceInternals,\n      );\n\n      this._removeListeners();\n      this.stopRecording();\n\n      this._debouncedFlush.cancel();\n      // See comment above re: `_isEnabled`, we \"force\" a flush, ignoring the\n      // `_isEnabled` state of the plugin since it was disabled above.\n      if (forceFlush) {\n        await this._flush({ force: true });\n      }\n\n      // After flush, destroy event buffer\n      this.eventBuffer && this.eventBuffer.destroy();\n      this.eventBuffer = null;\n\n      // Clear session from session storage, note this means if a new session\n      // is started after, it will not have `previousSessionId`\n      clearSession(this);\n    } catch (err) {\n      this._handleException(err);\n    }\n  }\n\n  /**\n   * Pause some replay functionality. See comments for `_isPaused`.\n   * This differs from stop as this only stops DOM recording, it is\n   * not as thorough of a shutdown as `stop()`.\n   */\n  public pause(): void {\n    if (this._isPaused) {\n      return;\n    }\n\n    this._isPaused = true;\n    this.stopRecording();\n\n    logInfo('[Replay] Pausing replay', this._options._experiments.traceInternals);\n  }\n\n  /**\n   * Resumes recording, see notes for `pause().\n   *\n   * Note that calling `startRecording()` here will cause a\n   * new DOM checkout.`\n   */\n  public resume(): void {\n    if (!this._isPaused || !this._checkSession()) {\n      return;\n    }\n\n    this._isPaused = false;\n    this.startRecording();\n\n    logInfo('[Replay] Resuming replay', this._options._experiments.traceInternals);\n  }\n\n  /**\n   * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n   * Unless `continueRecording` is false, the replay will continue to record and\n   * behave as a \"session\"-based replay.\n   *\n   * Otherwise, queue up a flush.\n   */\n  public async sendBufferedReplayOrFlush({ continueRecording = true }: SendBufferedReplayOptions = {}): Promise<void> {\n    if (this.recordingMode === 'session') {\n      return this.flushImmediate();\n    }\n\n    const activityTime = Date.now();\n\n    logInfo('[Replay] Converting buffer to session', this._options._experiments.traceInternals);\n\n    // Allow flush to complete before resuming as a session recording, otherwise\n    // the checkout from `startRecording` may be included in the payload.\n    // Prefer to keep the error replay as a separate (and smaller) segment\n    // than the session replay.\n    await this.flushImmediate();\n\n    const hasStoppedRecording = this.stopRecording();\n\n    if (!continueRecording || !hasStoppedRecording) {\n      return;\n    }\n\n    // To avoid race conditions where this is called multiple times, we check here again that we are still buffering\n    if ((this.recordingMode as ReplayRecordingMode) === '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   * `<flushMinDelay>` milliseconds have elapsed since the last event\n   * *OR* if `<flushMaxDelay>` 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  public addUpdate(cb: AddUpdateCallback): void {\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  public triggerUserActivity(): void {\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  public updateUserActivity(): void {\n    this._updateUserActivity();\n    this._updateSessionActivity();\n  }\n\n  /**\n   * Only flush if `this.recordingMode === 'session'`\n   */\n  public conditionalFlush(): Promise<void> {\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  public flush(): Promise<void> {\n    return this._debouncedFlush() as Promise<void>;\n  }\n\n  /**\n   * Always flush via `_debouncedFlush` so that we do not have flushes triggered\n   * from calling both `flush` and `_debouncedFlush`. Otherwise, there could be\n   * cases of mulitple flushes happening closely together.\n   */\n  public flushImmediate(): Promise<void> {\n    this._debouncedFlush();\n    // `.flush` is provided by the debounced function, analogously to lodash.debounce\n    return this._debouncedFlush.flush() as Promise<void>;\n  }\n\n  /**\n   * Cancels queued up flushes.\n   */\n  public cancelFlush(): void {\n    this._debouncedFlush.cancel();\n  }\n\n  /** Get the current sesion (=replay) ID */\n  public getSessionId(): string | undefined {\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  public checkAndHandleExpiredSession(): boolean | void {\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  public setInitialState(): void {\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  public throttledAddEvent(\n    event: RecordingEvent,\n    isCheckout?: boolean,\n  ): typeof THROTTLED | typeof SKIPPED | Promise<AddEventResult | null> {\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  public getCurrentRoute(): string | undefined {\n    const lastTransaction = this.lastTransaction || getCurrentHub().getScope().getTransaction();\n    if (!lastTransaction || !['route', 'custom'].includes(lastTransaction.metadata.source)) {\n      return undefined;\n    }\n\n    return lastTransaction.name;\n  }\n\n  /**\n   * Initialize and start all listeners to varying events (DOM,\n   * Performance Observer, Recording, Sentry SDK, etc)\n   */\n  private _initializeRecording(): void {\n    this.setInitialState();\n\n    // this method is generally called on page load or manually - in both cases\n    // we should treat it as an activity\n    this._updateSessionActivity();\n\n    this.eventBuffer = createEventBuffer({\n      useCompression: this._options.useCompression,\n      workerUrl: this._options.workerUrl,\n    });\n\n    this._removeListeners();\n    this._addListeners();\n\n    // Need to set as enabled before we start recording, as `record()` can trigger a flush with a new checkout\n    this._isEnabled = true;\n    this._isPaused = false;\n\n    this.startRecording();\n  }\n\n  /** A wrapper to conditionally capture exceptions. */\n  private _handleException(error: unknown): void {\n    __DEBUG_BUILD__ && logger.error('[Replay]', error);\n\n    if (__DEBUG_BUILD__ && this._options._experiments && this._options._experiments.captureExceptions) {\n      captureException(error);\n    }\n  }\n\n  /**\n   * Loads (or refreshes) the current session.\n   */\n  private _initializeSessionForSampling(previousSessionId?: string): void {\n    // Whenever there is _any_ error sample rate, we always allow buffering\n    // Because we decide on sampling when an error occurs, we need to buffer at all times if sampling for errors\n    const allowBuffering = this._options.errorSampleRate > 0;\n\n    const session = loadOrCreateSession(\n      {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n        traceInternals: this._options._experiments.traceInternals,\n        previousSessionId,\n      },\n      {\n        stickySession: this._options.stickySession,\n        sessionSampleRate: this._options.sessionSampleRate,\n        allowBuffering,\n      },\n    );\n\n    this.session = session;\n  }\n\n  /**\n   * Checks and potentially refreshes the current session.\n   * Returns false if session is not recorded.\n   */\n  private _checkSession(): boolean {\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      void 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  private async _refreshSession(session: Session): Promise<void> {\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  private _addListeners(): void {\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  private _removeListeners(): void {\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  private _handleVisibilityChange: () => void = () => {\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  private _handleWindowBlur: () => void = () => {\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  private _handleWindowFocus: () => void = () => {\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  private _handleKeyboardEvent: (event: KeyboardEvent) => void = (event: KeyboardEvent) => {\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  private _doChangeToBackgroundTasks(breadcrumb?: ReplayBreadcrumbFrame): void {\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    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  private _doChangeToForegroundTasks(breadcrumb?: ReplayBreadcrumbFrame): void {\n    if (!this.session) {\n      return;\n    }\n\n    const isSessionActive = this.checkAndHandleExpiredSession();\n\n    if (!isSessionActive) {\n      // If the user has come back to the page within SESSION_IDLE_PAUSE_DURATION\n      // ms, we will re-use the existing session, otherwise create a new\n      // session\n      logInfo('[Replay] Document has become active, but session has expired');\n      return;\n    }\n\n    if (breadcrumb) {\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n  }\n\n  /**\n   * Update user activity (across session lifespans)\n   */\n  private _updateUserActivity(_lastActivity: number = Date.now()): void {\n    this._lastActivity = _lastActivity;\n  }\n\n  /**\n   * Updates the session's last activity timestamp\n   */\n  private _updateSessionActivity(_lastActivity: number = Date.now()): void {\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  private _createCustomBreadcrumb(breadcrumb: ReplayBreadcrumbFrame): void {\n    this.addUpdate(() => {\n      void 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  private _addPerformanceEntries(): Promise<Array<AddEventResult | null>> {\n    const performanceEntries = createPerformanceEntries(this.performanceEntries).concat(this.replayPerformanceEntries);\n\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n\n    return Promise.all(createPerformanceSpans(this, performanceEntries));\n  }\n\n  /**\n   * Clear _context\n   */\n  private _clearContext(): void {\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  private _updateInitialTimestampFromEventBuffer(): void {\n    const { session, eventBuffer } = this;\n    if (!session || !eventBuffer) {\n      return;\n    }\n\n    // we only ever update this on the initial segment\n    if (session.segmentId) {\n      return;\n    }\n\n    const earliestEvent = eventBuffer.getEarliestTimestamp();\n    if (earliestEvent && earliestEvent < this._context.initialTimestamp) {\n      this._context.initialTimestamp = earliestEvent;\n    }\n  }\n\n  /**\n   * Return and clear _context\n   */\n  private _popEventContext(): 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  private async _runFlush(): Promise<void> {\n    const replayId = this.getSessionId();\n\n    if (!this.session || !this.eventBuffer || !replayId) {\n      __DEBUG_BUILD__ && logger.error('[Replay] No session or eventBuffer found to flush.');\n      return;\n    }\n\n    await this._addPerformanceEntries();\n\n    // Check eventBuffer again, as it could have been stopped in the meanwhile\n    if (!this.eventBuffer || !this.eventBuffer.hasEvents) {\n      return;\n    }\n\n    // Only attach memory event if eventBuffer is not empty\n    await addMemoryEntry(this);\n\n    // Check eventBuffer again, as it could have been stopped in the meanwhile\n    if (!this.eventBuffer) {\n      return;\n    }\n\n    // if this changed in the meanwhile, e.g. because the session was refreshed or similar, we abort here\n    if (replayId !== this.getSessionId()) {\n      return;\n    }\n\n    try {\n      // This uses the data from the eventBuffer, so we need to call this before `finish()\n      this._updateInitialTimestampFromEventBuffer();\n\n      const timestamp = Date.now();\n\n      // Check total duration again, to avoid sending outdated stuff\n      // We leave 30s wiggle room to accomodate late flushing etc.\n      // This _could_ happen when the browser is suspended during flushing, in which case we just want to stop\n      if (timestamp - this._context.initialTimestamp > this._options.maxReplayDuration + 30_000) {\n        throw new Error('Session is too long, not sending replay');\n      }\n\n      const eventContext = this._popEventContext();\n      // Always increment segmentId regardless of outcome of sending replay\n      const segmentId = this.session.segmentId++;\n      this._maybeSaveSession();\n\n      // Note this empties the event buffer regardless of outcome of sending replay\n      const recordingData = await this.eventBuffer.finish();\n\n      await sendReplay({\n        replayId,\n        recordingData,\n        segmentId,\n        eventContext,\n        session: this.session,\n        options: this.getOptions(),\n        timestamp,\n      });\n    } catch (err) {\n      this._handleException(err);\n\n      // This means we retried 3 times and all of them failed,\n      // or we ran into a problem we don't want to retry, like rate limiting.\n      // In this case, we want to completely stop the replay - otherwise, we may get inconsistent segments\n      void this.stop({ reason: 'sendReplay' });\n\n      const client = getCurrentHub().getClient();\n\n      if (client) {\n        client.recordDroppedEvent('send_error', 'replay');\n      }\n    }\n  }\n\n  /**\n   * Flush recording data to Sentry. Creates a lock so that only a single flush\n   * can be active at a time. Do not call this directly.\n   */\n  private _flush = async ({\n    force = false,\n  }: {\n    /**\n     * If true, flush while ignoring the `_isEnabled` state of\n     * Replay integration. (By default, flush is noop if integration\n     * is stopped).\n     */\n    force?: boolean;\n  } = {}): Promise<void> => {\n    if (!this._isEnabled && !force) {\n      // This can happen if e.g. the replay was stopped because of exceeding the retry limit\n      return;\n    }\n\n    if (!this.checkAndHandleExpiredSession()) {\n      __DEBUG_BUILD__ && logger.error('[Replay] Attempting to finish replay event after session expired.');\n      return;\n    }\n\n    if (!this.session) {\n      // should never happen, as we would have bailed out before\n      return;\n    }\n\n    const start = this.session.started;\n    const now = Date.now();\n    const duration = now - start;\n\n    // A flush is about to happen, cancel any queued flushes\n    this._debouncedFlush.cancel();\n\n    // If session is too short, or too long (allow some wiggle room over maxReplayDuration), do not send it\n    // This _should_ not happen, but it may happen if flush is triggered due to a page activity change or similar\n    const tooShort = duration < this._options.minReplayDuration;\n    const tooLong = duration > this._options.maxReplayDuration + 5_000;\n    if (tooShort || tooLong) {\n      logInfo(\n        `[Replay] Session duration (${Math.floor(duration / 1000)}s) is too ${\n          tooShort ? 'short' : 'long'\n        }, not sending replay.`,\n        this._options._experiments.traceInternals,\n      );\n\n      if (tooShort) {\n        this._debouncedFlush();\n      }\n      return;\n    }\n\n    const eventBuffer = this.eventBuffer;\n    if (eventBuffer && this.session.segmentId === 0 && !eventBuffer.hasCheckout) {\n      logInfo('[Replay] Flushing initial segment without checkout.', this._options._experiments.traceInternals);\n      // TODO FN: Evaluate if we want to stop here, or remove this again?\n    }\n\n    // this._flushLock acts as a lock so that future calls to `_flush()`\n    // will be blocked until this promise resolves\n    if (!this._flushLock) {\n      this._flushLock = this._runFlush();\n      await this._flushLock;\n      this._flushLock = undefined;\n      return;\n    }\n\n    // Wait for previous flush to finish, then call the debounced `_flush()`.\n    // It's possible there are other flush requests queued and waiting for it\n    // to resolve. We want to reduce all outstanding requests (as well as any\n    // new flush requests that occur within a second of the locked flush\n    // completing) into a single flush.\n\n    try {\n      await this._flushLock;\n    } catch (err) {\n      __DEBUG_BUILD__ && logger.error(err);\n    } finally {\n      this._debouncedFlush();\n    }\n  };\n\n  /** Save the session, if it is sticky */\n  private _maybeSaveSession(): void {\n    if (this.session && this._options.stickySession) {\n      saveSession(this.session);\n    }\n  }\n\n  /** Handler for rrweb.record.onMutation */\n  private _onMutationHandler = (mutations: unknown[]): boolean => {\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      void 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","import type { DeprecatedPrivacyOptions, ReplayIntegrationPrivacyOptions } from '../types';\n\ntype GetPrivacyOptions = Required<Omit<ReplayIntegrationPrivacyOptions, 'maskFn'>> &\n  Omit<DeprecatedPrivacyOptions, 'maskInputOptions'>;\ninterface GetPrivacyReturn {\n  maskTextSelector: string;\n  unmaskTextSelector: string;\n  blockSelector: string;\n  unblockSelector: string;\n  ignoreSelector: string;\n\n  blockClass?: RegExp;\n  maskTextClass?: RegExp;\n}\n\nfunction getOption(\n  selectors: string[],\n  defaultSelectors: string[],\n  deprecatedClassOption?: string | RegExp,\n  deprecatedSelectorOption?: string,\n): string {\n  const deprecatedSelectors = typeof deprecatedSelectorOption === 'string' ? deprecatedSelectorOption.split(',') : [];\n\n  const allSelectors = [\n    ...selectors,\n    // @deprecated\n    ...deprecatedSelectors,\n\n    // sentry defaults\n    ...defaultSelectors,\n  ];\n\n  // @deprecated\n  if (typeof deprecatedClassOption !== 'undefined') {\n    // NOTE: No support for RegExp\n    if (typeof deprecatedClassOption === 'string') {\n      allSelectors.push(`.${deprecatedClassOption}`);\n    }\n\n    // eslint-disable-next-line no-console\n    console.warn(\n      '[Replay] You are using a deprecated configuration item for privacy. Read the documentation on how to use the new privacy configuration.',\n    );\n  }\n\n  return allSelectors.join(',');\n}\n\n/**\n * Returns privacy related configuration for use in rrweb\n */\nexport function getPrivacyOptions({\n  mask,\n  unmask,\n  block,\n  unblock,\n  ignore,\n\n  // eslint-disable-next-line deprecation/deprecation\n  blockClass,\n  // eslint-disable-next-line deprecation/deprecation\n  blockSelector,\n  // eslint-disable-next-line deprecation/deprecation\n  maskTextClass,\n  // eslint-disable-next-line deprecation/deprecation\n  maskTextSelector,\n  // eslint-disable-next-line deprecation/deprecation\n  ignoreClass,\n}: GetPrivacyOptions): GetPrivacyReturn {\n  const defaultBlockedElements = ['base[href=\"/\"]'];\n\n  const maskSelector = getOption(mask, ['.sentry-mask', '[data-sentry-mask]'], maskTextClass, maskTextSelector);\n  const unmaskSelector = getOption(unmask, ['.sentry-unmask', '[data-sentry-unmask]']);\n\n  const options: GetPrivacyReturn = {\n    // We are making the decision to make text and input selectors the same\n    maskTextSelector: maskSelector,\n    unmaskTextSelector: unmaskSelector,\n\n    blockSelector: getOption(\n      block,\n      ['.sentry-block', '[data-sentry-block]', ...defaultBlockedElements],\n      blockClass,\n      blockSelector,\n    ),\n    unblockSelector: getOption(unblock, ['.sentry-unblock', '[data-sentry-unblock]']),\n    ignoreSelector: getOption(ignore, ['.sentry-ignore', '[data-sentry-ignore]', 'input[type=\"file\"]'], ignoreClass),\n  };\n\n  if (blockClass instanceof RegExp) {\n    options.blockClass = blockClass;\n  }\n\n  if (maskTextClass instanceof RegExp) {\n    options.maskTextClass = maskTextClass;\n  }\n\n  return options;\n}\n","import type { getPrivacyOptions } from './getPrivacyOptions';\n\ninterface MaskAttributeParams {\n  maskAttributes: string[];\n  maskAllText: boolean;\n  privacyOptions: ReturnType<typeof getPrivacyOptions>;\n  key: string;\n  value: string;\n  el: HTMLElement;\n}\n\n/**\n * Masks an attribute if necessary, otherwise return attribute value as-is.\n */\nexport function maskAttribute({\n  el,\n  key,\n  maskAttributes,\n  maskAllText,\n  privacyOptions,\n  value,\n}: MaskAttributeParams): string {\n  // We only mask attributes if `maskAllText` is true\n  if (!maskAllText) {\n    return value;\n  }\n\n  // unmaskTextSelector takes precendence\n  if (privacyOptions.unmaskTextSelector && el.matches(privacyOptions.unmaskTextSelector)) {\n    return value;\n  }\n\n  if (\n    maskAttributes.includes(key) ||\n    // Need to mask `value` attribute for `<input>` 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","import { getCurrentHub } from '@sentry/core';\nimport type { BrowserClientReplayOptions, Integration } from '@sentry/types';\nimport { dropUndefinedKeys, isBrowser } from '@sentry/utils';\n\nimport {\n  DEFAULT_FLUSH_MAX_DELAY,\n  DEFAULT_FLUSH_MIN_DELAY,\n  MAX_REPLAY_DURATION,\n  MIN_REPLAY_DURATION,\n  MIN_REPLAY_DURATION_LIMIT,\n} from './constants';\nimport { ReplayContainer } from './replay';\nimport type { RecordingOptions, ReplayConfiguration, ReplayPluginOptions, SendBufferedReplayOptions } from './types';\nimport { getPrivacyOptions } from './util/getPrivacyOptions';\nimport { maskAttribute } from './util/maskAttribute';\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\ntype InitialReplayPluginOptions = Omit<ReplayPluginOptions, 'sessionSampleRate' | 'errorSampleRate'> &\n  Partial<Pick<ReplayPluginOptions, 'sessionSampleRate' | 'errorSampleRate'>>;\n\n/**\n * The main replay integration class, to be passed to `init({  integrations: [] })`.\n */\nexport class Replay implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Replay';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  /**\n   * Options to pass to `rrweb.record()`\n   */\n  private readonly _recordingOptions: RecordingOptions;\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  private readonly _initialOptions: InitialReplayPluginOptions;\n\n  private _replay?: ReplayContainer;\n\n  public constructor({\n    flushMinDelay = DEFAULT_FLUSH_MIN_DELAY,\n    flushMaxDelay = DEFAULT_FLUSH_MAX_DELAY,\n    minReplayDuration = MIN_REPLAY_DURATION,\n    maxReplayDuration = MAX_REPLAY_DURATION,\n    stickySession = true,\n    useCompression = true,\n    workerUrl,\n    _experiments = {},\n    sessionSampleRate,\n    errorSampleRate,\n    maskAllText = true,\n    maskAllInputs = true,\n    blockAllMedia = true,\n\n    mutationBreadcrumbLimit = 750,\n    mutationLimit = 10_000,\n\n    slowClickTimeout = 7_000,\n    slowClickIgnoreSelectors = [],\n\n    networkDetailAllowUrls = [],\n    networkDetailDenyUrls = [],\n    networkCaptureBodies = true,\n    networkRequestHeaders = [],\n    networkResponseHeaders = [],\n\n    mask = [],\n    maskAttributes = ['title', 'placeholder'],\n    unmask = [],\n    block = [],\n    unblock = [],\n    ignore = [],\n    maskFn,\n\n    beforeAddRecordingEvent,\n    beforeErrorSampling,\n\n    // eslint-disable-next-line deprecation/deprecation\n    blockClass,\n    // eslint-disable-next-line deprecation/deprecation\n    blockSelector,\n    // eslint-disable-next-line deprecation/deprecation\n    maskInputOptions,\n    // eslint-disable-next-line deprecation/deprecation\n    maskTextClass,\n    // eslint-disable-next-line deprecation/deprecation\n    maskTextSelector,\n    // eslint-disable-next-line deprecation/deprecation\n    ignoreClass,\n  }: ReplayConfiguration = {}) {\n    this.name = Replay.id;\n\n    const privacyOptions = getPrivacyOptions({\n      mask,\n      unmask,\n      block,\n      unblock,\n      ignore,\n      blockClass,\n      blockSelector,\n      maskTextClass,\n      maskTextSelector,\n      ignoreClass,\n    });\n\n    this._recordingOptions = {\n      maskAllInputs,\n      maskAllText,\n      maskInputOptions: { ...(maskInputOptions || {}), password: true },\n      maskTextFn: maskFn,\n      maskInputFn: maskFn,\n      maskAttributeFn: (key: string, value: string, el: HTMLElement): string =>\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: Error & { __rrweb__?: boolean }) => {\n        try {\n          err.__rrweb__ = true;\n        } catch (error) {\n          // ignore errors here\n          // this can happen if the error is frozen or does not allow mutation for other reasons\n        }\n      },\n    };\n\n    this._initialOptions = {\n      flushMinDelay,\n      flushMaxDelay,\n      minReplayDuration: Math.min(minReplayDuration, MIN_REPLAY_DURATION_LIMIT),\n      maxReplayDuration: Math.min(maxReplayDuration, MAX_REPLAY_DURATION),\n      stickySession,\n      sessionSampleRate,\n      errorSampleRate,\n      useCompression,\n      workerUrl,\n      blockAllMedia,\n      maskAllInputs,\n      maskAllText,\n      mutationBreadcrumbLimit,\n      mutationLimit,\n      slowClickTimeout,\n      slowClickIgnoreSelectors,\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders: _getMergedNetworkHeaders(networkRequestHeaders),\n      networkResponseHeaders: _getMergedNetworkHeaders(networkResponseHeaders),\n      beforeAddRecordingEvent,\n      beforeErrorSampling,\n\n      _experiments,\n    };\n\n    if (typeof sessionSampleRate === 'number') {\n      // eslint-disable-next-line\n      console.warn(\n        `[Replay] You are passing \\`sessionSampleRate\\` to the Replay integration.\nThis option is deprecated and will be removed soon.\nInstead, configure \\`replaysSessionSampleRate\\` directly in the SDK init options, e.g.:\nSentry.init({ replaysSessionSampleRate: ${sessionSampleRate} })`,\n      );\n\n      this._initialOptions.sessionSampleRate = sessionSampleRate;\n    }\n\n    if (typeof errorSampleRate === 'number') {\n      // eslint-disable-next-line\n      console.warn(\n        `[Replay] You are passing \\`errorSampleRate\\` to the Replay integration.\nThis option is deprecated and will be removed soon.\nInstead, configure \\`replaysOnErrorSampleRate\\` directly in the SDK init options, e.g.:\nSentry.init({ replaysOnErrorSampleRate: ${errorSampleRate} })`,\n      );\n\n      this._initialOptions.errorSampleRate = errorSampleRate;\n    }\n\n    if (this._initialOptions.blockAllMedia) {\n      // `blockAllMedia` is a more user friendly option to configure blocking\n      // embedded media elements\n      this._recordingOptions.blockSelector = !this._recordingOptions.blockSelector\n        ? MEDIA_SELECTORS\n        : `${this._recordingOptions.blockSelector},${MEDIA_SELECTORS}`;\n    }\n\n    if (this._isInitialized && isBrowser()) {\n      throw new Error('Multiple Sentry Session Replay instances are not supported');\n    }\n\n    this._isInitialized = true;\n  }\n\n  /** If replay has already been initialized */\n  protected get _isInitialized(): boolean {\n    return _initialized;\n  }\n\n  /** Update _isInitialized */\n  protected set _isInitialized(value: boolean) {\n    _initialized = value;\n  }\n\n  /**\n   * Setup and initialize replay container\n   */\n  public setupOnce(): void {\n    if (!isBrowser()) {\n      return;\n    }\n\n    this._setup();\n\n    // Once upon a time, we tried to create a transaction in `setupOnce` and it would\n    // potentially create a transaction before some native SDK integrations have run\n    // and applied their own global event processor. An example is:\n    // https://github.com/getsentry/sentry-javascript/blob/b47ceafbdac7f8b99093ce6023726ad4687edc48/packages/browser/src/integrations/useragent.ts\n    //\n    // So we call `this._initialize()` in next event loop as a workaround to wait for other\n    // global event processors to finish. This is no longer needed, but keeping it\n    // here to avoid any future issues.\n    setTimeout(() => this._initialize());\n  }\n\n  /**\n   * Start a replay regardless of sampling rate. Calling this will always\n   * create a new session. Will throw an error if replay is already in progress.\n   *\n   * Creates or loads a session, attaches listeners to varying events (DOM,\n   * PerformanceObserver, Recording, Sentry SDK, etc)\n   */\n  public start(): void {\n    if (!this._replay) {\n      return;\n    }\n\n    this._replay.start();\n  }\n\n  /**\n   * Start replay buffering. Buffers until `flush()` is called or, if\n   * `replaysOnErrorSampleRate` > 0, until an error occurs.\n   */\n  public startBuffering(): void {\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  public stop(): Promise<void> {\n    if (!this._replay) {\n      return Promise.resolve();\n    }\n\n    return this._replay.stop({ forceFlush: this._replay.recordingMode === 'session' });\n  }\n\n  /**\n   * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n   * Unless `continueRecording` is false, the replay will continue to record and\n   * behave as a \"session\"-based replay.\n   *\n   * Otherwise, queue up a flush.\n   */\n  public flush(options?: SendBufferedReplayOptions): Promise<void> {\n    if (!this._replay || !this._replay.isEnabled()) {\n      return Promise.resolve();\n    }\n\n    return this._replay.sendBufferedReplayOrFlush(options);\n  }\n\n  /**\n   * Get the current session ID.\n   */\n  public getReplayId(): string | undefined {\n    if (!this._replay || !this._replay.isEnabled()) {\n      return;\n    }\n\n    return this._replay.getSessionId();\n  }\n  /**\n   * Initializes replay.\n   */\n  protected _initialize(): void {\n    if (!this._replay) {\n      return;\n    }\n\n    this._replay.initializeSampling();\n  }\n\n  /** Setup the integration. */\n  private _setup(): void {\n    // Client is not available in constructor, so we need to wait until setupOnce\n    const finalOptions = loadReplayOptionsFromClient(this._initialOptions);\n\n    this._replay = new ReplayContainer({\n      options: finalOptions,\n      recordingOptions: this._recordingOptions,\n    });\n  }\n}\n\n/** Parse Replay-related options from SDK options */\nfunction loadReplayOptionsFromClient(initialOptions: InitialReplayPluginOptions): ReplayPluginOptions {\n  const client = getCurrentHub().getClient();\n  const opt = client && (client.getOptions() as BrowserClientReplayOptions);\n\n  const finalOptions = { sessionSampleRate: 0, errorSampleRate: 0, ...dropUndefinedKeys(initialOptions) };\n\n  if (!opt) {\n    // eslint-disable-next-line no-console\n    console.warn('SDK client is not available.');\n    return finalOptions;\n  }\n\n  if (\n    initialOptions.sessionSampleRate == null && // TODO remove once deprecated rates are removed\n    initialOptions.errorSampleRate == null && // TODO remove once deprecated rates are removed\n    opt.replaysSessionSampleRate == null &&\n    opt.replaysOnErrorSampleRate == null\n  ) {\n    // eslint-disable-next-line no-console\n    console.warn(\n      'Replay is disabled because neither `replaysSessionSampleRate` nor `replaysOnErrorSampleRate` are set.',\n    );\n  }\n\n  if (typeof opt.replaysSessionSampleRate === 'number') {\n    finalOptions.sessionSampleRate = opt.replaysSessionSampleRate;\n  }\n\n  if (typeof opt.replaysOnErrorSampleRate === 'number') {\n    finalOptions.errorSampleRate = opt.replaysOnErrorSampleRate;\n  }\n\n  return finalOptions;\n}\n\nfunction _getMergedNetworkHeaders(headers: string[]): string[] {\n  return [...DEFAULT_NETWORK_HEADERS, ...headers.map(header => header.toLowerCase())];\n}\n"],"names":["GLOBAL_OBJ","NodeType","isElement","throttle","normalize","fill","htmlTreeAsString","browserPerformanceTimeOrigin","addPerformanceInstrumentationHandler","addLcpInstrumentationHandler","logger","getCurrentHub","getWorkerURL","uuid4","isSentryRequestUrl","SENTRY_XHR_DATA_KEY","dropUndefinedKeys","stringMatchesSomePattern","addInstrumentationHandler","addGlobalEventProcessor","createEnvelope","createEventEnvelopeHeaders","getSdkMetadataForEnvelopeHeader","prepareEvent","updateRateLimits","isRateLimited","setContext","captureException","isBrowser"],"mappings":"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"}