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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"}